@elizaos/plugin-ollama 2.0.0-alpha.9 → 2.0.0-beta.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/LICENSE +21 -0
- package/README.md +201 -0
- package/auto-enable.ts +17 -0
- package/dist/browser/index.browser.js +792 -153
- package/dist/browser/index.browser.js.map +10 -8
- package/dist/browser/index.d.ts +2 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.node.cjs +773 -148
- package/dist/cjs/index.node.cjs.map +10 -8
- package/dist/node/auto-enable.d.ts +4 -0
- package/dist/node/auto-enable.d.ts.map +1 -0
- package/dist/node/generated/specs/specs.d.ts +1 -18
- package/dist/node/generated/specs/specs.d.ts.map +1 -1
- package/dist/node/index.browser.d.ts +6 -2
- package/dist/node/index.browser.d.ts.map +1 -1
- package/dist/node/index.d.ts +2 -4
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.node.d.ts +7 -0
- package/dist/node/index.node.d.ts.map +1 -0
- package/dist/node/index.node.js +792 -153
- package/dist/node/index.node.js.map +10 -8
- package/dist/node/models/embedding.d.ts +7 -0
- package/dist/node/models/embedding.d.ts.map +1 -1
- package/dist/node/models/index.d.ts +0 -1
- package/dist/node/models/index.d.ts.map +1 -1
- package/dist/node/models/text.d.ts +82 -3
- package/dist/node/models/text.d.ts.map +1 -1
- package/dist/node/plugin.d.ts +34 -0
- package/dist/node/plugin.d.ts.map +1 -1
- package/dist/node/utils/ai-sdk-wire.d.ts +42 -0
- package/dist/node/utils/ai-sdk-wire.d.ts.map +1 -0
- package/dist/node/utils/config.d.ts +28 -3
- package/dist/node/utils/config.d.ts.map +1 -1
- package/dist/node/utils/index.d.ts +2 -0
- package/dist/node/utils/index.d.ts.map +1 -1
- package/dist/node/utils/modelUsage.d.ts +13 -0
- package/dist/node/utils/modelUsage.d.ts.map +1 -0
- package/dist/node/vitest.config.d.ts +3 -0
- package/dist/node/vitest.config.d.ts.map +1 -0
- package/package.json +41 -19
- package/dist/node/models/object.d.ts +0 -4
- package/dist/node/models/object.d.ts.map +0 -1
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../plugin.ts", "../../models/embedding.ts", "../../utils/config.ts", "../../
|
|
3
|
+
"sources": ["../../plugin.ts", "../../models/embedding.ts", "../../utils/config.ts", "../../utils/modelUsage.ts", "../../models/availability.ts", "../../models/text.ts", "../../utils/ai-sdk-wire.ts", "../../index.browser.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type {\n GenerateTextParams,\n IAgentRuntime,\n ObjectGenerationParams,\n Plugin,\n TextEmbeddingParams,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\n\nconst _globalThis = globalThis as typeof globalThis & { AI_SDK_LOG_WARNINGS?: boolean };\n_globalThis.AI_SDK_LOG_WARNINGS ??= false;\n\nimport { handleTextEmbedding } from \"./models/embedding\";\nimport { handleObjectLarge, handleObjectSmall } from \"./models/object\";\nimport { handleTextLarge, handleTextSmall } from \"./models/text\";\nimport { getApiBase, getBaseURL } from \"./utils/config\";\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\" || !process.env) {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\n\nexport const ollamaPlugin: Plugin = {\n name: \"ollama\",\n description: \"Ollama plugin for local LLM inference\",\n\n config: {\n OLLAMA_API_ENDPOINT: env.OLLAMA_API_ENDPOINT ?? null,\n OLLAMA_SMALL_MODEL: env.OLLAMA_SMALL_MODEL ?? null,\n OLLAMA_MEDIUM_MODEL: env.OLLAMA_MEDIUM_MODEL ?? null,\n OLLAMA_LARGE_MODEL: env.OLLAMA_LARGE_MODEL ?? null,\n OLLAMA_EMBEDDING_MODEL: env.OLLAMA_EMBEDDING_MODEL ?? null,\n },\n\n async init(_config, runtime) {\n const baseURL = getBaseURL(runtime);\n const apiBase = getApiBase(runtime);\n\n if (!baseURL || baseURL === \"http://localhost:11434/api\") {\n const endpoint = runtime.getSetting(\"OLLAMA_API_ENDPOINT\");\n if (!endpoint) {\n logger.warn(\"OLLAMA_API_ENDPOINT not set, using default localhost:11434\");\n }\n }\n\n try {\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 validation failed: ${response.statusText}`);\n }\n } catch (fetchError: unknown) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`Ollama API validation error: ${message}`);\n }\n },\n\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n return handleTextEmbedding(runtime, params);\n },\n\n [ModelType.TEXT_SMALL]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string> => {\n return handleTextSmall(runtime, params);\n },\n\n [ModelType.TEXT_LARGE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string> => {\n return handleTextLarge(runtime, params);\n },\n\n [ModelType.OBJECT_SMALL]: async (\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n ): Promise<Record<string, string | number | boolean | null>> => {\n return handleObjectSmall(runtime, params);\n },\n\n [ModelType.OBJECT_LARGE]: async (\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n ): Promise<Record<string, string | number | boolean | null>> => {\n return handleObjectLarge(runtime, params);\n },\n },\n\n tests: [\n {\n name: \"ollama_plugin_tests\",\n tests: [\n {\n name: \"ollama_test_url_validation\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const apiBase = getApiBase(runtime);\n const response = await fetch(`${apiBase}/api/tags`);\n if (!response.ok) {\n logger.error(`Failed to validate Ollama API: ${response.statusText}`);\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: IAgentRuntime) => {\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: IAgentRuntime) => {\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: IAgentRuntime) => {\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: IAgentRuntime) => {\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: IAgentRuntime) => {\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};\n",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
5
|
+
"/**\n * Ollama provider plugin registration.\n *\n * ## Why this file exists separately from `models/*`\n *\n * Centralizes **plugin metadata**, **model-type → handler** wiring, and **init-time** logging\n * (base URL, model defaults) so model modules stay pure “call Ollama / AI SDK” logic.\n *\n * ## Text handlers and v5 parity\n *\n * `TEXT_*`, `RESPONSE_HANDLER`, and `ACTION_PLANNER` all route through `models/text.ts`, which uses:\n *\n * - **`generateText`** — default completion; structured output when `responseSchema` is set and\n * streaming is not used for that shape; **`stream: true`** + schema-only (no tools) for nested\n * extractors. **Why:** keeps JSON `format` on the supported completion path.\n * - **`streamText`** — plain SSE chat when `stream: true` with no tools/schema/`toolChoice`; and\n * **`stream: true` + native tools** so Ollama can stream `/api/chat` with tools. For v5 planner\n * model types under SSE, `models/text.ts` may yield a **single** `textStream` chunk of plan JSON\n * so `useModel`’s concatenated string stays parseable. **Why:** core’s streaming path only\n * accumulates `textStream` chunks, not the `text` promise; mixing arbitrary deltas with plan JSON\n * breaks `parseMessageHandlerOutput`.\n *\n * Handlers return **`Promise<string | TextStreamResult>`** — **why:** `useModel` accepts either a\n * final string or a streaming object for text model keys; matching OpenRouter keeps orchestration\n * and SSE paths identical. ElizaOS v5 Stage 1 calls `RESPONSE_HANDLER` with **`messages`**,\n * **`tools`**, and **`toolChoice`**; the text adapter must accept the same shapes as\n * OpenRouter/OpenAI or local-only agents fail before the first reply. See `models/text.ts` and\n * `utils/ai-sdk-wire.ts` module comments for the full rationale.\n *\n * ## AI SDK log noise\n *\n * Suppresses noisy AI SDK warnings at load (`AI_SDK_LOG_WARNINGS`) because local inference\n * runs in tight loops during tests and desktop shells. **Why:** keeps CI and packaged logs readable.\n */\nimport type {\n GenerateTextParams,\n IAgentRuntime,\n Plugin,\n TextEmbeddingParams,\n TextStreamResult,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\n\nconst _globalThis = globalThis as typeof globalThis & {\n AI_SDK_LOG_WARNINGS?: boolean;\n};\n_globalThis.AI_SDK_LOG_WARNINGS ??= false;\n\nimport { handleTextEmbedding } from \"./models/embedding\";\nimport {\n handleActionPlanner,\n handleResponseHandler,\n handleTextLarge,\n handleTextMedium,\n handleTextMega,\n handleTextNano,\n handleTextSmall,\n} from \"./models/text\";\nimport { getApiBase, getBaseURL } from \"./utils/config\";\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\" || !process.env) {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\nconst TEXT_NANO_MODEL_TYPE = (ModelType.TEXT_NANO ?? \"TEXT_NANO\") as string;\nconst TEXT_MEDIUM_MODEL_TYPE = (ModelType.TEXT_MEDIUM ?? \"TEXT_MEDIUM\") as string;\nconst TEXT_MEGA_MODEL_TYPE = (ModelType.TEXT_MEGA ?? \"TEXT_MEGA\") as string;\nconst RESPONSE_HANDLER_MODEL_TYPE = (ModelType.RESPONSE_HANDLER ?? \"RESPONSE_HANDLER\") as string;\nconst ACTION_PLANNER_MODEL_TYPE = (ModelType.ACTION_PLANNER ?? \"ACTION_PLANNER\") as string;\n\nexport const ollamaPlugin: Plugin = {\n name: \"ollama\",\n description: \"Ollama plugin for local LLM inference\",\n autoEnable: {\n envKeys: [\"OLLAMA_BASE_URL\"],\n },\n\n config: {\n OLLAMA_API_ENDPOINT: env.OLLAMA_API_ENDPOINT ?? null,\n OLLAMA_NANO_MODEL: env.OLLAMA_NANO_MODEL ?? null,\n OLLAMA_SMALL_MODEL: env.OLLAMA_SMALL_MODEL ?? null,\n OLLAMA_MEDIUM_MODEL: env.OLLAMA_MEDIUM_MODEL ?? null,\n OLLAMA_LARGE_MODEL: env.OLLAMA_LARGE_MODEL ?? null,\n OLLAMA_MEGA_MODEL: env.OLLAMA_MEGA_MODEL ?? null,\n OLLAMA_RESPONSE_HANDLER_MODEL: env.OLLAMA_RESPONSE_HANDLER_MODEL ?? null,\n OLLAMA_SHOULD_RESPOND_MODEL: env.OLLAMA_SHOULD_RESPOND_MODEL ?? null,\n OLLAMA_ACTION_PLANNER_MODEL: env.OLLAMA_ACTION_PLANNER_MODEL ?? null,\n OLLAMA_PLANNER_MODEL: env.OLLAMA_PLANNER_MODEL ?? null,\n NANO_MODEL: env.NANO_MODEL ?? null,\n MEDIUM_MODEL: env.MEDIUM_MODEL ?? null,\n SMALL_MODEL: env.SMALL_MODEL ?? null,\n LARGE_MODEL: env.LARGE_MODEL ?? null,\n MEGA_MODEL: env.MEGA_MODEL ?? null,\n RESPONSE_HANDLER_MODEL: env.RESPONSE_HANDLER_MODEL ?? null,\n SHOULD_RESPOND_MODEL: env.SHOULD_RESPOND_MODEL ?? null,\n ACTION_PLANNER_MODEL: env.ACTION_PLANNER_MODEL ?? null,\n PLANNER_MODEL: env.PLANNER_MODEL ?? null,\n OLLAMA_EMBEDDING_MODEL: env.OLLAMA_EMBEDDING_MODEL ?? null,\n OLLAMA_DISABLE_STRUCTURED_OUTPUT: env.OLLAMA_DISABLE_STRUCTURED_OUTPUT ?? null,\n },\n\n async init(_config, runtime) {\n const baseURL = getBaseURL(runtime);\n const apiBase = getApiBase(runtime);\n\n if (!baseURL || baseURL === \"http://localhost:11434/api\") {\n const endpoint = runtime.getSetting(\"OLLAMA_API_ENDPOINT\");\n if (!endpoint) {\n logger.warn(\"OLLAMA_API_ENDPOINT not set, using default localhost:11434\");\n }\n }\n\n try {\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 validation failed: ${response.statusText}`);\n }\n } catch (fetchError: unknown) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`Ollama API validation error: ${message}`);\n }\n },\n\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n return handleTextEmbedding(runtime, params);\n },\n\n [TEXT_NANO_MODEL_TYPE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleTextNano(runtime, params);\n },\n\n [ModelType.TEXT_SMALL]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleTextSmall(runtime, params);\n },\n\n [TEXT_MEDIUM_MODEL_TYPE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleTextMedium(runtime, params);\n },\n\n [ModelType.TEXT_LARGE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleTextLarge(runtime, params);\n },\n\n [TEXT_MEGA_MODEL_TYPE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleTextMega(runtime, params);\n },\n\n [RESPONSE_HANDLER_MODEL_TYPE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleResponseHandler(runtime, params);\n },\n\n [ACTION_PLANNER_MODEL_TYPE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string | TextStreamResult> => {\n return handleActionPlanner(runtime, params);\n },\n },\n\n tests: [\n {\n name: \"ollama_plugin_tests\",\n tests: [\n {\n name: \"ollama_test_url_validation\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const apiBase = getApiBase(runtime);\n const response = await fetch(`${apiBase}/api/tags`);\n if (!response.ok) {\n logger.error(`Failed to validate Ollama API: ${response.statusText}`);\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: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const embedding = await runModel(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: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const text = await runModel(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: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const text = await runModel(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_structured_output_via_text_small\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const result = await runModel(ModelType.TEXT_SMALL, {\n prompt:\n \"Generate a JSON object representing a user profile with name, age, and hobbies\",\n temperature: 0.7,\n responseSchema: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"number\" },\n hobbies: { type: \"array\", items: { type: \"string\" } },\n },\n required: [\"name\", \"age\", \"hobbies\"],\n },\n });\n logger.log({ result }, \"Generated structured output via TEXT_SMALL\");\n } catch (error) {\n logger.error({ error }, \"Error in test_structured_output_via_text_small\");\n }\n },\n },\n {\n name: \"ollama_test_structured_output_via_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const result = await runModel(ModelType.TEXT_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 responseSchema: { type: \"object\" },\n });\n logger.log({ result }, \"Generated structured output via TEXT_LARGE\");\n } catch (error) {\n logger.error({ error }, \"Error in test_structured_output_via_text_large\");\n }\n },\n },\n ],\n },\n ],\n};\n",
|
|
6
|
+
"/**\n * Embeddings via Ollama + AI SDK `embed`.\n *\n * **Why v2 provider:** `createOllama` from `ollama-ai-provider-v2` registers embedding models on\n * the same supported AI SDK surface as chat (`models/text.ts`). Mixed v1/v2 providers in one\n * agent were a common source of `Unsupported model version v1` during dependency bumps.\n */\nimport type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { type EmbeddingModel, embed } from \"ai\";\nimport { createOllama } from \"ollama-ai-provider-v2\";\n\nimport { getBaseURL, getEmbeddingModel } from \"../utils/config\";\nimport { emitModelUsed, estimateEmbeddingUsage, normalizeTokenUsage } from \"../utils/modelUsage\";\nimport { ensureModelAvailable } from \"./availability\";\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n try {\n const baseURL = getBaseURL(runtime);\n const customFetch = runtime.fetch ?? undefined;\n const ollama = createOllama({\n fetch: customFetch,\n baseURL,\n });\n\n const modelName = getEmbeddingModel(runtime);\n logger.log(`[Ollama] Using TEXT_EMBEDDING model: ${modelName}`);\n await ensureModelAvailable(modelName, baseURL, customFetch);\n\n let text =\n typeof params === \"string\"\n ? params\n : params\n ? (params as TextEmbeddingParams).text || \"\"\n : \"\";\n\n // Truncate to stay within embedding model token limits (~4 chars per token)\n const maxChars = 8_000 * 4;\n if (text.length > maxChars) {\n logger.warn(\n `[Ollama] Embedding input too long (~${Math.ceil(text.length / 4)} tokens), truncating to ~8000 tokens`\n );\n text = text.slice(0, maxChars);\n }\n\n const embeddingText = text || \"test\";\n\n try {\n const embedParams = {\n model: ollama.embedding(modelName) as EmbeddingModel,\n value: embeddingText,\n };\n\n const { embedding, usage } = await embed(embedParams);\n emitModelUsed(\n runtime,\n ModelType.TEXT_EMBEDDING,\n modelName,\n normalizeTokenUsage(usage) ?? estimateEmbeddingUsage(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 Array(1536).fill(0);\n }\n}\n",
|
|
7
|
+
"/**\n * Ollama-related settings resolution for `@elizaos/plugin-ollama`.\n *\n * ## Why `getSetting` merges runtime + `process.env`\n *\n * Eliza agents can override keys per-character via `runtime.getSetting`, while CLI and\n * container deployments typically use environment variables. Reading both in one helper\n * keeps model selection consistent whether the agent is started from the desktop app,\n * `eliza start`, or tests.\n */\n\ntype SettingsProvider = {\n getSetting: (key: string) => string | number | boolean | null;\n};\n\nexport const DEFAULT_OLLAMA_URL = \"http://localhost:11434\";\nexport const DEFAULT_SMALL_MODEL = \"eliza-1-2b\";\nexport const DEFAULT_LARGE_MODEL = \"eliza-1-9b\";\nexport const DEFAULT_EMBEDDING_MODEL = \"eliza-1-2b\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\" || !process.env) {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(\n runtime: SettingsProvider,\n key: string,\n defaultValue?: string\n): string | undefined {\n const value = runtime.getSetting(key);\n if (value !== undefined && value !== null) {\n return String(value);\n }\n return getEnvValue(key) ?? defaultValue;\n}\n\nexport function getBaseURL(runtime: SettingsProvider): string {\n const apiEndpoint =\n getSetting(runtime, \"OLLAMA_API_ENDPOINT\") ||\n getSetting(runtime, \"OLLAMA_API_URL\") ||\n DEFAULT_OLLAMA_URL;\n\n if (!apiEndpoint.endsWith(\"/api\")) {\n return apiEndpoint.endsWith(\"/\") ? `${apiEndpoint}api` : `${apiEndpoint}/api`;\n }\n return apiEndpoint;\n}\n\nexport function getApiBase(runtime: SettingsProvider): string {\n const baseURL = getBaseURL(runtime);\n return baseURL.endsWith(\"/api\") ? baseURL.slice(0, -4) : baseURL;\n}\n\nexport function getSmallModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_SMALL_MODEL\") ||\n getSetting(runtime, \"SMALL_MODEL\") ||\n DEFAULT_SMALL_MODEL\n );\n}\n\nexport function getNanoModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_NANO_MODEL\") ||\n getSetting(runtime, \"NANO_MODEL\") ||\n getSmallModel(runtime)\n );\n}\n\nexport function getMediumModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_MEDIUM_MODEL\") ||\n getSetting(runtime, \"MEDIUM_MODEL\") ||\n getSmallModel(runtime)\n );\n}\n\nexport function getLargeModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_LARGE_MODEL\") ||\n getSetting(runtime, \"LARGE_MODEL\") ||\n DEFAULT_LARGE_MODEL\n );\n}\n\nexport function getMegaModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_MEGA_MODEL\") ||\n getSetting(runtime, \"MEGA_MODEL\") ||\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseHandlerModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_RESPONSE_HANDLER_MODEL\") ||\n getSetting(runtime, \"OLLAMA_SHOULD_RESPOND_MODEL\") ||\n getSetting(runtime, \"RESPONSE_HANDLER_MODEL\") ||\n getSetting(runtime, \"SHOULD_RESPOND_MODEL\") ||\n getNanoModel(runtime)\n );\n}\n\nexport function getActionPlannerModel(runtime: SettingsProvider): string {\n return (\n getSetting(runtime, \"OLLAMA_ACTION_PLANNER_MODEL\") ||\n getSetting(runtime, \"OLLAMA_PLANNER_MODEL\") ||\n getSetting(runtime, \"ACTION_PLANNER_MODEL\") ||\n getSetting(runtime, \"PLANNER_MODEL\") ||\n getMediumModel(runtime)\n );\n}\n\nexport function getEmbeddingModel(runtime: SettingsProvider): string {\n return getSetting(runtime, \"OLLAMA_EMBEDDING_MODEL\") || DEFAULT_EMBEDDING_MODEL;\n}\n\n/**\n * Escape hatch for JSON-schema structured text (`responseSchema` on `useModel`).\n *\n * **Why this exists:** Ollama `format` / schema mode is correct for core pipelines\n * (fact extraction, planners), but some local models return invalid JSON, loop, or 500.\n * Disabling structured output forces plain `generateText` so the agent stays alive; callers\n * that require strict JSON may log parse failures until the operator fixes the model or\n * clears this flag.\n */\nexport function isOllamaStructuredOutputDisabled(runtime: SettingsProvider): boolean {\n const v = getSetting(runtime, \"OLLAMA_DISABLE_STRUCTURED_OUTPUT\")?.trim().toLowerCase();\n return v === \"1\" || v === \"true\" || v === \"yes\" || v === \"on\";\n}\n",
|
|
8
|
+
"import type { EventPayload, IAgentRuntime, ModelTypeName } from \"@elizaos/core\";\nimport { EventType } from \"@elizaos/core\";\n\ntype ProviderUsage = {\n inputTokens?: number;\n outputTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n};\n\nexport type NormalizedUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n estimated?: boolean;\n};\n\nfunction toFiniteNumber(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n return Math.max(0, Math.round(value));\n}\n\nexport function normalizeTokenUsage(usage: unknown): NormalizedUsage | null {\n if (!usage || typeof usage !== \"object\") {\n return null;\n }\n\n const record = usage as ProviderUsage;\n const promptTokens = toFiniteNumber(record.inputTokens ?? record.promptTokens);\n const completionTokens = toFiniteNumber(record.outputTokens ?? record.completionTokens);\n const totalTokens = toFiniteNumber(record.totalTokens);\n\n if (promptTokens === undefined && completionTokens === undefined && totalTokens === undefined) {\n return null;\n }\n\n const normalizedPromptTokens =\n promptTokens ??\n (completionTokens === undefined && totalTokens !== undefined\n ? totalTokens\n : Math.max(0, (totalTokens ?? 0) - (completionTokens ?? 0)));\n const normalizedCompletionTokens =\n completionTokens ??\n Math.max(0, (totalTokens ?? normalizedPromptTokens) - normalizedPromptTokens);\n\n return {\n promptTokens: normalizedPromptTokens,\n completionTokens: normalizedCompletionTokens,\n totalTokens: totalTokens ?? normalizedPromptTokens + normalizedCompletionTokens,\n };\n}\n\nexport function estimateTokenCount(text: string): number {\n return text.length === 0 ? 0 : Math.ceil(text.length / 4);\n}\n\nfunction stringifyForUsage(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function estimateUsage(prompt: string, response: unknown): NormalizedUsage {\n const promptTokens = estimateTokenCount(prompt);\n const completionTokens = estimateTokenCount(stringifyForUsage(response));\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n estimated: true,\n };\n}\n\nexport function estimateEmbeddingUsage(text: string): NormalizedUsage {\n const promptTokens = estimateTokenCount(text);\n return {\n promptTokens,\n completionTokens: 0,\n totalTokens: promptTokens,\n estimated: true,\n };\n}\n\nexport function emitModelUsed(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n model: string,\n usage: NormalizedUsage\n): void {\n void runtime.emitEvent(\n EventType.MODEL_USED as string,\n {\n runtime,\n source: \"ollama\",\n provider: \"ollama\",\n type,\n model,\n modelName: model,\n tokens: {\n prompt: usage.promptTokens,\n completion: usage.completionTokens,\n total: usage.totalTokens,\n ...(usage.estimated ? { estimated: true } : {}),\n },\n ...(usage.estimated ? { usageEstimated: true } : {}),\n } as EventPayload\n );\n}\n",
|
|
8
9
|
"import { logger } from \"@elizaos/core\";\n\nexport async function ensureModelAvailable(\n model: string,\n providedBaseURL?: string,\n customFetch?: typeof fetch | null\n): Promise<void> {\n const baseURL = providedBaseURL || \"http://localhost:11434/api\";\n const apiBase = baseURL.endsWith(\"/api\") ? baseURL.slice(0, -4) : baseURL;\n const fetcher = customFetch ?? fetch;\n\n try {\n const showRes = await fetcher(`${apiBase}/api/show`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ model }),\n });\n\n if (showRes.ok) {\n return;\n }\n\n logger.info(`[Ollama] Model ${model} not found locally. Downloading...`);\n\n const pullRes = await fetcher(`${apiBase}/api/pull`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ model, stream: false }),\n });\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",
|
|
9
|
-
"import type { IAgentRuntime, ObjectGenerationParams } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { generateObject } from \"ai\";\nimport { createOllama } from \"ollama-ai-provider\";\n\nimport { getBaseURL, getLargeModel, getSmallModel } from \"../utils/config\";\nimport { ensureModelAvailable } from \"./availability\";\n\nasync function generateOllamaObject(\n ollama: ReturnType<typeof createOllama>,\n model: string,\n params: ObjectGenerationParams\n): Promise<Record<string, string | number | boolean | null>> {\n try {\n const generateParams = {\n model: ollama(model),\n output: \"no-schema\" as const,\n prompt: params.prompt,\n temperature: params.temperature,\n };\n\n const { object } = await generateObject(generateParams);\n return object as Record<string, string | number | boolean | null>;\n } catch (error: unknown) {\n logger.error({ error }, \"Error generating object\");\n return {};\n }\n}\n\nexport async function handleObjectSmall(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, string | number | boolean | null>> {\n try {\n const baseURL = getBaseURL(runtime);\n const customFetch = runtime.fetch ?? undefined;\n const ollama = createOllama({\n fetch: customFetch,\n baseURL,\n });\n const model = getSmallModel(runtime);\n\n logger.log(`[Ollama] Using OBJECT_SMALL model: ${model}`);\n await ensureModelAvailable(model, baseURL, customFetch);\n\n return await generateOllamaObject(ollama, model, params);\n } catch (error) {\n logger.error({ error }, \"Error in OBJECT_SMALL model\");\n return {};\n }\n}\n\nexport async function handleObjectLarge(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, string | number | boolean | null>> {\n try {\n const baseURL = getBaseURL(runtime);\n const customFetch = runtime.fetch ?? undefined;\n const ollama = createOllama({\n fetch: customFetch,\n baseURL,\n });\n const model = getLargeModel(runtime);\n\n logger.log(`[Ollama] Using OBJECT_LARGE model: ${model}`);\n await ensureModelAvailable(model, baseURL, customFetch);\n\n return await generateOllamaObject(ollama, model, params);\n } catch (error) {\n logger.error({ error }, \"Error in OBJECT_LARGE model\");\n return {};\n }\n}\n",
|
|
10
|
-
"import type { GenerateTextParams, IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { generateText } from \"ai\";\nimport { createOllama } from \"ollama-ai-provider\";\n\nimport { getBaseURL, getLargeModel, getSmallModel } from \"../utils/config\";\nimport { ensureModelAvailable } from \"./availability\";\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): Promise<string> {\n try {\n const generateParams = {\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\n const { text: ollamaResponse } = await generateText(generateParams);\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\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n { prompt, stopSequences = [] }: GenerateTextParams\n): Promise<string> {\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\n const baseURL = getBaseURL(runtime);\n const customFetch = runtime.fetch ?? undefined;\n const ollama = createOllama({\n fetch: customFetch,\n baseURL,\n });\n\n const model = getSmallModel(runtime);\n logger.log(`[Ollama] Using TEXT_SMALL model: ${model}`);\n await ensureModelAvailable(model, baseURL, customFetch);\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\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n {\n prompt,\n stopSequences = [],\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n }: GenerateTextParams\n): Promise<string> {\n try {\n const model = getLargeModel(runtime);\n const baseURL = getBaseURL(runtime);\n const customFetch = runtime.fetch ?? undefined;\n const ollama = createOllama({\n fetch: customFetch,\n baseURL,\n });\n\n logger.log(`[Ollama] Using TEXT_LARGE model: ${model}`);\n await ensureModelAvailable(model, baseURL, customFetch);\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"
|
|
10
|
+
"/**\n * Ollama text generation for ElizaOS.\n *\n * ## Why this module is shaped this way\n *\n * - **Single AI SDK surface:** We call **`generateText`** and **`streamText`** from `ai` so\n * Eliza stays aligned with other provider plugins (OpenAI, OpenRouter). That avoids bespoke\n * HTTP clients here.\n *\n * - **`ollama-ai-provider-v2`:** Older `ollama-ai-provider` exposed AI SDK model spec v1;\n * current `ai` requires v2+ and threw `Unsupported model version v1` for every model.\n * v2 implements the same contract as the rest of the ecosystem.\n *\n * - **`responseSchema`:** Core passes JSON Schema (or a full output spec) for pipelines\n * that need parseable objects (e.g. FACT_EXTRACTOR). We map that to `Output.object` so\n * Ollama receives `format: json` / schema in the wire protocol—without this, those calls\n * failed and memory/planner features degraded under Ollama-only setups.\n *\n * - **`OLLAMA_DISABLE_STRUCTURED_OUTPUT`:** Some local models return invalid JSON or error\n * on `format`. Stripping `responseSchema` keeps the agent running; callers may fail\n * validation—that is intentional so operators can recover without redeploying code.\n *\n * - **Native tools / `toolChoice`:** v5 `RESPONSE_HANDLER` passes `messages`, `tools`, and\n * `toolChoice: \"required\"` (see `runV5MessageRuntimeStage1`). With **`stream: false`** (or no\n * streaming context), we use **`generateText`** and cast a `GenerateTextResult`-shaped payload\n * when needed. With **`stream: true`** and a **tool set**, we use **`streamText`** (see\n * **`buildOllamaStreamWithToolsResult`**). Either way matches OpenRouter/OpenAI so\n * **`parseMessageHandlerNativeToolCall`** / **`parseMessageHandlerOutput`** can read the plan.\n * If both tools and `responseSchema` are present, tools win (schema is omitted for that request).\n *\n * - **Stop sequences:** Empty `stopSequences` arrays are omitted on the wire (same idea as\n * OpenRouter) so we do not send meaningless `[]` to the model.\n *\n * - **Streaming:** When `stream: true` and there is **no** `responseSchema`, **tools**, or\n * `toolChoice`, we call **`streamText`** and return **`TextStreamResult`** so `useModel` can\n * forward chunks to SSE callbacks. **Why:** core sets `stream` from chat context; without a\n * stream object the runtime never invokes `onStreamChunk` and the UI shows empty replies.\n * - **`streamText` + tools:** When `stream: true` and native **tools** are present, we call\n * **`streamText`** (same as OpenAI/OpenRouter) so Ollama streams over `/api/chat`. For\n * **`RESPONSE_HANDLER`** / **`ACTION_PLANNER`**, `useModel`’s streaming branch concatenates\n * **`textStream`** into the string passed to **`parseMessageHandlerOutput`** — so we **drain**\n * the model’s text deltas internally and **yield a single trailing chunk** of the first tool’s\n * arguments JSON (the v5 plan payload). **Why:** mixing arbitrary streamed text with that JSON\n * would make `JSON.parse` fail on the accumulated `fullText`. Other model types forward every\n * text chunk as usual.\n * - **Errors during `textStream`:** Failures often surface while **core** iterates **`textStream`**\n * (after the handler returned), so they bypass **`handleTextWithModelType`’s** outer **`try`/`catch`**.\n * **`logOllamaTextFailure`** runs inside the stream wrapper so logs still include **`ollamaResponseBody`**\n * (Ollama’s JSON error, e.g. insufficient RAM) and the request URL. **Why:** otherwise the process\n * exits with a generic “Internal Server Error” and operators cannot see Ollama’s message.\n * - **`stream: true` + `responseSchema` (no tools):** Still **`generateText`** only — we **log at\n * debug** because `ollama-ai-provider-v2` does not combine structured `format: json` with the\n * `streamText` path reliably for nested extractors (e.g. `FACT_EXTRACTOR`).\n *\n * - **`stream: true` + `toolChoice` without tools:** **`generateText`** only — we **log at debug**.\n * **Why:** `streamText` in this adapter is only used when a **`ToolSet`** is present; `toolChoice`\n * alone is not a supported streaming request shape. Core v5 always passes tools with Stage 1\n * `toolChoice`; the log helps custom callers spot a bad param combo.\n *\n * - **`shouldReturnNative`:** Computed only after the final `outputSpec` (structured output)\n * vs tools conflict is resolved, from `hasChatMessages`, `tools`, `toolChoice`, and whether\n * structured output is still active. **Why:** the non-streaming return shape must match what we\n * actually sent on the wire (`generateText` or the completed stream) so callers do not think\n * they got schema-backed JSON when tools won.\n *\n * - **Usage fallback:** When the chat-messages path is used, token usage estimation uses a\n * JSON serialization of `messages` instead of re-rendering the prompt string. **Why:** we\n * skip `renderChatMessagesForPrompt` on that path for efficiency; usage is still best-effort\n * when the provider omits `usage`.\n *\n * - **`providerOptions`:** Not forwarded into `generateText` yet. **Why:** Ollama’s provider\n * surface differs from Anthropic/OpenAI cache hints; forwarding blindly could send unsupported\n * fields. Documented in README until explicitly mapped.\n */\n\nimport type {\n GenerateTextParams,\n GenerateTextResult,\n IAgentRuntime,\n ModelTypeName,\n TextStreamResult,\n TokenUsage,\n ToolCall,\n} from \"@elizaos/core\";\nimport {\n buildCanonicalSystemPrompt,\n dropDuplicateLeadingSystemMessage,\n logger,\n ModelType,\n renderChatMessagesForPrompt,\n resolveEffectiveSystemPrompt,\n} from \"@elizaos/core\";\nimport {\n generateText,\n type JSONSchema7,\n jsonSchema,\n type LanguageModel,\n Output,\n streamText,\n} from \"ai\";\nimport { createOllama } from \"ollama-ai-provider-v2\";\nimport {\n mapAiSdkToolCallsToCore,\n normalizeNativeMessages,\n normalizeNativeTools,\n normalizeToolChoice,\n} from \"../utils/ai-sdk-wire\";\nimport {\n getActionPlannerModel,\n getBaseURL,\n getLargeModel,\n getMediumModel,\n getMegaModel,\n getNanoModel,\n getResponseHandlerModel,\n getSmallModel,\n isOllamaStructuredOutputDisabled,\n} from \"../utils/config\";\nimport { emitModelUsed, estimateUsage, normalizeTokenUsage } from \"../utils/modelUsage\";\nimport { ensureModelAvailable } from \"./availability\";\n\nconst TEXT_NANO_MODEL_TYPE = (ModelType.TEXT_NANO ?? \"TEXT_NANO\") as ModelTypeName;\nconst TEXT_MEDIUM_MODEL_TYPE = (ModelType.TEXT_MEDIUM ?? \"TEXT_MEDIUM\") as ModelTypeName;\nconst TEXT_MEGA_MODEL_TYPE = (ModelType.TEXT_MEGA ?? \"TEXT_MEGA\") as ModelTypeName;\nconst RESPONSE_HANDLER_MODEL_TYPE = (ModelType.RESPONSE_HANDLER ??\n \"RESPONSE_HANDLER\") as ModelTypeName;\nconst ACTION_PLANNER_MODEL_TYPE = (ModelType.ACTION_PLANNER ?? \"ACTION_PLANNER\") as ModelTypeName;\n\ntype GenerateTextParamsWithNativeOptions = Omit<GenerateTextParams, \"responseSchema\"> & {\n messages?: unknown[];\n tools?: unknown;\n toolChoice?: unknown;\n /** Core passes JSON Schema objects or full AI SDK output specs; typed loosely here for Ollama. */\n responseSchema?: unknown;\n};\n\ntype NativeTextOutput = NonNullable<Parameters<typeof generateText>[0][\"output\"]>;\ntype NativeTextModelResult = string & GenerateTextResult;\n\n/**\n * Pulls useful fields from Vercel AI SDK errors (`APICallError`, `RetryError`, `NoOutputGeneratedError`, …).\n * **Why:** the default `logger.error({ error })` serialization often hides **`responseBody`** (Ollama’s JSON\n * error string, e.g. OOM) and **`url`**, so operators only see “Internal Server Error”.\n */\nfunction summarizeAiSdkErrorForLogs(error: unknown, depth = 0): Record<string, unknown> {\n if (depth > 4) {\n return { note: \"max depth summarizing nested error\" };\n }\n if (error == null) {\n return { raw: String(error) };\n }\n if (typeof error !== \"object\") {\n return { message: String(error) };\n }\n const e = error as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n if (typeof e.name === \"string\") out.errorName = e.name;\n if (typeof e.message === \"string\") out.message = e.message;\n if (typeof e.reason === \"string\") out.reason = e.reason;\n if (typeof e.url === \"string\") out.requestUrl = e.url;\n if (typeof e.statusCode === \"number\") out.httpStatus = e.statusCode;\n if (typeof e.responseBody === \"string\") out.ollamaResponseBody = e.responseBody;\n if (Array.isArray(e.errors)) {\n out.attemptErrors = e.errors.map((sub, i) => ({\n attempt: i + 1,\n ...summarizeAiSdkErrorForLogs(sub, depth + 1),\n }));\n }\n if (e.cause != null && typeof e.cause === \"object\") {\n out.cause = summarizeAiSdkErrorForLogs(e.cause, depth + 1);\n }\n return out;\n}\n\nfunction logOllamaTextFailure(\n phase: \"generateText\" | \"streamText.textStream\",\n modelType: string,\n modelId: string,\n endpoint: string,\n error: unknown\n): void {\n logger.error(\n {\n src: \"plugin:ollama:text\",\n phase,\n modelType,\n modelId,\n ollamaApiEndpoint: endpoint,\n ...summarizeAiSdkErrorForLogs(error),\n },\n `[Ollama] ${phase} failed (${modelType}, model=${modelId}). See ollamaResponseBody / attemptErrors for Ollama’s JSON (e.g. insufficient RAM, model missing).`\n );\n}\n\n/**\n * Builds the AI SDK `output` spec for structured generation.\n * Why accept a pre-built object: some tests/advanced callers pass a full output descriptor\n * (`responseFormat` + `parseCompleteOutput`); otherwise we wrap JSON Schema with `Output.object`.\n */\nfunction buildStructuredOutput(responseSchema: unknown): NativeTextOutput {\n if (\n responseSchema &&\n typeof responseSchema === \"object\" &&\n \"responseFormat\" in responseSchema &&\n \"parseCompleteOutput\" in responseSchema\n ) {\n return responseSchema as NativeTextOutput;\n }\n\n const schemaOptions =\n responseSchema && typeof responseSchema === \"object\" && \"schema\" in responseSchema\n ? (responseSchema as { schema: unknown; name?: string; description?: string })\n : { schema: responseSchema };\n\n return Output.object({\n schema: jsonSchema(schemaOptions.schema as JSONSchema7),\n ...(schemaOptions.name ? { name: schemaOptions.name } : {}),\n ...(schemaOptions.description ? { description: schemaOptions.description } : {}),\n }) as NativeTextOutput;\n}\n\n/**\n * Eliza `useModel` returns a string for text types. The AI SDK may place parsed JSON in\n * `result.output` or leave JSON in `result.text`. Why stringify objects: downstream parsers\n * (e.g. FACT_EXTRACTOR) accept either a string slice or a plain object; a single JSON string\n * keeps the handler contract simple and matches older provider behavior.\n */\nfunction serializeStructuredGenerateTextResult(result: { text: string; output: unknown }): string {\n if (result.output !== undefined && result.output !== null) {\n return typeof result.output === \"string\" ? result.output : JSON.stringify(result.output);\n }\n const trimmed = result.text?.trim() ?? \"\";\n if (trimmed) return trimmed;\n throw new Error(\"[Ollama] Structured generation returned no text or output.\");\n}\n\n/**\n * Builds the object core’s v5 parsers read from `useModel` when the call used tools/messages\n * without structured `output`. Runtime value is a `GenerateTextResult`; TypeScript still types\n * the handler as `string` for historical reasons—same pattern as OpenRouter/OpenAI.\n *\n * **`providerMetadata.modelName`:** Lets trajectory / debug code attribute the call without\n * parsing Ollama response bodies again.\n */\nfunction buildNativeResultCast(\n result: Awaited<ReturnType<typeof generateText>>,\n modelName: string,\n usage: TokenUsage\n): string {\n const payload: GenerateTextResult = {\n text: result.text,\n toolCalls: mapAiSdkToolCallsToCore(result.toolCalls as unknown[] | undefined),\n finishReason: String(result.finishReason ?? \"\"),\n usage,\n providerMetadata: { modelName },\n };\n return payload as NativeTextModelResult;\n}\n\ntype StreamTextParams = Parameters<typeof streamText>[0];\n\n/**\n * Plain streaming path for Ollama (`streamText` from the AI SDK).\n *\n * **When:** `params.stream` is true and the request has no structured `output`, tools, or\n * `toolChoice`.\n *\n * **Why this exists:** `AgentRuntime.useModel` only forwards token chunks to SSE when the\n * handler return value satisfies **`isTextStreamResult`** (`textStream`, `text`, `usage`,\n * `finishReason` — see `packages/core/src/runtime.ts`). A bare **`string`** skips that branch:\n * the model still runs, but the UI gets no chunks (“no streamed text”).\n *\n * **Usage / `MODEL_USED`:** We resolve **`streamResult.usage`** after the stream completes,\n * merge with **`streamResult.text`** for fallback estimation, then **`emitModelUsed`** once.\n * **Why await `text` inside the usage hook:** Ollama may omit partial usage until the full\n * completion is known; pairing with final text keeps estimates sane when the provider omits\n * token fields.\n *\n * **`textStream` wrapper:** The async generator forwards chunks and, on successful completion,\n * awaits **`usagePromise`** in a **`finally`** block so consumers that only drain **`textStream`**\n * still trigger accounting—mirroring **`plugin-openrouter`**’s pattern.\n */\nfunction buildOllamaStreamTextResult(args: {\n runtime: IAgentRuntime;\n modelType: TextModelType;\n model: string;\n /** Resolved `OLLAMA_API_ENDPOINT` — logged when `textStream` fails (errors often happen here, outside `handleTextWithModelType`’s try/catch). */\n endpoint: string;\n streamParams: StreamTextParams;\n promptForEstimate: string;\n}): TextStreamResult {\n const streamResult = streamText(args.streamParams);\n // Keep SDK promises settled-or-empty so stream failures surface through the\n // textStream generator rather than as unhandled rejections on side promises.\n const textPromise = Promise.resolve(streamResult.text).catch(() => \"\");\n const finishReasonPromise = Promise.resolve(streamResult.finishReason).catch(\n () => undefined\n ) as Promise<string | undefined>;\n\n const usagePromise = Promise.resolve(streamResult.usage)\n .then(async (usage) => {\n const fullText = await textPromise;\n const normalized =\n normalizeTokenUsage(usage) ?? estimateUsage(args.promptForEstimate, fullText);\n emitModelUsed(args.runtime, args.modelType, args.model, normalized);\n return normalized;\n })\n .catch(() => undefined);\n\n async function* textStreamWithUsage(): AsyncIterable<string> {\n let completed = false;\n try {\n for await (const chunk of streamResult.textStream) {\n yield chunk;\n }\n completed = true;\n } catch (streamErr) {\n logOllamaTextFailure(\n \"streamText.textStream\",\n String(args.modelType),\n args.model,\n args.endpoint,\n streamErr\n );\n throw streamErr;\n } finally {\n if (completed) {\n await usagePromise.catch(() => undefined);\n }\n }\n }\n\n return {\n textStream: textStreamWithUsage(),\n text: textPromise,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n };\n}\n\n/** Serialized tool `arguments` for v5 `parseMessageHandlerOutput` (expects JSON text). */\nfunction stringifyPlannerToolArgs(arguments_: ToolCall[\"arguments\"]): string {\n if (typeof arguments_ === \"string\") {\n return arguments_;\n }\n return JSON.stringify(arguments_);\n}\n\ntype OllamaStreamTextWithToolsResult = TextStreamResult & {\n /** Mapped tool calls after the stream completes (parity with OpenAI `streamText` + tools). */\n toolCalls?: Promise<ToolCall[]>;\n};\n\n/**\n * `streamText` when the request includes native tools and `stream: true`.\n *\n * **Why a separate builder from `buildOllamaStreamTextResult`:** Ollama’s chat model supports\n * tools on the streaming wire; `generateText` would buffer the full completion and skip token\n * streaming entirely.\n *\n * **Planner types (`RESPONSE_HANDLER`, `ACTION_PLANNER`):** `useModel`’s streaming path sets\n * `result` to the concatenation of **`textStream` chunks only** — it never awaits our **`text`**\n * promise. Core then calls **`parseMessageHandlerOutput(fullText)`**, which expects a single JSON\n * blob of the plan. We therefore **drain** the SDK `textStream` without yielding those deltas (so\n * they are not prepended to the plan JSON) and **yield one chunk**: the first mapped tool’s\n * **`arguments`** as JSON text. **Why:** interleaving arbitrary model text with plan JSON breaks\n * `JSON.parse` on the accumulated string.\n *\n * **Other text model types:** Forward every SDK text chunk; `text` resolves to the final model\n * text. **`toolCalls`** is still attached for callers that read it from the result object.\n */\nfunction buildOllamaStreamWithToolsResult(args: {\n runtime: IAgentRuntime;\n modelType: TextModelType;\n model: string;\n /** Resolved `OLLAMA_API_ENDPOINT` — logged when streaming fails (core consumes `textStream` after the handler returns). */\n endpoint: string;\n streamParams: StreamTextParams;\n promptForEstimate: string;\n}): OllamaStreamTextWithToolsResult {\n const streamResult = streamText(args.streamParams);\n const sdkTextPromise = Promise.resolve(streamResult.text).catch(() => \"\");\n const finishReasonPromise = Promise.resolve(streamResult.finishReason).catch(\n () => undefined\n ) as Promise<string | undefined>;\n\n const toolCallsPromise = Promise.resolve(streamResult.toolCalls)\n .then((calls) => mapAiSdkToolCallsToCore(calls as unknown[] | undefined))\n .catch(() => [] as ToolCall[]);\n\n const usagePromise = Promise.resolve(streamResult.usage)\n .then(async (usage) => {\n const fullText = await sdkTextPromise;\n const normalized =\n normalizeTokenUsage(usage) ?? estimateUsage(args.promptForEstimate, fullText);\n emitModelUsed(args.runtime, args.modelType, args.model, normalized);\n return normalized;\n })\n .catch(() => undefined);\n\n const isNativePlannerType =\n args.modelType === RESPONSE_HANDLER_MODEL_TYPE || args.modelType === ACTION_PLANNER_MODEL_TYPE;\n\n const textPromise: Promise<string> = isNativePlannerType\n ? toolCallsPromise.then(async (mapped) => {\n const first = mapped[0];\n if (first) {\n return stringifyPlannerToolArgs(first.arguments);\n }\n return sdkTextPromise;\n })\n : sdkTextPromise;\n\n async function* textStreamWithUsage(): AsyncIterable<string> {\n let completed = false;\n try {\n if (isNativePlannerType) {\n for await (const _ of streamResult.textStream) {\n // Drain text deltas; only the trailing plan JSON chunk is yielded (see module comment).\n }\n const mapped = await toolCallsPromise;\n const first = mapped[0];\n if (first) {\n yield stringifyPlannerToolArgs(first.arguments);\n }\n } else {\n for await (const chunk of streamResult.textStream) {\n yield chunk;\n }\n }\n completed = true;\n } catch (streamErr) {\n logOllamaTextFailure(\n \"streamText.textStream\",\n String(args.modelType),\n args.model,\n args.endpoint,\n streamErr\n );\n throw streamErr;\n } finally {\n if (completed) {\n await usagePromise.catch(() => undefined);\n }\n }\n }\n\n return {\n textStream: textStreamWithUsage(),\n text: textPromise,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n toolCalls: toolCallsPromise,\n };\n}\n\ntype TextModelType =\n | typeof TEXT_NANO_MODEL_TYPE\n | typeof ModelType.TEXT_SMALL\n | typeof TEXT_MEDIUM_MODEL_TYPE\n | typeof ModelType.TEXT_LARGE\n | typeof TEXT_MEGA_MODEL_TYPE\n | typeof RESPONSE_HANDLER_MODEL_TYPE\n | typeof ACTION_PLANNER_MODEL_TYPE;\n\nfunction getModelNameForType(runtime: IAgentRuntime, modelType: TextModelType): string {\n switch (modelType) {\n case TEXT_NANO_MODEL_TYPE:\n return getNanoModel(runtime);\n case TEXT_MEDIUM_MODEL_TYPE:\n return getMediumModel(runtime);\n case ModelType.TEXT_SMALL:\n return getSmallModel(runtime);\n case ModelType.TEXT_LARGE:\n return getLargeModel(runtime);\n case TEXT_MEGA_MODEL_TYPE:\n return getMegaModel(runtime);\n case RESPONSE_HANDLER_MODEL_TYPE:\n return getResponseHandlerModel(runtime);\n case ACTION_PLANNER_MODEL_TYPE:\n return getActionPlannerModel(runtime);\n default:\n return getLargeModel(runtime);\n }\n}\n\n/**\n * Shared path for all text model types.\n *\n * **Structured output:** `OLLAMA_DISABLE_STRUCTURED_OUTPUT` strips `responseSchema` so plain\n * text runs—**why:** operators can recover broken local models without redeploying code;\n * callers that require JSON may then fail validation (intentional trade-off).\n *\n * **Streaming vs `stream` flag:** Plain chat (`stream` true, no tools / `toolChoice` / schema)\n * returns **`TextStreamResult`** from **`streamText`**. **`stream` + tools** uses\n * **`buildOllamaStreamWithToolsResult`**. **`stream` + `responseSchema`** without tools still\n * uses **`generateText`** — log at **debug**. **`stream` + `toolChoice`** without a resolved\n * tool set uses **`generateText`** — log at **debug**; **why:** `streamText` requires tools on\n * the wire; this path is unexpected from core.\n *\n * **Tools vs schema:** If both are present, tools win and structured output is omitted for\n * that request—**why:** v5 Stage 1 requires tools; combining `Output.object` with tools in one\n * `generateText` is not a portable contract across Ollama models.\n */\nasync function handleTextWithModelType(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n const extended = params as GenerateTextParamsWithNativeOptions;\n const structuredDisabled = isOllamaStructuredOutputDisabled(runtime);\n let responseSchema: unknown = extended.responseSchema;\n if (structuredDisabled && extended.responseSchema) {\n logger.debug(\n \"[Ollama] OLLAMA_DISABLE_STRUCTURED_OUTPUT is set — ignoring responseSchema for this call.\"\n );\n responseSchema = undefined;\n }\n\n const tools = normalizeNativeTools(extended.tools);\n\n const {\n prompt,\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n } = params;\n\n let modelIdForLog = \"\";\n try {\n const baseURL = getBaseURL(runtime);\n const customFetch = runtime.fetch ?? undefined;\n const ollama = createOllama({\n fetch: customFetch,\n baseURL,\n });\n\n const model = getModelNameForType(runtime, modelType);\n modelIdForLog = model;\n logger.log(`[Ollama] Using ${modelType} model: ${model}`);\n await ensureModelAvailable(model, baseURL, customFetch);\n\n const system = resolveEffectiveSystemPrompt({\n params,\n fallback: buildCanonicalSystemPrompt({ character: runtime.character }),\n });\n\n let outputSpec: NativeTextOutput | undefined =\n responseSchema !== undefined && responseSchema !== null\n ? buildStructuredOutput(responseSchema)\n : undefined;\n\n if (tools && outputSpec) {\n // Stage-1-style calls need native tools; do not send `output` in the same request.\n logger.debug(\n \"[Ollama] tools and responseSchema both present — omitting structured output for this call.\"\n );\n outputSpec = undefined;\n }\n\n const wireRaw = dropDuplicateLeadingSystemMessage(\n extended.messages as Parameters<typeof dropDuplicateLeadingSystemMessage>[0],\n system\n );\n const normalizedMessages = normalizeNativeMessages(wireRaw);\n const hasChatMessages = Array.isArray(normalizedMessages) && normalizedMessages.length > 0;\n const toolChoice = tools ? normalizeToolChoice(extended.toolChoice) : undefined;\n\n // After `outputSpec` is final (including tools-vs-schema): native return shape when the\n // call used chat messages, tools, toolChoice, or structured output — matches OpenRouter.\n const shouldReturnNative = Boolean(\n hasChatMessages || tools || extended.toolChoice || outputSpec !== undefined\n );\n\n const renderedPrompt = hasChatMessages\n ? \"\"\n : (renderChatMessagesForPrompt(params.messages, {\n omitDuplicateSystem: system,\n }) ??\n prompt ??\n \"\");\n\n const promptOrMessages = hasChatMessages\n ? { messages: normalizedMessages }\n : { prompt: renderedPrompt };\n\n const resolvedStopSequences =\n Array.isArray(params.stopSequences) && params.stopSequences.length > 0\n ? params.stopSequences\n : undefined;\n\n const promptForUsageEstimate = hasChatMessages\n ? JSON.stringify(normalizedMessages)\n : renderedPrompt;\n\n const baseGenerateArgs = {\n model: ollama(model) as LanguageModel,\n ...promptOrMessages,\n system,\n temperature,\n maxOutputTokens: maxTokens,\n frequencyPenalty,\n presencePenalty,\n ...(resolvedStopSequences ? { stopSequences: resolvedStopSequences } : {}),\n ...(tools ? { tools, ...(toolChoice ? { toolChoice } : {}) } : {}),\n ...(outputSpec ? { output: outputSpec } : {}),\n };\n\n // Streaming branches (order matters):\n // 1) tools + stream → streamText+tools (Ollama v2 supports tools on streaming /api/chat).\n // 2) stream, no tools, no toolChoice → plain streamText → TextStreamResult for SSE.\n // 3) stream + schema only → generateText below + debug (structured format not on streamText).\n // 4) stream + toolChoice but no ToolSet → generateText below + debug (invalid streamText shape).\n if (params.stream) {\n if (tools) {\n return buildOllamaStreamWithToolsResult({\n runtime,\n modelType,\n model,\n endpoint: baseURL,\n streamParams: baseGenerateArgs as StreamTextParams,\n promptForEstimate: promptForUsageEstimate,\n });\n }\n if (!extended.toolChoice) {\n if (!outputSpec) {\n return buildOllamaStreamTextResult({\n runtime,\n modelType,\n model,\n endpoint: baseURL,\n streamParams: baseGenerateArgs as StreamTextParams,\n promptForEstimate: promptForUsageEstimate,\n });\n }\n logger.debug(\n { src: \"plugin:ollama:text\", modelType },\n \"[Ollama] stream=true with responseSchema (no tools) — using generateText. Why: ollama-ai-provider-v2 does not support structured JSON output on the streamText path for this adapter.\"\n );\n } else {\n logger.debug(\n { src: \"plugin:ollama:text\", modelType },\n \"[Ollama] stream=true with toolChoice but no tools on wire — using generateText. Why: streamText+tools requires a ToolSet; callers should pass tools alongside toolChoice.\"\n );\n }\n }\n\n const result = await generateText(baseGenerateArgs);\n\n const usage =\n normalizeTokenUsage(result.usage) ?? estimateUsage(promptForUsageEstimate, result.text);\n\n emitModelUsed(runtime, modelType, model, usage);\n\n if (shouldReturnNative) {\n if (outputSpec !== undefined) {\n return serializeStructuredGenerateTextResult(result);\n }\n return buildNativeResultCast(result, model, usage);\n }\n\n return result.text;\n } catch (error) {\n let endpoint = \"\";\n try {\n endpoint = getBaseURL(runtime);\n } catch {\n /* ignore */\n }\n logOllamaTextFailure(\n \"generateText\",\n String(modelType),\n modelIdForLog || \"(unknown)\",\n endpoint,\n error\n );\n return \"Error generating text. Please try again later.\";\n }\n}\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, ModelType.TEXT_SMALL, params);\n}\n\nexport async function handleTextNano(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, TEXT_NANO_MODEL_TYPE, params);\n}\n\nexport async function handleTextMedium(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, TEXT_MEDIUM_MODEL_TYPE, params);\n}\n\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, ModelType.TEXT_LARGE, params);\n}\n\nexport async function handleTextMega(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, TEXT_MEGA_MODEL_TYPE, params);\n}\n\nexport async function handleResponseHandler(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, RESPONSE_HANDLER_MODEL_TYPE, params);\n}\n\nexport async function handleActionPlanner(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return handleTextWithModelType(runtime, ACTION_PLANNER_MODEL_TYPE, params);\n}\n",
|
|
11
|
+
"/**\n * AI SDK wiring for Ollama text generation (`models/text.ts`).\n *\n * ## Why this module is separate\n *\n * Eliza’s `GenerateTextParams` carry **`messages`**, **`tools`**, and **`toolChoice`** in loose\n * shapes (protobuf-era typing, plus `unknown` extensions). The Vercel **`generateText`** and\n * **`streamText`** APIs expect **`ModelMessage[]`**, **`ToolSet`**, and **`ToolChoice<ToolSet>`**\n * on the native path. Isolating the\n * translation here keeps `text.ts` focused on orchestration and matches how **`plugin-openai`**\n * structures the same problem—without pulling Cerebras-only schema/name sanitization into\n * Ollama (local models do not share that grammar compiler).\n *\n * ## Exported helpers\n *\n * - **`normalizeNativeTools`** — Array → `ToolSet` with `jsonSchema(...)`; object → pass-through\n * so advanced callers can supply a pre-built `ToolSet`. **Why both:** core usually sends\n * `ToolDefinition[]`, but tests and future code paths may send an SDK-native object.\n * - **`normalizeNativeMessages`** — Maps Eliza/chat-shaped records into `ModelMessage[]` so\n * assistant tool calls and tool results round-trip. **Why:** v5 Stage 1 is not a single flat\n * `prompt` string; dropping this step would flatten or drop tool history incorrectly.\n * - **`normalizeToolChoice`** — Accepts string enums and object-shaped choices from core.\n * - **`parseJsonIfPossible`** — Best-effort JSON parse for string tool arguments; returns\n * non-strings unchanged so **`null` / objects** are not coerced to `\"\"` (which would confuse\n * downstream argument parsers).\n * - **`mapAiSdkToolCallsToCore`** — Renames AI SDK fields (`toolCallId`, `toolName`, `input`)\n * into Eliza **`ToolCall`** (`id`, `name`, `arguments`) so `parseMessageHandlerNativeToolCall`\n * and trajectory export see one consistent shape across providers.\n */\n\nimport type { JsonValue, ToolCall } from \"@elizaos/core\";\nimport {\n type JSONSchema7,\n jsonSchema,\n type ModelMessage,\n type ToolChoice,\n type ToolSet,\n type UserContent,\n} from \"ai\";\n\n/** Converts Eliza `ToolDefinition[]` or an AI SDK `ToolSet` into the shape `generateText` expects. */\nexport function normalizeNativeTools(tools: unknown): ToolSet | undefined {\n if (!tools) {\n return undefined;\n }\n\n if (!Array.isArray(tools)) {\n return tools as ToolSet;\n }\n\n const toolSet: Record<string, unknown> = {};\n\n for (const rawTool of tools) {\n const tool = asRecord(rawTool);\n const functionTool = asRecord(tool.function);\n const name = firstString(tool.name, functionTool.name);\n\n if (!name) {\n throw new Error(\"[Ollama] Native tool definition is missing a name.\");\n }\n\n const description = firstString(tool.description, functionTool.description);\n const rawSchema =\n tool.parameters ?? functionTool.parameters ?? ({ type: \"object\" } satisfies JSONSchema7);\n const inputSchema = sanitizeJsonSchema(rawSchema, true);\n\n toolSet[name] = {\n ...(description ? { description } : {}),\n inputSchema: jsonSchema(inputSchema as JSONSchema7),\n };\n }\n\n return Object.keys(toolSet).length > 0 ? (toolSet as ToolSet) : undefined;\n}\n\n/** Converts Eliza `ChatMessage[]`-like rows into `ModelMessage[]` for `generateText({ messages })`. */\nexport function normalizeNativeMessages(messages: unknown): ModelMessage[] | undefined {\n if (!Array.isArray(messages)) {\n return undefined;\n }\n\n return messages.map((message) => normalizeNativeMessage(message));\n}\n\n/** Maps core / OpenAI-style tool choice objects onto AI SDK `ToolChoice`. */\nexport function normalizeToolChoice(toolChoice: unknown): ToolChoice<ToolSet> | undefined {\n if (!toolChoice) {\n return undefined;\n }\n\n if (\n typeof toolChoice === \"string\" &&\n (toolChoice === \"auto\" || toolChoice === \"none\" || toolChoice === \"required\")\n ) {\n return toolChoice;\n }\n\n const choice = asRecord(toolChoice);\n if (choice.type === \"tool\") {\n if (typeof choice.toolName === \"string\" && choice.toolName.length > 0) {\n return toolChoice as ToolChoice<ToolSet>;\n }\n const toolName = firstString(choice.toolName, choice.name);\n if (toolName) {\n return { type: \"tool\", toolName };\n }\n }\n\n if (choice.type === \"function\") {\n const fn = asRecord(choice.function);\n const toolName = firstString(fn.name);\n if (toolName) {\n return { type: \"tool\", toolName };\n }\n }\n\n const namedTool = firstString(choice.name);\n if (namedTool) {\n return { type: \"tool\", toolName: namedTool };\n }\n\n return toolChoice as ToolChoice<ToolSet>;\n}\n\n/** Parses JSON strings; returns non-strings unchanged (including `null` / `undefined`). */\nexport function parseJsonIfPossible(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value;\n }\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n/** Maps AI SDK `generateText` tool call entries to Eliza `ToolCall` records for core parsers. */\nexport function mapAiSdkToolCallsToCore(toolCalls: unknown[] | undefined): ToolCall[] {\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) {\n return [];\n }\n\n const out: ToolCall[] = [];\n for (const tc of toolCalls) {\n const mapped = mapOneToolCall(tc);\n if (mapped) {\n out.push(mapped);\n }\n }\n return out;\n}\n\nfunction mapOneToolCall(tc: unknown): ToolCall | null {\n const r = asRecord(tc);\n const id = String(firstString(r.toolCallId, r.id) ?? \"\");\n const name = String(firstString(r.toolName, r.name) ?? \"\").trim();\n if (!name) {\n return null;\n }\n\n const rawInput = r.input ?? r.arguments ?? r.args;\n let args: Record<string, JsonValue> | string;\n if (typeof rawInput === \"string\") {\n const parsed = parseJsonIfPossible(rawInput);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n args = parsed as Record<string, JsonValue>;\n } else {\n args = rawInput;\n }\n } else if (rawInput && typeof rawInput === \"object\" && !Array.isArray(rawInput)) {\n args = rawInput as Record<string, JsonValue>;\n } else {\n args = {};\n }\n\n return { id, name, arguments: args };\n}\n\nfunction normalizeNativeMessage(message: unknown): ModelMessage {\n const raw = asRecord(message);\n const providerOptions = asOptionalRecord(raw.providerOptions);\n\n if (raw.role === \"system\") {\n return {\n role: \"system\",\n content: stringifyMessageContent(raw.content),\n ...(providerOptions ? { providerOptions } : {}),\n } as ModelMessage;\n }\n\n if (raw.role === \"assistant\") {\n return {\n role: \"assistant\",\n content: normalizeAssistantContent(raw),\n ...(providerOptions ? { providerOptions } : {}),\n } as ModelMessage;\n }\n\n if (raw.role === \"tool\") {\n return {\n role: \"tool\",\n content: normalizeToolContent(raw),\n ...(providerOptions ? { providerOptions } : {}),\n } as ModelMessage;\n }\n\n return {\n role: \"user\",\n content: normalizeUserContent(raw.content),\n ...(providerOptions ? { providerOptions } : {}),\n } as ModelMessage;\n}\n\nfunction normalizeAssistantContent(message: Record<string, unknown>): unknown {\n const toolCalls = Array.isArray(message.toolCalls) ? message.toolCalls : [];\n\n if (toolCalls.length === 0) {\n if (Array.isArray(message.content) || typeof message.content === \"string\") {\n return message.content;\n }\n return \"\";\n }\n\n const parts: unknown[] = [];\n if (typeof message.content === \"string\" && message.content.length > 0) {\n parts.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n parts.push(...message.content);\n }\n\n for (const toolCall of toolCalls) {\n const rawCall = asRecord(toolCall);\n const rawFunction = asRecord(rawCall.function);\n const toolCallId = firstString(rawCall.toolCallId, rawCall.id);\n const toolName = firstString(rawCall.toolName, rawCall.name, rawFunction.name);\n\n if (!toolCallId || !toolName) {\n continue;\n }\n\n parts.push({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input: parseToolCallInput(rawCall, rawFunction),\n });\n }\n\n return parts;\n}\n\nfunction normalizeToolContent(message: Record<string, unknown>): unknown[] {\n if (Array.isArray(message.content)) {\n return message.content;\n }\n\n const toolCallId = firstString(message.toolCallId, message.id) ?? \"tool-call\";\n const toolName = firstString(message.toolName, message.name) ?? \"tool\";\n const parsed = parseJsonIfPossible(message.content);\n\n return [\n {\n type: \"tool-result\",\n toolCallId,\n toolName,\n output:\n typeof parsed === \"string\"\n ? { type: \"text\", value: parsed }\n : { type: \"json\", value: parsed },\n },\n ];\n}\n\nfunction normalizeUserContent(content: unknown): UserContent {\n if (Array.isArray(content)) {\n return content as UserContent;\n }\n return stringifyMessageContent(content);\n}\n\nfunction stringifyMessageContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n if (content == null) {\n return \"\";\n }\n return typeof content === \"object\" ? JSON.stringify(content) : String(content);\n}\n\nfunction parseToolCallInput(\n rawCall: Record<string, unknown>,\n rawFunction: Record<string, unknown>\n): unknown {\n if (\"input\" in rawCall) {\n return rawCall.input;\n }\n return parseJsonIfPossible(rawCall.arguments ?? rawFunction.arguments ?? {});\n}\n\nfunction sanitizeJsonSchema(schema: unknown, isRoot = false): JSONSchema7 {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return { type: \"object\" };\n }\n\n const record = schema as Record<string, unknown>;\n const sanitized: Record<string, unknown> = { ...record };\n\n if (typeof sanitized.type !== \"string\") {\n const inferredType = inferJsonSchemaType(sanitized, isRoot);\n if (inferredType) {\n sanitized.type = inferredType;\n }\n }\n\n if (\n sanitized.properties &&\n typeof sanitized.properties === \"object\" &&\n !Array.isArray(sanitized.properties)\n ) {\n const properties: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(sanitized.properties as Record<string, unknown>)) {\n properties[key] = sanitizeJsonSchema(value);\n }\n sanitized.properties = properties;\n }\n\n if (sanitized.items) {\n sanitized.items = Array.isArray(sanitized.items)\n ? sanitized.items.map((item) => sanitizeJsonSchema(item))\n : sanitizeJsonSchema(sanitized.items);\n }\n\n for (const unionKey of [\"anyOf\", \"oneOf\", \"allOf\"] as const) {\n const value = sanitized[unionKey];\n if (Array.isArray(value)) {\n sanitized[unionKey] = value.map((item) => sanitizeJsonSchema(item));\n }\n }\n\n return sanitized as JSONSchema7;\n}\n\nfunction inferJsonSchemaType(schema: Record<string, unknown>, isRoot: boolean): string | undefined {\n if (\"items\" in schema && !(\"properties\" in schema)) {\n return \"array\";\n }\n if (\n \"properties\" in schema ||\n \"required\" in schema ||\n \"additionalProperties\" in schema ||\n isRoot\n ) {\n return \"object\";\n }\n if (Array.isArray(schema.enum) && schema.enum.length > 0) {\n const types = new Set(schema.enum.map((value) => typeof value));\n if (types.size === 1) {\n const [type] = [...types];\n if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n return type;\n }\n }\n }\n return undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asOptionalRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction firstString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.length > 0) {\n return value;\n }\n }\n return undefined;\n}\n",
|
|
12
|
+
"import { ollamaPlugin } from \"./plugin\";\n\nexport * from \"./types\";\nexport * from \"./utils/config\";\nexport { ollamaPlugin };\n\nconst defaultOllamaPlugin = ollamaPlugin;\n\nexport default defaultOllamaPlugin;\n"
|
|
11
13
|
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "A63C5405E663BB1264756E2164756E21",
|
|
14
16
|
"names": []
|
|
15
17
|
}
|