thatgfsj-code 0.3.0 → 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/cmd/index.js +1 -1
- package/dist/config/index.d.ts +5 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +22 -4
- package/dist/config/index.js.map +1 -1
- package/dist/config/providers.d.ts +5 -10
- package/dist/config/providers.d.ts.map +1 -1
- package/dist/config/providers.js +152 -78
- package/dist/config/providers.js.map +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/llm/anthropic.d.ts +34 -3
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +83 -35
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/gemini.d.ts +14 -1
- package/dist/llm/gemini.d.ts.map +1 -1
- package/dist/llm/gemini.js +56 -23
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/index.d.ts +9 -8
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +75 -80
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/openai.d.ts +30 -3
- package/dist/llm/openai.d.ts.map +1 -1
- package/dist/llm/openai.js +45 -28
- package/dist/llm/openai.js.map +1 -1
- package/dist/tui/output.js +1 -1
- package/dist/tui/welcome.d.ts +5 -1
- package/dist/tui/welcome.d.ts.map +1 -1
- package/dist/tui/welcome.js +75 -29
- package/dist/tui/welcome.js.map +1 -1
- package/package.json +1 -1
- package/src/cmd/index.ts +1 -1
- package/src/config/index.ts +21 -4
- package/src/config/providers.ts +153 -79
- package/src/config/types.ts +11 -5
- package/src/llm/anthropic.ts +90 -39
- package/src/llm/gemini.ts +65 -30
- package/src/llm/index.ts +77 -87
- package/src/llm/openai.ts +46 -34
- package/src/tui/output.ts +1 -1
- package/src/tui/welcome.ts +86 -32
package/dist/llm/anthropic.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Anthropic Provider
|
|
3
|
-
* Works with: Anthropic Claude
|
|
3
|
+
* Works with: Anthropic Claude API
|
|
4
|
+
* Also works with any Anthropic-compatible relay station (中转站)
|
|
5
|
+
*
|
|
6
|
+
* API: POST {baseUrl}/messages
|
|
7
|
+
* Auth: x-api-key: {apiKey}, anthropic-version: 2023-06-01
|
|
8
|
+
* Streaming: SSE with "event: ..." and "data: {...}" lines
|
|
9
|
+
*
|
|
10
|
+
* Key differences from OpenAI:
|
|
11
|
+
* - System message is separate (top-level "system" field)
|
|
12
|
+
* - No "system" role in messages array
|
|
13
|
+
* - Tool use blocks have type "tool_use" with "input" (not "arguments")
|
|
14
|
+
* - Tool results use role "tool_result" (not "tool")
|
|
4
15
|
*/
|
|
5
16
|
export class AnthropicProvider {
|
|
6
17
|
name = 'anthropic';
|
|
@@ -21,52 +32,39 @@ export class AnthropicProvider {
|
|
|
21
32
|
}
|
|
22
33
|
async chat(messages, options) {
|
|
23
34
|
const body = this.buildRequest(messages, false, options);
|
|
24
|
-
const response = await
|
|
25
|
-
method: 'POST',
|
|
26
|
-
headers: {
|
|
27
|
-
'Content-Type': 'application/json',
|
|
28
|
-
'x-api-key': this.config.apiKey,
|
|
29
|
-
'anthropic-version': '2023-06-01',
|
|
30
|
-
},
|
|
31
|
-
body: JSON.stringify(body),
|
|
32
|
-
});
|
|
35
|
+
const response = await this.doRequest(body);
|
|
33
36
|
if (!response.ok) {
|
|
34
37
|
const text = await response.text().catch(() => '');
|
|
35
38
|
throw new Error(`Anthropic API error ${response.status}: ${text}`);
|
|
36
39
|
}
|
|
37
40
|
const data = await response.json();
|
|
38
|
-
|
|
41
|
+
// Extract text content
|
|
42
|
+
const textBlocks = data.content?.filter((b) => b.type === 'text') || [];
|
|
43
|
+
const content = textBlocks.map((b) => b.text).join('');
|
|
44
|
+
// Extract tool calls
|
|
39
45
|
const toolUseBlocks = data.content?.filter((b) => b.type === 'tool_use') || [];
|
|
46
|
+
const toolCalls = toolUseBlocks.length > 0 ? toolUseBlocks.map((b) => ({
|
|
47
|
+
id: b.id,
|
|
48
|
+
type: 'function',
|
|
49
|
+
function: {
|
|
50
|
+
name: b.name,
|
|
51
|
+
arguments: JSON.stringify(b.input),
|
|
52
|
+
},
|
|
53
|
+
})) : undefined;
|
|
40
54
|
return {
|
|
41
|
-
content
|
|
55
|
+
content,
|
|
42
56
|
role: 'assistant',
|
|
43
57
|
usage: data.usage ? {
|
|
44
58
|
prompt_tokens: data.usage.input_tokens || 0,
|
|
45
59
|
completion_tokens: data.usage.output_tokens || 0,
|
|
46
60
|
total_tokens: (data.usage.input_tokens || 0) + (data.usage.output_tokens || 0),
|
|
47
61
|
} : undefined,
|
|
48
|
-
tool_calls:
|
|
49
|
-
id: b.id,
|
|
50
|
-
type: 'function',
|
|
51
|
-
function: {
|
|
52
|
-
name: b.name,
|
|
53
|
-
arguments: JSON.stringify(b.input),
|
|
54
|
-
},
|
|
55
|
-
})) : undefined,
|
|
62
|
+
tool_calls: toolCalls,
|
|
56
63
|
};
|
|
57
64
|
}
|
|
58
65
|
async *chatStream(messages, options) {
|
|
59
66
|
const body = this.buildRequest(messages, true, options);
|
|
60
|
-
const response = await
|
|
61
|
-
method: 'POST',
|
|
62
|
-
headers: {
|
|
63
|
-
'Content-Type': 'application/json',
|
|
64
|
-
'x-api-key': this.config.apiKey,
|
|
65
|
-
'anthropic-version': '2023-06-01',
|
|
66
|
-
'anthropic-dangerous-direct-browser-access': 'true',
|
|
67
|
-
},
|
|
68
|
-
body: JSON.stringify(body),
|
|
69
|
-
});
|
|
67
|
+
const response = await this.doRequest(body);
|
|
70
68
|
if (!response.ok || !response.body) {
|
|
71
69
|
const text = await response.text().catch(() => '');
|
|
72
70
|
throw new Error(`Anthropic API error ${response.status}: ${text}`);
|
|
@@ -89,6 +87,7 @@ export class AnthropicProvider {
|
|
|
89
87
|
continue;
|
|
90
88
|
try {
|
|
91
89
|
const data = JSON.parse(trimmed.slice(6));
|
|
90
|
+
// content_block_delta: incremental text
|
|
92
91
|
if (data.type === 'content_block_delta' && data.delta?.type === 'text_delta') {
|
|
93
92
|
const text = data.delta.text;
|
|
94
93
|
fullContent += text;
|
|
@@ -106,21 +105,70 @@ export class AnthropicProvider {
|
|
|
106
105
|
}
|
|
107
106
|
return { content: fullContent, role: 'assistant' };
|
|
108
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Build request body for Anthropic API
|
|
110
|
+
*/
|
|
109
111
|
buildRequest(messages, stream, options) {
|
|
110
112
|
// Anthropic uses separate system message
|
|
111
113
|
const systemMsg = messages.find(m => m.role === 'system');
|
|
112
114
|
const nonSystemMsgs = messages.filter(m => m.role !== 'system');
|
|
115
|
+
// Convert messages to Anthropic format
|
|
116
|
+
const anthropicMessages = nonSystemMsgs.map(m => {
|
|
117
|
+
if (m.role === 'tool') {
|
|
118
|
+
// Tool result message
|
|
119
|
+
return {
|
|
120
|
+
role: 'user',
|
|
121
|
+
content: [{
|
|
122
|
+
type: 'tool_result',
|
|
123
|
+
tool_use_id: m.tool_call_id,
|
|
124
|
+
content: m.content,
|
|
125
|
+
}],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (m.tool_calls && m.tool_calls.length > 0) {
|
|
129
|
+
// Assistant message with tool calls
|
|
130
|
+
const blocks = [];
|
|
131
|
+
if (m.content) {
|
|
132
|
+
blocks.push({ type: 'text', text: m.content });
|
|
133
|
+
}
|
|
134
|
+
for (const tc of m.tool_calls) {
|
|
135
|
+
blocks.push({
|
|
136
|
+
type: 'tool_use',
|
|
137
|
+
id: tc.id,
|
|
138
|
+
name: tc.function.name,
|
|
139
|
+
input: JSON.parse(tc.function.arguments || '{}'),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return { role: 'assistant', content: blocks };
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
role: m.role === 'assistant' ? 'assistant' : 'user',
|
|
146
|
+
content: m.content,
|
|
147
|
+
};
|
|
148
|
+
});
|
|
113
149
|
return {
|
|
114
150
|
model: this.config.model,
|
|
115
|
-
max_tokens: options?.maxTokens ?? this.config.maxTokens,
|
|
151
|
+
max_tokens: options?.maxTokens ?? this.config.maxTokens ?? 4096,
|
|
116
152
|
temperature: options?.temperature ?? this.config.temperature,
|
|
117
153
|
...(systemMsg && { system: systemMsg.content }),
|
|
118
|
-
messages:
|
|
119
|
-
role: m.role === 'assistant' ? 'assistant' : 'user',
|
|
120
|
-
content: m.content,
|
|
121
|
-
})),
|
|
154
|
+
messages: anthropicMessages,
|
|
122
155
|
stream,
|
|
123
156
|
};
|
|
124
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Execute the HTTP request
|
|
160
|
+
*/
|
|
161
|
+
async doRequest(body) {
|
|
162
|
+
const url = `${this.config.baseUrl}/messages`;
|
|
163
|
+
return fetch(url, {
|
|
164
|
+
method: 'POST',
|
|
165
|
+
headers: {
|
|
166
|
+
'Content-Type': 'application/json',
|
|
167
|
+
'x-api-key': this.config.apiKey,
|
|
168
|
+
'anthropic-version': '2023-06-01',
|
|
169
|
+
},
|
|
170
|
+
body: JSON.stringify(body),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
125
173
|
}
|
|
126
174
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/gemini.d.ts
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Google Gemini Provider
|
|
3
|
+
*
|
|
4
|
+
* API: POST {baseUrl}/models/{model}:streamGenerateContent?key={apiKey}
|
|
5
|
+
* Auth: API key in URL query parameter
|
|
6
|
+
* Streaming: JSON array chunks (not SSE)
|
|
7
|
+
*
|
|
8
|
+
* Key differences:
|
|
9
|
+
* - No "system" role in contents, use "systemInstruction" field
|
|
10
|
+
* - Roles are "user" and "model" (not "assistant")
|
|
11
|
+
* - Content is array of "parts" with "text" field
|
|
12
|
+
* - Auth via URL query param, not header
|
|
3
13
|
*/
|
|
4
14
|
import type { ChatMessage, ChatResponse, ChatOptions } from '../types.js';
|
|
5
15
|
import type { Tool } from '../tools/types.js';
|
|
6
16
|
import type { LLMProvider, ProviderConfig } from './provider.js';
|
|
7
17
|
export declare class GeminiProvider implements LLMProvider {
|
|
8
18
|
readonly name = "gemini";
|
|
9
|
-
|
|
19
|
+
protected config: ProviderConfig;
|
|
10
20
|
constructor(config: ProviderConfig);
|
|
11
21
|
buildTools(tools: Tool[]): any[];
|
|
12
22
|
chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
|
|
13
23
|
chatStream(messages: ChatMessage[], options?: ChatOptions): AsyncGenerator<string, ChatResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Build request body for Gemini API
|
|
26
|
+
*/
|
|
14
27
|
private buildRequest;
|
|
15
28
|
}
|
|
16
29
|
//# sourceMappingURL=gemini.d.ts.map
|
package/dist/llm/gemini.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/llm/gemini.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/llm/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEjE,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,EAAE,cAAc;IAIlC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE;IAgB1B,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0C1E,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IAsDvG;;OAEG;IACH,OAAO,CAAC,YAAY;CAoBrB"}
|
package/dist/llm/gemini.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Google Gemini Provider
|
|
3
|
+
*
|
|
4
|
+
* API: POST {baseUrl}/models/{model}:streamGenerateContent?key={apiKey}
|
|
5
|
+
* Auth: API key in URL query parameter
|
|
6
|
+
* Streaming: JSON array chunks (not SSE)
|
|
7
|
+
*
|
|
8
|
+
* Key differences:
|
|
9
|
+
* - No "system" role in contents, use "systemInstruction" field
|
|
10
|
+
* - Roles are "user" and "model" (not "assistant")
|
|
11
|
+
* - Content is array of "parts" with "text" field
|
|
12
|
+
* - Auth via URL query param, not header
|
|
3
13
|
*/
|
|
4
14
|
export class GeminiProvider {
|
|
5
15
|
name = 'gemini';
|
|
@@ -8,15 +18,17 @@ export class GeminiProvider {
|
|
|
8
18
|
this.config = config;
|
|
9
19
|
}
|
|
10
20
|
buildTools(tools) {
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
return [{
|
|
22
|
+
functionDeclarations: tools.map(tool => ({
|
|
23
|
+
name: tool.name,
|
|
24
|
+
description: tool.description,
|
|
25
|
+
parameters: tool.inputSchema || {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: Object.fromEntries(tool.parameters.map(p => [p.name, { type: p.type, description: p.description }])),
|
|
28
|
+
required: tool.parameters.filter(p => p.required).map(p => p.name),
|
|
29
|
+
},
|
|
30
|
+
})),
|
|
31
|
+
}];
|
|
20
32
|
}
|
|
21
33
|
async chat(messages, options) {
|
|
22
34
|
const body = this.buildRequest(messages, options);
|
|
@@ -32,7 +44,17 @@ export class GeminiProvider {
|
|
|
32
44
|
}
|
|
33
45
|
const data = await response.json();
|
|
34
46
|
const candidate = data.candidates?.[0];
|
|
35
|
-
const
|
|
47
|
+
const parts = candidate?.content?.parts || [];
|
|
48
|
+
const text = parts.map((p) => p.text).filter(Boolean).join('');
|
|
49
|
+
// Extract function calls
|
|
50
|
+
const functionCalls = parts.filter((p) => p.functionCall).map((p) => ({
|
|
51
|
+
id: `call_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
52
|
+
type: 'function',
|
|
53
|
+
function: {
|
|
54
|
+
name: p.functionCall.name,
|
|
55
|
+
arguments: JSON.stringify(p.functionCall.args || {}),
|
|
56
|
+
},
|
|
57
|
+
}));
|
|
36
58
|
return {
|
|
37
59
|
content: text,
|
|
38
60
|
role: 'assistant',
|
|
@@ -41,11 +63,12 @@ export class GeminiProvider {
|
|
|
41
63
|
completion_tokens: data.usageMetadata.candidatesTokenCount || 0,
|
|
42
64
|
total_tokens: data.usageMetadata.totalTokenCount || 0,
|
|
43
65
|
} : undefined,
|
|
66
|
+
tool_calls: functionCalls.length > 0 ? functionCalls : undefined,
|
|
44
67
|
};
|
|
45
68
|
}
|
|
46
69
|
async *chatStream(messages, options) {
|
|
47
70
|
const body = this.buildRequest(messages, options);
|
|
48
|
-
const url = `${this.config.baseUrl}/models/${this.config.model}:streamGenerateContent?key=${this.config.apiKey}`;
|
|
71
|
+
const url = `${this.config.baseUrl}/models/${this.config.model}:streamGenerateContent?alt=sse&key=${this.config.apiKey}`;
|
|
49
72
|
const response = await fetch(url, {
|
|
50
73
|
method: 'POST',
|
|
51
74
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -65,21 +88,25 @@ export class GeminiProvider {
|
|
|
65
88
|
if (done)
|
|
66
89
|
break;
|
|
67
90
|
buffer += decoder.decode(value, { stream: true });
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
91
|
+
const lines = buffer.split('\n');
|
|
92
|
+
buffer = lines.pop() || '';
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
const trimmed = line.trim();
|
|
95
|
+
if (!trimmed || !trimmed.startsWith('data: '))
|
|
96
|
+
continue;
|
|
71
97
|
try {
|
|
72
|
-
const data = JSON.parse(
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
98
|
+
const data = JSON.parse(trimmed.slice(6));
|
|
99
|
+
const parts = data.candidates?.[0]?.content?.parts || [];
|
|
100
|
+
for (const part of parts) {
|
|
101
|
+
if (part.text) {
|
|
102
|
+
fullContent += part.text;
|
|
103
|
+
yield part.text;
|
|
104
|
+
}
|
|
77
105
|
}
|
|
78
106
|
}
|
|
79
107
|
catch {
|
|
80
108
|
// Skip invalid JSON
|
|
81
109
|
}
|
|
82
|
-
buffer = buffer.slice(jsonMatch.index + jsonMatch[0].length);
|
|
83
110
|
}
|
|
84
111
|
}
|
|
85
112
|
}
|
|
@@ -88,15 +115,21 @@ export class GeminiProvider {
|
|
|
88
115
|
}
|
|
89
116
|
return { content: fullContent, role: 'assistant' };
|
|
90
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Build request body for Gemini API
|
|
120
|
+
*/
|
|
91
121
|
buildRequest(messages, options) {
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
122
|
+
const systemMsg = messages.find(m => m.role === 'system');
|
|
123
|
+
const nonSystemMsgs = messages.filter(m => m.role !== 'system');
|
|
124
|
+
const contents = nonSystemMsgs.map(m => ({
|
|
95
125
|
role: m.role === 'assistant' ? 'model' : 'user',
|
|
96
126
|
parts: [{ text: m.content }],
|
|
97
127
|
}));
|
|
98
128
|
return {
|
|
99
129
|
contents,
|
|
130
|
+
...(systemMsg && {
|
|
131
|
+
systemInstruction: { parts: [{ text: systemMsg.content }] },
|
|
132
|
+
}),
|
|
100
133
|
generationConfig: {
|
|
101
134
|
temperature: options?.temperature ?? this.config.temperature,
|
|
102
135
|
maxOutputTokens: options?.maxTokens ?? this.config.maxTokens,
|
package/dist/llm/gemini.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/llm/gemini.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/llm/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IACf,MAAM,CAAiB;IAEjC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,CAAC;gBACN,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI;wBAC9B,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CACjF;wBACD,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACnE;iBACF,CAAC,CAAC;aACJ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAuB,EAAE,OAAqB;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,wBAAwB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAE3G,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpE,yBAAyB;QACzB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC9E,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YAClE,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;aACrD;SACF,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC1B,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC;gBACvD,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,oBAAoB,IAAI,CAAC;gBAC/D,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,CAAC;aACtD,CAAC,CAAC,CAAC,SAAS;YACb,UAAU,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CAAC,QAAuB,EAAE,OAAqB;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,sCAAsC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAEzH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBAExD,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;wBACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gCACd,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC;gCACzB,MAAM,IAAI,CAAC,IAAI,CAAC;4BAClB,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,oBAAoB;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,QAAuB,EAAE,OAAqB;QACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAEhE,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAC/C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7B,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,QAAQ;YACR,GAAG,CAAC,SAAS,IAAI;gBACf,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE;aAC5D,CAAC;YACF,gBAAgB,EAAE;gBAChB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;gBAC5D,eAAe,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;aAC7D;SACF,CAAC;IACJ,CAAC;CACF"}
|
package/dist/llm/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LLM Service - Factory for creating providers
|
|
3
|
-
*
|
|
3
|
+
* Supports all providers + custom relay stations (中转站)
|
|
4
4
|
*/
|
|
5
5
|
import type { ChatMessage, ChatResponse, ChatOptions } from '../types.js';
|
|
6
6
|
import type { Tool } from '../tools/types.js';
|
|
@@ -9,7 +9,8 @@ import type { AIConfig } from '../config/types.js';
|
|
|
9
9
|
export declare class LLMService {
|
|
10
10
|
private provider;
|
|
11
11
|
private tools;
|
|
12
|
-
|
|
12
|
+
private apiKey;
|
|
13
|
+
constructor(provider: LLMProvider, apiKey: string);
|
|
13
14
|
/**
|
|
14
15
|
* Create LLMService from AIConfig
|
|
15
16
|
*/
|
|
@@ -22,6 +23,10 @@ export declare class LLMService {
|
|
|
22
23
|
* Get provider name
|
|
23
24
|
*/
|
|
24
25
|
getProviderName(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check if API key is available
|
|
28
|
+
*/
|
|
29
|
+
hasApiKey(): boolean;
|
|
25
30
|
/**
|
|
26
31
|
* Non-streaming chat
|
|
27
32
|
*/
|
|
@@ -33,13 +38,9 @@ export declare class LLMService {
|
|
|
33
38
|
maxIterations?: number;
|
|
34
39
|
}): AsyncGenerator<string, ChatResponse>;
|
|
35
40
|
/**
|
|
36
|
-
*
|
|
37
|
-
*/
|
|
38
|
-
private hasApiKey;
|
|
39
|
-
/**
|
|
40
|
-
* Mock response when no API key is set
|
|
41
|
+
* Error message when no API key is configured
|
|
41
42
|
*/
|
|
42
|
-
private
|
|
43
|
+
private getNoKeyMessage;
|
|
43
44
|
}
|
|
44
45
|
export type { LLMProvider, ProviderConfig } from './provider.js';
|
|
45
46
|
export { OpenAIProvider } from './openai.js';
|
package/dist/llm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAMjE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAgC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAMjE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;IAKjD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU;IA6B/C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAMlC;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAOjF;;OAEG;IACI,UAAU,CACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACjD,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IA8EvC;;OAEG;IACH,OAAO,CAAC,eAAe;CAexB;AAGD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|