@elizaos/plugin-ollama 1.2.2 → 1.2.4
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 +12 -12
- package/dist/index.js +36 -45
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -39,10 +39,10 @@ The plugin requires these environment variables (can be set in .env file or char
|
|
|
39
39
|
```json
|
|
40
40
|
"settings": {
|
|
41
41
|
"OLLAMA_API_ENDPOINT": "http://localhost:11434/api",
|
|
42
|
-
"OLLAMA_SMALL_MODEL": "gemma3",
|
|
43
|
-
"OLLAMA_MEDIUM_MODEL": "gemma3",
|
|
44
|
-
"OLLAMA_LARGE_MODEL": "gemma3",
|
|
45
|
-
"OLLAMA_EMBEDDING_MODEL": "nomic-embed-text"
|
|
42
|
+
"OLLAMA_SMALL_MODEL": "gemma3:latest",
|
|
43
|
+
"OLLAMA_MEDIUM_MODEL": "gemma3:latest",
|
|
44
|
+
"OLLAMA_LARGE_MODEL": "gemma3:latest",
|
|
45
|
+
"OLLAMA_EMBEDDING_MODEL": "nomic-embed-text:latest"
|
|
46
46
|
}
|
|
47
47
|
```
|
|
48
48
|
|
|
@@ -50,19 +50,19 @@ Or in `.env` file:
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
OLLAMA_API_ENDPOINT=http://localhost:11434/api
|
|
53
|
-
OLLAMA_SMALL_MODEL=gemma3
|
|
54
|
-
OLLAMA_MEDIUM_MODEL=gemma3
|
|
55
|
-
OLLAMA_LARGE_MODEL=gemma3
|
|
56
|
-
OLLAMA_EMBEDDING_MODEL=nomic-embed-text
|
|
53
|
+
OLLAMA_SMALL_MODEL=gemma3:latest
|
|
54
|
+
OLLAMA_MEDIUM_MODEL=gemma3:latest
|
|
55
|
+
OLLAMA_LARGE_MODEL=gemma3:latest
|
|
56
|
+
OLLAMA_EMBEDDING_MODEL=nomic-embed-text:latest
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
### Configuration Options
|
|
60
60
|
|
|
61
61
|
- `OLLAMA_API_ENDPOINT`: Ollama API endpoint (default: http://localhost:11434/api)
|
|
62
|
-
- `OLLAMA_SMALL_MODEL`: Model for simpler tasks (default: gemma3)
|
|
63
|
-
- `OLLAMA_MEDIUM_MODEL`: Medium-complexity model (default: gemma3)
|
|
64
|
-
- `OLLAMA_LARGE_MODEL`: Model for complex tasks (default: gemma3)
|
|
65
|
-
- `OLLAMA_EMBEDDING_MODEL`: Model for text embeddings (default: nomic-embed-text)
|
|
62
|
+
- `OLLAMA_SMALL_MODEL`: Model for simpler tasks (default: gemma3:latest)
|
|
63
|
+
- `OLLAMA_MEDIUM_MODEL`: Medium-complexity model (default: gemma3:latest)
|
|
64
|
+
- `OLLAMA_LARGE_MODEL`: Model for complex tasks (default: gemma3:latest)
|
|
65
|
+
- `OLLAMA_EMBEDDING_MODEL`: Model for text embeddings (default: nomic-embed-text:latest)
|
|
66
66
|
|
|
67
67
|
The plugin provides these model classes:
|
|
68
68
|
|
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ async function ensureModelAvailable(runtime, model, providedBaseURL) {
|
|
|
32
32
|
logger.info(`[Ollama] Downloaded model ${model}`);
|
|
33
33
|
}
|
|
34
34
|
} catch (err) {
|
|
35
|
-
logger.error("Error ensuring model availability
|
|
35
|
+
logger.error({ error: err }, "Error ensuring model availability");
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
async function generateOllamaText(ollama, model, params) {
|
|
@@ -49,7 +49,7 @@ async function generateOllamaText(ollama, model, params) {
|
|
|
49
49
|
});
|
|
50
50
|
return ollamaResponse;
|
|
51
51
|
} catch (error) {
|
|
52
|
-
logger.error("Error in generateOllamaText
|
|
52
|
+
logger.error({ error }, "Error in generateOllamaText");
|
|
53
53
|
return "Error generating text. Please try again later.";
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -63,7 +63,7 @@ async function generateOllamaObject(ollama, model, params) {
|
|
|
63
63
|
});
|
|
64
64
|
return object;
|
|
65
65
|
} catch (error) {
|
|
66
|
-
logger.error("Error generating object
|
|
66
|
+
logger.error({ error }, "Error generating object");
|
|
67
67
|
return {};
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -94,12 +94,8 @@ var ollamaPlugin = {
|
|
|
94
94
|
headers: { "Content-Type": "application/json" }
|
|
95
95
|
});
|
|
96
96
|
if (!response.ok) {
|
|
97
|
-
logger.warn(
|
|
98
|
-
|
|
99
|
-
);
|
|
100
|
-
logger.warn(
|
|
101
|
-
"Ollama functionality will be limited until a valid endpoint is provided"
|
|
102
|
-
);
|
|
97
|
+
logger.warn(`Ollama API endpoint validation failed: ${response.statusText}`);
|
|
98
|
+
logger.warn("Ollama functionality will be limited until a valid endpoint is provided");
|
|
103
99
|
} else {
|
|
104
100
|
const data = await response.json();
|
|
105
101
|
const modelCount = data?.models?.length || 0;
|
|
@@ -123,13 +119,15 @@ var ollamaPlugin = {
|
|
|
123
119
|
fetch: runtime.fetch,
|
|
124
120
|
baseURL
|
|
125
121
|
});
|
|
126
|
-
const modelName = runtime.getSetting("OLLAMA_EMBEDDING_MODEL") || "nomic-embed-text";
|
|
122
|
+
const modelName = runtime.getSetting("OLLAMA_EMBEDDING_MODEL") || "nomic-embed-text:latest";
|
|
127
123
|
logger.log(`[Ollama] Using TEXT_EMBEDDING model: ${modelName}`);
|
|
128
124
|
await ensureModelAvailable(runtime, modelName, baseURL);
|
|
129
125
|
const text = typeof params === "string" ? params : params ? params.text || "" : "";
|
|
130
126
|
const embeddingText = text || "test";
|
|
131
127
|
if (!text) {
|
|
132
|
-
logger.debug(
|
|
128
|
+
logger.debug(
|
|
129
|
+
"No text provided for embedding, using default text for dimension detection"
|
|
130
|
+
);
|
|
133
131
|
}
|
|
134
132
|
try {
|
|
135
133
|
const { embedding } = await embed({
|
|
@@ -138,11 +136,11 @@ var ollamaPlugin = {
|
|
|
138
136
|
});
|
|
139
137
|
return embedding;
|
|
140
138
|
} catch (embeddingError) {
|
|
141
|
-
logger.error("Error generating embedding
|
|
139
|
+
logger.error({ error: embeddingError }, "Error generating embedding");
|
|
142
140
|
return Array(1536).fill(0);
|
|
143
141
|
}
|
|
144
142
|
} catch (error) {
|
|
145
|
-
logger.error("Error in TEXT_EMBEDDING model
|
|
143
|
+
logger.error({ error }, "Error in TEXT_EMBEDDING model");
|
|
146
144
|
return Array(1536).fill(0);
|
|
147
145
|
}
|
|
148
146
|
},
|
|
@@ -157,7 +155,7 @@ var ollamaPlugin = {
|
|
|
157
155
|
fetch: runtime.fetch,
|
|
158
156
|
baseURL
|
|
159
157
|
});
|
|
160
|
-
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3";
|
|
158
|
+
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3:latest";
|
|
161
159
|
logger.log(`[Ollama] Using TEXT_SMALL model: ${model}`);
|
|
162
160
|
await ensureModelAvailable(runtime, model, baseURL);
|
|
163
161
|
logger.log("generating text");
|
|
@@ -172,7 +170,7 @@ var ollamaPlugin = {
|
|
|
172
170
|
stopSequences
|
|
173
171
|
});
|
|
174
172
|
} catch (error) {
|
|
175
|
-
logger.error("Error in TEXT_SMALL model
|
|
173
|
+
logger.error({ error }, "Error in TEXT_SMALL model");
|
|
176
174
|
return "Error generating text. Please try again later.";
|
|
177
175
|
}
|
|
178
176
|
},
|
|
@@ -185,7 +183,7 @@ var ollamaPlugin = {
|
|
|
185
183
|
presencePenalty = 0.7
|
|
186
184
|
}) => {
|
|
187
185
|
try {
|
|
188
|
-
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3";
|
|
186
|
+
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3:latest";
|
|
189
187
|
const baseURL = getBaseURL(runtime);
|
|
190
188
|
const ollama = createOllama({
|
|
191
189
|
fetch: runtime.fetch,
|
|
@@ -203,7 +201,7 @@ var ollamaPlugin = {
|
|
|
203
201
|
stopSequences
|
|
204
202
|
});
|
|
205
203
|
} catch (error) {
|
|
206
|
-
logger.error("Error in TEXT_LARGE model
|
|
204
|
+
logger.error({ error }, "Error in TEXT_LARGE model");
|
|
207
205
|
return "Error generating text. Please try again later.";
|
|
208
206
|
}
|
|
209
207
|
},
|
|
@@ -214,7 +212,7 @@ var ollamaPlugin = {
|
|
|
214
212
|
fetch: runtime.fetch,
|
|
215
213
|
baseURL
|
|
216
214
|
});
|
|
217
|
-
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3";
|
|
215
|
+
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3:latest";
|
|
218
216
|
logger.log(`[Ollama] Using OBJECT_SMALL model: ${model}`);
|
|
219
217
|
await ensureModelAvailable(runtime, model, baseURL);
|
|
220
218
|
if (params.schema) {
|
|
@@ -222,7 +220,7 @@ var ollamaPlugin = {
|
|
|
222
220
|
}
|
|
223
221
|
return await generateOllamaObject(ollama, model, params);
|
|
224
222
|
} catch (error) {
|
|
225
|
-
logger.error("Error in OBJECT_SMALL model
|
|
223
|
+
logger.error({ error }, "Error in OBJECT_SMALL model");
|
|
226
224
|
return {};
|
|
227
225
|
}
|
|
228
226
|
},
|
|
@@ -233,7 +231,7 @@ var ollamaPlugin = {
|
|
|
233
231
|
fetch: runtime.fetch,
|
|
234
232
|
baseURL
|
|
235
233
|
});
|
|
236
|
-
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3";
|
|
234
|
+
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3:latest";
|
|
237
235
|
logger.log(`[Ollama] Using OBJECT_LARGE model: ${model}`);
|
|
238
236
|
await ensureModelAvailable(runtime, model, baseURL);
|
|
239
237
|
if (params.schema) {
|
|
@@ -241,7 +239,7 @@ var ollamaPlugin = {
|
|
|
241
239
|
}
|
|
242
240
|
return await generateOllamaObject(ollama, model, params);
|
|
243
241
|
} catch (error) {
|
|
244
|
-
logger.error("Error in OBJECT_LARGE model
|
|
242
|
+
logger.error({ error }, "Error in OBJECT_LARGE model");
|
|
245
243
|
return {};
|
|
246
244
|
}
|
|
247
245
|
}
|
|
@@ -258,18 +256,14 @@ var ollamaPlugin = {
|
|
|
258
256
|
const apiBase = baseURL.endsWith("/api") ? baseURL.slice(0, -4) : baseURL;
|
|
259
257
|
const response = await fetch(`${apiBase}/api/tags`);
|
|
260
258
|
const data = await response.json();
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
data && typeof data === "object" && "models" in data && Array.isArray(data.models) ? data.models.length : 0
|
|
264
|
-
);
|
|
259
|
+
const modelCount = data && typeof data === "object" && "models" in data && Array.isArray(data.models) ? data.models.length : 0;
|
|
260
|
+
logger.log(`Models Available: ${modelCount}`);
|
|
265
261
|
if (!response.ok) {
|
|
266
|
-
logger.error(
|
|
267
|
-
`Failed to validate Ollama API: ${response.statusText}`
|
|
268
|
-
);
|
|
262
|
+
logger.error(`Failed to validate Ollama API: ${response.statusText}`);
|
|
269
263
|
return;
|
|
270
264
|
}
|
|
271
265
|
} catch (error) {
|
|
272
|
-
logger.error("Error in ollama_test_url_validation
|
|
266
|
+
logger.error({ error }, "Error in ollama_test_url_validation");
|
|
273
267
|
}
|
|
274
268
|
}
|
|
275
269
|
},
|
|
@@ -277,15 +271,12 @@ var ollamaPlugin = {
|
|
|
277
271
|
name: "ollama_test_text_embedding",
|
|
278
272
|
fn: async (runtime) => {
|
|
279
273
|
try {
|
|
280
|
-
const embedding = await runtime.useModel(
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
);
|
|
286
|
-
logger.log("embedding", embedding);
|
|
274
|
+
const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {
|
|
275
|
+
text: "Hello, world!"
|
|
276
|
+
});
|
|
277
|
+
logger.log({ embedding }, "Generated embedding");
|
|
287
278
|
} catch (error) {
|
|
288
|
-
logger.error("Error in test_text_embedding
|
|
279
|
+
logger.error({ error }, "Error in test_text_embedding");
|
|
289
280
|
}
|
|
290
281
|
}
|
|
291
282
|
},
|
|
@@ -300,9 +291,9 @@ var ollamaPlugin = {
|
|
|
300
291
|
logger.error("Failed to generate text");
|
|
301
292
|
return;
|
|
302
293
|
}
|
|
303
|
-
logger.log("
|
|
294
|
+
logger.log({ text }, "Generated with test_text_large");
|
|
304
295
|
} catch (error) {
|
|
305
|
-
logger.error("Error in test_text_large
|
|
296
|
+
logger.error({ error }, "Error in test_text_large");
|
|
306
297
|
}
|
|
307
298
|
}
|
|
308
299
|
},
|
|
@@ -317,9 +308,9 @@ var ollamaPlugin = {
|
|
|
317
308
|
logger.error("Failed to generate text");
|
|
318
309
|
return;
|
|
319
310
|
}
|
|
320
|
-
logger.log("
|
|
311
|
+
logger.log({ text }, "Generated with test_text_small");
|
|
321
312
|
} catch (error) {
|
|
322
|
-
logger.error("Error in test_text_small
|
|
313
|
+
logger.error({ error }, "Error in test_text_small");
|
|
323
314
|
}
|
|
324
315
|
}
|
|
325
316
|
},
|
|
@@ -332,9 +323,9 @@ var ollamaPlugin = {
|
|
|
332
323
|
temperature: 0.7,
|
|
333
324
|
schema: void 0
|
|
334
325
|
});
|
|
335
|
-
logger.log("Generated object
|
|
326
|
+
logger.log({ object }, "Generated object");
|
|
336
327
|
} catch (error) {
|
|
337
|
-
logger.error("Error in test_object_small
|
|
328
|
+
logger.error({ error }, "Error in test_object_small");
|
|
338
329
|
}
|
|
339
330
|
}
|
|
340
331
|
},
|
|
@@ -347,9 +338,9 @@ var ollamaPlugin = {
|
|
|
347
338
|
temperature: 0.7,
|
|
348
339
|
schema: void 0
|
|
349
340
|
});
|
|
350
|
-
logger.log("Generated object
|
|
341
|
+
logger.log({ object }, "Generated object");
|
|
351
342
|
} catch (error) {
|
|
352
|
-
logger.error("Error in test_object_large
|
|
343
|
+
logger.error({ error }, "Error in test_object_large");
|
|
353
344
|
}
|
|
354
345
|
}
|
|
355
346
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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, embed } 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 * Retrieves the Ollama API base URL from runtime settings.\n *\n * If the API endpoint is not set in the runtime, defaults to the standard Ollama URL.\n * The URL should include the /api path for ollama-ai-provider compatibility.\n *\n * @returns The base URL for the Ollama API.\n */\nfunction getBaseURL(runtime: {\n getSetting: (key: string) => string | undefined;\n}): string {\n const apiEndpoint =\n runtime.getSetting(\"OLLAMA_API_ENDPOINT\") ||\n runtime.getSetting(\"OLLAMA_API_URL\") ||\n OLLAMA_API_URL;\n\n // Ensure the URL ends with /api for ollama-ai-provider\n if (!apiEndpoint.endsWith(\"/api\")) {\n return apiEndpoint.endsWith(\"/\")\n ? `${apiEndpoint}api`\n : `${apiEndpoint}/api`;\n }\n return apiEndpoint;\n}\n\n/**\n * Ensures that the specified Ollama model is available locally, downloading it if necessary.\n *\n * Checks for the presence of the model via the Ollama API and attempts to download it if not found. Logs progress and errors during the process.\n */\nasync function ensureModelAvailable(\n runtime: {\n getSetting: (key: string) => string | undefined;\n fetch?: typeof fetch;\n },\n model: string,\n providedBaseURL?: string,\n) {\n const baseURL = providedBaseURL || getBaseURL(runtime);\n // Remove /api suffix for direct API calls\n const apiBase = baseURL.endsWith(\"/api\") ? baseURL.slice(0, -4) : baseURL;\n try {\n const showRes = await fetch(`${apiBase}/api/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(`${apiBase}/api/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 * Generates text from the Ollama API using the specified model and parameters.\n *\n * Returns the generated text, or an error message if generation fails.\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 * Generates an object from the Ollama API using the specified model and parameters.\n *\n * Returns the generated object, or an empty object if generation fails.\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 async init(_config, runtime) {\n const baseURL = getBaseURL(runtime);\n\n // Check if endpoint is configured\n if (!baseURL || baseURL === \"http://localhost:11434/api\") {\n const endpoint = runtime.getSetting(\"OLLAMA_API_ENDPOINT\");\n if (!endpoint) {\n logger.warn(\n \"OLLAMA_API_ENDPOINT is not set in environment - Ollama functionality will use default localhost:11434\",\n );\n }\n }\n\n try {\n // Validate Ollama API endpoint by checking if it's accessible\n // Remove /api suffix for direct API calls\n const apiBase = baseURL.endsWith(\"/api\") ? baseURL.slice(0, -4) : baseURL;\n const response = await fetch(`${apiBase}/api/tags`, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n logger.warn(\n `Ollama API endpoint validation failed: ${response.statusText}`,\n );\n logger.warn(\n \"Ollama functionality will be limited until a valid endpoint is provided\",\n );\n } else {\n const data = (await response.json()) as {\n models?: Array<{ name: string }>;\n };\n const modelCount = data?.models?.length || 0;\n logger.log(\n `Ollama API endpoint validated successfully. Found ${modelCount} models available.`,\n );\n }\n } catch (fetchError: unknown) {\n const message =\n fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`Error validating Ollama API endpoint: ${message}`);\n logger.warn(\n \"Ollama functionality will be limited until a valid endpoint is provided - Make sure Ollama is running at ${baseURL}\",\n );\n }\n },\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime,\n params: TextEmbeddingParams | string | null,\n ): Promise<number[]> => {\n try {\n const baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\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, baseURL);\n const text =\n typeof params === \"string\"\n ? params\n : params\n ? (params as TextEmbeddingParams).text || \"\"\n : \"\";\n\n // If no text is provided (e.g., for dimension detection), use a default text\n const embeddingText = text || \"test\";\n \n if (!text) {\n logger.debug(\"No text provided for embedding, using default text for dimension detection\");\n }\n\n // Use ollama.embedding() as shown in the docs\n try {\n const { embedding } = await embed({\n model: ollama.embedding(modelName),\n value: embeddingText,\n });\n return embedding;\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 baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\n });\n\n const model =\n runtime.getSetting(\"OLLAMA_SMALL_MODEL\") ||\n runtime.getSetting(\"SMALL_MODEL\") ||\n \"gemma3\";\n\n logger.log(`[Ollama] Using TEXT_SMALL model: ${model}`);\n await ensureModelAvailable(runtime, model, baseURL);\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\";\n const baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\n });\n\n logger.log(`[Ollama] Using TEXT_LARGE model: ${model}`);\n await ensureModelAvailable(runtime, model, baseURL);\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 baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\n });\n const model =\n runtime.getSetting(\"OLLAMA_SMALL_MODEL\") ||\n runtime.getSetting(\"SMALL_MODEL\") ||\n \"gemma3\";\n\n logger.log(`[Ollama] Using OBJECT_SMALL model: ${model}`);\n await ensureModelAvailable(runtime, model, baseURL);\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 baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\n });\n const model =\n runtime.getSetting(\"OLLAMA_LARGE_MODEL\") ||\n runtime.getSetting(\"LARGE_MODEL\") ||\n \"gemma3\";\n\n logger.log(`[Ollama] Using OBJECT_LARGE model: ${model}`);\n await ensureModelAvailable(runtime, model, baseURL);\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 = getBaseURL(runtime);\n // Remove /api suffix for direct API calls\n const apiBase = baseURL.endsWith(\"/api\")\n ? baseURL.slice(0, -4)\n : baseURL;\n const response = await fetch(`${apiBase}/api/tags`);\n const data = await response.json();\n logger.log(\n \"Models Available:\",\n data &&\n typeof data === \"object\" &&\n \"models\" in data &&\n Array.isArray(data.models)\n ? data.models.length\n : 0,\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 schema: undefined,\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 schema: undefined,\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 { ObjectGenerationParams, Plugin, TextEmbeddingParams } from '@elizaos/core';\nimport { type GenerateTextParams, ModelType, logger } from '@elizaos/core';\nimport { generateObject, generateText, embed } 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 * Retrieves the Ollama API base URL from runtime settings.\n *\n * If the API endpoint is not set in the runtime, defaults to the standard Ollama URL.\n * The URL should include the /api path for ollama-ai-provider compatibility.\n *\n * @returns The base URL for the Ollama API.\n */\nfunction getBaseURL(runtime: { getSetting: (key: string) => string | undefined }): string {\n const apiEndpoint =\n runtime.getSetting('OLLAMA_API_ENDPOINT') ||\n runtime.getSetting('OLLAMA_API_URL') ||\n OLLAMA_API_URL;\n\n // Ensure the URL ends with /api for ollama-ai-provider\n if (!apiEndpoint.endsWith('/api')) {\n return apiEndpoint.endsWith('/') ? `${apiEndpoint}api` : `${apiEndpoint}/api`;\n }\n return apiEndpoint;\n}\n\n/**\n * Ensures that the specified Ollama model is available locally, downloading it if necessary.\n *\n * Checks for the presence of the model via the Ollama API and attempts to download it if not found. Logs progress and errors during the process.\n */\nasync function ensureModelAvailable(\n runtime: {\n getSetting: (key: string) => string | undefined;\n fetch?: typeof fetch;\n },\n model: string,\n providedBaseURL?: string\n) {\n const baseURL = providedBaseURL || getBaseURL(runtime);\n // Remove /api suffix for direct API calls\n const apiBase = baseURL.endsWith('/api') ? baseURL.slice(0, -4) : baseURL;\n try {\n const showRes = await fetch(`${apiBase}/api/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(`${apiBase}/api/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: err }, 'Error ensuring model availability');\n }\n}\n\n/**\n * Generates text from the Ollama API using the specified model and parameters.\n *\n * Returns the generated text, or an error message if generation fails.\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 }, 'Error in generateOllamaText');\n return 'Error generating text. Please try again later.';\n }\n}\n\n/**\n * Generates an object from the Ollama API using the specified model and parameters.\n *\n * Returns the generated object, or an empty object if generation fails.\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 }, 'Error generating object');\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 async init(_config, runtime) {\n const baseURL = getBaseURL(runtime);\n\n // Check if endpoint is configured\n if (!baseURL || baseURL === 'http://localhost:11434/api') {\n const endpoint = runtime.getSetting('OLLAMA_API_ENDPOINT');\n if (!endpoint) {\n logger.warn(\n 'OLLAMA_API_ENDPOINT is not set in environment - Ollama functionality will use default localhost:11434'\n );\n }\n }\n\n try {\n // Validate Ollama API endpoint by checking if it's accessible\n // Remove /api suffix for direct API calls\n const apiBase = baseURL.endsWith('/api') ? baseURL.slice(0, -4) : baseURL;\n const response = await fetch(`${apiBase}/api/tags`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n logger.warn(`Ollama API endpoint validation failed: ${response.statusText}`);\n logger.warn('Ollama functionality will be limited until a valid endpoint is provided');\n } else {\n const data = (await response.json()) as {\n models?: Array<{ name: string }>;\n };\n const modelCount = data?.models?.length || 0;\n logger.log(\n `Ollama API endpoint validated successfully. Found ${modelCount} models available.`\n );\n }\n } catch (fetchError: unknown) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`Error validating Ollama API endpoint: ${message}`);\n logger.warn(\n 'Ollama functionality will be limited until a valid endpoint is provided - Make sure Ollama is running at ${baseURL}'\n );\n }\n },\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n try {\n const baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\n });\n\n const modelName = runtime.getSetting('OLLAMA_EMBEDDING_MODEL') || 'nomic-embed-text:latest';\n logger.log(`[Ollama] Using TEXT_EMBEDDING model: ${modelName}`);\n await ensureModelAvailable(runtime, modelName, baseURL);\n const text =\n typeof params === 'string'\n ? params\n : params\n ? (params as TextEmbeddingParams).text || ''\n : '';\n\n // If no text is provided (e.g., for dimension detection), use a default text\n const embeddingText = text || 'test';\n\n if (!text) {\n logger.debug(\n 'No text provided for embedding, using default text for dimension detection'\n );\n }\n\n // Use ollama.embedding() as shown in the docs\n try {\n const { embedding } = await embed({\n model: ollama.embedding(modelName),\n value: embeddingText,\n });\n return embedding;\n } catch (embeddingError) {\n logger.error({ error: embeddingError }, 'Error generating embedding');\n return Array(1536).fill(0);\n }\n } catch (error) {\n logger.error({ error }, 'Error in TEXT_EMBEDDING model');\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 baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\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, baseURL);\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 }, 'Error in TEXT_SMALL model');\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 baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\n });\n\n logger.log(`[Ollama] Using TEXT_LARGE model: ${model}`);\n await ensureModelAvailable(runtime, model, baseURL);\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 }, 'Error in TEXT_LARGE model');\n return 'Error generating text. Please try again later.';\n }\n },\n [ModelType.OBJECT_SMALL]: async (runtime, params: ObjectGenerationParams) => {\n try {\n const baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\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, baseURL);\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 }, 'Error in OBJECT_SMALL model');\n // Return empty object instead of crashing\n return {};\n }\n },\n [ModelType.OBJECT_LARGE]: async (runtime, params: ObjectGenerationParams) => {\n try {\n const baseURL = getBaseURL(runtime);\n const ollama = createOllama({\n fetch: runtime.fetch,\n baseURL,\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, baseURL);\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 }, 'Error in OBJECT_LARGE model');\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 = getBaseURL(runtime);\n // Remove /api suffix for direct API calls\n const apiBase = baseURL.endsWith('/api') ? baseURL.slice(0, -4) : baseURL;\n const response = await fetch(`${apiBase}/api/tags`);\n const data = await response.json();\n const modelCount =\n data && typeof data === 'object' && 'models' in data && Array.isArray(data.models)\n ? data.models.length\n : 0;\n logger.log(`Models Available: ${modelCount}`);\n if (!response.ok) {\n logger.error(`Failed to validate Ollama API: ${response.statusText}`);\n return;\n }\n } catch (error) {\n logger.error({ error }, 'Error in ollama_test_url_validation');\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 }, 'Generated embedding');\n } catch (error) {\n logger.error({ error }, 'Error in test_text_embedding');\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({ text }, 'Generated with test_text_large');\n } catch (error) {\n logger.error({ error }, 'Error in test_text_large');\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({ text }, 'Generated with test_text_small');\n } catch (error) {\n logger.error({ error }, 'Error in test_text_small');\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 schema: undefined,\n });\n logger.log({ object }, 'Generated object');\n } catch (error) {\n logger.error({ error }, 'Error in test_object_small');\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 schema: undefined,\n });\n logger.log({ object }, 'Generated object');\n } catch (error) {\n logger.error({ error }, 'Error in test_object_large');\n }\n },\n },\n ],\n },\n ],\n};\nexport default ollamaPlugin;\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-ollama",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"type": "string",
|
|
57
57
|
"description": "Name or tag of the small-sized Ollama model to use for text and object generation.",
|
|
58
58
|
"required": false,
|
|
59
|
-
"default": "gemma3",
|
|
59
|
+
"default": "gemma3:latest",
|
|
60
60
|
"sensitive": false
|
|
61
61
|
},
|
|
62
62
|
"OLLAMA_MEDIUM_MODEL": {
|
|
@@ -69,28 +69,28 @@
|
|
|
69
69
|
"type": "string",
|
|
70
70
|
"description": "Name or tag of the large-sized Ollama model to use for text and object generation.",
|
|
71
71
|
"required": false,
|
|
72
|
-
"default": "gemma3",
|
|
72
|
+
"default": "gemma3:latest",
|
|
73
73
|
"sensitive": false
|
|
74
74
|
},
|
|
75
75
|
"OLLAMA_EMBEDDING_MODEL": {
|
|
76
76
|
"type": "string",
|
|
77
77
|
"description": "Name or tag of the Ollama model used to generate text embeddings.",
|
|
78
78
|
"required": false,
|
|
79
|
-
"default": "nomic-embed-text",
|
|
79
|
+
"default": "nomic-embed-text:latest",
|
|
80
80
|
"sensitive": false
|
|
81
81
|
},
|
|
82
82
|
"SMALL_MODEL": {
|
|
83
83
|
"type": "string",
|
|
84
84
|
"description": "Fallback environment variable for specifying a small model if OLLAMA_SMALL_MODEL is not set.",
|
|
85
85
|
"required": false,
|
|
86
|
-
"default": "gemma3",
|
|
86
|
+
"default": "gemma3:latest",
|
|
87
87
|
"sensitive": false
|
|
88
88
|
},
|
|
89
89
|
"LARGE_MODEL": {
|
|
90
90
|
"type": "string",
|
|
91
91
|
"description": "Fallback environment variable for specifying a large model if OLLAMA_LARGE_MODEL is not set.",
|
|
92
92
|
"required": false,
|
|
93
|
-
"default": "gemma3",
|
|
93
|
+
"default": "gemma3:latest",
|
|
94
94
|
"sensitive": false
|
|
95
95
|
}
|
|
96
96
|
}
|