@chatcops/core 0.3.2 → 0.4.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/conversation/manager.d.ts.map +1 -1
- package/dist/conversation/manager.js +5 -1
- package/dist/conversation/manager.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/base.d.ts +20 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +48 -25
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/claude.d.ts +17 -0
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +127 -77
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/gemini.d.ts +6 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +101 -75
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +13 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +79 -70
- package/dist/providers/openai.js.map +1 -1
- package/dist/tools/lead-capture.d.ts.map +1 -1
- package/dist/tools/lead-capture.js +2 -1
- package/dist/tools/lead-capture.js.map +1 -1
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/conversation/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAKnE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAc9C,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/conversation/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAKnE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAc9C,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAqB/E,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAK3D,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvE,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpD"}
|
|
@@ -25,9 +25,13 @@ export class ConversationManager {
|
|
|
25
25
|
conversation.updatedAt = Date.now();
|
|
26
26
|
if (conversation.messages.length > this.maxMessages) {
|
|
27
27
|
const systemMessages = conversation.messages.filter((m) => m.role === 'system');
|
|
28
|
-
|
|
28
|
+
let recentMessages = conversation.messages
|
|
29
29
|
.filter((m) => m.role !== 'system')
|
|
30
30
|
.slice(-(this.maxMessages - systemMessages.length));
|
|
31
|
+
// Never start the kept history with an assistant turn; some providers
|
|
32
|
+
// (Gemini) reject a conversation that doesn't open with the user.
|
|
33
|
+
const firstUser = recentMessages.findIndex((m) => m.role === 'user');
|
|
34
|
+
recentMessages = firstUser === -1 ? [] : recentMessages.slice(firstUser);
|
|
31
35
|
conversation.messages = [...systemMessages, ...recentMessages];
|
|
32
36
|
}
|
|
33
37
|
await this.store.save(conversation);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/conversation/manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,OAAO,mBAAmB;IACtB,KAAK,CAAoB;IACzB,WAAW,CAAS;IAE5B,YAAY,OAA6D;QACvE,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,GAAG,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,YAAY,GAAiB;YACjC,EAAE;YACF,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,cAAsB,EAAE,OAAoB;QAC3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC5D,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEpC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpD,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAChF,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/conversation/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type { ChatMessage, Conversation, ChatRequest, ChatResponse, PageContext, LeadData, ToolParameter, ToolDefinition, ToolResult, ProviderToolCall, ProviderToolExecutor, WebhookConfig, ProviderConfig, ProviderChatParams, AnalyticsEvent, LocaleStrings, } from './types.js';
|
|
2
|
-
export type { AIProvider } from './providers/index.js';
|
|
3
|
-
export { createProvider, ClaudeProvider, OpenAIProvider, GeminiProvider } from './providers/index.js';
|
|
1
|
+
export type { ChatMessage, Conversation, ChatRequest, ChatResponse, PageContext, LeadData, ToolParameter, ToolDefinition, ToolResult, ProviderToolCall, ProviderToolExecutor, WebhookConfig, ProviderConfig, ProviderEffort, ProviderChatParams, AnalyticsEvent, LocaleStrings, } from './types.js';
|
|
2
|
+
export type { AIProvider, NormalizedMessage } from './providers/index.js';
|
|
3
|
+
export { createProvider, normalizeHistory, ClaudeProvider, OpenAIProvider, GeminiProvider } from './providers/index.js';
|
|
4
4
|
export type { ChatTool, LeadCaptureCallback } from './tools/index.js';
|
|
5
5
|
export { toolToDefinition, LeadCaptureTool } from './tools/index.js';
|
|
6
6
|
export type { KnowledgeSource, FAQPair } from './knowledge/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGxH,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGrE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createProvider, ClaudeProvider, OpenAIProvider, GeminiProvider } from './providers/index.js';
|
|
1
|
+
export { createProvider, normalizeHistory, ClaudeProvider, OpenAIProvider, GeminiProvider } from './providers/index.js';
|
|
2
2
|
export { toolToDefinition, LeadCaptureTool } from './tools/index.js';
|
|
3
3
|
export { TextKnowledgeSource, FAQKnowledgeSource } from './knowledge/index.js';
|
|
4
4
|
export { ConversationManager, MemoryStore } from './conversation/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIxH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIrE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/E,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,YAAY;AACZ,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO;AACP,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/providers/base.d.ts
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Tool as GeminiTool } from '@google/genai';
|
|
2
2
|
import type { ChatMessage, ProviderChatParams, ProviderConfig, ToolDefinition } from '../types.js';
|
|
3
3
|
export interface AIProvider {
|
|
4
4
|
name: string;
|
|
5
5
|
chat(params: ProviderChatParams): AsyncGenerator<string>;
|
|
6
6
|
chatSync(params: ProviderChatParams): Promise<string>;
|
|
7
7
|
}
|
|
8
|
+
/** Output token limit used when neither the server config nor the request sets one. */
|
|
9
|
+
export declare const DEFAULT_MAX_TOKENS = 4096;
|
|
8
10
|
export declare function createProvider(config: ProviderConfig): Promise<AIProvider>;
|
|
9
11
|
export declare function toProviderMessages(messages: ChatMessage[]): Array<{
|
|
10
12
|
role: string;
|
|
11
13
|
content: string;
|
|
12
14
|
}>;
|
|
15
|
+
export interface NormalizedMessage {
|
|
16
|
+
role: 'user' | 'assistant';
|
|
17
|
+
content: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Turns stored messages into a history every provider accepts: it starts with
|
|
21
|
+
* a user turn and alternates between user and assistant.
|
|
22
|
+
*
|
|
23
|
+
* - System messages and empty messages are dropped.
|
|
24
|
+
* - Leading assistant turns are dropped (history trimming can leave one first).
|
|
25
|
+
* - Consecutive turns with the same role are merged with a blank line, for
|
|
26
|
+
* example a user message saved before a provider call that then failed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizeHistory(messages: ChatMessage[]): NormalizedMessage[];
|
|
29
|
+
/** Logs a configuration warning once per process. */
|
|
30
|
+
export declare function warnOnce(key: string, message: string): void;
|
|
13
31
|
export declare function toClaudeTools(tools: ToolDefinition[]): {
|
|
14
32
|
name: string;
|
|
15
33
|
description: string;
|
|
@@ -31,5 +49,5 @@ export declare function toOpenAITools(tools: ToolDefinition[]): {
|
|
|
31
49
|
};
|
|
32
50
|
};
|
|
33
51
|
}[];
|
|
34
|
-
export declare function toGeminiTools(tools: ToolDefinition[]):
|
|
52
|
+
export declare function toGeminiTools(tools: ToolDefinition[]): GeminiTool[];
|
|
35
53
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD;AAED,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAiBhF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAIpG;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAiB7E;AAID,qDAAqD;AACrD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3D;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE;;;;;;;;IAMpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE;;;;;;;;;;;IASpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CAQnE"}
|
package/dist/providers/base.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/** Output token limit used when neither the server config nor the request sets one. */
|
|
2
|
+
export const DEFAULT_MAX_TOKENS = 4096;
|
|
2
3
|
export async function createProvider(config) {
|
|
3
4
|
switch (config.type) {
|
|
4
5
|
case 'claude': {
|
|
@@ -22,15 +23,54 @@ export function toProviderMessages(messages) {
|
|
|
22
23
|
.filter((m) => m.role !== 'system')
|
|
23
24
|
.map((m) => ({ role: m.role, content: m.content }));
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Turns stored messages into a history every provider accepts: it starts with
|
|
28
|
+
* a user turn and alternates between user and assistant.
|
|
29
|
+
*
|
|
30
|
+
* - System messages and empty messages are dropped.
|
|
31
|
+
* - Leading assistant turns are dropped (history trimming can leave one first).
|
|
32
|
+
* - Consecutive turns with the same role are merged with a blank line, for
|
|
33
|
+
* example a user message saved before a provider call that then failed.
|
|
34
|
+
*/
|
|
35
|
+
export function normalizeHistory(messages) {
|
|
36
|
+
const normalized = [];
|
|
37
|
+
for (const message of messages) {
|
|
38
|
+
if (message.role !== 'user' && message.role !== 'assistant')
|
|
39
|
+
continue;
|
|
40
|
+
if (!message.content.trim())
|
|
41
|
+
continue;
|
|
42
|
+
if (normalized.length === 0 && message.role !== 'user')
|
|
43
|
+
continue;
|
|
44
|
+
const previous = normalized.at(-1);
|
|
45
|
+
if (previous && previous.role === message.role) {
|
|
46
|
+
previous.content += `\n\n${message.content}`;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
normalized.push({ role: message.role, content: message.content });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return normalized;
|
|
53
|
+
}
|
|
54
|
+
const warned = new Set();
|
|
55
|
+
/** Logs a configuration warning once per process. */
|
|
56
|
+
export function warnOnce(key, message) {
|
|
57
|
+
if (warned.has(key))
|
|
58
|
+
return;
|
|
59
|
+
warned.add(key);
|
|
60
|
+
console.warn(`[chatcops] ${message}`);
|
|
61
|
+
}
|
|
62
|
+
function toJsonSchemaObject(tool) {
|
|
63
|
+
return {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: tool.parameters,
|
|
66
|
+
required: tool.required,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
25
69
|
export function toClaudeTools(tools) {
|
|
26
70
|
return tools.map((t) => ({
|
|
27
71
|
name: t.name,
|
|
28
72
|
description: t.description,
|
|
29
|
-
input_schema:
|
|
30
|
-
type: 'object',
|
|
31
|
-
properties: t.parameters,
|
|
32
|
-
required: t.required,
|
|
33
|
-
},
|
|
73
|
+
input_schema: toJsonSchemaObject(t),
|
|
34
74
|
}));
|
|
35
75
|
}
|
|
36
76
|
export function toOpenAITools(tools) {
|
|
@@ -39,33 +79,16 @@ export function toOpenAITools(tools) {
|
|
|
39
79
|
function: {
|
|
40
80
|
name: t.name,
|
|
41
81
|
description: t.description,
|
|
42
|
-
parameters:
|
|
43
|
-
type: 'object',
|
|
44
|
-
properties: t.parameters,
|
|
45
|
-
required: t.required,
|
|
46
|
-
},
|
|
82
|
+
parameters: toJsonSchemaObject(t),
|
|
47
83
|
},
|
|
48
84
|
}));
|
|
49
85
|
}
|
|
50
|
-
const SCHEMA_TYPE_MAP = {
|
|
51
|
-
string: SchemaType.STRING,
|
|
52
|
-
number: SchemaType.NUMBER,
|
|
53
|
-
boolean: SchemaType.BOOLEAN,
|
|
54
|
-
};
|
|
55
86
|
export function toGeminiTools(tools) {
|
|
56
87
|
return [{
|
|
57
88
|
functionDeclarations: tools.map((t) => ({
|
|
58
89
|
name: t.name,
|
|
59
90
|
description: t.description,
|
|
60
|
-
|
|
61
|
-
type: SchemaType.OBJECT,
|
|
62
|
-
properties: Object.fromEntries(Object.entries(t.parameters).map(([k, v]) => [k, {
|
|
63
|
-
type: SCHEMA_TYPE_MAP[v.type] ?? SchemaType.STRING,
|
|
64
|
-
description: v.description,
|
|
65
|
-
...(v.enum ? { enum: v.enum } : {}),
|
|
66
|
-
}])),
|
|
67
|
-
required: t.required,
|
|
68
|
-
},
|
|
91
|
+
parametersJsonSchema: toJsonSchemaObject(t),
|
|
69
92
|
})),
|
|
70
93
|
}];
|
|
71
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AASA,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB;IACzD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,0BAA2B,MAAyB,CAAC,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAuB;IACxD,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAOD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAuB;IACtD,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACtE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QACtC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAEjE,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/C,QAAQ,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjC,qDAAqD;AACrD,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAe;IACnD,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAoB;IAC9C,OAAO;QACL,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAuB;IACnD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;KACpC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAuB;IACnD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,UAAmB;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;SAClC;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAuB;IACnD,OAAO,CAAC;YACN,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,oBAAoB,EAAE,kBAAkB,CAAC,CAAC,CAAC;aAC5C,CAAC,CAAC;SACJ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
import type { ProviderConfig, ProviderChatParams } from '../types.js';
|
|
2
2
|
import type { AIProvider } from './base.js';
|
|
3
|
+
interface ClaudeVersion {
|
|
4
|
+
family: string;
|
|
5
|
+
major: number;
|
|
6
|
+
minor: number;
|
|
7
|
+
}
|
|
8
|
+
/** Reads family and version from ids like `claude-haiku-5-5` or `claude-haiku-4-5-20251001`. */
|
|
9
|
+
export declare function parseClaudeModel(model: string): ClaudeVersion | null;
|
|
10
|
+
/** `output_config.effort` exists on Opus 4.5 and on every model from 4.6 on. */
|
|
11
|
+
export declare function claudeSupportsEffort(model: string): boolean;
|
|
12
|
+
/** Fable, Mythos, every 5.x model and Opus 4.7+ reject non-default `temperature`. */
|
|
13
|
+
export declare function claudeRejectsTemperature(model: string): boolean;
|
|
3
14
|
export declare class ClaudeProvider implements AIProvider {
|
|
4
15
|
name: string;
|
|
5
16
|
private client;
|
|
6
17
|
private model;
|
|
18
|
+
private effort;
|
|
7
19
|
constructor(config: ProviderConfig);
|
|
20
|
+
private request;
|
|
21
|
+
/** Throws on stop reasons that mean the reply can't be used. */
|
|
22
|
+
private checkStopReason;
|
|
8
23
|
chat(params: ProviderChatParams): AsyncGenerator<string>;
|
|
9
24
|
chatSync(params: ProviderChatParams): Promise<string>;
|
|
25
|
+
private runTools;
|
|
10
26
|
}
|
|
27
|
+
export {};
|
|
11
28
|
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAkB,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAW5C,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIpE;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM/D;AA+CD,qBAAa,cAAe,YAAW,UAAU;IAC/C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,cAAc;IAclC,OAAO,CAAC,OAAO;IAqBf,gEAAgE;IAChE,OAAO,CAAC,eAAe;IAYhB,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC;IAgCzD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;YA0B7C,QAAQ;CAmBvB"}
|
package/dist/providers/claude.js
CHANGED
|
@@ -1,57 +1,136 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { DEFAULT_MAX_TOKENS, normalizeHistory, toClaudeTools, warnOnce } from './base.js';
|
|
3
3
|
import { MAX_TOOL_ROUNDS, executeToolCall, serializeToolResult, } from './tool-execution.js';
|
|
4
|
-
const DEFAULT_MODEL = 'claude-haiku-
|
|
4
|
+
const DEFAULT_MODEL = 'claude-haiku-5-5';
|
|
5
|
+
const DEFAULT_EFFORT = 'low';
|
|
6
|
+
/** Reads family and version from ids like `claude-haiku-5-5` or `claude-haiku-4-5-20251001`. */
|
|
7
|
+
export function parseClaudeModel(model) {
|
|
8
|
+
const match = model.match(/claude-(opus|sonnet|haiku|fable|mythos)-(\d+)(?:-(\d{1,2})(?!\d))?/);
|
|
9
|
+
if (!match)
|
|
10
|
+
return null;
|
|
11
|
+
return { family: match[1], major: Number(match[2]), minor: Number(match[3] ?? 0) };
|
|
12
|
+
}
|
|
13
|
+
/** `output_config.effort` exists on Opus 4.5 and on every model from 4.6 on. */
|
|
14
|
+
export function claudeSupportsEffort(model) {
|
|
15
|
+
const version = parseClaudeModel(model);
|
|
16
|
+
if (!version)
|
|
17
|
+
return false;
|
|
18
|
+
if (version.family === 'fable' || version.family === 'mythos')
|
|
19
|
+
return true;
|
|
20
|
+
if (version.major >= 5)
|
|
21
|
+
return true;
|
|
22
|
+
if (version.major === 4 && version.minor >= 6)
|
|
23
|
+
return true;
|
|
24
|
+
return version.family === 'opus' && version.major === 4 && version.minor === 5;
|
|
25
|
+
}
|
|
26
|
+
/** Fable, Mythos, every 5.x model and Opus 4.7+ reject non-default `temperature`. */
|
|
27
|
+
export function claudeRejectsTemperature(model) {
|
|
28
|
+
const version = parseClaudeModel(model);
|
|
29
|
+
if (!version)
|
|
30
|
+
return false;
|
|
31
|
+
if (version.family === 'fable' || version.family === 'mythos')
|
|
32
|
+
return true;
|
|
33
|
+
if (version.major >= 5)
|
|
34
|
+
return true;
|
|
35
|
+
return version.family === 'opus' && version.major === 4 && version.minor >= 7;
|
|
36
|
+
}
|
|
5
37
|
function toClaudeMessages(params) {
|
|
6
|
-
return
|
|
38
|
+
return normalizeHistory(params.messages).map((message) => ({
|
|
7
39
|
role: message.role,
|
|
8
40
|
content: message.content,
|
|
9
41
|
}));
|
|
10
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Sends the assistant turn back for the next tool round. Thinking blocks must
|
|
45
|
+
* go back unchanged (including the signature), or the API rejects the request.
|
|
46
|
+
*/
|
|
11
47
|
function toAssistantContentBlocks(content) {
|
|
12
48
|
const blocks = [];
|
|
13
49
|
for (const block of content) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
50
|
+
switch (block.type) {
|
|
51
|
+
case 'text':
|
|
52
|
+
blocks.push({ type: 'text', text: block.text });
|
|
53
|
+
break;
|
|
54
|
+
case 'thinking':
|
|
55
|
+
blocks.push({ type: 'thinking', thinking: block.thinking, signature: block.signature });
|
|
56
|
+
break;
|
|
57
|
+
case 'redacted_thinking':
|
|
58
|
+
blocks.push({ type: 'redacted_thinking', data: block.data });
|
|
59
|
+
break;
|
|
60
|
+
case 'tool_use':
|
|
61
|
+
blocks.push({ type: 'tool_use', id: block.id, name: block.name, input: block.input });
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
break;
|
|
25
65
|
}
|
|
26
66
|
}
|
|
27
67
|
return blocks;
|
|
28
68
|
}
|
|
69
|
+
function textOf(content) {
|
|
70
|
+
return content
|
|
71
|
+
.filter((block) => block.type === 'text')
|
|
72
|
+
.map((block) => block.text)
|
|
73
|
+
.join('');
|
|
74
|
+
}
|
|
29
75
|
export class ClaudeProvider {
|
|
30
76
|
name = 'claude';
|
|
31
77
|
client;
|
|
32
78
|
model;
|
|
79
|
+
effort;
|
|
33
80
|
constructor(config) {
|
|
34
|
-
this.client = new Anthropic({
|
|
81
|
+
this.client = new Anthropic({
|
|
82
|
+
apiKey: config.apiKey,
|
|
83
|
+
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
84
|
+
});
|
|
35
85
|
this.model = config.model ?? DEFAULT_MODEL;
|
|
86
|
+
if (claudeSupportsEffort(this.model)) {
|
|
87
|
+
this.effort = config.effort ?? DEFAULT_EFFORT;
|
|
88
|
+
}
|
|
89
|
+
else if (config.effort) {
|
|
90
|
+
warnOnce(`claude-effort-${this.model}`, `${this.model} has no effort setting, so \`effort\` is ignored.`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
request(params, messages) {
|
|
94
|
+
let temperature = params.temperature;
|
|
95
|
+
if (temperature != null && claudeRejectsTemperature(this.model)) {
|
|
96
|
+
warnOnce(`claude-temperature-${this.model}`, `${this.model} doesn't accept \`temperature\`, so it is not sent. Use \`effort\` to trade speed for depth.`);
|
|
97
|
+
temperature = undefined;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
model: this.model,
|
|
101
|
+
max_tokens: params.maxTokens ?? DEFAULT_MAX_TOKENS,
|
|
102
|
+
system: params.systemPrompt,
|
|
103
|
+
messages,
|
|
104
|
+
...(params.tools?.length ? { tools: toClaudeTools(params.tools) } : {}),
|
|
105
|
+
...(temperature != null ? { temperature } : {}),
|
|
106
|
+
...(this.effort ? { output_config: { effort: this.effort } } : {}),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Throws on stop reasons that mean the reply can't be used. */
|
|
110
|
+
checkStopReason(message) {
|
|
111
|
+
if (message.stop_reason === 'refusal') {
|
|
112
|
+
throw new Error('Claude declined to answer this request (stop_reason: refusal).');
|
|
113
|
+
}
|
|
114
|
+
if (message.stop_reason === 'model_context_window_exceeded') {
|
|
115
|
+
throw new Error('The conversation is longer than the model context window.');
|
|
116
|
+
}
|
|
117
|
+
if (message.stop_reason === 'max_tokens') {
|
|
118
|
+
console.warn(`[chatcops] Claude reply cut off at max_tokens (${message.usage.output_tokens} tokens). Raise \`maxTokens\` if this keeps happening.`);
|
|
119
|
+
}
|
|
36
120
|
}
|
|
37
121
|
async *chat(params) {
|
|
38
122
|
const messages = toClaudeMessages(params);
|
|
39
123
|
let toolRounds = 0;
|
|
40
124
|
while (true) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
max_tokens: params.maxTokens ?? 1024,
|
|
44
|
-
system: params.systemPrompt,
|
|
45
|
-
messages,
|
|
46
|
-
...(params.tools?.length ? { tools: toClaudeTools(params.tools) } : {}),
|
|
47
|
-
...(params.temperature != null ? { temperature: params.temperature } : {}),
|
|
48
|
-
});
|
|
125
|
+
params.signal?.throwIfAborted();
|
|
126
|
+
const stream = this.client.messages.stream(this.request(params, messages), { signal: params.signal });
|
|
49
127
|
for await (const event of stream) {
|
|
50
128
|
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
|
|
51
129
|
yield event.delta.text;
|
|
52
130
|
}
|
|
53
131
|
}
|
|
54
132
|
const message = await stream.finalMessage();
|
|
133
|
+
this.checkStopReason(message);
|
|
55
134
|
const toolUses = message.content.filter((block) => block.type === 'tool_use');
|
|
56
135
|
if (message.stop_reason !== 'tool_use' || toolUses.length === 0) {
|
|
57
136
|
return;
|
|
@@ -60,74 +139,45 @@ export class ClaudeProvider {
|
|
|
60
139
|
throw new Error(`Exceeded maximum tool rounds (${MAX_TOOL_ROUNDS}).`);
|
|
61
140
|
}
|
|
62
141
|
toolRounds += 1;
|
|
63
|
-
messages.push({
|
|
64
|
-
|
|
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
|
-
});
|
|
142
|
+
messages.push({ role: 'assistant', content: toAssistantContentBlocks(message.content) });
|
|
143
|
+
messages.push({ role: 'user', content: await this.runTools(params, toolUses) });
|
|
84
144
|
}
|
|
85
145
|
}
|
|
86
146
|
async chatSync(params) {
|
|
87
147
|
const messages = toClaudeMessages(params);
|
|
88
148
|
let toolRounds = 0;
|
|
149
|
+
let text = '';
|
|
89
150
|
while (true) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
messages,
|
|
95
|
-
...(params.tools?.length ? { tools: toClaudeTools(params.tools) } : {}),
|
|
96
|
-
...(params.temperature != null ? { temperature: params.temperature } : {}),
|
|
97
|
-
});
|
|
151
|
+
params.signal?.throwIfAborted();
|
|
152
|
+
const response = await this.client.messages.create(this.request(params, messages), { signal: params.signal });
|
|
153
|
+
this.checkStopReason(response);
|
|
154
|
+
text += textOf(response.content);
|
|
98
155
|
const toolUses = response.content.filter((block) => block.type === 'tool_use');
|
|
99
156
|
if (response.stop_reason !== 'tool_use' || toolUses.length === 0) {
|
|
100
|
-
return
|
|
101
|
-
.filter((block) => block.type === 'text')
|
|
102
|
-
.map((block) => block.text)
|
|
103
|
-
.join('');
|
|
157
|
+
return text;
|
|
104
158
|
}
|
|
105
159
|
if (toolRounds >= MAX_TOOL_ROUNDS) {
|
|
106
160
|
throw new Error(`Exceeded maximum tool rounds (${MAX_TOOL_ROUNDS}).`);
|
|
107
161
|
}
|
|
108
162
|
toolRounds += 1;
|
|
109
|
-
messages.push({
|
|
110
|
-
|
|
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
|
-
});
|
|
163
|
+
messages.push({ role: 'assistant', content: toAssistantContentBlocks(response.content) });
|
|
164
|
+
messages.push({ role: 'user', content: await this.runTools(params, toolUses) });
|
|
130
165
|
}
|
|
131
166
|
}
|
|
167
|
+
async runTools(params, toolUses) {
|
|
168
|
+
return Promise.all(toolUses.map(async (toolUse) => {
|
|
169
|
+
const result = await executeToolCall(params, {
|
|
170
|
+
id: toolUse.id,
|
|
171
|
+
name: toolUse.name,
|
|
172
|
+
input: toolUse.input,
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
type: 'tool_result',
|
|
176
|
+
tool_use_id: toolUse.id,
|
|
177
|
+
content: JSON.stringify(serializeToolResult(result)),
|
|
178
|
+
is_error: !result.success,
|
|
179
|
+
};
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
132
182
|
}
|
|
133
183
|
//# 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;AAG1C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1F,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,MAAM,cAAc,GAAmB,KAAK,CAAC;AAQ7C,gGAAgG;AAChG,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAChG,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0B;IAClD,OAAO,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAC/B,OAA8C;IAE9C,MAAM,MAAM,GAA2C,EAAE,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBACxF,MAAM;YACR,KAAK,mBAAmB;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtF,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,MAAM,CAAC,OAA8C;IAC5D,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAyC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SAC/E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAY;IAClB,KAAK,CAAS;IACd,MAAM,CAA6B;IAE3C,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;QAE3C,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC;QAChD,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,QAAQ,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,mDAAmD,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,MAA0B,EAAE,QAA2C;QACrF,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACrC,IAAI,WAAW,IAAI,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,QAAQ,CACN,sBAAsB,IAAI,CAAC,KAAK,EAAE,EAClC,GAAG,IAAI,CAAC,KAAK,8FAA8F,CAC5G,CAAC;YACF,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB;YAClD,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,QAAQ;YACR,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACN,CAAC;IACjE,CAAC;IAED,gEAAgE;IACxD,eAAe,CAAC,OAAmC;QACzD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,+BAA+B,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,kDAAkD,OAAO,CAAC,KAAK,CAAC,aAAa,wDAAwD,CAAC,CAAC;QACtJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,CAAC,MAA0B;QACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAEtG,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9E,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAE9E,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,IAAI,UAAU,IAAI,eAAe,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,eAAe,IAAI,CAAC,CAAC;YACxE,CAAC;YACD,UAAU,IAAI,CAAC,CAAC;YAEhB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA0B;QACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9G,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC/E,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,UAAU,IAAI,eAAe,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,eAAe,IAAI,CAAC,CAAC;YACxE,CAAC;YACD,UAAU,IAAI,CAAC,CAAC;YAEhB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1F,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,MAA0B,EAC1B,QAA2C;QAE3C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE;gBAC3C,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAgC;aAChD,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,aAAsB;gBAC5B,WAAW,EAAE,OAAO,CAAC,EAAE;gBACvB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACpD,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO;aAC1B,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { ProviderConfig, ProviderChatParams } from '../types.js';
|
|
2
2
|
import type { AIProvider } from './base.js';
|
|
3
|
+
/** `thinkingLevel` is a Gemini 3 setting; older models use a token budget instead. */
|
|
4
|
+
export declare function geminiSupportsThinkingLevel(model: string): boolean;
|
|
3
5
|
export declare class GeminiProvider implements AIProvider {
|
|
4
6
|
name: string;
|
|
5
|
-
private
|
|
7
|
+
private ai;
|
|
6
8
|
private model;
|
|
9
|
+
private effort;
|
|
7
10
|
constructor(config: ProviderConfig);
|
|
11
|
+
private config;
|
|
8
12
|
chat(params: ProviderChatParams): AsyncGenerator<string>;
|
|
9
13
|
chatSync(params: ProviderChatParams): Promise<string>;
|
|
14
|
+
private runTools;
|
|
10
15
|
}
|
|
11
16
|
//# 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":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAkB,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAyB5C,sFAAsF;AACtF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlE;AAgCD,qBAAa,cAAe,YAAW,UAAU;IAC/C,IAAI,SAAY;IAChB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;IASlC,OAAO,CAAC,MAAM;IAaP,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC;IA0CzD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;YA8B7C,QAAQ;CAiBvB"}
|