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.
Files changed (151) hide show
  1. package/CHANGELOG.md +27 -24
  2. package/README.md +60 -11
  3. package/dist/ai-model.d.ts +12 -1
  4. package/dist/ai-model.d.ts.map +1 -1
  5. package/dist/ai-model.js +36 -1
  6. package/dist/ai-model.js.map +1 -1
  7. package/dist/auditor.js.map +1 -1
  8. package/dist/client.js.map +1 -1
  9. package/dist/gemma-channel.d.ts +14 -0
  10. package/dist/gemma-channel.d.ts.map +1 -0
  11. package/dist/gemma-channel.js +38 -0
  12. package/dist/gemma-channel.js.map +1 -0
  13. package/dist/gemma-diffusion.d.ts +49 -0
  14. package/dist/gemma-diffusion.d.ts.map +1 -0
  15. package/dist/gemma-diffusion.js +147 -0
  16. package/dist/gemma-diffusion.js.map +1 -0
  17. package/dist/http.d.ts +4 -0
  18. package/dist/http.d.ts.map +1 -1
  19. package/dist/http.js +14 -1
  20. package/dist/http.js.map +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/interfaces.d.ts +163 -7
  26. package/dist/interfaces.d.ts.map +1 -1
  27. package/dist/interfaces.js.map +1 -1
  28. package/dist/mcp.js.map +1 -1
  29. package/dist/providers/anthropic.d.ts.map +1 -1
  30. package/dist/providers/anthropic.js +28 -3
  31. package/dist/providers/anthropic.js.map +1 -1
  32. package/dist/providers/google.d.ts +22 -1
  33. package/dist/providers/google.d.ts.map +1 -1
  34. package/dist/providers/google.js +223 -13
  35. package/dist/providers/google.js.map +1 -1
  36. package/dist/providers/index.js.map +1 -1
  37. package/dist/providers/ollama.d.ts +2 -0
  38. package/dist/providers/ollama.d.ts.map +1 -1
  39. package/dist/providers/ollama.js +59 -30
  40. package/dist/providers/ollama.js.map +1 -1
  41. package/dist/providers/openai.d.ts +14 -0
  42. package/dist/providers/openai.d.ts.map +1 -1
  43. package/dist/providers/openai.js +200 -22
  44. package/dist/providers/openai.js.map +1 -1
  45. package/dist/router.d.ts +2 -0
  46. package/dist/router.d.ts.map +1 -1
  47. package/dist/router.js +4 -0
  48. package/dist/router.js.map +1 -1
  49. package/dist/stream-decoder.d.ts +12 -0
  50. package/dist/stream-decoder.d.ts.map +1 -1
  51. package/dist/stream-decoder.js +182 -5
  52. package/dist/stream-decoder.js.map +1 -1
  53. package/dist/structured-output.js.map +1 -1
  54. package/dist/thinking.d.ts +36 -0
  55. package/dist/thinking.d.ts.map +1 -0
  56. package/dist/thinking.js +52 -0
  57. package/dist/thinking.js.map +1 -0
  58. package/dist/tools.js.map +1 -1
  59. package/dist/zod-adapter.js.map +1 -1
  60. package/package.json +4 -1
  61. package/src/ai-model.ts +400 -0
  62. package/src/auditor.ts +213 -0
  63. package/src/client.ts +402 -0
  64. package/src/debug/debug-google-streaming.ts +97 -0
  65. package/src/debug/debug-tool-execution.ts +86 -0
  66. package/src/debug/test-lmstudio-tools.ts +155 -0
  67. package/src/demos/README.md +47 -0
  68. package/src/demos/basic/universal-llm-examples.ts +161 -0
  69. package/src/demos/diffusion-gemma/.env +29 -0
  70. package/src/demos/diffusion-gemma/.env.example +27 -0
  71. package/src/demos/diffusion-gemma/CLAUDE.md +95 -0
  72. package/src/demos/diffusion-gemma/README.md +59 -0
  73. package/src/demos/diffusion-gemma/canvas.ts +1606 -0
  74. package/src/demos/diffusion-gemma/docker-compose.yml +29 -0
  75. package/src/demos/diffusion-gemma/probe-stream.ts +51 -0
  76. package/src/demos/diffusion-gemma/probe-tools.ts +55 -0
  77. package/src/demos/diffusion-gemma/server.ts +1205 -0
  78. package/src/demos/diffusion-gemma/start-vllm.sh +98 -0
  79. package/src/demos/mcp/astrid-memory-demo.ts +295 -0
  80. package/src/demos/mcp/astrid-persona-memory.ts +357 -0
  81. package/src/demos/mcp/mcp-mongodb-demo.ts +275 -0
  82. package/src/demos/mcp/simple-astrid-memory.ts +148 -0
  83. package/src/demos/mcp/simple-mcp-demo.ts +68 -0
  84. package/src/demos/mcp/working-mcp-demo.ts +62 -0
  85. package/src/demos/model-alias-demo.ts +0 -0
  86. package/src/demos/tools/RAG_MEMORY_INTEGRATION.md +267 -0
  87. package/src/demos/tools/astrid-memory-demo.ts +270 -0
  88. package/src/demos/tools/astrid-production-memory-clean.ts +785 -0
  89. package/src/demos/tools/astrid-production-memory.ts +558 -0
  90. package/src/demos/tools/basic-translation-test.ts +66 -0
  91. package/src/demos/tools/chromadb-similarity-tuning.ts +390 -0
  92. package/src/demos/tools/clean-multilingual-conversation.ts +209 -0
  93. package/src/demos/tools/clean-translation-test.ts +119 -0
  94. package/src/demos/tools/clean-universal-multilingual-test.ts +131 -0
  95. package/src/demos/tools/complete-rag-demo.ts +369 -0
  96. package/src/demos/tools/complete-tool-demo.ts +132 -0
  97. package/src/demos/tools/demo-tool-calling.ts +124 -0
  98. package/src/demos/tools/dynamic-language-switching-test.ts +251 -0
  99. package/src/demos/tools/hybrid-thinking-test.ts +154 -0
  100. package/src/demos/tools/memory-integration-test.ts +420 -0
  101. package/src/demos/tools/multilingual-memory-system.ts +802 -0
  102. package/src/demos/tools/ondemand-translation-demo.ts +655 -0
  103. package/src/demos/tools/production-tool-demo.ts +245 -0
  104. package/src/demos/tools/revolutionary-multilingual-test.ts +151 -0
  105. package/src/demos/tools/rigorous-language-analysis.ts +218 -0
  106. package/src/demos/tools/test-universal-memory-system.ts +126 -0
  107. package/src/demos/tools/translation-integration-guide.ts +346 -0
  108. package/src/demos/tools/universal-memory-system.ts +560 -0
  109. package/src/gemma-channel.ts +47 -0
  110. package/src/gemma-diffusion.ts +167 -0
  111. package/src/http.ts +261 -0
  112. package/src/index.ts +180 -0
  113. package/src/interfaces.ts +843 -0
  114. package/src/mcp.ts +345 -0
  115. package/src/providers/anthropic.ts +796 -0
  116. package/src/providers/google.ts +840 -0
  117. package/src/providers/index.ts +8 -0
  118. package/src/providers/ollama.ts +503 -0
  119. package/src/providers/openai.ts +587 -0
  120. package/src/router.ts +785 -0
  121. package/src/stream-decoder.ts +535 -0
  122. package/src/structured-output.ts +759 -0
  123. package/src/test-scripts/test-advanced-tools.ts +310 -0
  124. package/src/test-scripts/test-google-deep-research.ts +33 -0
  125. package/src/test-scripts/test-google-streaming-enhanced.ts +147 -0
  126. package/src/test-scripts/test-google-streaming.ts +63 -0
  127. package/src/test-scripts/test-google-system-prompt-comprehensive.ts +189 -0
  128. package/src/test-scripts/test-google-thinking.ts +46 -0
  129. package/src/test-scripts/test-mcp-config.ts +28 -0
  130. package/src/test-scripts/test-mcp-connection.ts +29 -0
  131. package/src/test-scripts/test-system-message-positions.ts +163 -0
  132. package/src/test-scripts/test-system-prompt-improvement-demo.ts +83 -0
  133. package/src/test-scripts/test-tool-calling.ts +231 -0
  134. package/src/test-scripts/test-vllm-qwen36.ts +256 -0
  135. package/src/tests/ai-model.test.ts +1614 -0
  136. package/src/tests/auditor.test.ts +224 -0
  137. package/src/tests/gemma-diffusion.test.ts +115 -0
  138. package/src/tests/http.test.ts +200 -0
  139. package/src/tests/interfaces.test.ts +117 -0
  140. package/src/tests/providers/anthropic.test.ts +118 -0
  141. package/src/tests/providers/google.test.ts +841 -0
  142. package/src/tests/providers/ollama.test.ts +1034 -0
  143. package/src/tests/providers/openai.test.ts +1511 -0
  144. package/src/tests/router.test.ts +254 -0
  145. package/src/tests/stream-decoder.test.ts +263 -0
  146. package/src/tests/structured-output.test.ts +1450 -0
  147. package/src/tests/thinking.test.ts +65 -0
  148. package/src/tests/tools.test.ts +175 -0
  149. package/src/thinking.ts +73 -0
  150. package/src/tools.ts +246 -0
  151. package/src/zod-adapter.ts +72 -0
@@ -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
- body['think'] = this.options.thinking ?? true;
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 call IDs (Ollama sometimes omits them)
74
- const toolCalls = data.message.tool_calls?.map(tc => ({
75
- ...tc,
76
- id: tc.id || this.generateToolCallId(),
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
- reasoning: data.message.content ? data.message.thinking : undefined,
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
- body['think'] = this.options.thinking ?? true;
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 decoder = new StandardChatDecoder(() => { });
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
- yield { type: 'thinking', content: chunk.message.thinking };
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
- yield { type: 'text', content: chunk.message.content };
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":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACH,mBAAmB,EACnB,uBAAuB,GAC1B,MAAM,yBAAyB,CAAC;AAejC,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC3C,YAAY,OAAyB,EAAE,OAAiB;QACpD,KAAK,CAAC;YACF,GAAG,OAAO;YACV,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACrE,EAAE,OAAO,CAAC,CAAC;IAChB,CAAC;IAED,2EAA2E;IAC3E,OAAO;IACP,2EAA2E;IAE3E,KAAK,CAAC,IAAI,CACN,QAA0B,EAC1B,OAAqB;QAErB,uNAAuN;QAEvN,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpH,MAAM,IAAI,GAA4B;YAClC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;SAC5C,CAAC;QAEF,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,qEAAqE;QACrE,qEAAqE;QACrE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QAE9C,gDAAgD;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;YACjC,0DAA0D;YAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QAC5B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAiB,GAAG,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;SACzC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,KAAK,GAA+B,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC;YACjF,CAAC,CAAC;gBACE,WAAW,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;gBACxC,YAAY,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;gBAClC,WAAW,EAAE,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;aACtE;YACD,CAAC,CAAC,SAAS,CAAC;QAEhB,wDAAwD;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAClD,GAAG,EAAE;YACL,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACtC,QAAQ,EAAE;gBACN,GAAG,EAAE,CAAC,QAAQ;gBACd,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;oBAChD,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;oBACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;aAC9C;SACJ,CAAC,CAAC,CAAC;QAEJ,uCAAuC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEpE,MAAM,MAAM,GAAoB;YAC5B,OAAO,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,UAAU,EAAE,SAAS;aACxB;YACD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACnE,KAAK;YACL,QAAQ,EAAE,QAAQ;SACrB,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC5B,KAAK;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAE3E,KAAK,CAAC,CAAC,UAAU,CACb,QAA0B,EAC1B,OAAqB;QAErB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpH,MAAM,IAAI,GAA4B;YAClC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxC,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;SAC5C,CAAC;QAEF,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClD,IAAI,YAAwC,CAAC;QAC7C,MAAM,iBAAiB,GAA6C,EAAE,CAAC;QAEvE,6EAA6E;QAC7E,oEAAoE;QACpE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI;YACJ,OAAO,EAAE,aAAa;SACzB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,CAAiB,MAAM,CAAC,EAAE,CAAC;YAC5D,YAAY,GAAG,KAAK,CAAC;YAErB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAChE,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3D,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnD,GAAG,EAAE;oBACL,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBACtC,QAAQ,EAAE;wBACN,GAAG,EAAE,CAAC,QAAQ;wBACd,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;4BAChD,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;4BACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;qBAC9C;iBACJ,CAAC,CAAC,CAAC;gBACJ,iBAAiB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBACtC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YACnD,CAAC;QACL,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,MAAM,KAAK,GAA+B,YAAY,EAAE,iBAAiB;YACrE,CAAC,CAAC;gBACE,WAAW,EAAE,YAAY,CAAC,iBAAiB,IAAI,CAAC;gBAChD,YAAY,EAAE,YAAY,CAAC,UAAU,IAAI,CAAC;gBAC1C,WAAW,EAAE,CAAC,YAAY,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC;aACtF;YACD,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC5B,KAAK;SACR,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE;gBAClC,UAAU,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;aAC3E;YACD,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;YACjC,KAAK;YACL,QAAQ,EAAE,QAAQ;SACrB,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,aAAa;IACb,2EAA2E;IAE3E,KAAK,CAAC,KAAK,CAAC,IAAY;QACpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAA6B,GAAG,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;YAChD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;SACzC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAEQ,KAAK,CAAC,UAAU,CAAC,KAAe;QACrC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAA6B,GAAG,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;SACzC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,2EAA2E;IAC3E,kBAAkB;IAClB,2EAA2E;IAE3E,KAAK,CAAC,SAAS;QACX,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAgC,GAAG,EAAE;YACnE,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEQ,KAAK,CAAC,YAAY,CAAC,SAAkB;QAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;QAC3C,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAA0B,GAAG,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAC3B,OAAO,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAwC,CAAC;YACrF,IAAI,CAAC,SAAS;gBAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAE/C,+CAA+C;YAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,sBAAsB,CAAuB,CAAC;YACrE,IAAI,aAAa,GAAG,IAAI,CAAC;YAEzB,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC;gBACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAuB,CAAC;gBACzD,IAAI,QAAQ;oBAAE,aAAa,GAAG,QAAQ,CAAC;YAC3C,CAAC;YAED,uEAAuE;YACvE,4EAA4E;YAC5E,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,WAAW,CAChC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,EAC5B,EAAE,OAAO,EAAE,IAAI,EAAE,CACpB,CAAC;gBACF,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAC1C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CACnE,CAAC;gBACF,IAAI,SAAS,EAAE,cAAc,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;oBAC5D,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;gBACtE,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,gEAAgE;YACpE,CAAC;YAED,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAuB,CAAC;YACjF,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAyB,CAAC;YAE3E,OAAO;gBACH,KAAK,EAAE,WAAW;gBAClB,aAAa;gBACb,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,aAAa;gBAC7B,YAAY;aACf,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACnC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAE3E,iDAAiD;IACjD,KAAK,CAAC,WAAW;QACb,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;YACxB,IAAI,CAAC,QAAQ,CAAC,qCAAqC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,MAAM,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE;gBAC9C,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBAClC,OAAO,EAAE,MAAM,EAAE,iBAAiB;aACrC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAEnE,eAAe,CAAC,QAA0B;QAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,SAAS,GAA4B,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9D,0DAA0D;YAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;gBAE5B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACvB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;yBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC/B,IAAI,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC;oBACpE,CAAC;yBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;wBAC1D,sDAAsD;wBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;wBAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC1B,6CAA6C;4BAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrC,IAAI,UAAU;gCAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC5C,CAAC;6BAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;4BAChC,8CAA8C;4BAC9C,iDAAiD;4BACjD,IAAI,CAAC,QAAQ,CAAC,uDAAuD,CAAC,CAAC;wBAC3E,CAAC;6BAAM,CAAC;4BACJ,oBAAoB;4BACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACrB,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,SAAS,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;gBACjC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7C,CAAC;YAED,2DAA2D;YAC3D,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;gBACzB,SAAS,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAChD,GAAG,EAAE;oBACL,QAAQ,EAAE;wBACN,GAAG,EAAE,CAAC,QAAQ;wBACd,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;4BAChD,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gCAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;4BAAC,CAAC;4BAAC,MAAM,CAAC;gCAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;4BAAC,CAAC,CAAC,CAAC,CAAC,EAAE;4BACzG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;qBAC9B;iBACJ,CAAC,CAAC,CAAC;YACR,CAAC;YAED,iDAAiD;YACjD,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACnB,SAAS,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC;YACjD,CAAC;YAED,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB,CAAC,KAA0B;QACnD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACrB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW;gBACnC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU;aACpC;SACJ,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,kBAAkB,CAAC,OAAqB;QAC5C,MAAM,MAAM,GAA4B;YACpC,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB;YACjC,GAAG,OAAO,EAAE,UAAU;SACzB,CAAC;QACF,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;YAAE,MAAM,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;QACpF,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAChF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,4BAA4B;IAC5B,2EAA2E;IAE3E;;;;;OAKG;IACK,oBAAoB,CAAC,OAA8I;QACvK,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,uBAAuB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ","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;AAS7C,OAAO,KAAK,EACR,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EAId,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,sBAAuB,SAAQ,aAAa;gBACzC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO;IAalD,IAAI,CACN,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,eAAe,CAAC;IA6FpB,UAAU,CACb,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAyJ1D,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;IAc1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAgC9B"}
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"}