@elizaos/plugin-ollama 1.0.6 → 1.0.8
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 +9 -9
- package/dist/index.js +60 -34
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -39,9 +39,9 @@ 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": "
|
|
43
|
-
"OLLAMA_MEDIUM_MODEL": "
|
|
44
|
-
"OLLAMA_LARGE_MODEL": "gemma3
|
|
42
|
+
"OLLAMA_SMALL_MODEL": "gemma3",
|
|
43
|
+
"OLLAMA_MEDIUM_MODEL": "gemma3",
|
|
44
|
+
"OLLAMA_LARGE_MODEL": "gemma3",
|
|
45
45
|
"OLLAMA_EMBEDDING_MODEL": "nomic-embed-text"
|
|
46
46
|
}
|
|
47
47
|
```
|
|
@@ -50,18 +50,18 @@ Or in `.env` file:
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
OLLAMA_API_ENDPOINT=http://localhost:11434/api
|
|
53
|
-
OLLAMA_SMALL_MODEL=
|
|
54
|
-
OLLAMA_MEDIUM_MODEL=
|
|
55
|
-
OLLAMA_LARGE_MODEL=gemma3
|
|
53
|
+
OLLAMA_SMALL_MODEL=gemma3
|
|
54
|
+
OLLAMA_MEDIUM_MODEL=gemma3
|
|
55
|
+
OLLAMA_LARGE_MODEL=gemma3
|
|
56
56
|
OLLAMA_EMBEDDING_MODEL=nomic-embed-text
|
|
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:
|
|
63
|
-
- `OLLAMA_MEDIUM_MODEL`: Medium-complexity model
|
|
64
|
-
- `OLLAMA_LARGE_MODEL`: Model for complex tasks (default: gemma3
|
|
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
65
|
- `OLLAMA_EMBEDDING_MODEL`: Model for text embeddings (default: nomic-embed-text)
|
|
66
66
|
|
|
67
67
|
The plugin provides these model classes:
|
package/dist/index.js
CHANGED
|
@@ -1,32 +1,27 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import { ModelType, logger } from "@elizaos/core";
|
|
3
|
-
import { generateObject, generateText } from "ai";
|
|
3
|
+
import { generateObject, generateText, embed } from "ai";
|
|
4
4
|
import { createOllama } from "ollama-ai-provider";
|
|
5
|
-
var OLLAMA_API_URL = "http://localhost:11434";
|
|
6
|
-
function stripEndpointToBaseDomain(endpoint) {
|
|
7
|
-
try {
|
|
8
|
-
const url = new URL(endpoint);
|
|
9
|
-
return `${url.protocol}//${url.host}`;
|
|
10
|
-
} catch (err) {
|
|
11
|
-
logger.error("Error parsing endpoint URL:", err);
|
|
12
|
-
return endpoint;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
5
|
+
var OLLAMA_API_URL = "http://localhost:11434/api";
|
|
15
6
|
function getBaseURL(runtime) {
|
|
16
|
-
const apiEndpoint = runtime.getSetting("OLLAMA_API_ENDPOINT") || OLLAMA_API_URL;
|
|
17
|
-
|
|
7
|
+
const apiEndpoint = runtime.getSetting("OLLAMA_API_ENDPOINT") || runtime.getSetting("OLLAMA_API_URL") || OLLAMA_API_URL;
|
|
8
|
+
if (!apiEndpoint.endsWith("/api")) {
|
|
9
|
+
return apiEndpoint.endsWith("/") ? `${apiEndpoint}api` : `${apiEndpoint}/api`;
|
|
10
|
+
}
|
|
11
|
+
return apiEndpoint;
|
|
18
12
|
}
|
|
19
|
-
async function ensureModelAvailable(runtime, model,
|
|
20
|
-
const
|
|
13
|
+
async function ensureModelAvailable(runtime, model, providedBaseURL) {
|
|
14
|
+
const baseURL = providedBaseURL || getBaseURL(runtime);
|
|
15
|
+
const apiBase = baseURL.endsWith("/api") ? baseURL.slice(0, -4) : baseURL;
|
|
21
16
|
try {
|
|
22
|
-
const showRes = await fetch(`${
|
|
17
|
+
const showRes = await fetch(`${apiBase}/api/show`, {
|
|
23
18
|
method: "POST",
|
|
24
19
|
headers: { "Content-Type": "application/json" },
|
|
25
20
|
body: JSON.stringify({ model })
|
|
26
21
|
});
|
|
27
22
|
if (showRes.ok) return;
|
|
28
23
|
logger.info(`[Ollama] Model ${model} not found locally. Downloading...`);
|
|
29
|
-
const pullRes = await fetch(`${
|
|
24
|
+
const pullRes = await fetch(`${apiBase}/api/pull`, {
|
|
30
25
|
method: "POST",
|
|
31
26
|
headers: { "Content-Type": "application/json" },
|
|
32
27
|
body: JSON.stringify({ model, stream: false })
|
|
@@ -82,6 +77,44 @@ var ollamaPlugin = {
|
|
|
82
77
|
OLLAMA_LARGE_MODEL: process.env.OLLAMA_LARGE_MODEL,
|
|
83
78
|
OLLAMA_EMBEDDING_MODEL: process.env.OLLAMA_EMBEDDING_MODEL
|
|
84
79
|
},
|
|
80
|
+
async init(_config, runtime) {
|
|
81
|
+
const baseURL = getBaseURL(runtime);
|
|
82
|
+
if (!baseURL || baseURL === "http://localhost:11434/api") {
|
|
83
|
+
const endpoint = runtime.getSetting("OLLAMA_API_ENDPOINT");
|
|
84
|
+
if (!endpoint) {
|
|
85
|
+
logger.warn(
|
|
86
|
+
"OLLAMA_API_ENDPOINT is not set in environment - Ollama functionality will use default localhost:11434"
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const apiBase = baseURL.endsWith("/api") ? baseURL.slice(0, -4) : baseURL;
|
|
92
|
+
const response = await fetch(`${apiBase}/api/tags`, {
|
|
93
|
+
method: "GET",
|
|
94
|
+
headers: { "Content-Type": "application/json" }
|
|
95
|
+
});
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
logger.warn(
|
|
98
|
+
`Ollama API endpoint validation failed: ${response.statusText}`
|
|
99
|
+
);
|
|
100
|
+
logger.warn(
|
|
101
|
+
"Ollama functionality will be limited until a valid endpoint is provided"
|
|
102
|
+
);
|
|
103
|
+
} else {
|
|
104
|
+
const data = await response.json();
|
|
105
|
+
const modelCount = data?.models?.length || 0;
|
|
106
|
+
logger.log(
|
|
107
|
+
`Ollama API endpoint validated successfully. Found ${modelCount} models available.`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
} catch (fetchError) {
|
|
111
|
+
const message = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
112
|
+
logger.warn(`Error validating Ollama API endpoint: ${message}`);
|
|
113
|
+
logger.warn(
|
|
114
|
+
"Ollama functionality will be limited until a valid endpoint is provided - Make sure Ollama is running at ${baseURL}"
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
},
|
|
85
118
|
models: {
|
|
86
119
|
[ModelType.TEXT_EMBEDDING]: async (runtime, params) => {
|
|
87
120
|
try {
|
|
@@ -99,19 +132,11 @@ var ollamaPlugin = {
|
|
|
99
132
|
return Array(1536).fill(0);
|
|
100
133
|
}
|
|
101
134
|
try {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
body: JSON.stringify({
|
|
106
|
-
model: modelName,
|
|
107
|
-
prompt: text
|
|
108
|
-
})
|
|
135
|
+
const { embedding } = await embed({
|
|
136
|
+
model: ollama.embedding(modelName),
|
|
137
|
+
value: text
|
|
109
138
|
});
|
|
110
|
-
|
|
111
|
-
throw new Error(`Embedding request failed: ${response.statusText}`);
|
|
112
|
-
}
|
|
113
|
-
const result = await response.json();
|
|
114
|
-
return result.embedding || Array(1536).fill(0);
|
|
139
|
+
return embedding;
|
|
115
140
|
} catch (embeddingError) {
|
|
116
141
|
logger.error("Error generating embedding:", embeddingError);
|
|
117
142
|
return Array(1536).fill(0);
|
|
@@ -132,7 +157,7 @@ var ollamaPlugin = {
|
|
|
132
157
|
fetch: runtime.fetch,
|
|
133
158
|
baseURL
|
|
134
159
|
});
|
|
135
|
-
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3
|
|
160
|
+
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3";
|
|
136
161
|
logger.log(`[Ollama] Using TEXT_SMALL model: ${model}`);
|
|
137
162
|
await ensureModelAvailable(runtime, model, baseURL);
|
|
138
163
|
logger.log("generating text");
|
|
@@ -160,7 +185,7 @@ var ollamaPlugin = {
|
|
|
160
185
|
presencePenalty = 0.7
|
|
161
186
|
}) => {
|
|
162
187
|
try {
|
|
163
|
-
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3
|
|
188
|
+
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3";
|
|
164
189
|
const baseURL = getBaseURL(runtime);
|
|
165
190
|
const ollama = createOllama({
|
|
166
191
|
fetch: runtime.fetch,
|
|
@@ -189,7 +214,7 @@ var ollamaPlugin = {
|
|
|
189
214
|
fetch: runtime.fetch,
|
|
190
215
|
baseURL
|
|
191
216
|
});
|
|
192
|
-
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3
|
|
217
|
+
const model = runtime.getSetting("OLLAMA_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL") || "gemma3";
|
|
193
218
|
logger.log(`[Ollama] Using OBJECT_SMALL model: ${model}`);
|
|
194
219
|
await ensureModelAvailable(runtime, model, baseURL);
|
|
195
220
|
if (params.schema) {
|
|
@@ -208,7 +233,7 @@ var ollamaPlugin = {
|
|
|
208
233
|
fetch: runtime.fetch,
|
|
209
234
|
baseURL
|
|
210
235
|
});
|
|
211
|
-
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3
|
|
236
|
+
const model = runtime.getSetting("OLLAMA_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL") || "gemma3";
|
|
212
237
|
logger.log(`[Ollama] Using OBJECT_LARGE model: ${model}`);
|
|
213
238
|
await ensureModelAvailable(runtime, model, baseURL);
|
|
214
239
|
if (params.schema) {
|
|
@@ -230,7 +255,8 @@ var ollamaPlugin = {
|
|
|
230
255
|
fn: async (runtime) => {
|
|
231
256
|
try {
|
|
232
257
|
const baseURL = getBaseURL(runtime);
|
|
233
|
-
const
|
|
258
|
+
const apiBase = baseURL.endsWith("/api") ? baseURL.slice(0, -4) : baseURL;
|
|
259
|
+
const response = await fetch(`${apiBase}/api/tags`);
|
|
234
260
|
const data = await response.json();
|
|
235
261
|
logger.log(
|
|
236
262
|
"Models Available:",
|
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 } from \"ai\";\nimport { createOllama } from \"ollama-ai-provider\";\n\n// Default Ollama API URL\nconst OLLAMA_API_URL = \"http://localhost:11434\";\n\n/**\n * Extracts the protocol and host from an API endpoint URL, removing any path or query components.\n *\n * If the input cannot be parsed as a valid URL, returns the original string.\n *\n * @param endpoint - The API endpoint URL to process\n * @returns The base domain (protocol and host) of the endpoint, or the original string if parsing fails\n */\nfunction stripEndpointToBaseDomain(endpoint: string): string {\n try {\n // Using Node.js URL module explicitly\n const url = new URL(endpoint);\n return `${url.protocol}//${url.host}`;\n } catch (err) {\n logger.error(\"Error parsing endpoint URL:\", err);\n return endpoint; // Return original if parsing fails\n }\n}\n\n/**\n * Retrieves the Ollama API base URL from runtime settings, returning only the protocol and domain.\n *\n * If the API endpoint is not set in the runtime, defaults to the standard Ollama URL.\n * Removes any path or trailing segments, ensuring the result is just the base domain.\n *\n * @returns The normalized 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\") || OLLAMA_API_URL;\n return stripEndpointToBaseDomain(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 baseURL?: string,\n) {\n const url = baseURL || getBaseURL(runtime);\n try {\n const showRes = await fetch(`${url}/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(`${url}/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 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 (!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\n const response = await fetch(`${baseURL}/api/embeddings`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n model: modelName,\n prompt: text,\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 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 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 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: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 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: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 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 const response = await fetch(`${baseURL}/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":";AAKA,SAAkC,WAAW,cAAc;AAC3D,SAAS,gBAAgB,oBAAoB;AAC7C,SAAS,oBAAoB;AAG7B,IAAM,iBAAiB;AAUvB,SAAS,0BAA0B,UAA0B;AAC3D,MAAI;AAEF,UAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,WAAO,GAAG,IAAI,QAAQ,KAAK,IAAI,IAAI;AAAA,EACrC,SAAS,KAAK;AACZ,WAAO,MAAM,+BAA+B,GAAG;AAC/C,WAAO;AAAA,EACT;AACF;AAUA,SAAS,WAAW,SAET;AACT,QAAM,cACJ,QAAQ,WAAW,qBAAqB,KAAK;AAC/C,SAAO,0BAA0B,WAAW;AAC9C;AAOA,eAAe,qBACb,SAIA,OACA,SACA;AACA,QAAM,MAAM,WAAW,WAAW,OAAO;AACzC,MAAI;AACF,UAAM,UAAU,MAAM,MAAM,GAAG,GAAG,aAAa;AAAA,MAC7C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;AAAA,IAChC,CAAC;AACD,QAAI,QAAQ,GAAI;AAChB,WAAO,KAAK,kBAAkB,KAAK,oCAAoC;AACvE,UAAM,UAAU,MAAM,MAAM,GAAG,GAAG,aAAa;AAAA,MAC7C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IAC/C,CAAC;AACD,QAAI,CAAC,QAAQ,IAAI;AACf,aAAO,MAAM,wBAAwB,KAAK,KAAK,QAAQ,UAAU,EAAE;AAAA,IACrE,OAAO;AACL,aAAO,KAAK,6BAA6B,KAAK,EAAE;AAAA,IAClD;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,MAAM,sCAAsC,GAAG;AAAA,EACxD;AACF;AAOA,eAAe,mBACb,QACA,OACA,QASA;AACA,MAAI;AACF,UAAM,EAAE,MAAM,eAAe,IAAI,MAAM,aAAa;AAAA,MAClD,OAAO,OAAO,KAAK;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,kBAAkB,OAAO;AAAA,MACzB,iBAAiB,OAAO;AAAA,MACxB,eAAe,OAAO;AAAA,IACxB,CAAC;AACD,WAAO;AAAA,EACT,SAAS,OAAgB;AACvB,WAAO,MAAM,gCAAgC,KAAK;AAClD,WAAO;AAAA,EACT;AACF;AAOA,eAAe,qBACb,QACA,OACA,QACA;AACA,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,MAAM,eAAe;AAAA,MACtC,OAAO,OAAO,KAAK;AAAA,MACnB,QAAQ;AAAA,MACR,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,IACtB,CAAC;AACD,WAAO;AAAA,EACT,SAAS,OAAgB;AACvB,WAAO,MAAM,4BAA4B,KAAK;AAC9C,WAAO,CAAC;AAAA,EACV;AACF;AAEO,IAAM,eAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,qBAAqB,QAAQ,IAAI;AAAA,IACjC,oBAAoB,QAAQ,IAAI;AAAA,IAChC,qBAAqB,QAAQ,IAAI;AAAA,IACjC,oBAAoB,QAAQ,IAAI;AAAA,IAChC,wBAAwB,QAAQ,IAAI;AAAA,EACtC;AAAA,EACA,QAAQ;AAAA,IACN,CAAC,UAAU,cAAc,GAAG,OAC1B,SACA,WACsB;AACtB,UAAI;AACF,cAAM,UAAU,WAAW,OAAO;AAClC,cAAM,SAAS,aAAa;AAAA,UAC1B,OAAO,QAAQ;AAAA,UACf;AAAA,QACF,CAAC;AAED,cAAM,YACJ,QAAQ,WAAW,wBAAwB,KAAK;AAClD,eAAO,IAAI,wCAAwC,SAAS,EAAE;AAC9D,cAAM,qBAAqB,SAAS,WAAW,OAAO;AACtD,cAAM,OACJ,OAAO,WAAW,WACd,SACA,SACG,OAA+B,QAAQ,KACxC;AAER,YAAI,CAAC,MAAM;AACT,iBAAO,MAAM,gCAAgC;AAC7C,iBAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,QAC3B;AAIA,YAAI;AAGF,gBAAM,WAAW,MAAM,MAAM,GAAG,OAAO,mBAAmB;AAAA,YACxD,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,YAC9C,MAAM,KAAK,UAAU;AAAA,cACnB,OAAO;AAAA,cACP,QAAQ;AAAA,YACV,CAAC;AAAA,UACH,CAAC;AAED,cAAI,CAAC,SAAS,IAAI;AAChB,kBAAM,IAAI,MAAM,6BAA6B,SAAS,UAAU,EAAE;AAAA,UACpE;AAEA,gBAAM,SAAU,MAAM,SAAS,KAAK;AACpC,iBAAO,OAAO,aAAa,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,QAC/C,SAAS,gBAAgB;AACvB,iBAAO,MAAM,+BAA+B,cAAc;AAC1D,iBAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,QAC3B;AAAA,MACF,SAAS,OAAO;AACd,eAAO,MAAM,kCAAkC,KAAK;AAEpD,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,GAAG,OACtB,SACA,EAAE,QAAQ,gBAAgB,CAAC,EAAE,MAC1B;AACH,UAAI;AACF,cAAM,cAAc;AACpB,cAAM,oBAAoB;AAC1B,cAAM,mBAAmB;AACzB,cAAM,sBAAsB;AAC5B,cAAM,UAAU,WAAW,OAAO;AAClC,cAAM,SAAS,aAAa;AAAA,UAC1B,OAAO,QAAQ;AAAA,UACf;AAAA,QACF,CAAC;AAED,cAAM,QACJ,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,aAAa,KAChC;AAEF,eAAO,IAAI,oCAAoC,KAAK,EAAE;AACtD,cAAM,qBAAqB,SAAS,OAAO,OAAO;AAClD,eAAO,IAAI,iBAAiB;AAC5B,eAAO,IAAI,MAAM;AAEjB,eAAO,MAAM,mBAAmB,QAAQ,OAAO;AAAA,UAC7C;AAAA,UACA,QAAQ,QAAQ,WAAW,UAAU;AAAA,UACrC;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,MAAM,8BAA8B,KAAK;AAChD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,GAAG,OACtB,SACA;AAAA,MACE;AAAA,MACA,gBAAgB,CAAC;AAAA,MACjB,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IACpB,MACG;AACH,UAAI;AACF,cAAM,QACJ,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,aAAa,KAChC;AACF,cAAM,UAAU,WAAW,OAAO;AAClC,cAAM,SAAS,aAAa;AAAA,UAC1B,OAAO,QAAQ;AAAA,UACf;AAAA,QACF,CAAC;AAED,eAAO,IAAI,oCAAoC,KAAK,EAAE;AACtD,cAAM,qBAAqB,SAAS,OAAO,OAAO;AAClD,eAAO,MAAM,mBAAmB,QAAQ,OAAO;AAAA,UAC7C;AAAA,UACA,QAAQ,QAAQ,WAAW,UAAU;AAAA,UACrC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,MAAM,8BAA8B,KAAK;AAChD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,UAAU,YAAY,GAAG,OACxB,SACA,WACG;AACH,UAAI;AACF,cAAM,UAAU,WAAW,OAAO;AAClC,cAAM,SAAS,aAAa;AAAA,UAC1B,OAAO,QAAQ;AAAA,UACf;AAAA,QACF,CAAC;AACD,cAAM,QACJ,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,aAAa,KAChC;AAEF,eAAO,IAAI,sCAAsC,KAAK,EAAE;AACxD,cAAM,qBAAqB,SAAS,OAAO,OAAO;AAClD,YAAI,OAAO,QAAQ;AACjB,iBAAO,KAAK,8CAA8C;AAAA,QAC5D;AAEA,eAAO,MAAM,qBAAqB,QAAQ,OAAO,MAAM;AAAA,MACzD,SAAS,OAAO;AACd,eAAO,MAAM,gCAAgC,KAAK;AAElD,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,IACA,CAAC,UAAU,YAAY,GAAG,OACxB,SACA,WACG;AACH,UAAI;AACF,cAAM,UAAU,WAAW,OAAO;AAClC,cAAM,SAAS,aAAa;AAAA,UAC1B,OAAO,QAAQ;AAAA,UACf;AAAA,QACF,CAAC;AACD,cAAM,QACJ,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,aAAa,KAChC;AAEF,eAAO,IAAI,sCAAsC,KAAK,EAAE;AACxD,cAAM,qBAAqB,SAAS,OAAO,OAAO;AAClD,YAAI,OAAO,QAAQ;AACjB,iBAAO,KAAK,8CAA8C;AAAA,QAC5D;AAEA,eAAO,MAAM,qBAAqB,QAAQ,OAAO,MAAM;AAAA,MACzD,SAAS,OAAO;AACd,eAAO,MAAM,gCAAgC,KAAK;AAElD,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAAY;AACrB,gBAAI;AACF,oBAAM,UAAU,WAAW,OAAO;AAClC,oBAAM,WAAW,MAAM,MAAM,GAAG,OAAO,WAAW;AAClD,oBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,qBAAO;AAAA,gBACL;AAAA,gBACA,QACE,OAAO,SAAS,YAChB,YAAY,QACZ,MAAM,QAAQ,KAAK,MAAM,IACvB,KAAK,OAAO,SACZ;AAAA,cACN;AACA,kBAAI,CAAC,SAAS,IAAI;AAChB,uBAAO;AAAA,kBACL,kCAAkC,SAAS,UAAU;AAAA,gBACvD;AACA;AAAA,cACF;AAAA,YACF,SAAS,OAAO;AACd,qBAAO,MAAM,wCAAwC,KAAK;AAAA,YAC5D;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAAY;AACrB,gBAAI;AACF,oBAAM,YAAY,MAAM,QAAQ;AAAA,gBAC9B,UAAU;AAAA,gBACV;AAAA,kBACE,MAAM;AAAA,gBACR;AAAA,cACF;AACA,qBAAO,IAAI,aAAa,SAAS;AAAA,YACnC,SAAS,OAAO;AACd,qBAAO,MAAM,iCAAiC,KAAK;AAAA,YACrD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAAY;AACrB,gBAAI;AACF,oBAAM,OAAO,MAAM,QAAQ,SAAS,UAAU,YAAY;AAAA,gBACxD,QAAQ;AAAA,cACV,CAAC;AACD,kBAAI,KAAK,WAAW,GAAG;AACrB,uBAAO,MAAM,yBAAyB;AACtC;AAAA,cACF;AACA,qBAAO,IAAI,mCAAmC,IAAI;AAAA,YACpD,SAAS,OAAO;AACd,qBAAO,MAAM,6BAA6B,KAAK;AAAA,YACjD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAAY;AACrB,gBAAI;AACF,oBAAM,OAAO,MAAM,QAAQ,SAAS,UAAU,YAAY;AAAA,gBACxD,QAAQ;AAAA,cACV,CAAC;AACD,kBAAI,KAAK,WAAW,GAAG;AACrB,uBAAO,MAAM,yBAAyB;AACtC;AAAA,cACF;AACA,qBAAO,IAAI,mCAAmC,IAAI;AAAA,YACpD,SAAS,OAAO;AACd,qBAAO,MAAM,6BAA6B,KAAK;AAAA,YACjD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAAY;AACrB,gBAAI;AACF,oBAAM,SAAS,MAAM,QAAQ,SAAS,UAAU,cAAc;AAAA,gBAC5D,QACE;AAAA,gBACF,aAAa;AAAA,gBACb,QAAQ;AAAA,cACV,CAAC;AACD,qBAAO,IAAI,qBAAqB,MAAM;AAAA,YACxC,SAAS,OAAO;AACd,qBAAO,MAAM,+BAA+B,KAAK;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAAY;AACrB,gBAAI;AACF,oBAAM,SAAS,MAAM,QAAQ,SAAS,UAAU,cAAc;AAAA,gBAC5D,QACE;AAAA,gBACF,aAAa;AAAA,gBACb,QAAQ;AAAA,cACV,CAAC;AACD,qBAAO,IAAI,qBAAqB,MAAM;AAAA,YACxC,SAAS,OAAO;AACd,qBAAO,MAAM,+BAA+B,KAAK;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AACA,IAAO,gBAAQ;","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, 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 (!text) {\n logger.error(\"No text provided for embedding\");\n return Array(1536).fill(0);\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: text,\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":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-ollama",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"type": "string",
|
|
48
48
|
"description": "Base URL for the Ollama API. The plugin will strip this to the domain part and append the necessary API paths.",
|
|
49
49
|
"required": true,
|
|
50
|
-
"default": "http://localhost:11434",
|
|
50
|
+
"default": "http://localhost:11434/api",
|
|
51
51
|
"sensitive": false
|
|
52
52
|
},
|
|
53
53
|
"OLLAMA_SMALL_MODEL": {
|
|
54
54
|
"type": "string",
|
|
55
55
|
"description": "Name or tag of the small-sized Ollama model to use for text and object generation.",
|
|
56
56
|
"required": false,
|
|
57
|
-
"default": "gemma3
|
|
57
|
+
"default": "gemma3",
|
|
58
58
|
"sensitive": false
|
|
59
59
|
},
|
|
60
60
|
"OLLAMA_MEDIUM_MODEL": {
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"type": "string",
|
|
68
68
|
"description": "Name or tag of the large-sized Ollama model to use for text and object generation.",
|
|
69
69
|
"required": false,
|
|
70
|
-
"default": "gemma3
|
|
70
|
+
"default": "gemma3",
|
|
71
71
|
"sensitive": false
|
|
72
72
|
},
|
|
73
73
|
"OLLAMA_EMBEDDING_MODEL": {
|
|
@@ -81,14 +81,14 @@
|
|
|
81
81
|
"type": "string",
|
|
82
82
|
"description": "Fallback environment variable for specifying a small model if OLLAMA_SMALL_MODEL is not set.",
|
|
83
83
|
"required": false,
|
|
84
|
-
"default": "gemma3
|
|
84
|
+
"default": "gemma3",
|
|
85
85
|
"sensitive": false
|
|
86
86
|
},
|
|
87
87
|
"LARGE_MODEL": {
|
|
88
88
|
"type": "string",
|
|
89
89
|
"description": "Fallback environment variable for specifying a large model if OLLAMA_LARGE_MODEL is not set.",
|
|
90
90
|
"required": false,
|
|
91
|
-
"default": "gemma3
|
|
91
|
+
"default": "gemma3",
|
|
92
92
|
"sensitive": false
|
|
93
93
|
}
|
|
94
94
|
}
|