@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,372 @@
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 { DEFAULT_GENERATE_TIMEOUT_MS, jsonInstruction, parseJsonText, postJson, postSse, } from './http.js';
21
+ import { THINKING_BUDGET } from './types.js';
22
+ /** Prefix of the ids made up for function calls Gemini returned without one. */
23
+ const LOCAL_CALL_ID = 'gcall_';
24
+ const REDIRECT_HOST = 'vertexaisearch.cloud.google.com';
25
+ export async function generateWithGoogle(config, request) {
26
+ const startedAt = Date.now();
27
+ const post = prepare(config, request, false);
28
+ const json = await postJson(post);
29
+ return toResult(json, request, post.fetchImpl ?? fetch, startedAt);
30
+ }
31
+ /**
32
+ * Streams a `streamGenerateContent` call. Chunks are merged into one
33
+ * response (text parts joined unless a thought signature rides on them,
34
+ * function calls kept whole, the last usage and grounding kept), and the
35
+ * final `done` result is built from it exactly as `generateWithGoogle` does.
36
+ */
37
+ export async function* streamWithGoogle(config, request) {
38
+ const startedAt = Date.now();
39
+ const post = prepare(config, request, true);
40
+ const parts = [];
41
+ const merged = {};
42
+ let finish;
43
+ let grounding;
44
+ const queries = new Set();
45
+ for await (const message of postSse(post)) {
46
+ const chunk = JSON.parse(message.data);
47
+ if (chunk.error)
48
+ throw new Error(`[ai/generate/google] ${chunk.error.code ?? 500} ${chunk.error.status ?? 'ERROR'}: ${chunk.error.message ?? 'stream error'}`);
49
+ const candidate = chunk.candidates?.[0];
50
+ for (const part of candidate?.content?.parts ?? []) {
51
+ const last = parts[parts.length - 1];
52
+ const plainText = (p) => typeof p?.text === 'string' &&
53
+ p.thoughtSignature === undefined &&
54
+ p.functionCall === undefined;
55
+ if (plainText(part) &&
56
+ plainText(last) &&
57
+ (last.thought === true) === (part.thought === true)) {
58
+ last.text = `${last.text}${part.text}`;
59
+ }
60
+ else {
61
+ parts.push({ ...part });
62
+ }
63
+ if (typeof part.text === 'string' && part.text && part.thought !== true)
64
+ yield { type: 'text', delta: part.text };
65
+ const call = part.functionCall;
66
+ if (call?.name)
67
+ yield {
68
+ type: 'tool_call',
69
+ call: {
70
+ id: call.id ?? `${LOCAL_CALL_ID}${parts.length - 1}`,
71
+ name: call.name,
72
+ arguments: call.args ?? {},
73
+ },
74
+ };
75
+ }
76
+ if (candidate?.finishReason)
77
+ finish = candidate.finishReason;
78
+ if (candidate?.groundingMetadata) {
79
+ grounding = { ...grounding, ...candidate.groundingMetadata };
80
+ for (const q of candidate.groundingMetadata.webSearchQueries ?? []) {
81
+ if (!queries.has(q)) {
82
+ queries.add(q);
83
+ yield { type: 'search', query: q };
84
+ }
85
+ }
86
+ }
87
+ if (chunk.usageMetadata)
88
+ merged.usageMetadata = chunk.usageMetadata;
89
+ }
90
+ merged.candidates = [
91
+ {
92
+ content: { parts },
93
+ ...(finish ? { finishReason: finish } : {}),
94
+ ...(grounding ? { groundingMetadata: grounding } : {}),
95
+ },
96
+ ];
97
+ yield {
98
+ type: 'done',
99
+ result: await toResult(merged, request, post.fetchImpl ?? fetch, startedAt),
100
+ };
101
+ }
102
+ function prepare(config, request, stream) {
103
+ const baseUrl = (config.baseUrl ?? 'https://generativelanguage.googleapis.com').replace(/\/+$/, '');
104
+ const { system, contents } = toGeminiContents(request.messages);
105
+ const tools = [];
106
+ if (request.tools?.length) {
107
+ tools.push({
108
+ functionDeclarations: request.tools.map((t) => ({
109
+ name: t.name,
110
+ description: t.description,
111
+ parametersJsonSchema: t.inputSchema,
112
+ })),
113
+ });
114
+ }
115
+ if (request.webSearch)
116
+ tools.push({ googleSearch: {} });
117
+ const generationConfig = { maxOutputTokens: request.maxTokens ?? 4096 };
118
+ if (request.temperature !== undefined)
119
+ generationConfig.temperature = request.temperature;
120
+ if (request.topP !== undefined)
121
+ generationConfig.topP = request.topP;
122
+ if (request.stop?.length)
123
+ generationConfig.stopSequences = request.stop;
124
+ if (request.effort) {
125
+ // Gemini 2.5 takes a token budget; Gemini 3 and later a level.
126
+ generationConfig.thinkingConfig = /gemini-2\./i.test(request.model)
127
+ ? { thinkingBudget: THINKING_BUDGET[request.effort] }
128
+ : { thinkingLevel: request.effort === 'low' || request.effort === 'medium' ? 'low' : 'high' };
129
+ }
130
+ let systemText = system;
131
+ const format = request.responseFormat;
132
+ if (format && tools.length === 0) {
133
+ generationConfig.responseMimeType = 'application/json';
134
+ if (format.type === 'json_schema')
135
+ generationConfig.responseJsonSchema = format.schema;
136
+ }
137
+ else if (format) {
138
+ systemText = [systemText, jsonInstruction(format)].filter(Boolean).join('\n\n');
139
+ }
140
+ const body = { contents, generationConfig };
141
+ if (systemText)
142
+ body.systemInstruction = { parts: [{ text: systemText }] };
143
+ if (tools.length > 0)
144
+ body.tools = tools;
145
+ const toolConfig = functionCallingConfig(request.toolChoice);
146
+ if (toolConfig && request.tools?.length)
147
+ body.toolConfig = { functionCallingConfig: toolConfig };
148
+ return {
149
+ provider: 'google',
150
+ url: `${baseUrl}/v1beta/models/${encodeURIComponent(request.model)}:${stream ? 'streamGenerateContent?alt=sse' : 'generateContent'}`,
151
+ headers: { 'x-goog-api-key': config.apiKey },
152
+ body,
153
+ timeoutMs: request.timeoutMs ?? config.timeoutMs ?? DEFAULT_GENERATE_TIMEOUT_MS,
154
+ ...(request.signal ? { signal: request.signal } : {}),
155
+ fetchImpl: config.fetch ?? fetch,
156
+ };
157
+ }
158
+ async function toResult(json, request, fetchImpl, startedAt) {
159
+ const format = request.responseFormat;
160
+ const candidate = json.candidates?.[0];
161
+ const parts = candidate?.content?.parts ?? [];
162
+ let text = '';
163
+ const toolCalls = [];
164
+ parts.forEach((p, i) => {
165
+ if (typeof p.text === 'string' && p.thought !== true)
166
+ text += p.text;
167
+ const call = p.functionCall;
168
+ if (call?.name)
169
+ toolCalls.push({
170
+ id: call.id ?? `${LOCAL_CALL_ID}${i}`,
171
+ name: call.name,
172
+ arguments: call.args ?? {},
173
+ });
174
+ });
175
+ const grounding = candidate?.groundingMetadata;
176
+ const chunks = (grounding?.groundingChunks ?? [])
177
+ .map((c) => c.web)
178
+ .filter((w) => typeof w?.uri === 'string');
179
+ const resolved = await resolveRedirects(chunks.map((c) => c.uri), fetchImpl, request.signal);
180
+ const searchResults = chunks.map((c, i) => ({
181
+ url: resolved[i],
182
+ ...(c.title ? { title: c.title } : {}),
183
+ }));
184
+ const cited = new Set();
185
+ for (const s of grounding?.groundingSupports ?? [])
186
+ for (const idx of s.groundingChunkIndices ?? [])
187
+ cited.add(idx);
188
+ const citations = [...cited]
189
+ .sort((a, b) => a - b)
190
+ .flatMap((i) => (searchResults[i] ? [searchResults[i]] : []));
191
+ const searchQueries = grounding?.webSearchQueries ?? [];
192
+ const usage = json.usageMetadata;
193
+ const tokensIn = usage?.promptTokenCount === undefined
194
+ ? null
195
+ : usage.promptTokenCount + (usage.toolUsePromptTokenCount ?? 0);
196
+ const tokensOut = usage?.candidatesTokenCount === undefined && usage?.thoughtsTokenCount === undefined
197
+ ? null
198
+ : (usage?.candidatesTokenCount ?? 0) + (usage?.thoughtsTokenCount ?? 0);
199
+ const parsed = format ? parseJsonText(text) : undefined;
200
+ return {
201
+ provider: 'google',
202
+ model: request.model,
203
+ text,
204
+ ...(parsed !== undefined ? { json: parsed } : {}),
205
+ toolCalls,
206
+ citations: dedupeByUrl(citations),
207
+ searchResults: dedupeByUrl(searchResults),
208
+ searchQueries,
209
+ finishReason: finishReason(candidate?.finishReason ?? null, toolCalls.length > 0),
210
+ usage: {
211
+ tokensIn,
212
+ cachedTokensIn: tokensIn === null ? null : (usage?.cachedContentTokenCount ?? 0),
213
+ tokensOut,
214
+ webSearches: searchQueries.length,
215
+ },
216
+ latencyMs: Date.now() - startedAt,
217
+ providerState: { provider: 'google', data: parts },
218
+ };
219
+ }
220
+ function functionCallingConfig(choice) {
221
+ if (!choice || choice === 'auto')
222
+ return undefined;
223
+ if (choice === 'none')
224
+ return { mode: 'NONE' };
225
+ if (choice === 'required')
226
+ return { mode: 'ANY' };
227
+ return { mode: 'ANY', allowedFunctionNames: [choice.name] };
228
+ }
229
+ function finishReason(raw, calledTools) {
230
+ if (calledTools)
231
+ return 'tool_calls';
232
+ if (!raw)
233
+ return null;
234
+ switch (raw) {
235
+ case 'STOP':
236
+ return 'stop';
237
+ case 'MAX_TOKENS':
238
+ return 'length';
239
+ case 'SAFETY':
240
+ case 'RECITATION':
241
+ case 'PROHIBITED_CONTENT':
242
+ case 'BLOCKLIST':
243
+ return 'content_filter';
244
+ default:
245
+ return raw;
246
+ }
247
+ }
248
+ function partToGemini(part) {
249
+ if (part.type === 'text')
250
+ return { text: part.text };
251
+ return { inlineData: { mimeType: part.mediaType, data: part.data } };
252
+ }
253
+ function toolResponse(content, isError) {
254
+ let value = content;
255
+ try {
256
+ value = JSON.parse(content);
257
+ }
258
+ catch {
259
+ // plain text result
260
+ }
261
+ return isError ? { error: value } : { content: value };
262
+ }
263
+ /** Provider-neutral history → Gemini `systemInstruction` + `contents`. */
264
+ export function toGeminiContents(messages) {
265
+ const systemParts = [];
266
+ const contents = [];
267
+ const push = (role, parts) => {
268
+ if (parts.length === 0)
269
+ return;
270
+ const last = contents[contents.length - 1];
271
+ if (last && last.role === role)
272
+ last.parts.push(...parts);
273
+ else
274
+ contents.push({ role, parts: [...parts] });
275
+ };
276
+ for (const m of messages) {
277
+ if (m.role === 'system') {
278
+ systemParts.push(m.content);
279
+ }
280
+ else if (m.role === 'user') {
281
+ push('user', typeof m.content === 'string'
282
+ ? m.content
283
+ ? [{ text: m.content }]
284
+ : []
285
+ : m.content.map(partToGemini));
286
+ }
287
+ else if (m.role === 'assistant') {
288
+ if (m.providerState?.provider === 'google' &&
289
+ Array.isArray(m.providerState.data) &&
290
+ m.providerState.data.length > 0) {
291
+ push('model', m.providerState.data);
292
+ continue;
293
+ }
294
+ const parts = [];
295
+ if (m.content)
296
+ parts.push({ text: m.content });
297
+ for (const c of m.toolCalls ?? []) {
298
+ parts.push({
299
+ functionCall: {
300
+ name: c.name,
301
+ args: c.arguments,
302
+ ...(c.id.startsWith(LOCAL_CALL_ID) ? {} : { id: c.id }),
303
+ },
304
+ });
305
+ }
306
+ push('model', parts);
307
+ }
308
+ else {
309
+ push('user', [
310
+ {
311
+ functionResponse: {
312
+ name: m.name,
313
+ ...(m.toolCallId.startsWith(LOCAL_CALL_ID) ? {} : { id: m.toolCallId }),
314
+ response: toolResponse(m.content, m.isError),
315
+ },
316
+ },
317
+ ]);
318
+ }
319
+ }
320
+ if (contents.length === 0)
321
+ throw new Error('[ai/generate/google] No user or assistant messages supplied');
322
+ return { system: systemParts.length ? systemParts.join('\n\n') : undefined, contents };
323
+ }
324
+ /** Follow grounding redirects to the real page URL; keeps the redirect when it can't. */
325
+ async function resolveRedirects(uris, fetchImpl, signal) {
326
+ const cache = new Map();
327
+ const resolve = (uri) => {
328
+ let host;
329
+ try {
330
+ host = new URL(uri).hostname;
331
+ }
332
+ catch {
333
+ return Promise.resolve(uri);
334
+ }
335
+ if (host !== REDIRECT_HOST)
336
+ return Promise.resolve(uri);
337
+ const existing = cache.get(uri);
338
+ if (existing)
339
+ return existing;
340
+ const pending = (async () => {
341
+ const controller = new AbortController();
342
+ const timer = setTimeout(() => controller.abort(), 4000);
343
+ const onAbort = () => controller.abort();
344
+ signal?.addEventListener('abort', onAbort, { once: true });
345
+ try {
346
+ const res = await fetchImpl(uri, {
347
+ method: 'GET',
348
+ redirect: 'manual',
349
+ signal: controller.signal,
350
+ });
351
+ const location = res.headers.get('location');
352
+ await res.body?.cancel().catch(() => undefined);
353
+ return location && /^https?:\/\//i.test(location) ? location : uri;
354
+ }
355
+ catch {
356
+ return uri;
357
+ }
358
+ finally {
359
+ clearTimeout(timer);
360
+ signal?.removeEventListener('abort', onAbort);
361
+ }
362
+ })();
363
+ cache.set(uri, pending);
364
+ return pending;
365
+ };
366
+ return Promise.all(uris.map(resolve));
367
+ }
368
+ function dedupeByUrl(items) {
369
+ const seen = new Set();
370
+ return items.filter((i) => (seen.has(i.url) ? false : (seen.add(i.url), true)));
371
+ }
372
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/generate/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Shared HTTP plumbing for the `generate` adapters: one JSON POST with a
3
+ * timeout that covers the body read, linked to the caller's AbortSignal,
4
+ * and vendor errors shaped `[ai/generate/<provider>] <status> <statusText>: <body>`.
5
+ */
6
+ import type { ChatProvider } from '../chat/types.js';
7
+ import type { ResponseFormat } from './types.js';
8
+ export declare const DEFAULT_GENERATE_TIMEOUT_MS = 120000;
9
+ /** Thrown when the caller's signal aborts the call (never retried). */
10
+ export declare class GenerateAbortedError extends Error {
11
+ constructor(message?: string);
12
+ }
13
+ export interface PostJsonArgs {
14
+ provider: ChatProvider;
15
+ url: string;
16
+ headers: Record<string, string>;
17
+ body: unknown;
18
+ timeoutMs: number;
19
+ signal?: AbortSignal;
20
+ fetchImpl?: typeof fetch;
21
+ }
22
+ export declare function postJson<T>(args: PostJsonArgs): Promise<T>;
23
+ /** One server-sent event. */
24
+ export interface SseMessage {
25
+ event: string | null;
26
+ data: string;
27
+ }
28
+ /**
29
+ * POST and read the reply as server-sent events. Same timeout (the whole
30
+ * stream), cancellation and error shape as `postJson`. When the consumer
31
+ * stops early, the connection is closed.
32
+ */
33
+ export declare function postSse(args: PostJsonArgs): AsyncGenerator<SseMessage>;
34
+ /**
35
+ * Parse a model's JSON reply: tolerates a ```json fence and leading /
36
+ * trailing prose around one top-level object or array. `undefined` when
37
+ * nothing parses.
38
+ */
39
+ export declare function parseJsonText(text: string): unknown;
40
+ /** System-prompt instruction used when a provider can't enforce the schema natively. */
41
+ export declare function jsonInstruction(format: ResponseFormat): string;
42
+ /** Tool / schema names: letters, digits, `_` and `-`, at most 64 characters. */
43
+ export declare function safeName(name: string): string;
44
+ /** Parse a tool-call argument string; `{}` when it isn't a JSON object. */
45
+ export declare function parseArguments(raw: unknown): Record<string, unknown>;
46
+ /** Approximate byte size of a base64 payload. */
47
+ export declare function base64Bytes(data: string): number;
48
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/generate/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAEnD,uEAAuE;AACvE,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,SAA2B;CAI/C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CA6BhE;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAuB,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CA6C7E;AAgBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBnD;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAO9D;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWpE;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Shared HTTP plumbing for the `generate` adapters: one JSON POST with a
3
+ * timeout that covers the body read, linked to the caller's AbortSignal,
4
+ * and vendor errors shaped `[ai/generate/<provider>] <status> <statusText>: <body>`.
5
+ */
6
+ export const DEFAULT_GENERATE_TIMEOUT_MS = 120_000;
7
+ /** Thrown when the caller's signal aborts the call (never retried). */
8
+ export class GenerateAbortedError extends Error {
9
+ constructor(message = 'The call was cancelled') {
10
+ super(message);
11
+ this.name = 'AbortError';
12
+ }
13
+ }
14
+ export async function postJson(args) {
15
+ if (args.signal?.aborted)
16
+ throw new GenerateAbortedError();
17
+ const controller = new AbortController();
18
+ const onAbort = () => controller.abort();
19
+ args.signal?.addEventListener('abort', onAbort, { once: true });
20
+ // Armed until the body is fully read: a provider that sends headers and
21
+ // then stalls the body must not hang the caller.
22
+ const timer = setTimeout(() => controller.abort(), args.timeoutMs);
23
+ try {
24
+ const response = await (args.fetchImpl ?? fetch)(args.url, {
25
+ method: 'POST',
26
+ headers: { 'Content-Type': 'application/json', ...args.headers },
27
+ body: JSON.stringify(args.body),
28
+ signal: controller.signal,
29
+ });
30
+ if (!response.ok) {
31
+ const text = (await response.text()).slice(0, 500);
32
+ throw new Error(`[ai/generate/${args.provider}] ${response.status} ${response.statusText}: ${text}`);
33
+ }
34
+ return (await response.json());
35
+ }
36
+ catch (err) {
37
+ if (args.signal?.aborted)
38
+ throw new GenerateAbortedError();
39
+ throw err;
40
+ }
41
+ finally {
42
+ clearTimeout(timer);
43
+ args.signal?.removeEventListener('abort', onAbort);
44
+ }
45
+ }
46
+ /**
47
+ * POST and read the reply as server-sent events. Same timeout (the whole
48
+ * stream), cancellation and error shape as `postJson`. When the consumer
49
+ * stops early, the connection is closed.
50
+ */
51
+ export async function* postSse(args) {
52
+ if (args.signal?.aborted)
53
+ throw new GenerateAbortedError();
54
+ const controller = new AbortController();
55
+ const onAbort = () => controller.abort();
56
+ args.signal?.addEventListener('abort', onAbort, { once: true });
57
+ const timer = setTimeout(() => controller.abort(), args.timeoutMs);
58
+ try {
59
+ const response = await (args.fetchImpl ?? fetch)(args.url, {
60
+ method: 'POST',
61
+ headers: { 'Content-Type': 'application/json', Accept: 'text/event-stream', ...args.headers },
62
+ body: JSON.stringify(args.body),
63
+ signal: controller.signal,
64
+ });
65
+ if (!response.ok) {
66
+ const text = (await response.text()).slice(0, 500);
67
+ throw new Error(`[ai/generate/${args.provider}] ${response.status} ${response.statusText}: ${text}`);
68
+ }
69
+ if (!response.body)
70
+ throw new Error(`[ai/generate/${args.provider}] 502 Bad Gateway: the stream has no body`);
71
+ const reader = response.body.getReader();
72
+ const decoder = new TextDecoder();
73
+ let buffer = '';
74
+ for (;;) {
75
+ const { value, done } = await reader.read();
76
+ if (done)
77
+ break;
78
+ buffer += decoder.decode(value, { stream: true }).replace(/\r\n?/g, '\n');
79
+ let end;
80
+ while ((end = buffer.indexOf('\n\n')) >= 0) {
81
+ const message = parseSseBlock(buffer.slice(0, end));
82
+ buffer = buffer.slice(end + 2);
83
+ if (message)
84
+ yield message;
85
+ }
86
+ }
87
+ const last = parseSseBlock((buffer + decoder.decode()).replace(/\r\n?/g, '\n'));
88
+ if (last)
89
+ yield last;
90
+ }
91
+ catch (err) {
92
+ if (args.signal?.aborted)
93
+ throw new GenerateAbortedError();
94
+ throw err;
95
+ }
96
+ finally {
97
+ clearTimeout(timer);
98
+ args.signal?.removeEventListener('abort', onAbort);
99
+ controller.abort();
100
+ }
101
+ }
102
+ function parseSseBlock(block) {
103
+ let event = null;
104
+ const data = [];
105
+ for (const line of block.split('\n')) {
106
+ if (!line || line.startsWith(':'))
107
+ continue;
108
+ const colon = line.indexOf(':');
109
+ const field = colon < 0 ? line : line.slice(0, colon);
110
+ const value = colon < 0 ? '' : line.slice(colon + 1).replace(/^ /, '');
111
+ if (field === 'event')
112
+ event = value;
113
+ else if (field === 'data')
114
+ data.push(value);
115
+ }
116
+ return data.length ? { event, data: data.join('\n') } : null;
117
+ }
118
+ /**
119
+ * Parse a model's JSON reply: tolerates a ```json fence and leading /
120
+ * trailing prose around one top-level object or array. `undefined` when
121
+ * nothing parses.
122
+ */
123
+ export function parseJsonText(text) {
124
+ const trimmed = text.trim();
125
+ if (!trimmed)
126
+ return undefined;
127
+ const fenced = /^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(trimmed);
128
+ const candidate = fenced ? fenced[1] : trimmed;
129
+ try {
130
+ return JSON.parse(candidate);
131
+ }
132
+ catch {
133
+ const start = candidate.search(/[[{]/);
134
+ const end = Math.max(candidate.lastIndexOf('}'), candidate.lastIndexOf(']'));
135
+ if (start < 0 || end <= start)
136
+ return undefined;
137
+ try {
138
+ return JSON.parse(candidate.slice(start, end + 1));
139
+ }
140
+ catch {
141
+ return undefined;
142
+ }
143
+ }
144
+ }
145
+ /** System-prompt instruction used when a provider can't enforce the schema natively. */
146
+ export function jsonInstruction(format) {
147
+ if (format.type === 'json')
148
+ return 'Reply with only one valid JSON object. No prose, no markdown fences.';
149
+ return [
150
+ 'Reply with only one valid JSON object that matches this JSON Schema. No prose, no markdown fences.',
151
+ JSON.stringify(format.schema),
152
+ ].join('\n');
153
+ }
154
+ /** Tool / schema names: letters, digits, `_` and `-`, at most 64 characters. */
155
+ export function safeName(name) {
156
+ const cleaned = name.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);
157
+ return cleaned || 'output';
158
+ }
159
+ /** Parse a tool-call argument string; `{}` when it isn't a JSON object. */
160
+ export function parseArguments(raw) {
161
+ if (raw && typeof raw === 'object' && !Array.isArray(raw))
162
+ return raw;
163
+ if (typeof raw !== 'string' || !raw.trim())
164
+ return {};
165
+ try {
166
+ const parsed = JSON.parse(raw);
167
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
168
+ ? parsed
169
+ : {};
170
+ }
171
+ catch {
172
+ return {};
173
+ }
174
+ }
175
+ /** Approximate byte size of a base64 payload. */
176
+ export function base64Bytes(data) {
177
+ const padding = data.endsWith('==') ? 2 : data.endsWith('=') ? 1 : 0;
178
+ return Math.max(0, Math.floor((data.length * 3) / 4) - padding);
179
+ }
180
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/generate/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `generate` — tools, native web search, structured output, file inputs,
3
+ * prompt caching and streaming. See `./types.ts`.
4
+ */
5
+ export type { JsonSchema, TextPart, FilePart, ImagePart, ContentPart, ToolCall, ProviderState, SystemMessage, UserMessage, AssistantMessage, ToolMessage, GenerateMessage, ToolDefinition, ToolChoice, WebSearchOptions, ResponseFormat, CacheOptions, GenerateRequest, Citation, SearchResult, GenerateUsage, GenerateResult, GenerateStreamEvent, GenerateClient, GenerateAdapterConfig, GenerateClientConfig, ReasoningEffort, } from './types.js';
6
+ export { THINKING_BUDGET } from './types.js';
7
+ export { createGenerateClient } from './client.js';
8
+ export { generateWithAnthropic, streamWithAnthropic } from './anthropic.js';
9
+ export { generateWithOpenAi, streamWithOpenAi } from './openai.js';
10
+ export { generateWithGoogle, streamWithGoogle } from './google.js';
11
+ export { generateWithPerplexity, streamWithPerplexity } from './perplexity.js';
12
+ export { parseJsonText, GenerateAbortedError } from './http.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,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;AAC/E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}