@chatcops/core 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/chat.d.ts +13 -0
- package/dist/agent/chat.d.ts.map +1 -0
- package/dist/agent/chat.js +42 -0
- package/dist/agent/chat.js.map +1 -0
- package/dist/agent/errors.d.ts +14 -0
- package/dist/agent/errors.d.ts.map +1 -0
- package/dist/agent/errors.js +24 -0
- package/dist/agent/errors.js.map +1 -0
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +5 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/run-turn.d.ts +68 -0
- package/dist/agent/run-turn.d.ts.map +1 -0
- package/dist/agent/run-turn.js +344 -0
- package/dist/agent/run-turn.js.map +1 -0
- package/dist/agent/tool-registry.d.ts +28 -0
- package/dist/agent/tool-registry.d.ts.map +1 -0
- package/dist/agent/tool-registry.js +69 -0
- package/dist/agent/tool-registry.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +1 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/sink.d.ts +24 -0
- package/dist/analytics/sink.d.ts.map +1 -0
- package/dist/analytics/sink.js +106 -0
- package/dist/analytics/sink.js.map +1 -0
- package/dist/conversation/index.d.ts +1 -0
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js.map +1 -1
- package/dist/conversation/manager.d.ts +62 -6
- package/dist/conversation/manager.d.ts.map +1 -1
- package/dist/conversation/manager.js +109 -30
- package/dist/conversation/manager.js.map +1 -1
- package/dist/conversation/store.d.ts +6 -5
- package/dist/conversation/store.d.ts.map +1 -1
- package/dist/conversation/store.js +4 -0
- package/dist/conversation/store.js.map +1 -1
- package/dist/index.d.ts +18 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/limits/budget.d.ts +84 -0
- package/dist/limits/budget.d.ts.map +1 -0
- package/dist/limits/budget.js +114 -0
- package/dist/limits/budget.js.map +1 -0
- package/dist/limits/rate-limit.d.ts +53 -0
- package/dist/limits/rate-limit.d.ts.map +1 -0
- package/dist/limits/rate-limit.js +68 -0
- package/dist/limits/rate-limit.js.map +1 -0
- package/dist/parts.d.ts +9 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +17 -0
- package/dist/parts.js.map +1 -0
- package/dist/protocol/ai-sdk.d.ts +27 -0
- package/dist/protocol/ai-sdk.d.ts.map +1 -0
- package/dist/protocol/ai-sdk.js +127 -0
- package/dist/protocol/ai-sdk.js.map +1 -0
- package/dist/protocol/errors.d.ts +10 -0
- package/dist/protocol/errors.d.ts.map +1 -0
- package/dist/protocol/errors.js +42 -0
- package/dist/protocol/errors.js.map +1 -0
- package/dist/protocol/index.d.ts +9 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +6 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/legacy.d.ts +18 -0
- package/dist/protocol/legacy.d.ts.map +1 -0
- package/dist/protocol/legacy.js +41 -0
- package/dist/protocol/legacy.js.map +1 -0
- package/dist/protocol/sse.d.ts +10 -0
- package/dist/protocol/sse.d.ts.map +1 -0
- package/dist/protocol/sse.js +15 -0
- package/dist/protocol/sse.js.map +1 -0
- package/dist/protocol/v1.d.ts +140 -0
- package/dist/protocol/v1.d.ts.map +1 -0
- package/dist/protocol/v1.js +15 -0
- package/dist/protocol/v1.js.map +1 -0
- package/dist/providers/base.d.ts +17 -15
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +43 -31
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/claude.d.ts +40 -2
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +250 -113
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/gemini.d.ts +23 -3
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +245 -102
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/history.d.ts +52 -0
- package/dist/providers/history.d.ts.map +1 -0
- package/dist/providers/history.js +212 -0
- package/dist/providers/history.js.map +1 -0
- package/dist/providers/index.d.ts +5 -5
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +5 -4
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +37 -3
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +246 -140
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +7 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +12 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/schema.d.ts +16 -0
- package/dist/providers/schema.d.ts.map +1 -0
- package/dist/providers/schema.js +80 -0
- package/dist/providers/schema.js.map +1 -0
- package/dist/providers/tool-execution.d.ts +10 -0
- package/dist/providers/tool-execution.d.ts.map +1 -1
- package/dist/providers/tool-execution.js +38 -12
- package/dist/providers/tool-execution.js.map +1 -1
- package/dist/providers/types.d.ts +71 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/storage/adapt.d.ts +15 -0
- package/dist/storage/adapt.d.ts.map +1 -0
- package/dist/storage/adapt.js +83 -0
- package/dist/storage/adapt.js.map +1 -0
- package/dist/storage/errors.d.ts +18 -0
- package/dist/storage/errors.d.ts.map +1 -0
- package/dist/storage/errors.js +28 -0
- package/dist/storage/errors.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory.d.ts +24 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +265 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/storage/types.d.ts +118 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/testing/conformance.d.ts +29 -0
- package/dist/testing/conformance.d.ts.map +1 -0
- package/dist/testing/conformance.js +335 -0
- package/dist/testing/conformance.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/provider.d.ts +45 -0
- package/dist/testing/provider.d.ts.map +1 -0
- package/dist/testing/provider.js +82 -0
- package/dist/testing/provider.js.map +1 -0
- package/dist/tools/base.d.ts +14 -4
- package/dist/tools/base.d.ts.map +1 -1
- package/dist/tools/base.js +4 -2
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/lead-capture.d.ts +3 -1
- package/dist/tools/lead-capture.d.ts.map +1 -1
- package/dist/tools/lead-capture.js +6 -1
- package/dist/tools/lead-capture.js.map +1 -1
- package/dist/types.d.ts +168 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +53 -5
package/dist/providers/claude.js
CHANGED
|
@@ -1,133 +1,270 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
import { chatSyncViaTurn, chatViaTurn } from '../agent/chat.js';
|
|
3
|
+
import { joinSystem } from '../agent/run-turn.js';
|
|
4
|
+
import { DEFAULT_MAX_TOKENS, toClaudeTools, warnOnce } from './base.js';
|
|
5
|
+
import { normalizeTurns } from './history.js';
|
|
6
|
+
const DEFAULT_MODEL = 'claude-haiku-5-5';
|
|
7
|
+
const DEFAULT_EFFORT = 'low';
|
|
8
|
+
/** Reads family and version from ids like `claude-haiku-5-5` or `claude-haiku-4-5-20251001`. */
|
|
9
|
+
export function parseClaudeModel(model) {
|
|
10
|
+
const match = model.match(/claude-(opus|sonnet|haiku|fable|mythos)-(\d+)(?:-(\d{1,2})(?!\d))?/);
|
|
11
|
+
if (!match)
|
|
12
|
+
return null;
|
|
13
|
+
return { family: match[1], major: Number(match[2]), minor: Number(match[3] ?? 0) };
|
|
10
14
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
/** `output_config.effort` exists on Opus 4.5 and on every model from 4.6 on. */
|
|
16
|
+
export function claudeSupportsEffort(model) {
|
|
17
|
+
const version = parseClaudeModel(model);
|
|
18
|
+
if (!version)
|
|
19
|
+
return false;
|
|
20
|
+
if (version.family === 'fable' || version.family === 'mythos')
|
|
21
|
+
return true;
|
|
22
|
+
if (version.major >= 5)
|
|
23
|
+
return true;
|
|
24
|
+
if (version.major === 4 && version.minor >= 6)
|
|
25
|
+
return true;
|
|
26
|
+
return version.family === 'opus' && version.major === 4 && version.minor === 5;
|
|
27
|
+
}
|
|
28
|
+
/** Fable, Mythos, every 5.x model and Opus 4.7+ reject non-default `temperature`. */
|
|
29
|
+
export function claudeRejectsTemperature(model) {
|
|
30
|
+
const version = parseClaudeModel(model);
|
|
31
|
+
if (!version)
|
|
32
|
+
return false;
|
|
33
|
+
if (version.family === 'fable' || version.family === 'mythos')
|
|
34
|
+
return true;
|
|
35
|
+
if (version.major >= 5)
|
|
36
|
+
return true;
|
|
37
|
+
return version.family === 'opus' && version.major === 4 && version.minor >= 7;
|
|
38
|
+
}
|
|
39
|
+
function claudeMetadata(part) {
|
|
40
|
+
return 'providerMetadata' in part ? part.providerMetadata?.claude : undefined;
|
|
41
|
+
}
|
|
42
|
+
function isPlainObject(value) {
|
|
43
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
44
|
+
}
|
|
45
|
+
function toClaudeBlock(part) {
|
|
46
|
+
switch (part.type) {
|
|
47
|
+
case 'text':
|
|
48
|
+
return part.text ? { type: 'text', text: part.text } : null;
|
|
49
|
+
case 'reasoning': {
|
|
50
|
+
// Reasoning from another provider has no Claude signature, and Claude
|
|
51
|
+
// rejects thinking blocks without one, so it isn't sent.
|
|
52
|
+
const meta = claudeMetadata(part);
|
|
53
|
+
if (meta?.signature)
|
|
54
|
+
return { type: 'thinking', thinking: part.text, signature: meta.signature };
|
|
55
|
+
if (meta?.redactedData)
|
|
56
|
+
return { type: 'redacted_thinking', data: meta.redactedData };
|
|
57
|
+
return null;
|
|
17
58
|
}
|
|
18
|
-
|
|
19
|
-
|
|
59
|
+
case 'tool-call':
|
|
60
|
+
return {
|
|
20
61
|
type: 'tool_use',
|
|
21
|
-
id:
|
|
22
|
-
name:
|
|
23
|
-
input:
|
|
24
|
-
}
|
|
62
|
+
id: part.toolCallId,
|
|
63
|
+
name: part.toolName,
|
|
64
|
+
input: isPlainObject(part.input) ? part.input : {},
|
|
65
|
+
};
|
|
66
|
+
case 'tool-result':
|
|
67
|
+
return {
|
|
68
|
+
type: 'tool_result',
|
|
69
|
+
tool_use_id: part.toolCallId,
|
|
70
|
+
content: JSON.stringify(part.output ?? { success: false, message: part.error }),
|
|
71
|
+
is_error: part.error !== undefined,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const isToolResultBlock = (block) => block.type === 'tool_result';
|
|
76
|
+
/**
|
|
77
|
+
* Stored history as Claude messages. An assistant message with tool calls
|
|
78
|
+
* becomes the assistant turn with its `tool_use` blocks, then a user turn
|
|
79
|
+
* with the results, and so on for each step. Thinking blocks go back with
|
|
80
|
+
* their signatures, as Claude requires within a tool loop.
|
|
81
|
+
*/
|
|
82
|
+
export function toClaudeStepMessages(messages) {
|
|
83
|
+
const out = [];
|
|
84
|
+
const push = (role, blocks) => {
|
|
85
|
+
if (blocks.length === 0)
|
|
86
|
+
return;
|
|
87
|
+
const last = out.at(-1);
|
|
88
|
+
if (!last || last.role !== role) {
|
|
89
|
+
out.push({ role, content: blocks });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Two user turns in a row (tool results, then the visitor's next
|
|
93
|
+
// message): Claude wants the tool results first.
|
|
94
|
+
const merged = [...last.content, ...blocks];
|
|
95
|
+
last.content = role === 'user'
|
|
96
|
+
? [...merged.filter(isToolResultBlock), ...merged.filter((block) => !isToolResultBlock(block))]
|
|
97
|
+
: merged;
|
|
98
|
+
};
|
|
99
|
+
for (const turn of normalizeTurns(messages)) {
|
|
100
|
+
let role = turn.role;
|
|
101
|
+
let run = [];
|
|
102
|
+
for (const part of turn.parts) {
|
|
103
|
+
const block = toClaudeBlock(part);
|
|
104
|
+
if (!block)
|
|
105
|
+
continue;
|
|
106
|
+
const blockRole = part.type === 'tool-result' ? 'user' : turn.role;
|
|
107
|
+
if (blockRole !== role) {
|
|
108
|
+
push(role, run);
|
|
109
|
+
run = [];
|
|
110
|
+
role = blockRole;
|
|
111
|
+
}
|
|
112
|
+
run.push(block);
|
|
113
|
+
}
|
|
114
|
+
push(role, run);
|
|
115
|
+
}
|
|
116
|
+
// Plain text from the visitor goes as a string, as it always has.
|
|
117
|
+
return out.map((message) => message.role === 'user' && message.content.every((block) => block.type === 'text')
|
|
118
|
+
? { role: 'user', content: message.content.map((block) => block.text).join('\n\n') }
|
|
119
|
+
: message);
|
|
120
|
+
}
|
|
121
|
+
/** The parts of a Claude reply, in order, with what's needed to send them back. */
|
|
122
|
+
function toParts(content) {
|
|
123
|
+
const parts = [];
|
|
124
|
+
for (const block of content) {
|
|
125
|
+
switch (block.type) {
|
|
126
|
+
case 'thinking':
|
|
127
|
+
parts.push({ type: 'reasoning', text: block.thinking, providerMetadata: { claude: { signature: block.signature } } });
|
|
128
|
+
break;
|
|
129
|
+
case 'redacted_thinking':
|
|
130
|
+
parts.push({ type: 'reasoning', text: '', providerMetadata: { claude: { redactedData: block.data } } });
|
|
131
|
+
break;
|
|
132
|
+
case 'text':
|
|
133
|
+
if (block.text)
|
|
134
|
+
parts.push({ type: 'text', text: block.text });
|
|
135
|
+
break;
|
|
136
|
+
case 'tool_use':
|
|
137
|
+
parts.push({
|
|
138
|
+
type: 'tool-call',
|
|
139
|
+
toolCallId: block.id,
|
|
140
|
+
toolName: block.name,
|
|
141
|
+
input: block.input,
|
|
142
|
+
executor: 'server',
|
|
143
|
+
state: 'pending',
|
|
144
|
+
});
|
|
145
|
+
break;
|
|
146
|
+
default:
|
|
147
|
+
break;
|
|
25
148
|
}
|
|
26
149
|
}
|
|
27
|
-
return
|
|
150
|
+
return parts;
|
|
151
|
+
}
|
|
152
|
+
function finishReason(stopReason, hasToolCalls) {
|
|
153
|
+
switch (stopReason) {
|
|
154
|
+
case 'tool_use':
|
|
155
|
+
return hasToolCalls ? 'tool-calls' : 'stop';
|
|
156
|
+
case 'max_tokens':
|
|
157
|
+
return 'length';
|
|
158
|
+
case 'refusal':
|
|
159
|
+
return 'refusal';
|
|
160
|
+
default:
|
|
161
|
+
return 'stop';
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/** Input tokens include cache reads and writes, so budgets count every token sent. */
|
|
165
|
+
function toUsage(usage) {
|
|
166
|
+
const cacheRead = usage?.cache_read_input_tokens ?? 0;
|
|
167
|
+
const cacheWrite = usage?.cache_creation_input_tokens ?? 0;
|
|
168
|
+
return {
|
|
169
|
+
inputTokens: (usage?.input_tokens ?? 0) + cacheRead + cacheWrite,
|
|
170
|
+
outputTokens: usage?.output_tokens ?? 0,
|
|
171
|
+
...(cacheRead ? { cacheReadTokens: cacheRead } : {}),
|
|
172
|
+
...(cacheWrite ? { cacheWriteTokens: cacheWrite } : {}),
|
|
173
|
+
};
|
|
28
174
|
}
|
|
29
175
|
export class ClaudeProvider {
|
|
30
176
|
name = 'claude';
|
|
31
177
|
client;
|
|
32
178
|
model;
|
|
179
|
+
effort;
|
|
180
|
+
promptCaching;
|
|
33
181
|
constructor(config) {
|
|
34
|
-
|
|
182
|
+
if (!config.apiKey?.trim())
|
|
183
|
+
throw new Error('claude requires apiKey');
|
|
184
|
+
this.client = new Anthropic({
|
|
185
|
+
apiKey: config.apiKey,
|
|
186
|
+
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
187
|
+
...(config.fetch ? { fetch: config.fetch } : {}),
|
|
188
|
+
});
|
|
35
189
|
this.model = config.model ?? DEFAULT_MODEL;
|
|
190
|
+
this.promptCaching = config.promptCaching ?? true;
|
|
191
|
+
if (claudeSupportsEffort(this.model)) {
|
|
192
|
+
this.effort = config.effort ?? DEFAULT_EFFORT;
|
|
193
|
+
}
|
|
194
|
+
else if (config.effort) {
|
|
195
|
+
warnOnce(`claude-effort-${this.model}`, `${this.model} has no effort setting, so \`effort\` is ignored.`);
|
|
196
|
+
}
|
|
36
197
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const toolUses = message.content.filter((block) => block.type === 'tool_use');
|
|
56
|
-
if (message.stop_reason !== 'tool_use' || toolUses.length === 0) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (toolRounds >= MAX_TOOL_ROUNDS) {
|
|
60
|
-
throw new Error(`Exceeded maximum tool rounds (${MAX_TOOL_ROUNDS}).`);
|
|
61
|
-
}
|
|
62
|
-
toolRounds += 1;
|
|
63
|
-
messages.push({
|
|
64
|
-
role: 'assistant',
|
|
65
|
-
content: toAssistantContentBlocks(message.content),
|
|
66
|
-
});
|
|
67
|
-
const toolResults = await Promise.all(toolUses.map(async (toolUse) => {
|
|
68
|
-
const result = await executeToolCall(params, {
|
|
69
|
-
id: toolUse.id,
|
|
70
|
-
name: toolUse.name,
|
|
71
|
-
input: toolUse.input,
|
|
72
|
-
});
|
|
73
|
-
return {
|
|
74
|
-
type: 'tool_result',
|
|
75
|
-
tool_use_id: toolUse.id,
|
|
76
|
-
content: JSON.stringify(serializeToolResult(result)),
|
|
77
|
-
is_error: !result.success,
|
|
78
|
-
};
|
|
79
|
-
}));
|
|
80
|
-
messages.push({
|
|
81
|
-
role: 'user',
|
|
82
|
-
content: toolResults,
|
|
83
|
-
});
|
|
198
|
+
/**
|
|
199
|
+
* The system prompt, with a cache breakpoint after it. Claude caches tools
|
|
200
|
+
* and system together, in that order, so both are read from the cache on
|
|
201
|
+
* later requests. Per-request context goes after the breakpoint.
|
|
202
|
+
*/
|
|
203
|
+
system(params) {
|
|
204
|
+
if (!this.promptCaching)
|
|
205
|
+
return joinSystem(params.systemPrompt, params.systemContext);
|
|
206
|
+
return [
|
|
207
|
+
{ type: 'text', text: params.systemPrompt, cache_control: { type: 'ephemeral' } },
|
|
208
|
+
...(params.systemContext ? [{ type: 'text', text: params.systemContext }] : []),
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
request(params, messages) {
|
|
212
|
+
let temperature = params.temperature;
|
|
213
|
+
if (temperature != null && claudeRejectsTemperature(this.model)) {
|
|
214
|
+
warnOnce(`claude-temperature-${this.model}`, `${this.model} doesn't accept \`temperature\`, so it is not sent. Use \`effort\` to trade speed for depth.`);
|
|
215
|
+
temperature = undefined;
|
|
84
216
|
}
|
|
217
|
+
return {
|
|
218
|
+
model: this.model,
|
|
219
|
+
max_tokens: params.maxTokens ?? DEFAULT_MAX_TOKENS,
|
|
220
|
+
system: this.system(params),
|
|
221
|
+
messages,
|
|
222
|
+
...(params.tools?.length ? { tools: toClaudeTools(params.tools) } : {}),
|
|
223
|
+
...(temperature != null ? { temperature } : {}),
|
|
224
|
+
...(this.effort ? { output_config: { effort: this.effort } } : {}),
|
|
225
|
+
};
|
|
85
226
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
.filter((block) => block.type === 'text')
|
|
102
|
-
.map((block) => block.text)
|
|
103
|
-
.join('');
|
|
104
|
-
}
|
|
105
|
-
if (toolRounds >= MAX_TOOL_ROUNDS) {
|
|
106
|
-
throw new Error(`Exceeded maximum tool rounds (${MAX_TOOL_ROUNDS}).`);
|
|
107
|
-
}
|
|
108
|
-
toolRounds += 1;
|
|
109
|
-
messages.push({
|
|
110
|
-
role: 'assistant',
|
|
111
|
-
content: toAssistantContentBlocks(response.content),
|
|
112
|
-
});
|
|
113
|
-
const toolResults = await Promise.all(toolUses.map(async (toolUse) => {
|
|
114
|
-
const result = await executeToolCall(params, {
|
|
115
|
-
id: toolUse.id,
|
|
116
|
-
name: toolUse.name,
|
|
117
|
-
input: toolUse.input,
|
|
118
|
-
});
|
|
119
|
-
return {
|
|
120
|
-
type: 'tool_result',
|
|
121
|
-
tool_use_id: toolUse.id,
|
|
122
|
-
content: JSON.stringify(serializeToolResult(result)),
|
|
123
|
-
is_error: !result.success,
|
|
124
|
-
};
|
|
125
|
-
}));
|
|
126
|
-
messages.push({
|
|
127
|
-
role: 'user',
|
|
128
|
-
content: toolResults,
|
|
129
|
-
});
|
|
227
|
+
/** One model request: streams text and reasoning, then reports tool calls and why it stopped. */
|
|
228
|
+
async *step(params) {
|
|
229
|
+
params.signal?.throwIfAborted();
|
|
230
|
+
const stream = this.client.messages.stream(this.request(params, toClaudeStepMessages(params.messages)), { signal: params.signal });
|
|
231
|
+
for await (const event of stream) {
|
|
232
|
+
if (event.type !== 'content_block_delta')
|
|
233
|
+
continue;
|
|
234
|
+
if (event.delta.type === 'text_delta')
|
|
235
|
+
yield { type: 'text-delta', delta: event.delta.text };
|
|
236
|
+
else if (event.delta.type === 'thinking_delta')
|
|
237
|
+
yield { type: 'reasoning-delta', delta: event.delta.thinking };
|
|
238
|
+
}
|
|
239
|
+
const message = await stream.finalMessage();
|
|
240
|
+
if (message.stop_reason === 'model_context_window_exceeded') {
|
|
241
|
+
throw new Error('The conversation is longer than the model context window.');
|
|
130
242
|
}
|
|
243
|
+
const parts = toParts(message.content);
|
|
244
|
+
const calls = parts.filter((part) => part.type === 'tool-call');
|
|
245
|
+
for (const call of calls) {
|
|
246
|
+
yield {
|
|
247
|
+
type: 'tool-call',
|
|
248
|
+
call: { id: call.toolCallId, name: call.toolName, input: call.input },
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
yield {
|
|
252
|
+
type: 'finish',
|
|
253
|
+
reason: finishReason(message.stop_reason, calls.length > 0),
|
|
254
|
+
usage: toUsage(message.usage),
|
|
255
|
+
parts,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* A turn with tools run through `params.toolExecutor`, as text.
|
|
260
|
+
* @deprecated Use `runTurn()`, which also returns the reply's parts, status and usage.
|
|
261
|
+
*/
|
|
262
|
+
chat(params) {
|
|
263
|
+
return chatViaTurn(this, params);
|
|
264
|
+
}
|
|
265
|
+
/** @deprecated Use `runTurn()`. */
|
|
266
|
+
chatSync(params) {
|
|
267
|
+
return chatSyncViaTurn(this, params);
|
|
131
268
|
}
|
|
132
269
|
}
|
|
133
270
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type Content } from '@google/genai';
|
|
2
|
+
import type { ChatMessage, ProviderChatParams, ProviderConfig } from '../types.js';
|
|
2
3
|
import type { AIProvider } from './base.js';
|
|
4
|
+
import type { ProviderEvent, ProviderStepParams } from './types.js';
|
|
5
|
+
/** `thinkingLevel` is a Gemini 3 setting; older models use a token budget instead. */
|
|
6
|
+
export declare function geminiSupportsThinkingLevel(model: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Stored history as Gemini contents. An assistant message with tool calls
|
|
9
|
+
* becomes a model turn with its `functionCall` parts, then a user turn with
|
|
10
|
+
* the `functionResponse` parts, for each step. Thought signatures go back on
|
|
11
|
+
* the parts they came with.
|
|
12
|
+
*/
|
|
13
|
+
export declare function toGeminiStepContents(messages: ChatMessage[], model?: string): Content[];
|
|
3
14
|
export declare class GeminiProvider implements AIProvider {
|
|
4
15
|
name: string;
|
|
5
|
-
private
|
|
6
|
-
|
|
16
|
+
private ai;
|
|
17
|
+
readonly model: string;
|
|
18
|
+
private effort;
|
|
7
19
|
constructor(config: ProviderConfig);
|
|
20
|
+
private config;
|
|
21
|
+
/** One model request: streams text and thoughts, then reports tool calls, usage and why it stopped. */
|
|
22
|
+
step(params: ProviderStepParams): AsyncGenerator<ProviderEvent>;
|
|
23
|
+
/**
|
|
24
|
+
* A turn with tools run through `params.toolExecutor`, as text.
|
|
25
|
+
* @deprecated Use `runTurn()`, which also returns the reply's parts, status and usage.
|
|
26
|
+
*/
|
|
8
27
|
chat(params: ProviderChatParams): AsyncGenerator<string>;
|
|
28
|
+
/** @deprecated Use `runTurn()`. */
|
|
9
29
|
chatSync(params: ProviderChatParams): Promise<string>;
|
|
10
30
|
}
|
|
11
31
|
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,WAAW,EAEX,kBAAkB,EAClB,cAAc,EAMf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAK5C,OAAO,KAAK,EAAgB,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiBlF,sFAAsF;AACtF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlE;AAoBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,SAAgB,GAAG,OAAO,EAAE,CAsE9F;AA8BD,qBAAa,cAAe,YAAW,UAAU;IAC/C,IAAI,SAAY;IAChB,OAAO,CAAC,EAAE,CAAc;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;IAiBlC,OAAO,CAAC,MAAM;IAed,uGAAuG;IAChG,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,aAAa,CAAC;IAqFtE;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC;IAIxD,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAGtD"}
|