genaicode 2.0.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/README.md +194 -26
- package/dist/core/client.d.ts +15 -3
- package/dist/core/client.js +87 -3
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.js +118 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/middleware.d.ts +43 -0
- package/dist/core/middleware.js +175 -0
- package/dist/core/middleware.js.map +1 -0
- package/dist/core/plugins.d.ts +8 -1
- package/dist/core/plugins.js +25 -1
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/result.d.ts +2 -2
- package/dist/core/result.js +5 -1
- package/dist/core/result.js.map +1 -1
- package/dist/core/stream.d.ts +11 -0
- package/dist/core/stream.js +93 -0
- package/dist/core/stream.js.map +1 -0
- package/dist/core/types.d.ts +101 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic-converter.js +32 -6
- package/dist/providers/anthropic-converter.js.map +1 -1
- package/dist/providers/anthropic.js +64 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/fixtures/multimodal-tool-roundtrip.d.ts +4 -0
- package/dist/providers/fixtures/multimodal-tool-roundtrip.js +32 -0
- package/dist/providers/fixtures/multimodal-tool-roundtrip.js.map +1 -0
- package/dist/providers/google-converter.js +53 -2
- package/dist/providers/google-converter.js.map +1 -1
- package/dist/providers/google.js +65 -0
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/openai-converter.d.ts +20 -1
- package/dist/providers/openai-converter.js +98 -0
- package/dist/providers/openai-converter.js.map +1 -1
- package/dist/providers/openai.js +18 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +1 -1
- package/dist/providers.js.map +1 -1
- package/docs/pivot.md +33 -14
- package/docs/provider-packages.md +60 -0
- package/docs/retry.md +62 -0
- package/docs/semver.md +56 -0
- package/package.json +5 -2
package/dist/core/types.d.ts
CHANGED
|
@@ -69,16 +69,53 @@ export interface ImageResultPart {
|
|
|
69
69
|
image: PromptImage;
|
|
70
70
|
}
|
|
71
71
|
export type ResultPart = TextResultPart | ToolCallResultPart | ImageResultPart;
|
|
72
|
+
/** A source URL a provider's built-in web search cited while grounding its answer. */
|
|
73
|
+
export interface Citation {
|
|
74
|
+
url: string;
|
|
75
|
+
title?: string;
|
|
76
|
+
}
|
|
72
77
|
export interface GenerationResult {
|
|
73
78
|
parts: ResultPart[];
|
|
74
79
|
model?: string;
|
|
75
80
|
finishReason?: string;
|
|
76
81
|
usage?: TokenUsage;
|
|
82
|
+
/** Present when `search` was requested and the provider grounded its answer. */
|
|
83
|
+
citations?: Citation[];
|
|
77
84
|
raw?: unknown;
|
|
78
85
|
}
|
|
86
|
+
export interface SchemaAdapter<T = unknown> {
|
|
87
|
+
parse(value: unknown): T;
|
|
88
|
+
}
|
|
89
|
+
export type JsonResultParser<T = unknown> = ((value: unknown) => T) | SchemaAdapter<T>;
|
|
79
90
|
export type ToolChoice = 'auto' | 'none' | 'required' | {
|
|
80
91
|
name: string;
|
|
81
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* Portable response-shape hint. Providers map what they support; unsupported
|
|
95
|
+
* variants are ignored rather than rejected.
|
|
96
|
+
*/
|
|
97
|
+
export type ResponseFormat = {
|
|
98
|
+
type: 'text';
|
|
99
|
+
} | {
|
|
100
|
+
type: 'json';
|
|
101
|
+
} | {
|
|
102
|
+
type: 'json_schema';
|
|
103
|
+
name: string;
|
|
104
|
+
schema: JsonSchema;
|
|
105
|
+
strict?: boolean;
|
|
106
|
+
};
|
|
107
|
+
export type ThinkingLevel = 'minimal' | 'low' | 'medium' | 'high';
|
|
108
|
+
/**
|
|
109
|
+
* Portable thinking / reasoning controls.
|
|
110
|
+
*
|
|
111
|
+
* - `false` disables thinking when the provider allows it.
|
|
112
|
+
* - `budgetTokens: 0` is treated as disabled on providers that use a token budget.
|
|
113
|
+
* - Prefer either `level` or `budgetTokens` — some providers reject both at once.
|
|
114
|
+
*/
|
|
115
|
+
export type ThinkingConfig = false | {
|
|
116
|
+
budgetTokens?: number;
|
|
117
|
+
level?: ThinkingLevel;
|
|
118
|
+
};
|
|
82
119
|
export interface GenerationRequest {
|
|
83
120
|
prompt: PromptItem[];
|
|
84
121
|
model?: string;
|
|
@@ -86,12 +123,73 @@ export interface GenerationRequest {
|
|
|
86
123
|
maxOutputTokens?: number;
|
|
87
124
|
tools?: ToolDefinition[];
|
|
88
125
|
toolChoice?: ToolChoice;
|
|
126
|
+
responseFormat?: ResponseFormat;
|
|
127
|
+
thinking?: ThinkingConfig;
|
|
128
|
+
/**
|
|
129
|
+
* Ground the answer in the provider's own built-in web search (Google Search,
|
|
130
|
+
* Anthropic's/OpenAI's web search tool — never a user-supplied `tools` function).
|
|
131
|
+
* Ignored on providers without `capabilities.search`, same as an unsupported
|
|
132
|
+
* `responseFormat` variant.
|
|
133
|
+
*/
|
|
134
|
+
search?: boolean;
|
|
89
135
|
signal?: AbortSignal;
|
|
90
136
|
metadata?: Record<string, unknown>;
|
|
91
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Provider-neutral streaming event IR.
|
|
140
|
+
*
|
|
141
|
+
* Providers may emit deltas as they arrive. Consumers that only need the final
|
|
142
|
+
* answer can ignore intermediate events and wait for `done`.
|
|
143
|
+
*/
|
|
144
|
+
export type StreamEvent = {
|
|
145
|
+
type: 'text-delta';
|
|
146
|
+
text: string;
|
|
147
|
+
} | {
|
|
148
|
+
type: 'tool-call-delta';
|
|
149
|
+
id?: string;
|
|
150
|
+
name?: string;
|
|
151
|
+
argumentsDelta?: string;
|
|
152
|
+
} | {
|
|
153
|
+
type: 'tool-call';
|
|
154
|
+
toolCall: ToolCall;
|
|
155
|
+
} | {
|
|
156
|
+
type: 'image';
|
|
157
|
+
image: PromptImage;
|
|
158
|
+
} | {
|
|
159
|
+
type: 'usage';
|
|
160
|
+
usage: TokenUsage;
|
|
161
|
+
} | {
|
|
162
|
+
type: 'error';
|
|
163
|
+
error: unknown;
|
|
164
|
+
} | {
|
|
165
|
+
type: 'done';
|
|
166
|
+
result: GenerationResult;
|
|
167
|
+
};
|
|
168
|
+
export interface ProviderCapabilities {
|
|
169
|
+
/** Native token streaming via `ModelProvider.stream`. */
|
|
170
|
+
streaming?: boolean;
|
|
171
|
+
/** Function/tool calling. */
|
|
172
|
+
tools?: boolean;
|
|
173
|
+
/** Image input, output, both, or none. */
|
|
174
|
+
images?: false | 'input' | 'output' | 'both';
|
|
175
|
+
/** First-class system prompt / instruction support. */
|
|
176
|
+
systemPrompt?: boolean;
|
|
177
|
+
/** Honors `GenerationRequest.responseFormat` (`json` / `json_schema`). */
|
|
178
|
+
jsonResponse?: boolean;
|
|
179
|
+
/** Honors `GenerationRequest.thinking`. */
|
|
180
|
+
thinking?: boolean;
|
|
181
|
+
/** Honors `GenerationRequest.search`. */
|
|
182
|
+
search?: boolean;
|
|
183
|
+
}
|
|
92
184
|
export interface ModelProvider {
|
|
93
185
|
readonly name: string;
|
|
186
|
+
readonly capabilities?: ProviderCapabilities;
|
|
94
187
|
generate(request: GenerationRequest): Promise<GenerationResult>;
|
|
188
|
+
/**
|
|
189
|
+
* Optional native streaming. When omitted, GenAIcode synthesizes a short
|
|
190
|
+
* stream from `generate` (single text snapshot + `done`).
|
|
191
|
+
*/
|
|
192
|
+
stream?(request: GenerationRequest): AsyncIterable<StreamEvent>;
|
|
95
193
|
}
|
|
96
194
|
export interface GenerationDefaults {
|
|
97
195
|
model?: string;
|
|
@@ -99,5 +197,8 @@ export interface GenerationDefaults {
|
|
|
99
197
|
maxOutputTokens?: number;
|
|
100
198
|
tools?: ToolDefinition[];
|
|
101
199
|
toolChoice?: ToolChoice;
|
|
200
|
+
responseFormat?: ResponseFormat;
|
|
201
|
+
thinking?: ThinkingConfig;
|
|
202
|
+
search?: boolean;
|
|
102
203
|
metadata?: Record<string, unknown>;
|
|
103
204
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
export { genaicode } from './core/client.js';
|
|
2
2
|
export type { ConfigureRequest, Conversation, GenAIClient, GenAIClientOptions, RequestBuilder } from './core/client.js';
|
|
3
|
+
export { classifyError, isRetryable, withRetry } from './core/errors.js';
|
|
4
|
+
export type { ClassifiedError, ErrorClass, RetryOptions } from './core/errors.js';
|
|
5
|
+
export { cachePlugin, fallbackPlugin, fallbackProvider, rateLimitPlugin, timingPlugin, } from './core/middleware.js';
|
|
6
|
+
export type { CachePluginOptions, FallbackPluginOptions, RateLimitPluginOptions, TimingPluginOptions, } from './core/middleware.js';
|
|
3
7
|
export { definePlugin, withPlugins } from './core/plugins.js';
|
|
4
|
-
export type { GenAIPlugin, GenerateNext } from './core/plugins.js';
|
|
8
|
+
export type { GenAIPlugin, GenerateNext, StreamNext } from './core/plugins.js';
|
|
5
9
|
export { asPrompt, assistant, image, prompt, system, toolResults, toPromptItems, user } from './core/prompt.js';
|
|
6
10
|
export { parseJsonResult, resultText, resultToPromptItem, resultToolCalls } from './core/result.js';
|
|
11
|
+
export { collectStream, generateAsStream, providerStream, streamTextDeltas } from './core/stream.js';
|
|
7
12
|
export * from './core/types.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { genaicode } from './core/client.js';
|
|
2
|
+
export { classifyError, isRetryable, withRetry } from './core/errors.js';
|
|
3
|
+
export { cachePlugin, fallbackPlugin, fallbackProvider, rateLimitPlugin, timingPlugin, } from './core/middleware.js';
|
|
2
4
|
export { definePlugin, withPlugins } from './core/plugins.js';
|
|
3
5
|
export { asPrompt, assistant, image, prompt, system, toolResults, toPromptItems, user } from './core/prompt.js';
|
|
4
6
|
export { parseJsonResult, resultText, resultToPromptItem, resultToolCalls } from './core/result.js';
|
|
7
|
+
export { collectStream, generateAsStream, providerStream, streamTextDeltas } from './core/stream.js';
|
|
5
8
|
export * from './core/types.js';
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpG,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrG,cAAc,iBAAiB,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
const WEB_SEARCH_TOOL = {
|
|
2
|
+
type: 'web_search_20250305',
|
|
3
|
+
name: 'web_search',
|
|
4
|
+
max_uses: 5,
|
|
5
|
+
};
|
|
1
6
|
function toAnthropicImage(image) {
|
|
2
7
|
return {
|
|
3
8
|
type: 'image',
|
|
@@ -53,20 +58,36 @@ export function toAnthropicToolChoice(choice) {
|
|
|
53
58
|
return { type: 'any' };
|
|
54
59
|
return { type: 'tool', name: choice.name };
|
|
55
60
|
}
|
|
61
|
+
function toAnthropicThinking(thinking, fallback) {
|
|
62
|
+
if (thinking === undefined)
|
|
63
|
+
return fallback;
|
|
64
|
+
if (thinking === false || thinking.budgetTokens === 0) {
|
|
65
|
+
return { type: 'disabled' };
|
|
66
|
+
}
|
|
67
|
+
if (thinking.budgetTokens !== undefined) {
|
|
68
|
+
return { type: 'enabled', budget_tokens: thinking.budgetTokens };
|
|
69
|
+
}
|
|
70
|
+
// Anthropic has no qualitative level; ignore `level` and keep the provider default.
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
56
73
|
export function toAnthropicRequest(request, defaults) {
|
|
74
|
+
// Unlike Google, Anthropic allows the web_search server tool alongside function tools.
|
|
75
|
+
const tools = (request.tools ?? []).map((tool) => ({
|
|
76
|
+
name: tool.name,
|
|
77
|
+
description: tool.description,
|
|
78
|
+
input_schema: { ...tool.parameters, type: 'object' },
|
|
79
|
+
}));
|
|
80
|
+
if (request.search)
|
|
81
|
+
tools.push(WEB_SEARCH_TOOL);
|
|
57
82
|
return {
|
|
58
83
|
model: request.model ?? defaults.model,
|
|
59
84
|
max_tokens: request.maxOutputTokens ?? defaults.maxOutputTokens ?? 8192,
|
|
60
85
|
system: toAnthropicSystem(request.prompt),
|
|
61
86
|
messages: toAnthropicMessages(request.prompt),
|
|
62
87
|
temperature: request.temperature,
|
|
63
|
-
tools:
|
|
64
|
-
name: tool.name,
|
|
65
|
-
description: tool.description,
|
|
66
|
-
input_schema: { ...tool.parameters, type: 'object' },
|
|
67
|
-
})),
|
|
88
|
+
tools: tools.length ? tools : undefined,
|
|
68
89
|
tool_choice: request.tools?.length ? toAnthropicToolChoice(request.toolChoice) : undefined,
|
|
69
|
-
thinking: defaults.thinking,
|
|
90
|
+
thinking: toAnthropicThinking(request.thinking, defaults.thinking),
|
|
70
91
|
};
|
|
71
92
|
}
|
|
72
93
|
function normalizeArguments(value) {
|
|
@@ -76,6 +97,7 @@ function normalizeArguments(value) {
|
|
|
76
97
|
}
|
|
77
98
|
export function fromAnthropicMessage(message) {
|
|
78
99
|
const parts = [];
|
|
100
|
+
const citations = [];
|
|
79
101
|
for (const block of message.content) {
|
|
80
102
|
if (block.type === 'text') {
|
|
81
103
|
parts.push({ type: 'text', text: block.text });
|
|
@@ -90,6 +112,9 @@ export function fromAnthropicMessage(message) {
|
|
|
90
112
|
},
|
|
91
113
|
});
|
|
92
114
|
}
|
|
115
|
+
else if (block.type === 'web_search_tool_result' && Array.isArray(block.content)) {
|
|
116
|
+
citations.push(...block.content.map((result) => ({ url: result.url, title: result.title })));
|
|
117
|
+
}
|
|
93
118
|
}
|
|
94
119
|
const cacheTokens = message.usage.cache_read_input_tokens ?? 0;
|
|
95
120
|
return {
|
|
@@ -105,6 +130,7 @@ export function fromAnthropicMessage(message) {
|
|
|
105
130
|
cacheTokens,
|
|
106
131
|
cachedInputTokens: cacheTokens,
|
|
107
132
|
},
|
|
133
|
+
...(citations.length ? { citations } : {}),
|
|
108
134
|
raw: message,
|
|
109
135
|
};
|
|
110
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-converter.js","sourceRoot":"","sources":["../../src/providers/anthropic-converter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"anthropic-converter.js","sourceRoot":"","sources":["../../src/providers/anthropic-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,14 @@ export function anthropic(options = {}) {
|
|
|
8
8
|
});
|
|
9
9
|
return {
|
|
10
10
|
name: 'anthropic',
|
|
11
|
+
capabilities: {
|
|
12
|
+
streaming: true,
|
|
13
|
+
tools: true,
|
|
14
|
+
images: 'input',
|
|
15
|
+
systemPrompt: true,
|
|
16
|
+
thinking: true,
|
|
17
|
+
search: true,
|
|
18
|
+
},
|
|
11
19
|
async generate(request) {
|
|
12
20
|
const model = request.model ?? options.model ?? process.env.ANTHROPIC_MODEL;
|
|
13
21
|
if (!model) {
|
|
@@ -23,6 +31,62 @@ export function anthropic(options = {}) {
|
|
|
23
31
|
});
|
|
24
32
|
return fromAnthropicMessage(message);
|
|
25
33
|
},
|
|
34
|
+
async *stream(request) {
|
|
35
|
+
const model = request.model ?? options.model ?? process.env.ANTHROPIC_MODEL;
|
|
36
|
+
if (!model) {
|
|
37
|
+
throw new Error('No Anthropic model configured. Pass `model` to anthropic() or the request builder.');
|
|
38
|
+
}
|
|
39
|
+
const defaults = {
|
|
40
|
+
model,
|
|
41
|
+
maxOutputTokens: options.maxOutputTokens,
|
|
42
|
+
thinking: options.thinking,
|
|
43
|
+
};
|
|
44
|
+
const params = toAnthropicRequest(request, defaults);
|
|
45
|
+
const stream = client.messages.stream({ ...params }, { signal: request.signal });
|
|
46
|
+
const toolCalls = new Map();
|
|
47
|
+
for await (const event of stream) {
|
|
48
|
+
if (event.type === 'content_block_start' && event.content_block.type === 'tool_use') {
|
|
49
|
+
toolCalls.set(event.index, {
|
|
50
|
+
id: event.content_block.id,
|
|
51
|
+
name: event.content_block.name,
|
|
52
|
+
arguments: '',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else if (event.type === 'content_block_delta') {
|
|
56
|
+
if (event.delta.type === 'text_delta') {
|
|
57
|
+
yield { type: 'text-delta', text: event.delta.text };
|
|
58
|
+
}
|
|
59
|
+
else if (event.delta.type === 'input_json_delta') {
|
|
60
|
+
const current = toolCalls.get(event.index);
|
|
61
|
+
if (current) {
|
|
62
|
+
current.arguments += event.delta.partial_json;
|
|
63
|
+
yield {
|
|
64
|
+
type: 'tool-call-delta',
|
|
65
|
+
id: current.id,
|
|
66
|
+
name: current.name,
|
|
67
|
+
argumentsDelta: event.delta.partial_json,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (event.type === 'message_delta' && event.usage) {
|
|
73
|
+
// message_delta only reports output tokens; omit total until finalMessage.
|
|
74
|
+
yield {
|
|
75
|
+
type: 'usage',
|
|
76
|
+
usage: {
|
|
77
|
+
outputTokens: event.usage.output_tokens,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const result = fromAnthropicMessage(await stream.finalMessage());
|
|
83
|
+
for (const part of result.parts) {
|
|
84
|
+
if (part.type === 'toolCall') {
|
|
85
|
+
yield { type: 'tool-call', toolCall: part.toolCall };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
yield { type: 'done', result };
|
|
89
|
+
},
|
|
26
90
|
};
|
|
27
91
|
}
|
|
28
92
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAiC,MAAM,0BAA0B,CAAC;AAWnH,MAAM,UAAU,SAAS,CAAC,UAAoC,EAAE;IAC9D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACvD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACxG,CAAC;YACD,MAAM,QAAQ,GAA6B;gBACzC,KAAK;gBACL,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;gBAClF,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Shared multimodal + tool-call prompt used by converter contract tests. */
|
|
2
|
+
export const multimodalToolRoundTripPrompt = [
|
|
3
|
+
{ type: 'systemPrompt', systemPrompt: 'Return captions and call tools when needed.' },
|
|
4
|
+
{
|
|
5
|
+
type: 'assistant',
|
|
6
|
+
text: 'checking',
|
|
7
|
+
toolCalls: [{ id: 'call-1', name: 'lookup', arguments: { id: 7 } }],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
type: 'user',
|
|
11
|
+
toolResults: [{ callId: 'call-1', name: 'lookup', content: '{"ok":true}' }],
|
|
12
|
+
text: 'continue',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'user',
|
|
16
|
+
text: 'caption',
|
|
17
|
+
images: [{ mediaType: 'image/png', data: 'aGVsbG8=' }],
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
export const sampleTools = [
|
|
21
|
+
{
|
|
22
|
+
name: 'lookup',
|
|
23
|
+
description: 'Look up a record by id',
|
|
24
|
+
parameters: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: { id: { type: 'number' } },
|
|
27
|
+
required: ['id'],
|
|
28
|
+
additionalProperties: false,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
//# sourceMappingURL=multimodal-tool-roundtrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal-tool-roundtrip.js","sourceRoot":"","sources":["../../../src/providers/fixtures/multimodal-tool-roundtrip.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,6BAA6B,GAAiB;IACzD,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,6CAA6C,EAAE;IACrF;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;KACpE;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3E,IAAI,EAAE,UAAU;KACjB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;KACvD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wBAAwB;QACrC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACtC,QAAQ,EAAE,CAAC,IAAI,CAAC;YAChB,oBAAoB,EAAE,KAAK;SAC5B;KACF;CACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FunctionCallingConfigMode, } from '@google/genai';
|
|
1
|
+
import { FunctionCallingConfigMode, ThinkingLevel, } from '@google/genai';
|
|
2
2
|
function parseToolResult(content, isError) {
|
|
3
3
|
try {
|
|
4
4
|
const parsed = JSON.parse(content);
|
|
@@ -65,17 +65,60 @@ function toGoogleToolConfig(choice) {
|
|
|
65
65
|
},
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
|
+
function toGoogleResponseFormat(format) {
|
|
69
|
+
if (!format || format.type === 'text')
|
|
70
|
+
return {};
|
|
71
|
+
if (format.type === 'json') {
|
|
72
|
+
return { responseMimeType: 'application/json' };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
responseMimeType: 'application/json',
|
|
76
|
+
responseJsonSchema: format.schema,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const googleThinkingLevels = {
|
|
80
|
+
minimal: ThinkingLevel.MINIMAL,
|
|
81
|
+
low: ThinkingLevel.LOW,
|
|
82
|
+
medium: ThinkingLevel.MEDIUM,
|
|
83
|
+
high: ThinkingLevel.HIGH,
|
|
84
|
+
};
|
|
85
|
+
function toGoogleThinkingConfig(thinking) {
|
|
86
|
+
if (thinking === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
// Gemini 3 rejects `thinkingBudget: 0` (INVALID_ARGUMENT). `MINIMAL` is the
|
|
89
|
+
// supported "keep it cheap / effectively off" setting for those models.
|
|
90
|
+
if (thinking === false || thinking.budgetTokens === 0) {
|
|
91
|
+
return { thinkingLevel: ThinkingLevel.MINIMAL };
|
|
92
|
+
}
|
|
93
|
+
if (thinking.level) {
|
|
94
|
+
return { thinkingLevel: googleThinkingLevels[thinking.level] };
|
|
95
|
+
}
|
|
96
|
+
if (thinking.budgetTokens !== undefined) {
|
|
97
|
+
return { thinkingBudget: thinking.budgetTokens };
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
68
101
|
export function toGoogleRequest(request, defaults) {
|
|
69
102
|
const hasTools = Boolean(request.tools?.length);
|
|
103
|
+
const responseFormat = toGoogleResponseFormat(request.responseFormat);
|
|
104
|
+
const wantsJson = request.responseFormat?.type === 'json' || request.responseFormat?.type === 'json_schema';
|
|
105
|
+
// Gemini 3 defaults to heavy dynamic thinking; with a small maxOutputTokens budget that
|
|
106
|
+
// can yield an empty visible answer under JSON mode. Prefer MINIMAL when the caller did
|
|
107
|
+
// not set thinking explicitly.
|
|
108
|
+
const thinkingConfig = toGoogleThinkingConfig(request.thinking) ?? (wantsJson ? { thinkingLevel: ThinkingLevel.MINIMAL } : undefined);
|
|
70
109
|
return {
|
|
71
110
|
model: request.model ?? defaults.model,
|
|
72
111
|
contents: toGoogleContents(request.prompt),
|
|
73
112
|
config: {
|
|
74
113
|
...defaults.config,
|
|
114
|
+
...responseFormat,
|
|
115
|
+
...(thinkingConfig !== undefined ? { thinkingConfig } : {}),
|
|
75
116
|
abortSignal: request.signal,
|
|
76
117
|
systemInstruction: toGoogleSystemInstruction(request.prompt),
|
|
77
118
|
temperature: request.temperature,
|
|
78
119
|
maxOutputTokens: request.maxOutputTokens,
|
|
120
|
+
// Function tools and googleSearch grounding are mutually exclusive on this API —
|
|
121
|
+
// function tools win, matching toolChoice below applying only to them.
|
|
79
122
|
tools: hasTools
|
|
80
123
|
? [
|
|
81
124
|
{
|
|
@@ -86,7 +129,9 @@ export function toGoogleRequest(request, defaults) {
|
|
|
86
129
|
})),
|
|
87
130
|
},
|
|
88
131
|
]
|
|
89
|
-
:
|
|
132
|
+
: request.search
|
|
133
|
+
? [{ googleSearch: {} }]
|
|
134
|
+
: undefined,
|
|
90
135
|
toolConfig: hasTools ? toGoogleToolConfig(request.toolChoice) : undefined,
|
|
91
136
|
},
|
|
92
137
|
};
|
|
@@ -124,6 +169,11 @@ export function fromGoogleResponse(response) {
|
|
|
124
169
|
}
|
|
125
170
|
}
|
|
126
171
|
const usage = response.usageMetadata;
|
|
172
|
+
const citations = [];
|
|
173
|
+
for (const chunk of candidate?.groundingMetadata?.groundingChunks ?? []) {
|
|
174
|
+
if (chunk.web?.uri)
|
|
175
|
+
citations.push({ url: chunk.web.uri, ...(chunk.web.title ? { title: chunk.web.title } : {}) });
|
|
176
|
+
}
|
|
127
177
|
return {
|
|
128
178
|
parts,
|
|
129
179
|
model: response.modelVersion,
|
|
@@ -136,6 +186,7 @@ export function fromGoogleResponse(response) {
|
|
|
136
186
|
cachedInputTokens: usage.cachedContentTokenCount,
|
|
137
187
|
}
|
|
138
188
|
: undefined,
|
|
189
|
+
...(citations.length ? { citations } : {}),
|
|
139
190
|
raw: response,
|
|
140
191
|
};
|
|
141
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-converter.js","sourceRoot":"","sources":["../../src/providers/google-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,
|
|
1
|
+
{"version":3,"file":"google-converter.js","sourceRoot":"","sources":["../../src/providers/google-converter.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/google.js
CHANGED
|
@@ -4,6 +4,15 @@ function googleProvider(name, clientOptions, model, generationConfig) {
|
|
|
4
4
|
const client = new GoogleGenAI(clientOptions);
|
|
5
5
|
return {
|
|
6
6
|
name,
|
|
7
|
+
capabilities: {
|
|
8
|
+
streaming: true,
|
|
9
|
+
tools: true,
|
|
10
|
+
images: 'both',
|
|
11
|
+
systemPrompt: true,
|
|
12
|
+
jsonResponse: true,
|
|
13
|
+
thinking: true,
|
|
14
|
+
search: true,
|
|
15
|
+
},
|
|
7
16
|
async generate(request) {
|
|
8
17
|
const selectedModel = request.model ?? model;
|
|
9
18
|
if (!selectedModel) {
|
|
@@ -13,6 +22,62 @@ function googleProvider(name, clientOptions, model, generationConfig) {
|
|
|
13
22
|
const response = await client.models.generateContent(toGoogleRequest(request, defaults));
|
|
14
23
|
return fromGoogleResponse(response);
|
|
15
24
|
},
|
|
25
|
+
async *stream(request) {
|
|
26
|
+
const selectedModel = request.model ?? model;
|
|
27
|
+
if (!selectedModel) {
|
|
28
|
+
throw new Error(`No ${name} model configured. Pass a model to the provider or the request builder.`);
|
|
29
|
+
}
|
|
30
|
+
const defaults = { model: selectedModel, config: generationConfig };
|
|
31
|
+
const googleRequest = toGoogleRequest(request, defaults);
|
|
32
|
+
const stream = await client.models.generateContentStream({
|
|
33
|
+
...googleRequest,
|
|
34
|
+
config: {
|
|
35
|
+
...googleRequest.config,
|
|
36
|
+
abortSignal: request.signal,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
let text = '';
|
|
40
|
+
let lastResponse;
|
|
41
|
+
for await (const chunk of stream) {
|
|
42
|
+
lastResponse = chunk;
|
|
43
|
+
const piece = chunk.text ?? '';
|
|
44
|
+
if (piece) {
|
|
45
|
+
// Google SDK `text` is cumulative per stream chunk in some versions; prefer delta when possible.
|
|
46
|
+
const delta = piece.startsWith(text) ? piece.slice(text.length) : piece;
|
|
47
|
+
if (delta) {
|
|
48
|
+
text += delta;
|
|
49
|
+
yield { type: 'text-delta', text: delta };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!lastResponse) {
|
|
54
|
+
yield { type: 'done', result: { parts: text ? [{ type: 'text', text }] : [] } };
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const result = fromGoogleResponse(lastResponse);
|
|
58
|
+
// If the final chunk only had partial text, prefer accumulated streamed text when present.
|
|
59
|
+
if (text && result.parts.every((part) => part.type !== 'text')) {
|
|
60
|
+
result.parts = [{ type: 'text', text }, ...result.parts];
|
|
61
|
+
}
|
|
62
|
+
else if (text) {
|
|
63
|
+
const textPart = result.parts.find((part) => part.type === 'text');
|
|
64
|
+
if (textPart && textPart.type === 'text' && textPart.text.length < text.length) {
|
|
65
|
+
textPart.text = text;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (const part of result.parts) {
|
|
69
|
+
if (part.type === 'toolCall') {
|
|
70
|
+
yield { type: 'tool-call', toolCall: part.toolCall };
|
|
71
|
+
}
|
|
72
|
+
else if (part.type === 'image') {
|
|
73
|
+
yield { type: 'image', image: part.image };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (result.usage) {
|
|
77
|
+
yield { type: 'usage', usage: result.usage };
|
|
78
|
+
}
|
|
79
|
+
yield { type: 'done', result };
|
|
80
|
+
},
|
|
16
81
|
};
|
|
17
82
|
}
|
|
18
83
|
export function gemini(options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuD,MAAM,eAAe,CAAC;AAEjG,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAA8B,MAAM,uBAAuB,CAAC;AAyBxG,SAAS,cAAc,CACrB,IAA4B,EAC5B,aAAiC,EACjC,KAAyB,EACzB,gBAAsD;IAEtD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;YAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,yEAAyE,CAAC,CAAC;YACvG,CAAC;YACD,MAAM,QAAQ,GAA0B,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;YAC3F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YACzF,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,UAAiC,EAAE;IACxD,OAAO,cAAc,CACnB,QAAQ,EACR;QACE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO;QAC3E,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,EACD,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EACzC,OAAO,CAAC,gBAAgB,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,UAAmC,EAAE;IAC5D,OAAO,cAAc,CACnB,WAAW,EACX;QACE,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAC5D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,QAAQ;QAC9G,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,EACD,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EACxE,OAAO,CAAC,gBAAgB,CACzB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"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"}
|