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
@@ -0,0 +1,147 @@
1
+ /**
2
+ * DiffusionGemma (vLLM) native-protocol adapter.
3
+ *
4
+ * Trimmed vLLM builds that serve DiffusionGemma ship with NO reasoning parser
5
+ * and NO tool-call parser module, and they reject OpenAI-style `tools` unless
6
+ * `--tool-call-parser` is configured. Everything therefore has to be handled
7
+ * client-side, against the model's native channel format (visible only when
8
+ * the request sets `skip_special_tokens: false`):
9
+ *
10
+ * <|channel>thought ...reasoning... <channel|> reasoning channel
11
+ * <|tool_call>call:name{k:<|"|>v<|"|>,n:3}<tool_call|> tool call
12
+ *
13
+ * Tool-call arguments are NOT JSON: keys are bare, strings are wrapped in the
14
+ * <|"|> quote token, numbers/booleans are bare (see the model's
15
+ * chat_template.jinja `format_argument` macro). `gemmaArgsToJson` converts
16
+ * that into a standard JSON string.
17
+ *
18
+ * Request-side protocol (implemented in the OpenAI provider):
19
+ * - always send `skip_special_tokens: false`
20
+ * - send `tools` with `tool_choice: 'none'` — vLLM still renders the
21
+ * declarations into the chat template, it just skips its (absent) parser
22
+ * - send history tool turns structurally (assistant `tool_calls` +
23
+ * `role: 'tool'` messages) — the chat template renders them natively
24
+ */
25
+ import { extractGemmaThoughtChannels } from './gemma-channel.js';
26
+ /** Models that speak this native protocol when served by vLLM. */
27
+ export function isGemmaDiffusionModel(model) {
28
+ return /diffusion[-_]?gemma/i.test(model);
29
+ }
30
+ const TOOL_CALL_BLOCK = /<\|tool_call>\s*call:([a-zA-Z0-9_.-]+)\s*\{([\s\S]*?)\}\s*<tool_call\|>/g;
31
+ /**
32
+ * Residual control tokens that may leak into text output — including stray
33
+ * unbalanced channel markers (the model occasionally emits an extra
34
+ * <channel|> closer mid-answer).
35
+ */
36
+ const RESIDUAL_SPECIAL = /<\|?(?:turn|think|image|audio|video|tool_response|tool_call|tool|channel)\b[^>]*?\|?>|<(?:turn|channel|tool_response|tool_call|tool)\|>/g;
37
+ const QUOTE_TOKEN = '<|"|>';
38
+ /**
39
+ * Convert the Gemma template's pseudo-JSON argument syntax to a JSON string.
40
+ * Lenient by design: bare words that aren't numbers/booleans become strings,
41
+ * since the model occasionally omits the quote token.
42
+ */
43
+ export function gemmaArgsToJson(body) {
44
+ // Argument bodies arrive without their outer braces (the regex strips them)
45
+ const src = `{${body}}`;
46
+ let i = 0;
47
+ const n = src.length;
48
+ function skipWs() {
49
+ while (i < n && /\s/.test(src[i]))
50
+ i++;
51
+ }
52
+ function parseQuoted() {
53
+ // positioned at the start of QUOTE_TOKEN
54
+ i += QUOTE_TOKEN.length;
55
+ const end = src.indexOf(QUOTE_TOKEN, i);
56
+ const raw = end === -1 ? src.slice(i) : src.slice(i, end);
57
+ i = end === -1 ? n : end + QUOTE_TOKEN.length;
58
+ return raw;
59
+ }
60
+ function parseBare(stops) {
61
+ const start = i;
62
+ while (i < n && !stops.includes(src[i]) && !src.startsWith(QUOTE_TOKEN, i))
63
+ i++;
64
+ return src.slice(start, i).trim();
65
+ }
66
+ function parseValue() {
67
+ skipWs();
68
+ if (src.startsWith(QUOTE_TOKEN, i))
69
+ return JSON.stringify(parseQuoted());
70
+ const c = src[i];
71
+ if (c === '{')
72
+ return parseObject();
73
+ if (c === '[')
74
+ return parseArray();
75
+ const bare = parseBare(',}]');
76
+ if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(bare))
77
+ return bare;
78
+ if (bare === 'true' || bare === 'false' || bare === 'null')
79
+ return bare;
80
+ return JSON.stringify(bare);
81
+ }
82
+ function parseObject() {
83
+ i++; // consume {
84
+ const parts = [];
85
+ skipWs();
86
+ while (i < n && src[i] !== '}') {
87
+ skipWs();
88
+ const key = src.startsWith(QUOTE_TOKEN, i) ? parseQuoted() : parseBare(':');
89
+ skipWs();
90
+ if (src[i] === ':')
91
+ i++;
92
+ const value = parseValue();
93
+ parts.push(`${JSON.stringify(key.trim())}:${value}`);
94
+ skipWs();
95
+ if (src[i] === ',')
96
+ i++;
97
+ skipWs();
98
+ }
99
+ i++; // consume }
100
+ return `{${parts.join(',')}}`;
101
+ }
102
+ function parseArray() {
103
+ i++; // consume [
104
+ const parts = [];
105
+ skipWs();
106
+ while (i < n && src[i] !== ']') {
107
+ parts.push(parseValue());
108
+ skipWs();
109
+ if (src[i] === ',')
110
+ i++;
111
+ skipWs();
112
+ }
113
+ i++; // consume ]
114
+ return `[${parts.join(',')}]`;
115
+ }
116
+ skipWs();
117
+ return parseObject();
118
+ }
119
+ /**
120
+ * Parse a complete raw DiffusionGemma output into reasoning, tool calls and
121
+ * clean answer text.
122
+ */
123
+ export function parseGemmaDiffusionOutput(raw) {
124
+ if (!raw)
125
+ return { content: raw, reasoning: '', toolCalls: [] };
126
+ const toolCalls = [];
127
+ let text = raw.replace(TOOL_CALL_BLOCK, (_m, name, args) => {
128
+ toolCalls.push({ name, argumentsJson: gemmaArgsToJson(args) });
129
+ return '';
130
+ });
131
+ const channels = extractGemmaThoughtChannels(text);
132
+ text = channels.content;
133
+ // Unterminated thought channel (model hit max_tokens mid-reasoning)
134
+ let reasoning = channels.reasoning;
135
+ const danglingThought = text.match(/<\|channel>\s*thought\s*\r?\n?([\s\S]*)$/i);
136
+ if (danglingThought) {
137
+ reasoning = reasoning ? `${reasoning}\n\n${danglingThought[1].trim()}` : danglingThought[1].trim();
138
+ text = text.slice(0, danglingThought.index);
139
+ }
140
+ text = text.replace(RESIDUAL_SPECIAL, '');
141
+ return {
142
+ content: text.trim(),
143
+ reasoning,
144
+ toolCalls,
145
+ };
146
+ }
147
+ //# sourceMappingURL=gemma-diffusion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemma-diffusion.js","sourceRoot":"","sources":["../src/gemma-diffusion.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -44,6 +44,10 @@ export declare function parseSSE(stream: AsyncGenerator<string>): AsyncGenerator
44
44
  }, void, unknown>;
45
45
  /**
46
46
  * Build standard headers for LLM API requests.
47
+ * Merges any provider-specific extraHeaders (from ProviderConfig) on top.
48
+ * Provider clients can still fully override (e.g. Anthropic uses x-api-key).
49
+ *
50
+ * Respects authHeader / authPrefix from config for Azure-style or gateway auth.
47
51
  */
48
52
  export declare function buildHeaders(options: LLMClientOptions): Record<string, string>;
49
53
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMxD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GACjC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CA6C1B;AAMD;;;GAGG;AACH,wBAAuB,UAAU,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GACjC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAoDvC;AAMD;;;GAGG;AACH,wBAAuB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAC/B,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CA4BlC;AAED;;;GAGG;AACH,wBAAuB,QAAQ,CAC3B,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAC/B,cAAc,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CA6BjE;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU9E"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMxD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GACjC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CA6C1B;AAMD;;;GAGG;AACH,wBAAuB,UAAU,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GACjC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAoDvC;AAMD;;;GAGG;AACH,wBAAuB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAC/B,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CA4BlC;AAED;;;GAGG;AACH,wBAAuB,QAAQ,CAC3B,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAC/B,cAAc,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CA6BjE;AAMD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9E"}
package/dist/http.js CHANGED
@@ -174,13 +174,26 @@ export async function* parseSSE(stream) {
174
174
  // ============================================================================
175
175
  /**
176
176
  * Build standard headers for LLM API requests.
177
+ * Merges any provider-specific extraHeaders (from ProviderConfig) on top.
178
+ * Provider clients can still fully override (e.g. Anthropic uses x-api-key).
179
+ *
180
+ * Respects authHeader / authPrefix from config for Azure-style or gateway auth.
177
181
  */
178
182
  export function buildHeaders(options) {
179
183
  const headers = {
180
184
  'Content-Type': 'application/json',
181
185
  };
182
186
  if (options.apiKey) {
183
- headers['Authorization'] = `Bearer ${options.apiKey}`;
187
+ const headerName = options.authHeader || 'Authorization';
188
+ // Sensible default prefix: Bearer for Authorization, nothing for api-key / x-api-key etc.
189
+ const defaultPrefix = headerName.toLowerCase() === 'authorization' ? 'Bearer ' : '';
190
+ const prefix = options.authPrefix !== undefined ? options.authPrefix : defaultPrefix;
191
+ headers[headerName] = `${prefix}${options.apiKey}`.trim();
192
+ }
193
+ // Merge provider-specific extras (e.g. Azure 'api-key', custom gateway headers).
194
+ // Later entries win on conflicts, allowing complete override of auth.
195
+ if (options.extraHeaders) {
196
+ Object.assign(headers, options.extraHeaders);
184
197
  }
185
198
  return headers;
186
199
  }
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Universal LLM Client v3 — HTTP Utilities\r\n *\r\n * Zero-dependency HTTP layer using native fetch.\r\n * Works on Node 22+, Bun, Deno, and browsers.\r\n */\r\n\r\nimport type { LLMClientOptions } from './interfaces.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface HttpRequestOptions {\r\n method?: 'GET' | 'POST';\r\n headers?: Record<string, string>;\r\n body?: unknown;\r\n timeout?: number;\r\n signal?: AbortSignal;\r\n}\r\n\r\nexport interface HttpResponse<T = unknown> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n /** Response headers (when available) */\r\n headers?: Headers;\r\n}\r\n\r\n// ============================================================================\r\n// HTTP Request\r\n// ============================================================================\r\n\r\n/**\r\n * Make an HTTP request with timeout and error handling.\r\n * Uses native fetch (available in all target runtimes).\r\n */\r\nexport async function httpRequest<T = unknown>(\r\n url: string,\r\n options: HttpRequestOptions = {},\r\n): Promise<HttpResponse<T>> {\r\n const { method = 'GET', headers = {}, body, timeout = 30000, signal } = options;\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n // Combine external signal with timeout\r\n const combinedSignal = signal\r\n ? AbortSignal.any([signal, controller.signal])\r\n : controller.signal;\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers,\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n signal: combinedSignal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text().catch(() => 'Unknown error');\r\n throw new Error(`HTTP ${response.status}: ${errorText}`);\r\n }\r\n\r\n const data = (await response.json()) as T;\r\n\r\n return {\r\n ok: response.ok,\r\n status: response.status,\r\n data,\r\n headers: response.headers,\r\n };\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof Error && error.name === 'AbortError') {\r\n throw new Error(`Request timeout after ${timeout}ms: ${url}`);\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Streaming HTTP\r\n// ============================================================================\r\n\r\n/**\r\n * Make a streaming HTTP request.\r\n * Yields raw string chunks as they arrive.\r\n */\r\nexport async function* httpStream(\r\n url: string,\r\n options: HttpRequestOptions = {},\r\n): AsyncGenerator<string, void, unknown> {\r\n const { method = 'POST', headers = {}, body, timeout = 120000, signal } = options;\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n const combinedSignal = signal\r\n ? AbortSignal.any([signal, controller.signal])\r\n : controller.signal;\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers,\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n signal: combinedSignal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text().catch(() => 'Unknown error');\r\n throw new Error(`HTTP ${response.status}: ${errorText}`);\r\n }\r\n\r\n if (!response.body) {\r\n throw new Error('No response body for streaming');\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n\r\n try {\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n yield decoder.decode(value, { stream: true });\r\n }\r\n } finally {\r\n reader.releaseLock();\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof Error && error.name === 'AbortError') {\r\n throw new Error(`Stream timeout after ${timeout}ms: ${url}`);\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Protocol Parsers\r\n// ============================================================================\r\n\r\n/**\r\n * Parse NDJSON (newline-delimited JSON) stream.\r\n * Used by Ollama's streaming API.\r\n */\r\nexport async function* parseNDJSON<T = unknown>(\r\n stream: AsyncGenerator<string>,\r\n): AsyncGenerator<T, void, unknown> {\r\n let buffer = '';\r\n\r\n for await (const chunk of stream) {\r\n buffer += chunk;\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() ?? '';\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n if (!trimmed) continue;\r\n\r\n try {\r\n yield JSON.parse(trimmed) as T;\r\n } catch {\r\n // Skip invalid JSON lines\r\n }\r\n }\r\n }\r\n\r\n // Handle remaining buffer\r\n if (buffer.trim()) {\r\n try {\r\n yield JSON.parse(buffer) as T;\r\n } catch {\r\n // Skip invalid JSON\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Parse Server-Sent Events stream.\r\n * Used by OpenAI-compatible APIs and LlamaCpp/vLLM.\r\n */\r\nexport async function* parseSSE(\r\n stream: AsyncGenerator<string>,\r\n): AsyncGenerator<{ event?: string; data: string }, void, unknown> {\r\n let buffer = '';\r\n\r\n for await (const chunk of stream) {\r\n buffer += chunk;\r\n\r\n // Split by double newlines (SSE event delimiter)\r\n const events = buffer.split('\\n\\n');\r\n buffer = events.pop() ?? '';\r\n\r\n for (const event of events) {\r\n const lines = event.split('\\n');\r\n let eventType: string | undefined;\r\n const dataLines: string[] = [];\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('event:')) {\r\n eventType = line.slice(6).trim();\r\n } else if (line.startsWith('data:')) {\r\n dataLines.push(line.slice(5).trim());\r\n }\r\n }\r\n\r\n const data = dataLines.join('\\n');\r\n if (data && data !== '[DONE]') {\r\n yield { event: eventType, data };\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Header Utilities\r\n// ============================================================================\r\n\r\n/**\r\n * Build standard headers for LLM API requests.\r\n */\r\nexport function buildHeaders(options: LLMClientOptions): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n };\r\n\r\n if (options.apiKey) {\r\n headers['Authorization'] = `Bearer ${options.apiKey}`;\r\n }\r\n\r\n return headers;\r\n}\r\n"]}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,11 +7,12 @@
7
7
  * @module universal-llm-client
8
8
  */
9
9
  export { AIModel } from './ai-model.js';
10
- export { AIModelApiType, AIModelType, type AIModelConfig, type ProviderConfig, type LLMClientOptions, type LLMChatMessage, type LLMMessageContent, type LLMContentPart, type LLMTextContent, type LLMImageContent, type LLMAudioContent, type LLMChatResponse, type TokenUsageInfo, type LLMToolCall, type LLMToolDefinition, type LLMFunction, type ToolHandler, type ToolExecutionResult, type ToolRegistry, type ToolRegistryEntry, type ChatOptions, type ResponseFormat, type OutputOptions, type ModelMetadata, textContent, imageContent, multimodalMessage, extractTextContent, hasImages, audioContent, hasAudio, } from './interfaces.js';
10
+ export { AIModelApiType, AIModelType, type AIModelConfig, type ProviderConfig, type LLMClientOptions, type LLMChatMessage, type LLMMessageContent, type LLMContentPart, type LLMTextContent, type LLMImageContent, type LLMAudioContent, type LLMChatResponse, type TokenUsageInfo, type LLMToolCall, type LLMToolDefinition, type LLMFunction, type ToolHandler, type ToolExecutionResult, type ToolRegistry, type ToolRegistryEntry, type ChatOptions, type ResponseFormat, type OutputOptions, type ThinkingLevel, type DeepResearchOptions, type DeepResearchResult, type DeepResearchStep, type DeepResearchEvent, type ModelMetadata, textContent, imageContent, multimodalMessage, extractTextContent, hasImages, audioContent, hasAudio, } from './interfaces.js';
11
11
  export { type Auditor, type AuditEvent, type AuditEventType, NoopAuditor, ConsoleAuditor, BufferedAuditor, } from './auditor.js';
12
12
  export { type StreamDecoder, type DecodedEvent, type DecoderCallback, type DecoderType, type DecoderOptions, type DecoderFactory, createDecoder, registerDecoder, getRegisteredDecoders, PassthroughDecoder, StandardChatDecoder, InterleavedReasoningDecoder, } from './stream-decoder.js';
13
13
  export { ToolBuilder, ToolExecutor, createTimeTool, createRandomNumberTool, } from './tools.js';
14
14
  export { httpRequest, httpStream, parseNDJSON, parseSSE, buildHeaders, type HttpRequestOptions, type HttpResponse, } from './http.js';
15
+ export { isGemmaDiffusionModel, parseGemmaDiffusionOutput, gemmaArgsToJson, type GemmaDiffusionParsed, type GemmaParsedToolCall, } from './gemma-diffusion.js';
15
16
  export { MCPToolBridge, type MCPBridgeConfig, type MCPServerConfig, type MCPTool, } from './mcp.js';
16
17
  export { StructuredOutputError, type StructuredOutputErrorOptions, type StructuredOutputOptions, type StructuredOutputResult, type StructuredOutputSuccess, type StructuredOutputFailure, type JSONSchema, type SchemaProvider, type ProviderSchema, type SchemaConfig, isStructuredOutputSuccess, isStructuredOutputFailure, normalizeJsonSchema, convertToProviderSchema, stripUnsupportedFeatures, getJsonSchema, getJsonSchemaFromConfig, parseStructured, tryParseStructured, validateStructuredOutput, stripJsonFences, StreamingJsonParser, type StreamingStructuredResult, } from './structured-output.js';
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAMxC,OAAO,EAEH,cAAc,EACd,WAAW,EAEX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,KAAK,aAAa,EAElB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,GACX,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,WAAW,EACX,cAAc,EACd,eAAe,GAClB,MAAM,cAAc,CAAC;AAMtB,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACH,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACzB,MAAM,YAAY,CAAC;AAMpB,OAAO,EACH,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,YAAY,GACpB,MAAM,WAAW,CAAC;AAMnB,OAAO,EACH,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,OAAO,GACf,MAAM,UAAU,CAAC;AAMlB,OAAO,EACH,qBAAqB,EACrB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,yBAAyB,EACzB,yBAAyB,EAEzB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,aAAa,EACb,uBAAuB,EAEvB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EAEf,mBAAmB,EACnB,KAAK,yBAAyB,GACjC,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAMxC,OAAO,EAEH,cAAc,EACd,WAAW,EAEX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,KAAK,aAAa,EAElB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAElB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,GACX,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,WAAW,EACX,cAAc,EACd,eAAe,GAClB,MAAM,cAAc,CAAC;AAMtB,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACH,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACzB,MAAM,YAAY,CAAC;AAMpB,OAAO,EACH,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,YAAY,GACpB,MAAM,WAAW,CAAC;AAMnB,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GAC3B,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACH,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,OAAO,GACf,MAAM,UAAU,CAAC;AAMlB,OAAO,EACH,qBAAqB,EACrB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,yBAAyB,EACzB,yBAAyB,EAEzB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,aAAa,EACb,uBAAuB,EAEvB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EAEf,mBAAmB,EACnB,KAAK,yBAAyB,GACjC,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -35,6 +35,10 @@ export { ToolBuilder, ToolExecutor, createTimeTool, createRandomNumberTool, } fr
35
35
  // ============================================================================
36
36
  export { httpRequest, httpStream, parseNDJSON, parseSSE, buildHeaders, } from './http.js';
37
37
  // ============================================================================
38
+ // DiffusionGemma Native Protocol (vLLM without server-side parsers)
39
+ // ============================================================================
40
+ export { isGemmaDiffusionModel, parseGemmaDiffusionOutput, gemmaArgsToJson, } from './gemma-diffusion.js';
41
+ // ============================================================================
38
42
  // MCP Integration
39
43
  // ============================================================================
40
44
  export { MCPToolBridge, } from './mcp.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,OAAO;AACH,QAAQ;AACR,cAAc,EACd,WAAW;AA6BX,UAAU;AACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,GACX,MAAM,iBAAiB,CAAC;AAEzB,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,OAAO,EAIH,WAAW,EACX,cAAc,EACd,eAAe,GAClB,MAAM,cAAc,CAAC;AAEtB,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,OAAO,EAOH,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,OAAO,EACH,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACzB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E;AAE/E,OAAO,EACH,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,GAGf,MAAM,WAAW,CAAC;AAEnB,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,OAAO,EACH,aAAa,GAIhB,MAAM,UAAU,CAAC;AAElB,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,OAAO,EACH,qBAAqB,EAUrB,yBAAyB,EACzB,yBAAyB;AACzB,8BAA8B;AAC9B,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,aAAa,EACb,uBAAuB;AACvB,uBAAuB;AACvB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,eAAe;AACf,mBAAmB;AACnB,mBAAmB,GAEtB,MAAM,wBAAwB,CAAC","sourcesContent":["/**\r\n * Universal LLM Client v3\r\n *\r\n * A universal LLM client with transparent provider failover,\r\n * streaming tool execution, pluggable reasoning, and native observability.\r\n *\r\n * @module universal-llm-client\r\n */\r\n\r\n// ============================================================================\r\n// Public API — The Universal Client\r\n// ============================================================================\r\n\r\nexport { AIModel } from './ai-model.js';\r\n\r\n// ============================================================================\r\n// Types & Interfaces\r\n// ============================================================================\r\n\r\nexport {\r\n // Enums\r\n AIModelApiType,\r\n AIModelType,\r\n // Config\r\n type AIModelConfig,\r\n type ProviderConfig,\r\n type LLMClientOptions,\r\n // Messages\r\n type LLMChatMessage,\r\n type LLMMessageContent,\r\n type LLMContentPart,\r\n type LLMTextContent,\r\n type LLMImageContent,\r\n type LLMAudioContent,\r\n // Responses\r\n type LLMChatResponse,\r\n type TokenUsageInfo,\r\n // Tools\r\n type LLMToolCall,\r\n type LLMToolDefinition,\r\n type LLMFunction,\r\n type ToolHandler,\r\n type ToolExecutionResult,\r\n type ToolRegistry,\r\n type ToolRegistryEntry,\r\n // Options\r\n type ChatOptions,\r\n type ResponseFormat,\r\n type OutputOptions,\r\n // Model info\r\n type ModelMetadata,\r\n // Helpers\r\n textContent,\r\n imageContent,\r\n multimodalMessage,\r\n extractTextContent,\r\n hasImages,\r\n audioContent,\r\n hasAudio,\r\n} from './interfaces.js';\r\n\r\n// ============================================================================\r\n// Observability\r\n// ============================================================================\r\n\r\nexport {\r\n type Auditor,\r\n type AuditEvent,\r\n type AuditEventType,\r\n NoopAuditor,\r\n ConsoleAuditor,\r\n BufferedAuditor,\r\n} from './auditor.js';\r\n\r\n// ============================================================================\r\n// Stream Decoding\r\n// ============================================================================\r\n\r\nexport {\r\n type StreamDecoder,\r\n type DecodedEvent,\r\n type DecoderCallback,\r\n type DecoderType,\r\n type DecoderOptions,\r\n type DecoderFactory,\r\n createDecoder,\r\n registerDecoder,\r\n getRegisteredDecoders,\r\n PassthroughDecoder,\r\n StandardChatDecoder,\r\n InterleavedReasoningDecoder,\r\n} from './stream-decoder.js';\r\n\r\n// ============================================================================\r\n// Tool Utilities\r\n// ============================================================================\r\n\r\nexport {\r\n ToolBuilder,\r\n ToolExecutor,\r\n createTimeTool,\r\n createRandomNumberTool,\r\n} from './tools.js';\r\n\r\n// ============================================================================\r\n// HTTP Utilities (for advanced use cases)\r\n// ============================================================================\r\n\r\nexport {\r\n httpRequest,\r\n httpStream,\r\n parseNDJSON,\r\n parseSSE,\r\n buildHeaders,\r\n type HttpRequestOptions,\r\n type HttpResponse,\r\n} from './http.js';\r\n\r\n// ============================================================================\r\n// MCP Integration\r\n// ============================================================================\r\n\r\nexport {\r\n MCPToolBridge,\r\n type MCPBridgeConfig,\r\n type MCPServerConfig,\r\n type MCPTool,\r\n} from './mcp.js';\r\n\r\n// ============================================================================\r\n// Structured Output\r\n// ============================================================================\r\n\r\nexport {\r\n StructuredOutputError,\r\n type StructuredOutputErrorOptions,\r\n type StructuredOutputOptions,\r\n type StructuredOutputResult,\r\n type StructuredOutputSuccess,\r\n type StructuredOutputFailure,\r\n type JSONSchema,\r\n type SchemaProvider,\r\n type ProviderSchema,\r\n type SchemaConfig,\r\n isStructuredOutputSuccess,\r\n isStructuredOutputFailure,\r\n // Schema conversion utilities\r\n normalizeJsonSchema,\r\n convertToProviderSchema,\r\n stripUnsupportedFeatures,\r\n getJsonSchema,\r\n getJsonSchemaFromConfig,\r\n // Validation functions\r\n parseStructured,\r\n tryParseStructured,\r\n validateStructuredOutput,\r\n stripJsonFences,\r\n // Streaming parser\r\n StreamingJsonParser,\r\n type StreamingStructuredResult,\r\n} from './structured-output.js';\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,OAAO;AACH,QAAQ;AACR,cAAc,EACd,WAAW;AAoCX,UAAU;AACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,GACX,MAAM,iBAAiB,CAAC;AAEzB,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,OAAO,EAIH,WAAW,EACX,cAAc,EACd,eAAe,GAClB,MAAM,cAAc,CAAC;AAEtB,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,OAAO,EAOH,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,OAAO,EACH,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACzB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E;AAE/E,OAAO,EACH,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,GAGf,MAAM,WAAW,CAAC;AAEnB,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E;AAE/E,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,GAGlB,MAAM,sBAAsB,CAAC;AAE9B,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,OAAO,EACH,aAAa,GAIhB,MAAM,UAAU,CAAC;AAElB,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,OAAO,EACH,qBAAqB,EAUrB,yBAAyB,EACzB,yBAAyB;AACzB,8BAA8B;AAC9B,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,aAAa,EACb,uBAAuB;AACvB,uBAAuB;AACvB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,eAAe;AACf,mBAAmB;AACnB,mBAAmB,GAEtB,MAAM,wBAAwB,CAAC"}
@@ -43,7 +43,45 @@ export interface ProviderConfig {
43
43
  region?: string;
44
44
  /** Google API version (default: "v1beta") */
45
45
  apiVersion?: 'v1' | 'v1beta';
46
+ /**
47
+ * Extra headers merged into requests, applied by providers that use
48
+ * `buildHeaders` — **OpenAI-compatible and Ollama**. Google/Vertex and
49
+ * Anthropic build their own auth headers and ignore this. Useful for Azure
50
+ * (api-key), custom gateways, or non-standard auth. Merged after the default
51
+ * auth header (later entries win).
52
+ */
53
+ headers?: Record<string, string>;
54
+ /**
55
+ * Extra query parameters appended to request URLs — **OpenAI-compatible
56
+ * provider only**. Useful for Azure OpenAI (e.g. { 'api-version': '2024-10-21' }).
57
+ */
58
+ queryParams?: Record<string, string>;
59
+ /**
60
+ * Override the name of the header that carries the API key (default:
61
+ * "Authorization") — **OpenAI-compatible and Ollama only** (via `buildHeaders`).
62
+ * Common alternative for Azure and some gateways: "api-key".
63
+ */
64
+ authHeader?: string;
65
+ /**
66
+ * Prefix placed before the apiKey value in the auth header (OpenAI-compatible
67
+ * and Ollama only). Default: "Bearer " when authHeader is Authorization (or
68
+ * unset), otherwise "". Set to "" explicitly for "api-key: <yourkey>" style auth.
69
+ */
70
+ authPrefix?: string;
71
+ /**
72
+ * For OpenAI-compatible providers only: the URL path segment to append after the base URL.
73
+ * Default: "/v1".
74
+ * Set to "" (or "/") to disable the automatic append. This is required when supplying
75
+ * a full Azure deployment URL such as ".../deployments/my-deploy".
76
+ */
77
+ apiBasePath?: string;
46
78
  }
79
+ /**
80
+ * Unified reasoning-effort level. Mapped to each provider's native control:
81
+ * Gemini 3.x `thinkingConfig.thinkingLevel`, OpenAI `reasoning_effort`,
82
+ * Gemini 2.5 `thinkingBudget`, Anthropic `budget_tokens`, vLLM/Ollama on/off.
83
+ */
84
+ export type ThinkingLevel = 'minimal' | 'low' | 'medium' | 'high';
47
85
  export interface AIModelConfig {
48
86
  /** Model name (used across all providers unless overridden) */
49
87
  model: string;
@@ -51,8 +89,8 @@ export interface AIModelConfig {
51
89
  providers: ProviderConfig[];
52
90
  /** Default parameters for all requests (temperature, top_p, etc.) */
53
91
  defaultParameters?: Record<string, unknown>;
54
- /** Enable thinking/reasoning mode */
55
- thinking?: boolean;
92
+ /** Enable thinking/reasoning `true`/`false` or a level ('minimal' | 'low' | 'medium' | 'high'). */
93
+ thinking?: boolean | ThinkingLevel;
56
94
  /** Request timeout in ms (default: 30000) */
57
95
  timeout?: number;
58
96
  /** Retries per provider before failover (default: 2) */
@@ -73,8 +111,8 @@ export interface LLMClientOptions {
73
111
  modelType?: AIModelType;
74
112
  /** Default parameters for requests */
75
113
  defaultParameters?: Record<string, unknown>;
76
- /** Enable thinking/reasoning mode */
77
- thinking?: boolean;
114
+ /** Enable thinking/reasoning `true`/`false` or a level ('minimal' | 'low' | 'medium' | 'high'). */
115
+ thinking?: boolean | ThinkingLevel;
78
116
  /** Request timeout in ms */
79
117
  timeout?: number;
80
118
  /** Number of retries for failed requests */
@@ -87,6 +125,31 @@ export interface LLMClientOptions {
87
125
  region?: string;
88
126
  /** Google API version */
89
127
  apiVersion?: 'v1' | 'v1beta';
128
+ /**
129
+ * Force the DiffusionGemma native channel protocol on/off for
130
+ * OpenAI-compatible backends (skip_special_tokens:false + client-side
131
+ * reasoning/tool-call parsing). Auto-detected from the model name when
132
+ * omitted. See gemma-diffusion.ts.
133
+ */
134
+ gemmaNativeProtocol?: boolean;
135
+ /**
136
+ * Extra headers merged for every request from this provider instance.
137
+ * Populated from ProviderConfig.headers for advanced auth / gateway scenarios
138
+ * (Azure api-key style, custom x- headers, etc.).
139
+ */
140
+ extraHeaders?: Record<string, string>;
141
+ /** Extra query parameters appended to request URLs (from ProviderConfig.queryParams). */
142
+ queryParams?: Record<string, string>;
143
+ /** Auth header name override (from ProviderConfig.authHeader). */
144
+ authHeader?: string;
145
+ /** Auth value prefix (from ProviderConfig.authPrefix). */
146
+ authPrefix?: string;
147
+ /**
148
+ * For openai-compatible clients: the sub-path to append (from ProviderConfig.apiBasePath).
149
+ * Defaults to "/v1"; `undefined` keeps that default. Set to "" or "/" to disable
150
+ * the append (when the base URL already contains the full path).
151
+ */
152
+ apiBasePath?: string;
90
153
  }
91
154
  export interface LLMTextContent {
92
155
  type: 'text';
@@ -235,6 +298,14 @@ export interface ChatOptions {
235
298
  temperature?: number;
236
299
  /** Max tokens to generate */
237
300
  maxTokens?: number;
301
+ /**
302
+ * Enable/disable/level model thinking for this request, overriding the
303
+ * model-level `thinking` config. `true`/`false` or a level
304
+ * ('minimal' | 'low' | 'medium' | 'high'). Mapped per provider: Gemini
305
+ * `thinkingLevel`/`thinkingBudget`, OpenAI `reasoning_effort`, vLLM
306
+ * `enable_thinking`, Anthropic `budget_tokens`, Ollama `think`.
307
+ */
308
+ thinking?: boolean | ThinkingLevel;
238
309
  /** Tool definitions (auto-populated from registry if not set) */
239
310
  tools?: LLMToolDefinition[];
240
311
  /** Tool choice mode */
@@ -245,7 +316,11 @@ export interface ChatOptions {
245
316
  signal?: AbortSignal;
246
317
  /** Enable/disable tool execution for chatWithTools */
247
318
  executeTools?: boolean;
248
- /** Enable prompt caching (Provider specific feature, opt-in for Anthropic) */
319
+ /**
320
+ * Enable provider-side prompt caching when supported.
321
+ * - Anthropic: Adds cache_control: { type: 'ephemeral' } to the system prompt block (most common high-impact pattern).
322
+ * - Other providers: May be passed through via parameters/headers or ignored; consult provider docs.
323
+ */
249
324
  enablePromptCaching?: boolean;
250
325
  /** Maximum tool execution rounds (default: 10) */
251
326
  maxIterations?: number;
@@ -332,9 +407,23 @@ export interface TokenUsageInfo {
332
407
  * via `DecodedEvent { type: 'thinking' }`); consult the provider.
333
408
  */
334
409
  reasoningTokens?: number;
410
+ /**
411
+ * Total request duration in milliseconds. Server-measured where the
412
+ * provider reports it (Ollama `total_duration`); otherwise client-measured
413
+ * wall-clock (OpenAI-compatible / vLLM return no timing in `usage`).
414
+ */
415
+ durationMs?: number;
416
+ /**
417
+ * Decode throughput in output tokens/second. Server-precise for Ollama
418
+ * (`eval_count / eval_duration`); derived from `outputTokens / durationMs`
419
+ * for providers without server-side timing (OpenAI-compatible / vLLM).
420
+ */
421
+ tokensPerSecond?: number;
335
422
  }
336
423
  export interface LLMChatResponse<T = unknown> {
337
424
  message: LLMChatMessage;
425
+ /** Provider finish reason when available (e.g. Ollama done_reason, Google finishReason) */
426
+ finishReason?: string;
338
427
  /** Reasoning/thinking content from the model (if supported) */
339
428
  reasoning?: string;
340
429
  /** Token usage info */
@@ -375,9 +464,16 @@ export interface OllamaResponse {
375
464
  tool_calls?: LLMToolCall[];
376
465
  };
377
466
  done: boolean;
467
+ done_reason?: string;
468
+ /** Total request time in nanoseconds. */
469
+ total_duration?: number;
470
+ /** Model load time in nanoseconds. */
471
+ load_duration?: number;
378
472
  prompt_eval_count?: number;
379
473
  eval_count?: number;
474
+ /** Prompt evaluation time in nanoseconds. */
380
475
  prompt_eval_duration?: number;
476
+ /** Generation time in nanoseconds. */
381
477
  eval_duration?: number;
382
478
  }
383
479
  export interface OpenAIResponse {
@@ -390,6 +486,13 @@ export interface OpenAIResponse {
390
486
  message: {
391
487
  role: string;
392
488
  content: string | null;
489
+ /**
490
+ * Chain-of-thought from reasoning models exposed via a dedicated
491
+ * field (vLLM `--reasoning-parser`, DeepSeek-R1, etc.). vLLM uses
492
+ * `reasoning_content`; some gateways use `reasoning`.
493
+ */
494
+ reasoning?: string;
495
+ reasoning_content?: string;
393
496
  tool_calls?: LLMToolCall[];
394
497
  };
395
498
  finish_reason: string;
@@ -426,8 +529,8 @@ export interface OpenAIModelInfo {
426
529
  export interface GooglePart {
427
530
  text?: string;
428
531
  functionCall?: {
429
- name: string;
430
- args: Record<string, unknown>;
532
+ name?: string;
533
+ args?: Record<string, unknown>;
431
534
  };
432
535
  functionResponse?: {
433
536
  name: string;
@@ -437,6 +540,8 @@ export interface GooglePart {
437
540
  mimeType: string;
438
541
  data: string;
439
542
  };
543
+ /** True when this part is a reasoning summary (requires `includeThoughts`). */
544
+ thought?: boolean;
440
545
  /** Gemini 3.x thought signature — must be echoed back on functionCall parts */
441
546
  thoughtSignature?: string;
442
547
  }
@@ -507,6 +612,57 @@ export interface GoogleResponse {
507
612
  thoughtsTokenCount?: number;
508
613
  };
509
614
  }
615
+ /** Options for an agentic Deep Research interaction (Gemini-only). */
616
+ export interface DeepResearchOptions {
617
+ /** Research agent id (default 'deep-research-preview-04-2026'). */
618
+ agent?: string;
619
+ /** Tools the agent may use, e.g. 'google_search', 'url_context', 'code_execution'. */
620
+ tools?: string[];
621
+ /** Emit intermediate reasoning ('auto') or not ('none'). Default 'auto'. */
622
+ thinkingSummaries?: 'auto' | 'none';
623
+ /** Continue a prior interaction (follow-up question). */
624
+ previousInteractionId?: string;
625
+ /** Poll interval in ms while awaiting completion (default 5000). */
626
+ pollIntervalMs?: number;
627
+ /** Overall timeout in ms before giving up the poll loop (default 600000). */
628
+ timeoutMs?: number;
629
+ /** Abort signal forwarded to every request. */
630
+ signal?: AbortSignal;
631
+ }
632
+ /** One intermediate step in a Deep Research interaction. */
633
+ export interface DeepResearchStep {
634
+ type?: string;
635
+ content?: Array<{
636
+ text?: string;
637
+ [k: string]: unknown;
638
+ }>;
639
+ [k: string]: unknown;
640
+ }
641
+ /** Terminal (or last-polled) state of a Deep Research interaction. */
642
+ export interface DeepResearchResult {
643
+ id: string;
644
+ status: 'in_progress' | 'completed' | 'failed' | string;
645
+ /** Final research report (`output_text`) when completed. */
646
+ report?: string;
647
+ steps?: DeepResearchStep[];
648
+ error?: unknown;
649
+ /** The raw last interaction object from the API. */
650
+ raw?: unknown;
651
+ }
652
+ /** Streaming Deep Research event (from `step.delta` updates). */
653
+ export type DeepResearchEvent = {
654
+ type: 'thought';
655
+ content: string;
656
+ } | {
657
+ type: 'text';
658
+ content: string;
659
+ } | {
660
+ type: 'image';
661
+ content: unknown;
662
+ } | {
663
+ type: 'status';
664
+ status: string;
665
+ };
510
666
  /** Create a text content part */
511
667
  export declare function textContent(text: string): LLMTextContent;
512
668
  /** Create an image content part from base64 data or URL */
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}