universal-llm-client 4.3.0 → 4.5.0
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/CHANGELOG.md +27 -24
- package/README.md +60 -11
- package/dist/ai-model.d.ts +12 -1
- package/dist/ai-model.d.ts.map +1 -1
- package/dist/ai-model.js +36 -1
- package/dist/ai-model.js.map +1 -1
- package/dist/auditor.js.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/gemma-channel.d.ts +14 -0
- package/dist/gemma-channel.d.ts.map +1 -0
- package/dist/gemma-channel.js +38 -0
- package/dist/gemma-channel.js.map +1 -0
- package/dist/gemma-diffusion.d.ts +49 -0
- package/dist/gemma-diffusion.d.ts.map +1 -0
- package/dist/gemma-diffusion.js +147 -0
- package/dist/gemma-diffusion.js.map +1 -0
- package/dist/http.d.ts +4 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +14 -1
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +163 -7
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/mcp.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +28 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/google.d.ts +22 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +223 -13
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.d.ts +2 -0
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +59 -30
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +14 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +200 -22
- package/dist/providers/openai.js.map +1 -1
- package/dist/router.d.ts +2 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +4 -0
- package/dist/router.js.map +1 -1
- package/dist/stream-decoder.d.ts +12 -0
- package/dist/stream-decoder.d.ts.map +1 -1
- package/dist/stream-decoder.js +182 -5
- package/dist/stream-decoder.js.map +1 -1
- package/dist/structured-output.js.map +1 -1
- package/dist/thinking.d.ts +36 -0
- package/dist/thinking.d.ts.map +1 -0
- package/dist/thinking.js +52 -0
- package/dist/thinking.js.map +1 -0
- package/dist/tools.js.map +1 -1
- package/dist/zod-adapter.js.map +1 -1
- package/package.json +4 -1
- package/src/ai-model.ts +400 -0
- package/src/auditor.ts +213 -0
- package/src/client.ts +402 -0
- package/src/debug/debug-google-streaming.ts +97 -0
- package/src/debug/debug-tool-execution.ts +86 -0
- package/src/debug/test-lmstudio-tools.ts +155 -0
- package/src/demos/README.md +47 -0
- package/src/demos/basic/universal-llm-examples.ts +161 -0
- package/src/demos/diffusion-gemma/.env +29 -0
- package/src/demos/diffusion-gemma/.env.example +27 -0
- package/src/demos/diffusion-gemma/CLAUDE.md +95 -0
- package/src/demos/diffusion-gemma/README.md +59 -0
- package/src/demos/diffusion-gemma/canvas.ts +1606 -0
- package/src/demos/diffusion-gemma/docker-compose.yml +29 -0
- package/src/demos/diffusion-gemma/probe-stream.ts +51 -0
- package/src/demos/diffusion-gemma/probe-tools.ts +55 -0
- package/src/demos/diffusion-gemma/server.ts +1205 -0
- package/src/demos/diffusion-gemma/start-vllm.sh +98 -0
- package/src/demos/mcp/astrid-memory-demo.ts +295 -0
- package/src/demos/mcp/astrid-persona-memory.ts +357 -0
- package/src/demos/mcp/mcp-mongodb-demo.ts +275 -0
- package/src/demos/mcp/simple-astrid-memory.ts +148 -0
- package/src/demos/mcp/simple-mcp-demo.ts +68 -0
- package/src/demos/mcp/working-mcp-demo.ts +62 -0
- package/src/demos/model-alias-demo.ts +0 -0
- package/src/demos/tools/RAG_MEMORY_INTEGRATION.md +267 -0
- package/src/demos/tools/astrid-memory-demo.ts +270 -0
- package/src/demos/tools/astrid-production-memory-clean.ts +785 -0
- package/src/demos/tools/astrid-production-memory.ts +558 -0
- package/src/demos/tools/basic-translation-test.ts +66 -0
- package/src/demos/tools/chromadb-similarity-tuning.ts +390 -0
- package/src/demos/tools/clean-multilingual-conversation.ts +209 -0
- package/src/demos/tools/clean-translation-test.ts +119 -0
- package/src/demos/tools/clean-universal-multilingual-test.ts +131 -0
- package/src/demos/tools/complete-rag-demo.ts +369 -0
- package/src/demos/tools/complete-tool-demo.ts +132 -0
- package/src/demos/tools/demo-tool-calling.ts +124 -0
- package/src/demos/tools/dynamic-language-switching-test.ts +251 -0
- package/src/demos/tools/hybrid-thinking-test.ts +154 -0
- package/src/demos/tools/memory-integration-test.ts +420 -0
- package/src/demos/tools/multilingual-memory-system.ts +802 -0
- package/src/demos/tools/ondemand-translation-demo.ts +655 -0
- package/src/demos/tools/production-tool-demo.ts +245 -0
- package/src/demos/tools/revolutionary-multilingual-test.ts +151 -0
- package/src/demos/tools/rigorous-language-analysis.ts +218 -0
- package/src/demos/tools/test-universal-memory-system.ts +126 -0
- package/src/demos/tools/translation-integration-guide.ts +346 -0
- package/src/demos/tools/universal-memory-system.ts +560 -0
- package/src/gemma-channel.ts +47 -0
- package/src/gemma-diffusion.ts +167 -0
- package/src/http.ts +261 -0
- package/src/index.ts +180 -0
- package/src/interfaces.ts +843 -0
- package/src/mcp.ts +345 -0
- package/src/providers/anthropic.ts +796 -0
- package/src/providers/google.ts +840 -0
- package/src/providers/index.ts +8 -0
- package/src/providers/ollama.ts +503 -0
- package/src/providers/openai.ts +587 -0
- package/src/router.ts +785 -0
- package/src/stream-decoder.ts +535 -0
- package/src/structured-output.ts +759 -0
- package/src/test-scripts/test-advanced-tools.ts +310 -0
- package/src/test-scripts/test-google-deep-research.ts +33 -0
- package/src/test-scripts/test-google-streaming-enhanced.ts +147 -0
- package/src/test-scripts/test-google-streaming.ts +63 -0
- package/src/test-scripts/test-google-system-prompt-comprehensive.ts +189 -0
- package/src/test-scripts/test-google-thinking.ts +46 -0
- package/src/test-scripts/test-mcp-config.ts +28 -0
- package/src/test-scripts/test-mcp-connection.ts +29 -0
- package/src/test-scripts/test-system-message-positions.ts +163 -0
- package/src/test-scripts/test-system-prompt-improvement-demo.ts +83 -0
- package/src/test-scripts/test-tool-calling.ts +231 -0
- package/src/test-scripts/test-vllm-qwen36.ts +256 -0
- package/src/tests/ai-model.test.ts +1614 -0
- package/src/tests/auditor.test.ts +224 -0
- package/src/tests/gemma-diffusion.test.ts +115 -0
- package/src/tests/http.test.ts +200 -0
- package/src/tests/interfaces.test.ts +117 -0
- package/src/tests/providers/anthropic.test.ts +118 -0
- package/src/tests/providers/google.test.ts +841 -0
- package/src/tests/providers/ollama.test.ts +1034 -0
- package/src/tests/providers/openai.test.ts +1511 -0
- package/src/tests/router.test.ts +254 -0
- package/src/tests/stream-decoder.test.ts +263 -0
- package/src/tests/structured-output.test.ts +1450 -0
- package/src/tests/thinking.test.ts +65 -0
- package/src/tests/tools.test.ts +175 -0
- package/src/thinking.ts +73 -0
- package/src/tools.ts +246 -0
- package/src/zod-adapter.ts +72 -0
package/dist/providers/ollama.js
CHANGED
|
@@ -11,9 +11,11 @@
|
|
|
11
11
|
* - VAL-PROVIDER-OLLAMA-004: format "json" vs schema modes
|
|
12
12
|
*/
|
|
13
13
|
import { BaseLLMClient } from '../client.js';
|
|
14
|
+
import { resolveThinking } from '../thinking.js';
|
|
14
15
|
import { httpRequest, httpStream, parseNDJSON, buildHeaders } from '../http.js';
|
|
15
16
|
import { StandardChatDecoder } from '../stream-decoder.js';
|
|
16
17
|
import { normalizeJsonSchema, getJsonSchemaFromConfig, } from '../structured-output.js';
|
|
18
|
+
import { extractGemmaThoughtChannels } from '../gemma-channel.js';
|
|
17
19
|
export class OllamaClient extends BaseLLMClient {
|
|
18
20
|
constructor(options, auditor) {
|
|
19
21
|
super({
|
|
@@ -39,7 +41,8 @@ export class OllamaClient extends BaseLLMClient {
|
|
|
39
41
|
}
|
|
40
42
|
// Enable native thinking by default — thinking models produce better
|
|
41
43
|
// tool selections and reasoning when allowed to think before acting.
|
|
42
|
-
|
|
44
|
+
// Ollama `think` is on/off (no levels); default on for thinking models.
|
|
45
|
+
body['think'] = resolveThinking(options?.thinking, this.options.thinking)?.enabled ?? true;
|
|
43
46
|
// Handle structured output via format parameter
|
|
44
47
|
const schemaOptions = this.extractSchemaOptions(options);
|
|
45
48
|
if (schemaOptions) {
|
|
@@ -68,28 +71,25 @@ export class OllamaClient extends BaseLLMClient {
|
|
|
68
71
|
inputTokens: data.prompt_eval_count ?? 0,
|
|
69
72
|
outputTokens: data.eval_count ?? 0,
|
|
70
73
|
totalTokens: (data.prompt_eval_count ?? 0) + (data.eval_count ?? 0),
|
|
74
|
+
// Ollama reports server-precise timing in nanoseconds.
|
|
75
|
+
durationMs: data.total_duration ? data.total_duration / 1e6 : undefined,
|
|
76
|
+
tokensPerSecond: data.eval_duration && data.eval_count
|
|
77
|
+
? data.eval_count / (data.eval_duration / 1e9)
|
|
78
|
+
: undefined,
|
|
71
79
|
}
|
|
72
80
|
: undefined;
|
|
73
|
-
// Normalize tool
|
|
74
|
-
const toolCalls = data.message.tool_calls?.map(tc => (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
function: {
|
|
78
|
-
...tc.function,
|
|
79
|
-
arguments: typeof tc.function.arguments === 'string'
|
|
80
|
-
? tc.function.arguments
|
|
81
|
-
: JSON.stringify(tc.function.arguments),
|
|
82
|
-
},
|
|
83
|
-
}));
|
|
84
|
-
// Get content, handling potential null
|
|
85
|
-
const content = data.message.content || data.message.thinking || '';
|
|
81
|
+
// Normalize tool calls (Ollama sometimes omits IDs and empty args).
|
|
82
|
+
const toolCalls = data.message.tool_calls?.map(tc => this.normalizeToolCall(tc));
|
|
83
|
+
const gemmaContent = extractGemmaThoughtChannels(data.message.content || '');
|
|
84
|
+
const reasoning = [data.message.thinking, gemmaContent.reasoning].filter(Boolean).join('\n\n') || undefined;
|
|
86
85
|
const result = {
|
|
87
86
|
message: {
|
|
88
87
|
role: 'assistant',
|
|
89
|
-
content,
|
|
88
|
+
content: gemmaContent.content,
|
|
90
89
|
tool_calls: toolCalls,
|
|
91
90
|
},
|
|
92
|
-
|
|
91
|
+
finishReason: data.done_reason,
|
|
92
|
+
reasoning,
|
|
93
93
|
usage,
|
|
94
94
|
provider: 'ollama',
|
|
95
95
|
};
|
|
@@ -118,7 +118,8 @@ export class OllamaClient extends BaseLLMClient {
|
|
|
118
118
|
if (tools?.length) {
|
|
119
119
|
body['tools'] = this.convertToolsToOllama(tools);
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
// Ollama `think` is on/off (no levels); default on for thinking models.
|
|
122
|
+
body['think'] = resolveThinking(options?.thinking, this.options.thinking)?.enabled ?? true;
|
|
122
123
|
const start = Date.now();
|
|
123
124
|
this.auditor.record({
|
|
124
125
|
timestamp: start,
|
|
@@ -126,7 +127,8 @@ export class OllamaClient extends BaseLLMClient {
|
|
|
126
127
|
provider: 'ollama',
|
|
127
128
|
model: this.options.model,
|
|
128
129
|
});
|
|
129
|
-
const
|
|
130
|
+
const decoderEvents = [];
|
|
131
|
+
const decoder = new StandardChatDecoder(event => decoderEvents.push(event));
|
|
130
132
|
let lastResponse;
|
|
131
133
|
const streamedToolCalls = [];
|
|
132
134
|
// Stream idle timeout: thinking models can pause for minutes between chunks.
|
|
@@ -142,33 +144,38 @@ export class OllamaClient extends BaseLLMClient {
|
|
|
142
144
|
lastResponse = chunk;
|
|
143
145
|
if (chunk.message?.thinking) {
|
|
144
146
|
decoder.pushReasoning(chunk.message.thinking);
|
|
145
|
-
|
|
147
|
+
const pending = decoderEvents.splice(0);
|
|
148
|
+
for (const event of pending) {
|
|
149
|
+
yield event;
|
|
150
|
+
}
|
|
146
151
|
}
|
|
147
152
|
if (chunk.message?.content) {
|
|
148
153
|
decoder.push(chunk.message.content);
|
|
149
|
-
|
|
154
|
+
const pending = decoderEvents.splice(0);
|
|
155
|
+
for (const event of pending) {
|
|
156
|
+
yield event;
|
|
157
|
+
}
|
|
150
158
|
}
|
|
151
159
|
if (chunk.message?.tool_calls?.length) {
|
|
152
|
-
const normalized = chunk.message.tool_calls.map(tc => (
|
|
153
|
-
...tc,
|
|
154
|
-
id: tc.id || this.generateToolCallId(),
|
|
155
|
-
function: {
|
|
156
|
-
...tc.function,
|
|
157
|
-
arguments: typeof tc.function.arguments === 'string'
|
|
158
|
-
? tc.function.arguments
|
|
159
|
-
: JSON.stringify(tc.function.arguments),
|
|
160
|
-
},
|
|
161
|
-
}));
|
|
160
|
+
const normalized = chunk.message.tool_calls.map(tc => this.normalizeToolCall(tc));
|
|
162
161
|
streamedToolCalls.push(...normalized);
|
|
163
162
|
yield { type: 'tool_call', calls: normalized };
|
|
164
163
|
}
|
|
165
164
|
}
|
|
166
165
|
decoder.flush();
|
|
166
|
+
const pending = decoderEvents.splice(0);
|
|
167
|
+
for (const event of pending) {
|
|
168
|
+
yield event;
|
|
169
|
+
}
|
|
167
170
|
const usage = lastResponse?.prompt_eval_count
|
|
168
171
|
? {
|
|
169
172
|
inputTokens: lastResponse.prompt_eval_count ?? 0,
|
|
170
173
|
outputTokens: lastResponse.eval_count ?? 0,
|
|
171
174
|
totalTokens: (lastResponse.prompt_eval_count ?? 0) + (lastResponse.eval_count ?? 0),
|
|
175
|
+
durationMs: lastResponse.total_duration ? lastResponse.total_duration / 1e6 : undefined,
|
|
176
|
+
tokensPerSecond: lastResponse.eval_duration && lastResponse.eval_count
|
|
177
|
+
? lastResponse.eval_count / (lastResponse.eval_duration / 1e9)
|
|
178
|
+
: undefined,
|
|
172
179
|
}
|
|
173
180
|
: undefined;
|
|
174
181
|
this.auditor.record({
|
|
@@ -185,11 +192,33 @@ export class OllamaClient extends BaseLLMClient {
|
|
|
185
192
|
content: decoder.getCleanContent(),
|
|
186
193
|
tool_calls: streamedToolCalls.length > 0 ? streamedToolCalls : undefined,
|
|
187
194
|
},
|
|
195
|
+
finishReason: lastResponse?.done_reason,
|
|
188
196
|
reasoning: decoder.getReasoning(),
|
|
189
197
|
usage,
|
|
190
198
|
provider: 'ollama',
|
|
191
199
|
};
|
|
192
200
|
}
|
|
201
|
+
normalizeToolCall(toolCall) {
|
|
202
|
+
return {
|
|
203
|
+
...toolCall,
|
|
204
|
+
id: toolCall.id || this.generateToolCallId(),
|
|
205
|
+
type: 'function',
|
|
206
|
+
function: {
|
|
207
|
+
...toolCall.function,
|
|
208
|
+
name: toolCall.function?.name || '',
|
|
209
|
+
arguments: this.normalizeToolArguments(toolCall.function?.arguments),
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
normalizeToolArguments(args) {
|
|
214
|
+
if (typeof args === 'string') {
|
|
215
|
+
return args.trim().length > 0 ? args : '{}';
|
|
216
|
+
}
|
|
217
|
+
if (args == null) {
|
|
218
|
+
return '{}';
|
|
219
|
+
}
|
|
220
|
+
return JSON.stringify(args) ?? '{}';
|
|
221
|
+
}
|
|
193
222
|
// ========================================================================
|
|
194
223
|
// Embeddings
|
|
195
224
|
// ========================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Universal LLM Client v3 — Ollama Provider\r\n *\r\n * Implements BaseLLMClient for Ollama's native API.\r\n * Supports chat, streaming (NDJSON), embeddings, model discovery,\r\n * context length detection via /api/show, and structured output.\r\n *\r\n * Structured Output Assertions:\r\n * - VAL-PROVIDER-OLLAMA-001: format parameter with JSON Schema\r\n * - VAL-PROVIDER-OLLAMA-003: Vision with base64 extraction alongside format\r\n * - VAL-PROVIDER-OLLAMA-004: format \"json\" vs schema modes\r\n */\r\n\r\nimport { BaseLLMClient } from '../client.js';\r\nimport { httpRequest, httpStream, parseNDJSON, buildHeaders } from '../http.js';\r\nimport { StandardChatDecoder } from '../stream-decoder.js';\r\nimport {\r\n normalizeJsonSchema,\r\n getJsonSchemaFromConfig,\r\n} from '../structured-output.js';\r\nimport type {\r\n LLMClientOptions,\r\n LLMChatMessage,\r\n LLMChatResponse,\r\n ChatOptions,\r\n ModelMetadata,\r\n OllamaResponse,\r\n OllamaModelInfo,\r\n LLMToolDefinition,\r\n TokenUsageInfo,\r\n} from '../interfaces.js';\r\nimport type { DecodedEvent } from '../stream-decoder.js';\r\nimport type { Auditor } from '../auditor.js';\r\n\r\nexport class OllamaClient extends BaseLLMClient {\r\n constructor(options: LLMClientOptions, auditor?: Auditor) {\r\n super({\r\n ...options,\r\n url: (options.url || 'http://localhost:11434').replace(/\\/+$/, ''),\r\n }, auditor);\r\n }\r\n\r\n // ========================================================================\r\n // Chat\r\n // ========================================================================\r\n\r\n async chat(\r\n messages: LLMChatMessage[],\r\n options?: ChatOptions,\r\n ): Promise<LLMChatResponse> {\r\n // Structured output and tools can now be used together.\\n // The provider sends both format and tools in the request.\\n // The Router handles skipping validation when the response contains tool calls.\r\n\r\n const url = `${this.options.url}/api/chat`;\r\n const tools = options?.tools ?? (Object.keys(this.toolRegistry).length > 0 ? this.getToolDefinitions() : undefined);\r\n\r\n const body: Record<string, unknown> = {\r\n model: this.options.model,\r\n messages: this.convertMessages(messages),\r\n stream: false,\r\n options: this.buildOllamaOptions(options),\r\n };\r\n\r\n if (tools?.length) {\r\n body['tools'] = this.convertToolsToOllama(tools);\r\n }\r\n\r\n // Enable native thinking by default — thinking models produce better\r\n // tool selections and reasoning when allowed to think before acting.\r\n body['think'] = this.options.thinking ?? true;\r\n\r\n // Handle structured output via format parameter\r\n const schemaOptions = this.extractSchemaOptions(options);\r\n if (schemaOptions) {\r\n body['format'] = this.buildFormatParameter(schemaOptions);\r\n } else if (options?.responseFormat) {\r\n // Legacy json_object mode - map to Ollama's \"json\" format\r\n body['format'] = 'json';\r\n }\r\n\r\n const start = Date.now();\r\n this.auditor.record({\r\n timestamp: start,\r\n type: 'request',\r\n provider: 'ollama',\r\n model: this.options.model,\r\n });\r\n\r\n const response = await httpRequest<OllamaResponse>(url, {\r\n method: 'POST',\r\n headers: buildHeaders(this.options),\r\n body,\r\n timeout: this.options.timeout ?? 30000,\r\n });\r\n\r\n const data = response.data;\r\n const usage: TokenUsageInfo | undefined = (data.prompt_eval_count || data.eval_count)\r\n ? {\r\n inputTokens: data.prompt_eval_count ?? 0,\r\n outputTokens: data.eval_count ?? 0,\r\n totalTokens: (data.prompt_eval_count ?? 0) + (data.eval_count ?? 0),\r\n }\r\n : undefined;\r\n\r\n // Normalize tool call IDs (Ollama sometimes omits them)\r\n const toolCalls = data.message.tool_calls?.map(tc => ({\r\n ...tc,\r\n id: tc.id || this.generateToolCallId(),\r\n function: {\r\n ...tc.function,\r\n arguments: typeof tc.function.arguments === 'string'\r\n ? tc.function.arguments\r\n : JSON.stringify(tc.function.arguments),\r\n },\r\n }));\r\n\r\n // Get content, handling potential null\r\n const content = data.message.content || data.message.thinking || '';\r\n\r\n const result: LLMChatResponse = {\r\n message: {\r\n role: 'assistant',\r\n content,\r\n tool_calls: toolCalls,\r\n },\r\n reasoning: data.message.content ? data.message.thinking : undefined,\r\n usage,\r\n provider: 'ollama',\r\n };\r\n\r\n this.auditor.record({\r\n timestamp: Date.now(),\r\n type: 'response',\r\n provider: 'ollama',\r\n model: this.options.model,\r\n duration: Date.now() - start,\r\n usage,\r\n });\r\n\r\n return result;\r\n }\r\n\r\n // ========================================================================\r\n // Streaming\r\n // ========================================================================\r\n\r\n async *chatStream(\r\n messages: LLMChatMessage[],\r\n options?: ChatOptions,\r\n ): AsyncGenerator<DecodedEvent, LLMChatResponse | void, unknown> {\r\n const url = `${this.options.url}/api/chat`;\r\n const tools = options?.tools ?? (Object.keys(this.toolRegistry).length > 0 ? this.getToolDefinitions() : undefined);\r\n\r\n const body: Record<string, unknown> = {\r\n model: this.options.model,\r\n messages: this.convertMessages(messages),\r\n stream: true,\r\n options: this.buildOllamaOptions(options),\r\n };\r\n\r\n if (tools?.length) {\r\n body['tools'] = this.convertToolsToOllama(tools);\r\n }\r\n\r\n body['think'] = this.options.thinking ?? true;\r\n\r\n const start = Date.now();\r\n this.auditor.record({\r\n timestamp: start,\r\n type: 'stream_start',\r\n provider: 'ollama',\r\n model: this.options.model,\r\n });\r\n\r\n const decoder = new StandardChatDecoder(() => {});\r\n let lastResponse: OllamaResponse | undefined;\r\n const streamedToolCalls: import('../interfaces.js').LLMToolCall[] = [];\r\n\r\n // Stream idle timeout: thinking models can pause for minutes between chunks.\r\n // Ensure at least 5 minutes regardless of the base request timeout.\r\n const streamTimeout = Math.max(this.options.timeout ?? 300000, 300000);\r\n\r\n const stream = httpStream(url, {\r\n method: 'POST',\r\n headers: buildHeaders(this.options),\r\n body,\r\n timeout: streamTimeout,\r\n });\r\n\r\n for await (const chunk of parseNDJSON<OllamaResponse>(stream)) {\r\n lastResponse = chunk;\r\n\r\n if (chunk.message?.thinking) {\r\n decoder.pushReasoning(chunk.message.thinking);\r\n yield { type: 'thinking', content: chunk.message.thinking };\r\n }\r\n\r\n if (chunk.message?.content) {\r\n decoder.push(chunk.message.content);\r\n yield { type: 'text', content: chunk.message.content };\r\n }\r\n\r\n if (chunk.message?.tool_calls?.length) {\r\n const normalized = chunk.message.tool_calls.map(tc => ({\r\n ...tc,\r\n id: tc.id || this.generateToolCallId(),\r\n function: {\r\n ...tc.function,\r\n arguments: typeof tc.function.arguments === 'string'\r\n ? tc.function.arguments\r\n : JSON.stringify(tc.function.arguments),\r\n },\r\n }));\r\n streamedToolCalls.push(...normalized);\r\n yield { type: 'tool_call', calls: normalized };\r\n }\r\n }\r\n\r\n decoder.flush();\r\n\r\n const usage: TokenUsageInfo | undefined = lastResponse?.prompt_eval_count\r\n ? {\r\n inputTokens: lastResponse.prompt_eval_count ?? 0,\r\n outputTokens: lastResponse.eval_count ?? 0,\r\n totalTokens: (lastResponse.prompt_eval_count ?? 0) + (lastResponse.eval_count ?? 0),\r\n }\r\n : undefined;\r\n\r\n this.auditor.record({\r\n timestamp: Date.now(),\r\n type: 'stream_end',\r\n provider: 'ollama',\r\n model: this.options.model,\r\n duration: Date.now() - start,\r\n usage,\r\n });\r\n\r\n return {\r\n message: {\r\n role: 'assistant',\r\n content: decoder.getCleanContent(),\r\n tool_calls: streamedToolCalls.length > 0 ? streamedToolCalls : undefined,\r\n },\r\n reasoning: decoder.getReasoning(),\r\n usage,\r\n provider: 'ollama',\r\n };\r\n }\r\n\r\n // ========================================================================\r\n // Embeddings\r\n // ========================================================================\r\n\r\n async embed(text: string): Promise<number[]> {\r\n const url = `${this.options.url}/api/embed`;\r\n const response = await httpRequest<{ embeddings: number[][] }>(url, {\r\n method: 'POST',\r\n headers: buildHeaders(this.options),\r\n body: { model: this.options.model, input: text },\r\n timeout: this.options.timeout ?? 30000,\r\n });\r\n return response.data.embeddings[0] ?? [];\r\n }\r\n\r\n override async embedArray(texts: string[]): Promise<number[][]> {\r\n const url = `${this.options.url}/api/embed`;\r\n const response = await httpRequest<{ embeddings: number[][] }>(url, {\r\n method: 'POST',\r\n headers: buildHeaders(this.options),\r\n body: { model: this.options.model, input: texts },\r\n timeout: this.options.timeout ?? 30000,\r\n });\r\n return response.data.embeddings;\r\n }\r\n\r\n // ========================================================================\r\n // Model Discovery\r\n // ========================================================================\r\n\r\n async getModels(): Promise<string[]> {\r\n const url = `${this.options.url}/api/tags`;\r\n const response = await httpRequest<{ models: OllamaModelInfo[] }>(url, {\r\n timeout: 5000,\r\n });\r\n return response.data.models.map(m => m.name);\r\n }\r\n\r\n override async getModelInfo(modelName?: string): Promise<ModelMetadata> {\r\n const url = `${this.options.url}/api/show`;\r\n try {\r\n const targetModel = modelName ?? this.options.model;\r\n const response = await httpRequest<Record<string, unknown>>(url, {\r\n method: 'POST',\r\n body: { name: targetModel },\r\n timeout: 5000,\r\n });\r\n\r\n const modelInfo = response.data['model_info'] as Record<string, unknown> | undefined;\r\n if (!modelInfo) return { contextLength: 8192 };\r\n\r\n // Extract architecture-specific context length\r\n const arch = modelInfo['general.architecture'] as string | undefined;\r\n let contextLength = 8192;\r\n\r\n if (arch) {\r\n const ctxKey = `${arch}.context_length`;\r\n const ctxValue = modelInfo[ctxKey] as number | undefined;\r\n if (ctxValue) contextLength = ctxValue;\r\n }\r\n\r\n // Prefer the live deployment context when available. /api/show reports\r\n // the trained maximum; /api/ps reports what the daemon has actually loaded.\r\n try {\r\n const psResponse = await httpRequest<{ models?: Array<{ name?: string; context_length?: number }> }>(\r\n `${this.options.url}/api/ps`,\r\n { timeout: 5000 },\r\n );\r\n const liveModel = psResponse.data.models?.find(\r\n model => model.name?.toLowerCase() === targetModel.toLowerCase(),\r\n );\r\n if (liveModel?.context_length && liveModel.context_length > 0) {\r\n contextLength = Math.min(contextLength, liveModel.context_length);\r\n }\r\n } catch {\r\n // Ignore /api/ps failures — /api/show is still a valid fallback\r\n }\r\n\r\n const paramCountRaw = modelInfo['general.parameter_count'] as number | undefined;\r\n const capabilities = response.data['capabilities'] as string[] | undefined;\r\n\r\n return {\r\n model: targetModel,\r\n contextLength,\r\n architecture: arch,\r\n parameterCount: paramCountRaw,\r\n capabilities,\r\n };\r\n } catch {\r\n return { contextLength: 8192 };\r\n }\r\n }\r\n\r\n // ========================================================================\r\n // Readiness\r\n // ========================================================================\r\n\r\n /** Ensure model is available, pull if missing */\r\n async ensureReady(): Promise<void> {\r\n try {\r\n await this.getModelInfo();\r\n } catch {\r\n // Try pulling the model\r\n this.debugLog(`Model not found, attempting pull: ${this.options.model}`);\r\n await httpRequest(`${this.options.url}/api/pull`, {\r\n method: 'POST',\r\n body: { name: this.options.model },\r\n timeout: 300000, // 5 min for pull\r\n });\r\n }\r\n }\r\n\r\n // ========================================================================\r\n // Internals\r\n // ========================================================================\r\n\r\n private convertMessages(messages: LLMChatMessage[]): Record<string, unknown>[] {\r\n return messages.map(msg => {\r\n const converted: Record<string, unknown> = { role: msg.role };\r\n\r\n // Handle multimodal content (array of text + image parts)\r\n if (Array.isArray(msg.content)) {\r\n const textParts: string[] = [];\r\n const images: string[] = [];\r\n\r\n for (const part of msg.content) {\r\n if (part.type === 'text') {\r\n textParts.push(part.text);\r\n } else if (part.type === 'audio') {\r\n this.debugLog('Ollama: skipping audio content (not supported)');\r\n } else if (part.type === 'image_url' && part.image_url?.url) {\r\n // Extract base64 data from data URL or use raw base64\r\n const url = part.image_url.url;\r\n if (url.startsWith('data:')) {\r\n // data:image/jpeg;base64,XXXX → extract XXXX\r\n const base64Data = url.split(',')[1];\r\n if (base64Data) images.push(base64Data);\r\n } else if (url.startsWith('http')) {\r\n // Ollama doesn't support URLs directly — skip\r\n // (caller should download and convert to base64)\r\n this.debugLog('Ollama vision: skipping URL image, use base64 instead');\r\n } else {\r\n // Assume raw base64\r\n images.push(url);\r\n }\r\n }\r\n }\r\n\r\n converted['content'] = textParts.join('\\n');\r\n if (images.length > 0) {\r\n converted['images'] = images;\r\n }\r\n } else {\r\n converted['content'] = msg.content ?? '';\r\n }\r\n\r\n // Ollama needs tool call arguments as objects, not strings\r\n if (msg.tool_calls?.length) {\r\n converted['tool_calls'] = msg.tool_calls.map(tc => ({\r\n ...tc,\r\n function: {\r\n ...tc.function,\r\n arguments: typeof tc.function.arguments === 'string'\r\n ? (() => { try { return JSON.parse(tc.function.arguments); } catch { return tc.function.arguments; } })()\r\n : tc.function.arguments,\r\n },\r\n }));\r\n }\r\n\r\n // Preserve tool_call_id for tool result messages\r\n if (msg.tool_call_id) {\r\n converted['tool_call_id'] = msg.tool_call_id;\r\n }\r\n\r\n return converted;\r\n });\r\n }\r\n\r\n private convertToolsToOllama(tools: LLMToolDefinition[]): unknown[] {\r\n return tools.map(t => ({\r\n type: 'function',\r\n function: {\r\n name: t.function.name,\r\n description: t.function.description,\r\n parameters: t.function.parameters,\r\n },\r\n }));\r\n }\r\n\r\n private buildOllamaOptions(options?: ChatOptions): Record<string, unknown> {\r\n const params: Record<string, unknown> = {\r\n ...this.options.defaultParameters,\r\n ...options?.parameters,\r\n };\r\n if (options?.temperature !== undefined) params['temperature'] = options.temperature;\r\n if (options?.maxTokens !== undefined) params['num_predict'] = options.maxTokens;\r\n return params;\r\n }\r\n\r\n // ========================================================================\r\n // Structured Output Helpers\r\n // ========================================================================\r\n\r\n /**\r\n * Build Ollama format parameter from schema options.\r\n * Ollama accepts:\r\n * - format: \"json\" for simple JSON mode\r\n * - format: { ...schema } for structured output with JSON Schema\r\n */\r\n private buildFormatParameter(options: { schemaConfig?: import('../structured-output.js').SchemaConfig<unknown>, jsonSchema?: import('../structured-output.js').JSONSchema }): string | import('../structured-output.js').JSONSchema {\r\n if (options.jsonSchema) {\r\n return normalizeJsonSchema(options.jsonSchema);\r\n }\r\n\r\n if (options.schemaConfig) {\r\n return getJsonSchemaFromConfig(options.schemaConfig);\r\n }\r\n\r\n return 'json';\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,23 @@ import type { LLMClientOptions, LLMChatMessage, LLMChatResponse, ChatOptions } f
|
|
|
9
9
|
import type { DecodedEvent } from '../stream-decoder.js';
|
|
10
10
|
import type { Auditor } from '../auditor.js';
|
|
11
11
|
export declare class OpenAICompatibleClient extends BaseLLMClient {
|
|
12
|
+
/**
|
|
13
|
+
* DiffusionGemma on trimmed vLLM builds has no server-side reasoning or
|
|
14
|
+
* tool-call parser — the native channel protocol is handled client-side
|
|
15
|
+
* (see gemma-diffusion.ts). Auto-detected from the model name; override
|
|
16
|
+
* with `gemmaNativeProtocol` in LLMClientOptions.
|
|
17
|
+
*/
|
|
18
|
+
private get gemmaNative();
|
|
19
|
+
/**
|
|
20
|
+
* Build a full endpoint URL, respecting apiBasePath (already baked into this.options.url)
|
|
21
|
+
* and any queryParams provided at the provider config level.
|
|
22
|
+
*/
|
|
23
|
+
private buildUrl;
|
|
12
24
|
constructor(options: LLMClientOptions, auditor?: Auditor);
|
|
13
25
|
chat(messages: LLMChatMessage[], options?: ChatOptions): Promise<LLMChatResponse>;
|
|
14
26
|
chatStream(messages: LLMChatMessage[], options?: ChatOptions): AsyncGenerator<DecodedEvent, LLMChatResponse | void, unknown>;
|
|
27
|
+
private normalizeToolCall;
|
|
28
|
+
private normalizeToolArguments;
|
|
15
29
|
embed(text: string): Promise<number[]>;
|
|
16
30
|
getModels(): Promise<string[]>;
|
|
17
31
|
private convertMessages;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAU7C,OAAO,KAAK,EACR,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EAKd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,qBAAa,sBAAuB,SAAQ,aAAa;IACrD;;;;;OAKG;IACH,OAAO,KAAK,WAAW,GAEtB;IAED;;;OAGG;IACH,OAAO,CAAC,QAAQ;gBAoBJ,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO;IAyBlD,IAAI,CACN,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,eAAe,CAAC;IAgIpB,UAAU,CACb,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAsNhE,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,sBAAsB;IAcxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBtC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBpC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,kBAAkB;IAmC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAgC9B"}
|