@venturekit-pro/ai 0.0.48 → 0.0.50

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 (147) hide show
  1. package/README.md +192 -0
  2. package/dist/agent-loop/index.d.ts +9 -0
  3. package/dist/agent-loop/index.d.ts.map +1 -0
  4. package/dist/agent-loop/index.js +7 -0
  5. package/dist/agent-loop/index.js.map +1 -0
  6. package/dist/agent-loop/registry.d.ts +85 -0
  7. package/dist/agent-loop/registry.d.ts.map +1 -0
  8. package/dist/agent-loop/registry.js +100 -0
  9. package/dist/agent-loop/registry.js.map +1 -0
  10. package/dist/agent-loop/run-agent.d.ts +37 -0
  11. package/dist/agent-loop/run-agent.d.ts.map +1 -0
  12. package/dist/agent-loop/run-agent.js +405 -0
  13. package/dist/agent-loop/run-agent.js.map +1 -0
  14. package/dist/agent-loop/tools.d.ts +10 -0
  15. package/dist/agent-loop/tools.d.ts.map +1 -0
  16. package/dist/agent-loop/tools.js +28 -0
  17. package/dist/agent-loop/tools.js.map +1 -0
  18. package/dist/agent-loop/types.d.ts +175 -0
  19. package/dist/agent-loop/types.d.ts.map +1 -0
  20. package/dist/agent-loop/types.js +8 -0
  21. package/dist/agent-loop/types.js.map +1 -0
  22. package/dist/chat/types.d.ts +4 -2
  23. package/dist/chat/types.d.ts.map +1 -1
  24. package/dist/cost/types.d.ts +15 -0
  25. package/dist/cost/types.d.ts.map +1 -1
  26. package/dist/cost-ledger/migrations/vk_ai_cost_0004_llm_gateway.sql +69 -0
  27. package/dist/cost-ledger/migrations/vk_ai_cost_0005_harness.sql +99 -0
  28. package/dist/cost-ledger/migrations/vk_ai_cost_0006_cache_write_prices.sql +17 -0
  29. package/dist/cost-ledger/migrations/vk_ai_cost_0007_harness_fan_out.sql +47 -0
  30. package/dist/gateway/errors.d.ts +24 -0
  31. package/dist/gateway/errors.d.ts.map +1 -0
  32. package/dist/gateway/errors.js +29 -0
  33. package/dist/gateway/errors.js.map +1 -0
  34. package/dist/gateway/gateway.d.ts +27 -0
  35. package/dist/gateway/gateway.d.ts.map +1 -0
  36. package/dist/gateway/gateway.js +503 -0
  37. package/dist/gateway/gateway.js.map +1 -0
  38. package/dist/gateway/index.d.ts +13 -0
  39. package/dist/gateway/index.d.ts.map +1 -0
  40. package/dist/gateway/index.js +10 -0
  41. package/dist/gateway/index.js.map +1 -0
  42. package/dist/gateway/policies.d.ts +32 -0
  43. package/dist/gateway/policies.d.ts.map +1 -0
  44. package/dist/gateway/policies.js +45 -0
  45. package/dist/gateway/policies.js.map +1 -0
  46. package/dist/gateway/postgres.d.ts +55 -0
  47. package/dist/gateway/postgres.d.ts.map +1 -0
  48. package/dist/gateway/postgres.js +127 -0
  49. package/dist/gateway/postgres.js.map +1 -0
  50. package/dist/gateway/pricing.d.ts +11 -0
  51. package/dist/gateway/pricing.d.ts.map +1 -0
  52. package/dist/gateway/pricing.js +47 -0
  53. package/dist/gateway/pricing.js.map +1 -0
  54. package/dist/gateway/routing.d.ts +25 -0
  55. package/dist/gateway/routing.d.ts.map +1 -0
  56. package/dist/gateway/routing.js +23 -0
  57. package/dist/gateway/routing.js.map +1 -0
  58. package/dist/gateway/types.d.ts +225 -0
  59. package/dist/gateway/types.d.ts.map +1 -0
  60. package/dist/gateway/types.js +7 -0
  61. package/dist/gateway/types.js.map +1 -0
  62. package/dist/generate/anthropic.d.ts +38 -0
  63. package/dist/generate/anthropic.d.ts.map +1 -0
  64. package/dist/generate/anthropic.js +446 -0
  65. package/dist/generate/anthropic.js.map +1 -0
  66. package/dist/generate/client.d.ts +9 -0
  67. package/dist/generate/client.d.ts.map +1 -0
  68. package/dist/generate/client.js +44 -0
  69. package/dist/generate/client.js.map +1 -0
  70. package/dist/generate/google.d.ts +39 -0
  71. package/dist/generate/google.d.ts.map +1 -0
  72. package/dist/generate/google.js +372 -0
  73. package/dist/generate/google.js.map +1 -0
  74. package/dist/generate/http.d.ts +48 -0
  75. package/dist/generate/http.d.ts.map +1 -0
  76. package/dist/generate/http.js +180 -0
  77. package/dist/generate/http.js.map +1 -0
  78. package/dist/generate/index.d.ts +13 -0
  79. package/dist/generate/index.d.ts.map +1 -0
  80. package/dist/generate/index.js +12 -0
  81. package/dist/generate/index.js.map +1 -0
  82. package/dist/generate/openai.d.ts +29 -0
  83. package/dist/generate/openai.d.ts.map +1 -0
  84. package/dist/generate/openai.js +314 -0
  85. package/dist/generate/openai.js.map +1 -0
  86. package/dist/generate/perplexity.d.ts +27 -0
  87. package/dist/generate/perplexity.d.ts.map +1 -0
  88. package/dist/generate/perplexity.js +208 -0
  89. package/dist/generate/perplexity.js.map +1 -0
  90. package/dist/generate/types.d.ts +253 -0
  91. package/dist/generate/types.d.ts.map +1 -0
  92. package/dist/generate/types.js +19 -0
  93. package/dist/generate/types.js.map +1 -0
  94. package/dist/harness/define.d.ts +15 -0
  95. package/dist/harness/define.d.ts.map +1 -0
  96. package/dist/harness/define.js +38 -0
  97. package/dist/harness/define.js.map +1 -0
  98. package/dist/harness/harness.d.ts +29 -0
  99. package/dist/harness/harness.d.ts.map +1 -0
  100. package/dist/harness/harness.js +1287 -0
  101. package/dist/harness/harness.js.map +1 -0
  102. package/dist/harness/index.d.ts +14 -0
  103. package/dist/harness/index.d.ts.map +1 -0
  104. package/dist/harness/index.js +10 -0
  105. package/dist/harness/index.js.map +1 -0
  106. package/dist/harness/memory-store.d.ts +8 -0
  107. package/dist/harness/memory-store.d.ts.map +1 -0
  108. package/dist/harness/memory-store.js +270 -0
  109. package/dist/harness/memory-store.js.map +1 -0
  110. package/dist/harness/postgres-store.d.ts +12 -0
  111. package/dist/harness/postgres-store.d.ts.map +1 -0
  112. package/dist/harness/postgres-store.js +368 -0
  113. package/dist/harness/postgres-store.js.map +1 -0
  114. package/dist/harness/scheduler.d.ts +12 -0
  115. package/dist/harness/scheduler.d.ts.map +1 -0
  116. package/dist/harness/scheduler.js +23 -0
  117. package/dist/harness/scheduler.js.map +1 -0
  118. package/dist/harness/store.d.ts +172 -0
  119. package/dist/harness/store.d.ts.map +1 -0
  120. package/dist/harness/store.js +21 -0
  121. package/dist/harness/store.js.map +1 -0
  122. package/dist/harness/types.d.ts +312 -0
  123. package/dist/harness/types.d.ts.map +1 -0
  124. package/dist/harness/types.js +11 -0
  125. package/dist/harness/types.js.map +1 -0
  126. package/dist/index.d.ts +12 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +11 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/model-catalog/crud.d.ts.map +1 -1
  131. package/dist/model-catalog/crud.js +33 -2
  132. package/dist/model-catalog/crud.js.map +1 -1
  133. package/dist/model-catalog/types.d.ts +20 -0
  134. package/dist/model-catalog/types.d.ts.map +1 -1
  135. package/dist/tracing/index.d.ts +68 -0
  136. package/dist/tracing/index.d.ts.map +1 -0
  137. package/dist/tracing/index.js +72 -0
  138. package/dist/tracing/index.js.map +1 -0
  139. package/dist/tracing/recording.d.ts +23 -0
  140. package/dist/tracing/recording.d.ts.map +1 -0
  141. package/dist/tracing/recording.js +49 -0
  142. package/dist/tracing/recording.js.map +1 -0
  143. package/package.json +7 -4
  144. package/src/cost-ledger/migrations/vk_ai_cost_0004_llm_gateway.sql +69 -0
  145. package/src/cost-ledger/migrations/vk_ai_cost_0005_harness.sql +99 -0
  146. package/src/cost-ledger/migrations/vk_ai_cost_0006_cache_write_prices.sql +17 -0
  147. package/src/cost-ledger/migrations/vk_ai_cost_0007_harness_fan_out.sql +47 -0
@@ -0,0 +1,446 @@
1
+ /**
2
+ * Anthropic `generate` adapter — Messages API with function tools, the
3
+ * native web search tool (`web_search_20250305`), document / image inputs,
4
+ * prompt caching (`cache_control` breakpoints, 5-minute or 1-hour) and
5
+ * streaming.
6
+ *
7
+ * Structured output: when the call has no other tools, the schema becomes
8
+ * one forced tool whose input IS the answer (exact schema adherence);
9
+ * otherwise the schema is stated in the system prompt and the reply parsed.
10
+ *
11
+ * The assistant's raw content blocks are returned as `providerState` and
12
+ * replayed verbatim on the next turn — server-tool blocks (searches and
13
+ * their results) must travel with the conversation.
14
+ */
15
+ import { DEFAULT_GENERATE_TIMEOUT_MS, jsonInstruction, parseArguments, parseJsonText, postJson, postSse, safeName, } from './http.js';
16
+ import { THINKING_BUDGET } from './types.js';
17
+ const ANTHROPIC_VERSION = '2023-06-01';
18
+ /** Anthropic accepts at most 4 `cache_control` breakpoints per request. */
19
+ const MAX_CACHE_BREAKPOINTS = 4;
20
+ /** Content blocks that may carry `cache_control`. */
21
+ const CACHEABLE_BLOCKS = new Set(['text', 'image', 'document', 'tool_use', 'tool_result']);
22
+ function prepare(config, request, stream) {
23
+ const baseUrl = (config.baseUrl ?? 'https://api.anthropic.com').replace(/\/+$/, '');
24
+ const { system, systemCache, messages, breakpoints } = toAnthropicMessages(request.messages, request.cache);
25
+ const tools = (request.tools ?? []).map((t) => ({
26
+ name: t.name,
27
+ description: t.description,
28
+ input_schema: t.inputSchema,
29
+ }));
30
+ if (request.webSearch) {
31
+ const ws = request.webSearch;
32
+ tools.push({
33
+ type: 'web_search_20250305',
34
+ name: 'web_search',
35
+ ...(ws.maxUses ? { max_uses: ws.maxUses } : {}),
36
+ ...(ws.allowedDomains?.length ? { allowed_domains: ws.allowedDomains } : {}),
37
+ ...(ws.blockedDomains?.length ? { blocked_domains: ws.blockedDomains } : {}),
38
+ ...(ws.userLocation ? { user_location: { type: 'approximate', ...ws.userLocation } } : {}),
39
+ });
40
+ }
41
+ let systemText = system;
42
+ let forcedTool;
43
+ const format = request.responseFormat;
44
+ if (format) {
45
+ if (format.type === 'json_schema' && tools.length === 0) {
46
+ forcedTool = safeName(format.name);
47
+ tools.push({
48
+ name: forcedTool,
49
+ description: 'Return the final answer as structured data.',
50
+ input_schema: format.schema,
51
+ });
52
+ }
53
+ else {
54
+ systemText = [systemText, jsonInstruction(format)].filter(Boolean).join('\n\n');
55
+ }
56
+ }
57
+ const body = {
58
+ model: request.model,
59
+ max_tokens: request.maxTokens ?? 4096,
60
+ messages,
61
+ };
62
+ if (systemText)
63
+ body.system = systemCache
64
+ ? [{ type: 'text', text: systemText, cache_control: cacheControl(request.cache) }]
65
+ : systemText;
66
+ // Caching asked for with no breakpoint: Anthropic places it on the last cacheable block.
67
+ if (request.cache && !systemCache && breakpoints === 0)
68
+ body.cache_control = cacheControl(request.cache);
69
+ if (request.temperature !== undefined)
70
+ body.temperature = request.temperature;
71
+ if (request.topP !== undefined)
72
+ body.top_p = request.topP;
73
+ if (request.stop?.length)
74
+ body.stop_sequences = request.stop;
75
+ let forcesTool = false;
76
+ if (tools.length > 0) {
77
+ body.tools = tools;
78
+ const choice = forcedTool ? { type: 'tool', name: forcedTool } : toolChoice(request.toolChoice);
79
+ if (choice)
80
+ body.tool_choice = choice;
81
+ forcesTool = !!choice && (choice.type === 'tool' || choice.type === 'any');
82
+ }
83
+ // Extended thinking: refused with a forced tool (structured output goes through one), and
84
+ // it wants the default sampling and room for the budget in `max_tokens`.
85
+ if (request.effort && !forcesTool) {
86
+ const budget = THINKING_BUDGET[request.effort];
87
+ body.thinking = { type: 'enabled', budget_tokens: budget };
88
+ body.max_tokens = Math.max(Number(body.max_tokens), budget + 1024);
89
+ delete body.temperature;
90
+ delete body.top_p;
91
+ }
92
+ if (stream)
93
+ body.stream = true;
94
+ return {
95
+ forcedTool,
96
+ post: {
97
+ provider: 'anthropic',
98
+ url: `${baseUrl}/v1/messages`,
99
+ headers: {
100
+ 'x-api-key': config.apiKey,
101
+ 'anthropic-version': ANTHROPIC_VERSION,
102
+ ...(request.idempotencyKey ? { 'Idempotency-Key': request.idempotencyKey } : {}),
103
+ },
104
+ body,
105
+ timeoutMs: request.timeoutMs ?? config.timeoutMs ?? DEFAULT_GENERATE_TIMEOUT_MS,
106
+ ...(request.signal ? { signal: request.signal } : {}),
107
+ ...(config.fetch ? { fetchImpl: config.fetch } : {}),
108
+ },
109
+ };
110
+ }
111
+ export async function generateWithAnthropic(config, request) {
112
+ const startedAt = Date.now();
113
+ const prepared = prepare(config, request, false);
114
+ const json = await postJson(prepared.post);
115
+ return toResult(json, request, prepared.forcedTool, startedAt);
116
+ }
117
+ /** Streams a Messages call; the final `done` result is built exactly as `generateWithAnthropic` builds it. */
118
+ export async function* streamWithAnthropic(config, request) {
119
+ const startedAt = Date.now();
120
+ const prepared = prepare(config, request, true);
121
+ const blocks = [];
122
+ const partialJson = new Map();
123
+ const usage = {};
124
+ let stopReason = null;
125
+ for await (const message of postSse(prepared.post)) {
126
+ const event = JSON.parse(message.data);
127
+ switch (event.type) {
128
+ case 'message_start':
129
+ mergeUsage(usage, event.message?.usage);
130
+ break;
131
+ case 'content_block_start': {
132
+ const block = { ...event.content_block };
133
+ if (block.type === 'text' && typeof block.text !== 'string')
134
+ block.text = '';
135
+ if (block.type === 'tool_use' || block.type === 'server_tool_use')
136
+ partialJson.set(event.index, '');
137
+ blocks[event.index] = block;
138
+ break;
139
+ }
140
+ case 'content_block_delta': {
141
+ const block = blocks[event.index];
142
+ const delta = event.delta;
143
+ if (!block)
144
+ break;
145
+ if (delta.type === 'text_delta' && typeof delta.text === 'string') {
146
+ block.text = `${block.text ?? ''}${delta.text}`;
147
+ yield { type: 'text', delta: delta.text };
148
+ }
149
+ else if (delta.type === 'input_json_delta' && typeof delta.partial_json === 'string') {
150
+ partialJson.set(event.index, `${partialJson.get(event.index) ?? ''}${delta.partial_json}`);
151
+ }
152
+ else if (delta.type === 'citations_delta' && delta.citation) {
153
+ block.citations = [...(block.citations ?? []), delta.citation];
154
+ }
155
+ break;
156
+ }
157
+ case 'content_block_stop': {
158
+ const block = blocks[event.index];
159
+ if (!block)
160
+ break;
161
+ if (partialJson.has(event.index)) {
162
+ block.input = parseArguments(partialJson.get(event.index));
163
+ partialJson.delete(event.index);
164
+ }
165
+ if (block.type === 'tool_use' &&
166
+ typeof block.name === 'string' &&
167
+ block.name !== prepared.forcedTool) {
168
+ yield {
169
+ type: 'tool_call',
170
+ call: {
171
+ id: String(block.id),
172
+ name: block.name,
173
+ arguments: block.input,
174
+ },
175
+ };
176
+ }
177
+ else if (block.type === 'server_tool_use' && block.name === 'web_search') {
178
+ const query = block.input?.query;
179
+ if (typeof query === 'string')
180
+ yield { type: 'search', query };
181
+ }
182
+ break;
183
+ }
184
+ case 'message_delta':
185
+ stopReason = event.delta?.stop_reason ?? stopReason;
186
+ mergeUsage(usage, event.usage);
187
+ break;
188
+ case 'error':
189
+ throw streamError(event.error);
190
+ default:
191
+ // ping, message_stop
192
+ break;
193
+ }
194
+ }
195
+ yield {
196
+ type: 'done',
197
+ result: toResult({ content: blocks.filter(Boolean), stop_reason: stopReason, usage }, request, prepared.forcedTool, startedAt),
198
+ };
199
+ }
200
+ function toResult(json, request, forcedTool, startedAt) {
201
+ const content = json.content ?? [];
202
+ let text = '';
203
+ let structured;
204
+ const toolCalls = [];
205
+ const citations = [];
206
+ const searchResults = [];
207
+ const searchQueries = [];
208
+ for (const block of content) {
209
+ if (block.type === 'text' && typeof block.text === 'string') {
210
+ text += block.text;
211
+ for (const c of block.citations ?? []) {
212
+ if (typeof c.url === 'string') {
213
+ citations.push({
214
+ url: c.url,
215
+ ...(typeof c.title === 'string' ? { title: c.title } : {}),
216
+ ...(typeof c.cited_text === 'string' ? { citedText: c.cited_text } : {}),
217
+ });
218
+ }
219
+ }
220
+ }
221
+ else if (block.type === 'tool_use' && typeof block.name === 'string') {
222
+ const input = (block.input && typeof block.input === 'object' ? block.input : {});
223
+ if (forcedTool && block.name === forcedTool)
224
+ structured = input;
225
+ else
226
+ toolCalls.push({ id: String(block.id), name: block.name, arguments: input });
227
+ }
228
+ else if (block.type === 'server_tool_use' && block.name === 'web_search') {
229
+ const query = block.input?.query;
230
+ if (typeof query === 'string')
231
+ searchQueries.push(query);
232
+ }
233
+ else if (block.type === 'web_search_tool_result' && Array.isArray(block.content)) {
234
+ for (const r of block.content) {
235
+ if (r.type === 'web_search_result' && typeof r.url === 'string') {
236
+ searchResults.push({
237
+ url: r.url,
238
+ ...(typeof r.title === 'string' ? { title: r.title } : {}),
239
+ ...(typeof r.page_age === 'string' ? { pageAge: r.page_age } : {}),
240
+ });
241
+ }
242
+ }
243
+ }
244
+ }
245
+ if (forcedTool) {
246
+ text = structured === undefined ? text : JSON.stringify(structured);
247
+ }
248
+ const parsed = forcedTool ? structured : request.responseFormat ? parseJsonText(text) : undefined;
249
+ const usage = json.usage ?? {};
250
+ const cacheRead = usage.cache_read_input_tokens ?? 0;
251
+ const cacheWrite = usage.cache_creation_input_tokens ?? 0;
252
+ const cacheWrite1h = usage.cache_creation?.ephemeral_1h_input_tokens ?? 0;
253
+ const tokensIn = usage.input_tokens === undefined ? null : usage.input_tokens + cacheRead + cacheWrite;
254
+ return {
255
+ provider: 'anthropic',
256
+ model: request.model,
257
+ text,
258
+ ...(parsed !== undefined ? { json: parsed } : {}),
259
+ toolCalls,
260
+ citations: dedupeByUrl(citations),
261
+ searchResults: dedupeByUrl(searchResults),
262
+ searchQueries,
263
+ finishReason: finishReason(json.stop_reason ?? null, toolCalls.length > 0),
264
+ usage: {
265
+ tokensIn,
266
+ cachedTokensIn: usage.input_tokens === undefined ? null : cacheRead,
267
+ ...(cacheWrite > 0 ? { cacheWriteTokensIn: cacheWrite } : {}),
268
+ ...(cacheWrite1h > 0 ? { cacheWrite1hTokensIn: cacheWrite1h } : {}),
269
+ tokensOut: usage.output_tokens ?? null,
270
+ webSearches: usage.server_tool_use?.web_search_requests ?? searchQueries.length,
271
+ },
272
+ latencyMs: Date.now() - startedAt,
273
+ providerState: { provider: 'anthropic', data: content },
274
+ };
275
+ }
276
+ /** Streamed usage arrives in parts (`message_start`, then `message_delta`): later values win. */
277
+ function mergeUsage(into, add) {
278
+ if (!add)
279
+ return;
280
+ for (const [key, value] of Object.entries(add)) {
281
+ if (value === null || value === undefined)
282
+ continue;
283
+ if (typeof value === 'object')
284
+ into[key] = {
285
+ ...(into[key] ?? {}),
286
+ ...value,
287
+ };
288
+ else
289
+ into[key] = value;
290
+ }
291
+ }
292
+ /** A stream `error` event, shaped like an HTTP error so retries classify it the same way. */
293
+ function streamError(error) {
294
+ const type = error?.type ?? 'api_error';
295
+ const status = type === 'overloaded_error'
296
+ ? 529
297
+ : type === 'rate_limit_error'
298
+ ? 429
299
+ : type === 'api_error'
300
+ ? 500
301
+ : type === 'timeout_error'
302
+ ? 504
303
+ : 400;
304
+ return new Error(`[ai/generate/anthropic] ${status} ${type}: ${error?.message ?? 'stream error'}`);
305
+ }
306
+ function cacheControl(cache) {
307
+ return { type: 'ephemeral', ...(cache?.ttl === '1h' ? { ttl: '1h' } : {}) };
308
+ }
309
+ function toolChoice(choice) {
310
+ if (!choice || choice === 'auto')
311
+ return undefined;
312
+ if (choice === 'none')
313
+ return { type: 'none' };
314
+ if (choice === 'required')
315
+ return { type: 'any' };
316
+ return { type: 'tool', name: choice.name };
317
+ }
318
+ function finishReason(raw, calledTools) {
319
+ if (!raw)
320
+ return calledTools ? 'tool_calls' : null;
321
+ switch (raw) {
322
+ case 'end_turn':
323
+ case 'stop_sequence':
324
+ return calledTools ? 'tool_calls' : 'stop';
325
+ case 'max_tokens':
326
+ return 'length';
327
+ case 'tool_use':
328
+ return calledTools ? 'tool_calls' : 'stop';
329
+ case 'refusal':
330
+ return 'content_filter';
331
+ default:
332
+ return raw;
333
+ }
334
+ }
335
+ function partToBlock(part) {
336
+ if (part.type === 'text')
337
+ return { type: 'text', text: part.text };
338
+ if (part.type === 'image')
339
+ return {
340
+ type: 'image',
341
+ source: { type: 'base64', media_type: part.mediaType, data: part.data },
342
+ };
343
+ if (part.mediaType === 'application/pdf') {
344
+ return {
345
+ type: 'document',
346
+ source: { type: 'base64', media_type: part.mediaType, data: part.data },
347
+ ...(part.filename ? { title: part.filename } : {}),
348
+ };
349
+ }
350
+ return {
351
+ type: 'document',
352
+ source: {
353
+ type: 'text',
354
+ media_type: 'text/plain',
355
+ data: Buffer.from(part.data, 'base64').toString('utf8'),
356
+ },
357
+ ...(part.filename ? { title: part.filename } : {}),
358
+ };
359
+ }
360
+ /**
361
+ * Provider-neutral history → Anthropic messages: system split out, tool
362
+ * results grouped into one user turn, consecutive same-role turns merged.
363
+ * Messages marked `cache: true` get a `cache_control` breakpoint on their
364
+ * last block — the system one plus the latest three (Anthropic's limit).
365
+ */
366
+ export function toAnthropicMessages(input, cache) {
367
+ const systemParts = [];
368
+ let systemCache = false;
369
+ const out = [];
370
+ const marks = [];
371
+ const push = (role, blocks, mark) => {
372
+ if (blocks.length === 0)
373
+ return;
374
+ const last = out[out.length - 1];
375
+ if (last && last.role === role)
376
+ last.content.push(...blocks);
377
+ else
378
+ out.push({ role, content: [...blocks] });
379
+ if (mark) {
380
+ const turn = out.length - 1;
381
+ const block = out[turn].content.length - 1;
382
+ if (CACHEABLE_BLOCKS.has(out[turn].content[block].type))
383
+ marks.push({ turn, block });
384
+ }
385
+ };
386
+ for (const m of input) {
387
+ if (m.role === 'system') {
388
+ systemParts.push(m.content);
389
+ if (m.cache)
390
+ systemCache = true;
391
+ }
392
+ else if (m.role === 'user') {
393
+ push('user', typeof m.content === 'string'
394
+ ? m.content
395
+ ? [{ type: 'text', text: m.content }]
396
+ : []
397
+ : m.content.map(partToBlock), m.cache);
398
+ }
399
+ else if (m.role === 'assistant') {
400
+ if (m.providerState?.provider === 'anthropic' &&
401
+ Array.isArray(m.providerState.data) &&
402
+ m.providerState.data.length > 0) {
403
+ push('assistant', m.providerState.data, m.cache);
404
+ continue;
405
+ }
406
+ const blocks = [];
407
+ if (m.content)
408
+ blocks.push({ type: 'text', text: m.content });
409
+ for (const c of m.toolCalls ?? [])
410
+ blocks.push({ type: 'tool_use', id: c.id, name: c.name, input: c.arguments });
411
+ push('assistant', blocks, m.cache);
412
+ }
413
+ else {
414
+ push('user', [
415
+ {
416
+ type: 'tool_result',
417
+ tool_use_id: m.toolCallId,
418
+ content: m.content,
419
+ ...(m.isError ? { is_error: true } : {}),
420
+ },
421
+ ], m.cache);
422
+ }
423
+ }
424
+ if (out.length === 0)
425
+ throw new Error('[ai/generate/anthropic] No user or assistant messages supplied');
426
+ const hasSystem = systemParts.length > 0;
427
+ const kept = marks.slice(-(MAX_CACHE_BREAKPOINTS - (systemCache && hasSystem ? 1 : 0)));
428
+ for (const { turn, block } of kept) {
429
+ // Copy: replayed provider-state blocks belong to the caller's history.
430
+ out[turn].content[block] = {
431
+ ...out[turn].content[block],
432
+ cache_control: cacheControl(cache),
433
+ };
434
+ }
435
+ return {
436
+ system: hasSystem ? systemParts.join('\n\n') : undefined,
437
+ systemCache: systemCache && hasSystem,
438
+ messages: out,
439
+ breakpoints: kept.length,
440
+ };
441
+ }
442
+ function dedupeByUrl(items) {
443
+ const seen = new Set();
444
+ return items.filter((i) => (seen.has(i.url) ? false : (seen.add(i.url), true)));
445
+ }
446
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/generate/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `createGenerateClient` — one `generate()` / `stream()` client per
3
+ * (provider, key). The LLM gateway builds these per call from the catalog
4
+ * + credentials; apps should call the gateway, not this, so every call is
5
+ * priced, policed and audited.
6
+ */
7
+ import type { GenerateClient, GenerateClientConfig } from './types.js';
8
+ export declare function createGenerateClient(config: GenerateClientConfig): GenerateClient;
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/generate/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAgCjF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `createGenerateClient` — one `generate()` / `stream()` client per
3
+ * (provider, key). The LLM gateway builds these per call from the catalog
4
+ * + credentials; apps should call the gateway, not this, so every call is
5
+ * priced, policed and audited.
6
+ */
7
+ import { generateWithAnthropic, streamWithAnthropic } from './anthropic.js';
8
+ import { generateWithGoogle, streamWithGoogle } from './google.js';
9
+ import { generateWithOpenAi, streamWithOpenAi } from './openai.js';
10
+ import { generateWithPerplexity, streamWithPerplexity } from './perplexity.js';
11
+ export function createGenerateClient(config) {
12
+ const { provider, ...adapter } = config;
13
+ switch (provider) {
14
+ case 'anthropic':
15
+ return {
16
+ provider,
17
+ generate: (request) => generateWithAnthropic(adapter, request),
18
+ stream: (request) => streamWithAnthropic(adapter, request),
19
+ };
20
+ case 'openai':
21
+ return {
22
+ provider,
23
+ generate: (request) => generateWithOpenAi(adapter, request),
24
+ stream: (request) => streamWithOpenAi(adapter, request),
25
+ };
26
+ case 'google':
27
+ return {
28
+ provider,
29
+ generate: (request) => generateWithGoogle(adapter, request),
30
+ stream: (request) => streamWithGoogle(adapter, request),
31
+ };
32
+ case 'perplexity':
33
+ return {
34
+ provider,
35
+ generate: (request) => generateWithPerplexity(adapter, request),
36
+ stream: (request) => streamWithPerplexity(adapter, request),
37
+ };
38
+ default: {
39
+ const unknown = provider;
40
+ throw new Error(`[ai/generate] Unsupported provider: ${String(unknown)}`);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/generate/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;IACxC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC9D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;aAC3D,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;aACxD,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;aACxD,CAAC;QACJ,KAAK,YAAY;YACf,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC/D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC;aAC5D,CAAC;QACJ,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,OAAO,GAAU,QAAQ,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Google (Gemini) `generate` adapter — `generateContent` with function
3
+ * declarations (`parametersJsonSchema`), Google Search grounding, inline
4
+ * file / image data and `responseJsonSchema` structured output.
5
+ *
6
+ * Grounding notes:
7
+ * - `groundingChunks` are the pages the search used; `groundingSupports`
8
+ * point at the chunks the answer leans on, which become citations.
9
+ * - Chunk URIs are `vertexaisearch.cloud.google.com/grounding-api-redirect/…`
10
+ * redirects. They are resolved to the real page URL before being
11
+ * returned, so callers can read the host of what was cited.
12
+ *
13
+ * The model's raw parts are returned as `providerState` and replayed on
14
+ * the next turn: Gemini 3 requires the thought signatures attached to
15
+ * `functionCall` parts to come back with them.
16
+ *
17
+ * Prompt caching is implicit (Gemini 2.5+ caches repeated prefixes on its
18
+ * own); cached tokens come back in the usage. `cache` hints are ignored.
19
+ */
20
+ import type { GenerateAdapterConfig, GenerateMessage, GenerateRequest, GenerateResult, GenerateStreamEvent } from './types.js';
21
+ type Part = Record<string, unknown>;
22
+ export declare function generateWithGoogle(config: GenerateAdapterConfig, request: GenerateRequest): Promise<GenerateResult>;
23
+ /**
24
+ * Streams a `streamGenerateContent` call. Chunks are merged into one
25
+ * response (text parts joined unless a thought signature rides on them,
26
+ * function calls kept whole, the last usage and grounding kept), and the
27
+ * final `done` result is built from it exactly as `generateWithGoogle` does.
28
+ */
29
+ export declare function streamWithGoogle(config: GenerateAdapterConfig, request: GenerateRequest): AsyncGenerator<GenerateStreamEvent>;
30
+ /** Provider-neutral history → Gemini `systemInstruction` + `contents`. */
31
+ export declare function toGeminiContents(messages: GenerateMessage[]): {
32
+ system: string | undefined;
33
+ contents: Array<{
34
+ role: 'user' | 'model';
35
+ parts: Part[];
36
+ }>;
37
+ };
38
+ export {};
39
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/generate/google.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,KAAK,EAGV,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAGpB,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA2BpC,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAKzB;AAED;;;;;GAKG;AACH,wBAAuB,gBAAgB,CACrC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,eAAe,GACvB,cAAc,CAAC,mBAAmB,CAAC,CAuErC;AAoLD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG;IAC7D,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5D,CAyDA"}