@elizaos/plugin-ollama 1.0.0-beta.8 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +48 -6
- package/dist/index.js.map +1 -1
- package/package.json +20 -7
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -3,6 +3,30 @@ import { ModelType, logger } from "@elizaos/core";
|
|
|
3
3
|
import { generateObject, generateText } from "ai";
|
|
4
4
|
import { createOllama } from "ollama-ai-provider";
|
|
5
5
|
var OLLAMA_API_URL = "http://localhost:11434/api";
|
|
6
|
+
async function ensureModelAvailable(runtime, model) {
|
|
7
|
+
const baseURL = runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL;
|
|
8
|
+
try {
|
|
9
|
+
const showRes = await fetch(`${baseURL}/show`, {
|
|
10
|
+
method: "POST",
|
|
11
|
+
headers: { "Content-Type": "application/json" },
|
|
12
|
+
body: JSON.stringify({ model })
|
|
13
|
+
});
|
|
14
|
+
if (showRes.ok) return;
|
|
15
|
+
logger.info(`[Ollama] Model ${model} not found locally. Downloading...`);
|
|
16
|
+
const pullRes = await fetch(`${baseURL}/pull`, {
|
|
17
|
+
method: "POST",
|
|
18
|
+
headers: { "Content-Type": "application/json" },
|
|
19
|
+
body: JSON.stringify({ model, stream: false })
|
|
20
|
+
});
|
|
21
|
+
if (!pullRes.ok) {
|
|
22
|
+
logger.error(`Failed to pull model ${model}: ${pullRes.statusText}`);
|
|
23
|
+
} else {
|
|
24
|
+
logger.info(`[Ollama] Downloaded model ${model}`);
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
logger.error("Error ensuring model availability:", err);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
6
30
|
async function generateOllamaText(ollama, model, params) {
|
|
7
31
|
try {
|
|
8
32
|
const { text: ollamaResponse } = await generateText({
|
|
@@ -53,6 +77,8 @@ var ollamaPlugin = {
|
|
|
53
77
|
baseURL: runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL
|
|
54
78
|
});
|
|
55
79
|
const modelName = runtime.getSetting("OLLAMA_EMBEDDING_MODEL") || "nomic-embed-text";
|
|
80
|
+
logger.log(`[Ollama] Using TEXT_EMBEDDING model: ${modelName}`);
|
|
81
|
+
await ensureModelAvailable(runtime, modelName);
|
|
56
82
|
const text = typeof params === "string" ? params : params?.text || "";
|
|
57
83
|
if (!text) {
|
|
58
84
|
logger.error("No text provided for embedding");
|
|
@@ -94,7 +120,9 @@ var ollamaPlugin = {
|
|
|
94
120
|
fetch: runtime.fetch,
|
|
95
121
|
baseURL: runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL
|
|
96
122
|
});
|
|
97
|
-
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") ?? runtime.getSetting("SMALL_MODEL") ?? "
|
|
123
|
+
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") ?? runtime.getSetting("SMALL_MODEL") ?? "gemma3:latest";
|
|
124
|
+
logger.log(`[Ollama] Using TEXT_SMALL model: ${model}`);
|
|
125
|
+
await ensureModelAvailable(runtime, model);
|
|
98
126
|
logger.log("generating text");
|
|
99
127
|
logger.log(prompt);
|
|
100
128
|
return await generateOllamaText(ollama, model, {
|
|
@@ -125,6 +153,8 @@ var ollamaPlugin = {
|
|
|
125
153
|
fetch: runtime.fetch,
|
|
126
154
|
baseURL: runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL
|
|
127
155
|
});
|
|
156
|
+
logger.log(`[Ollama] Using TEXT_LARGE model: ${model}`);
|
|
157
|
+
await ensureModelAvailable(runtime, model);
|
|
128
158
|
return await generateOllamaText(ollama, model, {
|
|
129
159
|
prompt,
|
|
130
160
|
system: runtime.character.system ?? void 0,
|
|
@@ -146,6 +176,8 @@ var ollamaPlugin = {
|
|
|
146
176
|
baseURL: runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL
|
|
147
177
|
});
|
|
148
178
|
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") ?? runtime.getSetting("SMALL_MODEL") ?? "gemma3:latest";
|
|
179
|
+
logger.log(`[Ollama] Using OBJECT_SMALL model: ${model}`);
|
|
180
|
+
await ensureModelAvailable(runtime, model);
|
|
149
181
|
if (params.schema) {
|
|
150
182
|
logger.info("Using OBJECT_SMALL without schema validation");
|
|
151
183
|
}
|
|
@@ -162,6 +194,8 @@ var ollamaPlugin = {
|
|
|
162
194
|
baseURL: runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL
|
|
163
195
|
});
|
|
164
196
|
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") ?? runtime.getSetting("LARGE_MODEL") ?? "gemma3:latest";
|
|
197
|
+
logger.log(`[Ollama] Using OBJECT_LARGE model: ${model}`);
|
|
198
|
+
await ensureModelAvailable(runtime, model);
|
|
165
199
|
if (params.schema) {
|
|
166
200
|
logger.info("Using OBJECT_LARGE without schema validation");
|
|
167
201
|
}
|
|
@@ -183,9 +217,14 @@ var ollamaPlugin = {
|
|
|
183
217
|
const baseURL = runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL;
|
|
184
218
|
const response = await fetch(`${baseURL}/tags`);
|
|
185
219
|
const data = await response.json();
|
|
186
|
-
logger.log(
|
|
220
|
+
logger.log(
|
|
221
|
+
"Models Available:",
|
|
222
|
+
data?.models?.length
|
|
223
|
+
);
|
|
187
224
|
if (!response.ok) {
|
|
188
|
-
logger.error(
|
|
225
|
+
logger.error(
|
|
226
|
+
`Failed to validate Ollama API: ${response.statusText}`
|
|
227
|
+
);
|
|
189
228
|
return;
|
|
190
229
|
}
|
|
191
230
|
} catch (error) {
|
|
@@ -197,9 +236,12 @@ var ollamaPlugin = {
|
|
|
197
236
|
name: "ollama_test_text_embedding",
|
|
198
237
|
fn: async (runtime) => {
|
|
199
238
|
try {
|
|
200
|
-
const embedding = await runtime.useModel(
|
|
201
|
-
|
|
202
|
-
|
|
239
|
+
const embedding = await runtime.useModel(
|
|
240
|
+
ModelType.TEXT_EMBEDDING,
|
|
241
|
+
{
|
|
242
|
+
text: "Hello, world!"
|
|
243
|
+
}
|
|
244
|
+
);
|
|
203
245
|
logger.log("embedding", embedding);
|
|
204
246
|
} catch (error) {
|
|
205
247
|
logger.error("Error in test_text_embedding:", error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ObjectGenerationParams, Plugin, TextEmbeddingParams } from '@elizaos/core';\nimport { type GenerateTextParams, ModelType, logger } from '@elizaos/core';\nimport { generateObject, generateText } from 'ai';\nimport { createOllama } from 'ollama-ai-provider';\n\n// Default Ollama API URL\nconst OLLAMA_API_URL = 'http://localhost:11434/api';\n\n/**\n * Generate text using Ollama API\n */\nasync function generateOllamaText(\n ollama: ReturnType<typeof createOllama>,\n model: string,\n params: {\n prompt: string;\n system?: string;\n temperature: number;\n maxTokens: number;\n frequencyPenalty: number;\n presencePenalty: number;\n stopSequences: string[];\n }\n) {\n try {\n const { text: ollamaResponse } = await generateText({\n model: ollama(model),\n prompt: params.prompt,\n system: params.system,\n temperature: params.temperature,\n maxTokens: params.maxTokens,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n return ollamaResponse;\n } catch (error: unknown) {\n logger.error('Error in generateOllamaText:', error);\n return 'Error generating text. Please try again later.';\n }\n}\n\n/**\n * Generate object using Ollama API with consistent error handling\n */\nasync function generateOllamaObject(\n ollama: ReturnType<typeof createOllama>,\n model: string,\n params: ObjectGenerationParams\n) {\n try {\n const { object } = await generateObject({\n model: ollama(model),\n output: 'no-schema',\n prompt: params.prompt,\n temperature: params.temperature,\n });\n return object;\n } catch (error: unknown) {\n logger.error('Error generating object:', error);\n return {};\n }\n}\n\nexport const ollamaPlugin: Plugin = {\n name: 'ollama',\n description: 'Ollama plugin',\n config: {\n OLLAMA_API_ENDPOINT: process.env.OLLAMA_API_ENDPOINT,\n OLLAMA_SMALL_MODEL: process.env.OLLAMA_SMALL_MODEL,\n OLLAMA_MEDIUM_MODEL: process.env.OLLAMA_MEDIUM_MODEL,\n OLLAMA_LARGE_MODEL: process.env.OLLAMA_LARGE_MODEL,\n OLLAMA_EMBEDDING_MODEL: process.env.OLLAMA_EMBEDDING_MODEL,\n },\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n try {\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n\n const modelName = runtime.getSetting('OLLAMA_EMBEDDING_MODEL') || 'nomic-embed-text';\n const text =\n typeof params === 'string' ? params : (params as TextEmbeddingParams)?.text || '';\n\n if (!text) {\n logger.error('No text provided for embedding');\n return Array(1536).fill(0);\n }\n\n // Generate embeddings - note we're using a simpler approach since generateEmbedding\n // may not be available in the current version of the AI SDK\n try {\n // This is simplified and may need to be adjusted based on the actual API\n const response = await fetch(\n `${runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL}/embeddings`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: modelName,\n prompt: text,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Embedding request failed: ${response.statusText}`);\n }\n\n const result = (await response.json()) as { embedding?: number[] };\n return result.embedding || Array(1536).fill(0);\n } catch (embeddingError) {\n logger.error('Error generating embedding:', embeddingError);\n return Array(1536).fill(0);\n }\n } catch (error) {\n logger.error('Error in TEXT_EMBEDDING model:', error);\n // Return a fallback vector rather than crashing\n return Array(1536).fill(0);\n }\n },\n [ModelType.TEXT_SMALL]: async (runtime, { prompt, stopSequences = [] }: GenerateTextParams) => {\n try {\n const temperature = 0.7;\n const frequency_penalty = 0.7;\n const presence_penalty = 0.7;\n const max_response_length = 8000;\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n\n const model =\n runtime.getSetting('OLLAMA_SMALL_MODEL') ?? runtime.getSetting('SMALL_MODEL') ?? 'llama3';\n\n logger.log('generating text');\n logger.log(prompt);\n\n return await generateOllamaText(ollama, model, {\n prompt,\n system: runtime.character.system ?? undefined,\n temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n stopSequences,\n });\n } catch (error) {\n logger.error('Error in TEXT_SMALL model:', error);\n return 'Error generating text. Please try again later.';\n }\n },\n [ModelType.TEXT_LARGE]: async (\n runtime,\n {\n prompt,\n stopSequences = [],\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n }: GenerateTextParams\n ) => {\n try {\n const model =\n runtime.getSetting('OLLAMA_LARGE_MODEL') ??\n runtime.getSetting('LARGE_MODEL') ??\n 'gemma3:latest';\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n\n return await generateOllamaText(ollama, model, {\n prompt,\n system: runtime.character.system ?? undefined,\n temperature,\n maxTokens,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n });\n } catch (error) {\n logger.error('Error in TEXT_LARGE model:', error);\n return 'Error generating text. Please try again later.';\n }\n },\n [ModelType.OBJECT_SMALL]: async (runtime, params: ObjectGenerationParams) => {\n try {\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n const model =\n runtime.getSetting('OLLAMA_SMALL_MODEL') ??\n runtime.getSetting('SMALL_MODEL') ??\n 'gemma3:latest';\n\n if (params.schema) {\n logger.info('Using OBJECT_SMALL without schema validation');\n }\n\n return await generateOllamaObject(ollama, model, params);\n } catch (error) {\n logger.error('Error in OBJECT_SMALL model:', error);\n // Return empty object instead of crashing\n return {};\n }\n },\n [ModelType.OBJECT_LARGE]: async (runtime, params: ObjectGenerationParams) => {\n try {\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n const model =\n runtime.getSetting('OLLAMA_LARGE_MODEL') ??\n runtime.getSetting('LARGE_MODEL') ??\n 'gemma3:latest';\n\n if (params.schema) {\n logger.info('Using OBJECT_LARGE without schema validation');\n }\n\n return await generateOllamaObject(ollama, model, params);\n } catch (error) {\n logger.error('Error in OBJECT_LARGE model:', error);\n // Return empty object instead of crashing\n return {};\n }\n },\n },\n tests: [\n {\n name: 'ollama_plugin_tests',\n tests: [\n {\n name: 'ollama_test_url_validation',\n fn: async (runtime) => {\n try {\n const baseURL = runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL;\n const response = await fetch(`${baseURL}/tags`);\n const data = await response.json();\n logger.log('Models Available:', (data as { models: unknown[] })?.models?.length);\n if (!response.ok) {\n logger.error(`Failed to validate Ollama API: ${response.statusText}`);\n return;\n }\n } catch (error) {\n logger.error('Error in ollama_test_url_validation:', error);\n }\n },\n },\n {\n name: 'ollama_test_text_embedding',\n fn: async (runtime) => {\n try {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: 'Hello, world!',\n });\n logger.log('embedding', embedding);\n } catch (error) {\n logger.error('Error in test_text_embedding:', error);\n }\n },\n },\n {\n name: 'ollama_test_text_large',\n fn: async (runtime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: 'What is the nature of reality in 10 words?',\n });\n if (text.length === 0) {\n logger.error('Failed to generate text');\n return;\n }\n logger.log('generated with test_text_large:', text);\n } catch (error) {\n logger.error('Error in test_text_large:', error);\n }\n },\n },\n {\n name: 'ollama_test_text_small',\n fn: async (runtime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: 'What is the nature of reality in 10 words?',\n });\n if (text.length === 0) {\n logger.error('Failed to generate text');\n return;\n }\n logger.log('generated with test_text_small:', text);\n } catch (error) {\n logger.error('Error in test_text_small:', error);\n }\n },\n },\n {\n name: 'ollama_test_object_small',\n fn: async (runtime) => {\n try {\n const object = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt:\n 'Generate a JSON object representing a user profile with name, age, and hobbies',\n temperature: 0.7,\n });\n logger.log('Generated object:', object);\n } catch (error) {\n logger.error('Error in test_object_small:', error);\n }\n },\n },\n {\n name: 'ollama_test_object_large',\n fn: async (runtime) => {\n try {\n const object = await runtime.useModel(ModelType.OBJECT_LARGE, {\n prompt:\n 'Generate a detailed JSON object representing a restaurant with name, cuisine type, menu items with prices, and customer reviews',\n temperature: 0.7,\n });\n logger.log('Generated object:', object);\n } catch (error) {\n logger.error('Error in test_object_large:', error);\n }\n },\n },\n ],\n },\n ],\n};\nexport default ollamaPlugin;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n ObjectGenerationParams,\n Plugin,\n TextEmbeddingParams,\n} from '@elizaos/core';\nimport { type GenerateTextParams, ModelType, logger } from '@elizaos/core';\nimport { generateObject, generateText } from 'ai';\nimport { createOllama } from 'ollama-ai-provider';\n\n// Default Ollama API URL\nconst OLLAMA_API_URL = 'http://localhost:11434/api';\n\nasync function ensureModelAvailable(\n runtime: {\n fetch: typeof fetch;\n getSetting: (key: string) => string | undefined;\n },\n model: string,\n) {\n const baseURL = runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL;\n try {\n const showRes = await fetch(`${baseURL}/show`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model }),\n });\n if (showRes.ok) return;\n logger.info(`[Ollama] Model ${model} not found locally. Downloading...`);\n const pullRes = await fetch(`${baseURL}/pull`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, stream: false }),\n });\n if (!pullRes.ok) {\n logger.error(`Failed to pull model ${model}: ${pullRes.statusText}`);\n } else {\n logger.info(`[Ollama] Downloaded model ${model}`);\n }\n } catch (err) {\n logger.error('Error ensuring model availability:', err);\n }\n}\n\n/**\n * Generate text using Ollama API\n */\nasync function generateOllamaText(\n ollama: ReturnType<typeof createOllama>,\n model: string,\n params: {\n prompt: string;\n system?: string;\n temperature: number;\n maxTokens: number;\n frequencyPenalty: number;\n presencePenalty: number;\n stopSequences: string[];\n },\n) {\n try {\n const { text: ollamaResponse } = await generateText({\n model: ollama(model),\n prompt: params.prompt,\n system: params.system,\n temperature: params.temperature,\n maxTokens: params.maxTokens,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n return ollamaResponse;\n } catch (error: unknown) {\n logger.error('Error in generateOllamaText:', error);\n return 'Error generating text. Please try again later.';\n }\n}\n\n/**\n * Generate object using Ollama API with consistent error handling\n */\nasync function generateOllamaObject(\n ollama: ReturnType<typeof createOllama>,\n model: string,\n params: ObjectGenerationParams,\n) {\n try {\n const { object } = await generateObject({\n model: ollama(model),\n output: 'no-schema',\n prompt: params.prompt,\n temperature: params.temperature,\n });\n return object;\n } catch (error: unknown) {\n logger.error('Error generating object:', error);\n return {};\n }\n}\n\nexport const ollamaPlugin: Plugin = {\n name: 'ollama',\n description: 'Ollama plugin',\n config: {\n OLLAMA_API_ENDPOINT: process.env.OLLAMA_API_ENDPOINT,\n OLLAMA_SMALL_MODEL: process.env.OLLAMA_SMALL_MODEL,\n OLLAMA_MEDIUM_MODEL: process.env.OLLAMA_MEDIUM_MODEL,\n OLLAMA_LARGE_MODEL: process.env.OLLAMA_LARGE_MODEL,\n OLLAMA_EMBEDDING_MODEL: process.env.OLLAMA_EMBEDDING_MODEL,\n },\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime,\n params: TextEmbeddingParams | string | null,\n ): Promise<number[]> => {\n try {\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n\n const modelName =\n runtime.getSetting('OLLAMA_EMBEDDING_MODEL') || 'nomic-embed-text';\n logger.log(`[Ollama] Using TEXT_EMBEDDING model: ${modelName}`);\n await ensureModelAvailable(runtime, modelName);\n const text =\n typeof params === 'string'\n ? params\n : (params as TextEmbeddingParams)?.text || '';\n\n if (!text) {\n logger.error('No text provided for embedding');\n return Array(1536).fill(0);\n }\n\n // Generate embeddings - note we're using a simpler approach since generateEmbedding\n // may not be available in the current version of the AI SDK\n try {\n // This is simplified and may need to be adjusted based on the actual API\n const response = await fetch(\n `${runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL}/embeddings`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: modelName,\n prompt: text,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Embedding request failed: ${response.statusText}`);\n }\n\n const result = (await response.json()) as { embedding?: number[] };\n return result.embedding || Array(1536).fill(0);\n } catch (embeddingError) {\n logger.error('Error generating embedding:', embeddingError);\n return Array(1536).fill(0);\n }\n } catch (error) {\n logger.error('Error in TEXT_EMBEDDING model:', error);\n // Return a fallback vector rather than crashing\n return Array(1536).fill(0);\n }\n },\n [ModelType.TEXT_SMALL]: async (\n runtime,\n { prompt, stopSequences = [] }: GenerateTextParams,\n ) => {\n try {\n const temperature = 0.7;\n const frequency_penalty = 0.7;\n const presence_penalty = 0.7;\n const max_response_length = 8000;\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n\n const model =\n runtime.getSetting('OLLAMA_SMALL_MODEL') ??\n runtime.getSetting('SMALL_MODEL') ??\n 'gemma3:latest';\n\n logger.log(`[Ollama] Using TEXT_SMALL model: ${model}`);\n await ensureModelAvailable(runtime, model);\n logger.log('generating text');\n logger.log(prompt);\n\n return await generateOllamaText(ollama, model, {\n prompt,\n system: runtime.character.system ?? undefined,\n temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n stopSequences,\n });\n } catch (error) {\n logger.error('Error in TEXT_SMALL model:', error);\n return 'Error generating text. Please try again later.';\n }\n },\n [ModelType.TEXT_LARGE]: async (\n runtime,\n {\n prompt,\n stopSequences = [],\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n }: GenerateTextParams,\n ) => {\n try {\n const model =\n runtime.getSetting('OLLAMA_LARGE_MODEL') ??\n runtime.getSetting('LARGE_MODEL') ??\n 'gemma3:latest';\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n\n logger.log(`[Ollama] Using TEXT_LARGE model: ${model}`);\n await ensureModelAvailable(runtime, model);\n return await generateOllamaText(ollama, model, {\n prompt,\n system: runtime.character.system ?? undefined,\n temperature,\n maxTokens,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n });\n } catch (error) {\n logger.error('Error in TEXT_LARGE model:', error);\n return 'Error generating text. Please try again later.';\n }\n },\n [ModelType.OBJECT_SMALL]: async (\n runtime,\n params: ObjectGenerationParams,\n ) => {\n try {\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n const model =\n runtime.getSetting('OLLAMA_SMALL_MODEL') ??\n runtime.getSetting('SMALL_MODEL') ??\n 'gemma3:latest';\n\n logger.log(`[Ollama] Using OBJECT_SMALL model: ${model}`);\n await ensureModelAvailable(runtime, model);\n if (params.schema) {\n logger.info('Using OBJECT_SMALL without schema validation');\n }\n\n return await generateOllamaObject(ollama, model, params);\n } catch (error) {\n logger.error('Error in OBJECT_SMALL model:', error);\n // Return empty object instead of crashing\n return {};\n }\n },\n [ModelType.OBJECT_LARGE]: async (\n runtime,\n params: ObjectGenerationParams,\n ) => {\n try {\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL: runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL,\n });\n const model =\n runtime.getSetting('OLLAMA_LARGE_MODEL') ??\n runtime.getSetting('LARGE_MODEL') ??\n 'gemma3:latest';\n\n logger.log(`[Ollama] Using OBJECT_LARGE model: ${model}`);\n await ensureModelAvailable(runtime, model);\n if (params.schema) {\n logger.info('Using OBJECT_LARGE without schema validation');\n }\n\n return await generateOllamaObject(ollama, model, params);\n } catch (error) {\n logger.error('Error in OBJECT_LARGE model:', error);\n // Return empty object instead of crashing\n return {};\n }\n },\n },\n tests: [\n {\n name: 'ollama_plugin_tests',\n tests: [\n {\n name: 'ollama_test_url_validation',\n fn: async (runtime) => {\n try {\n const baseURL =\n runtime.getSetting('OLLAMA_API_ENDPOINT') || OLLAMA_API_URL;\n const response = await fetch(`${baseURL}/tags`);\n const data = await response.json();\n logger.log(\n 'Models Available:',\n (data as { models: unknown[] })?.models?.length,\n );\n if (!response.ok) {\n logger.error(\n `Failed to validate Ollama API: ${response.statusText}`,\n );\n return;\n }\n } catch (error) {\n logger.error('Error in ollama_test_url_validation:', error);\n }\n },\n },\n {\n name: 'ollama_test_text_embedding',\n fn: async (runtime) => {\n try {\n const embedding = await runtime.useModel(\n ModelType.TEXT_EMBEDDING,\n {\n text: 'Hello, world!',\n },\n );\n logger.log('embedding', embedding);\n } catch (error) {\n logger.error('Error in test_text_embedding:', error);\n }\n },\n },\n {\n name: 'ollama_test_text_large',\n fn: async (runtime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: 'What is the nature of reality in 10 words?',\n });\n if (text.length === 0) {\n logger.error('Failed to generate text');\n return;\n }\n logger.log('generated with test_text_large:', text);\n } catch (error) {\n logger.error('Error in test_text_large:', error);\n }\n },\n },\n {\n name: 'ollama_test_text_small',\n fn: async (runtime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: 'What is the nature of reality in 10 words?',\n });\n if (text.length === 0) {\n logger.error('Failed to generate text');\n return;\n }\n logger.log('generated with test_text_small:', text);\n } catch (error) {\n logger.error('Error in test_text_small:', error);\n }\n },\n },\n {\n name: 'ollama_test_object_small',\n fn: async (runtime) => {\n try {\n const object = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt:\n 'Generate a JSON object representing a user profile with name, age, and hobbies',\n temperature: 0.7,\n });\n logger.log('Generated object:', object);\n } catch (error) {\n logger.error('Error in test_object_small:', error);\n }\n },\n },\n {\n name: 'ollama_test_object_large',\n fn: async (runtime) => {\n try {\n const object = await runtime.useModel(ModelType.OBJECT_LARGE, {\n prompt:\n 'Generate a detailed JSON object representing a restaurant with name, cuisine type, menu items with prices, and customer reviews',\n temperature: 0.7,\n });\n logger.log('Generated object:', object);\n } catch (error) {\n logger.error('Error in test_object_large:', error);\n }\n },\n },\n ],\n },\n ],\n};\nexport default ollamaPlugin;\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-ollama",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/elizaos-plugins/plugin-ollama"
|
|
10
|
+
"url": "git+https://github.com/elizaos-plugins/plugin-ollama.git"
|
|
11
11
|
},
|
|
12
12
|
"exports": {
|
|
13
13
|
"./package.json": "./package.json",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@ai-sdk/ui-utils": "1.
|
|
26
|
-
"@elizaos/core": "1.0.0
|
|
27
|
-
"ai": "^4.
|
|
25
|
+
"@ai-sdk/ui-utils": "^1.2.8",
|
|
26
|
+
"@elizaos/core": "^1.0.0",
|
|
27
|
+
"ai": "^4.3.9",
|
|
28
28
|
"js-tiktoken": "^1.0.18",
|
|
29
29
|
"ollama-ai-provider": "^1.2.0",
|
|
30
30
|
"tsup": "8.4.0"
|
|
@@ -62,11 +62,24 @@
|
|
|
62
62
|
"OLLAMA_API_ENDPOINT": {
|
|
63
63
|
"type": "string",
|
|
64
64
|
"description": "The URL of the Ollama API"
|
|
65
|
+
},
|
|
66
|
+
"SMALL_MODEL": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"description": "Alternative small model name used if OLLAMA_SMALL_MODEL is not provided.",
|
|
69
|
+
"required": false,
|
|
70
|
+
"default": "gemma3:latest"
|
|
71
|
+
},
|
|
72
|
+
"LARGE_MODEL": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "Alternative large model name used if OLLAMA_LARGE_MODEL is not provided.",
|
|
75
|
+
"required": false,
|
|
76
|
+
"default": "gemma3:latest"
|
|
65
77
|
}
|
|
66
78
|
}
|
|
67
79
|
},
|
|
68
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "646c632924826e2b75c2304a75ee56959fe4a460",
|
|
69
81
|
"devDependencies": {
|
|
70
|
-
"prettier": "3.5.3"
|
|
82
|
+
"prettier": "3.5.3",
|
|
83
|
+
"typescript": "^5.8.2"
|
|
71
84
|
}
|
|
72
85
|
}
|