solver-sdk 3.1.10 → 3.1.15
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/cjs/api/chat-api/index.js +228 -135
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -1
- package/dist/cjs/api/chat-api/stream-utils.js +133 -344
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +10 -10
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/anthropic.js +43 -0
- package/dist/cjs/constants/anthropic.js.map +1 -0
- package/dist/cjs/utils/message-helpers.js +1 -1
- package/dist/cjs/utils/message-helpers.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +228 -135
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/chat-api/interfaces.js.map +1 -1
- package/dist/esm/api/chat-api/stream-utils.js +131 -344
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +10 -10
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/anthropic.js +38 -0
- package/dist/esm/constants/anthropic.js.map +1 -0
- package/dist/esm/utils/message-helpers.js +1 -1
- package/dist/esm/utils/message-helpers.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +8 -1
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/api/chat-api/interfaces.d.ts +7 -0
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
- package/dist/types/api/chat-api/models.d.ts +34 -25
- package/dist/types/api/chat-api/models.d.ts.map +1 -1
- package/dist/types/api/chat-api/stream-utils.d.ts +22 -18
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -1
- package/dist/types/constants/anthropic.d.ts +28 -0
- package/dist/types/constants/anthropic.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-solver-sdk.js","sourceRoot":"","sources":["../../src/code-solver-sdk.ts"],"names":[],"mappings":";;;AAAA,2DAAoD;AACpD,2DAAoD;AACpD,uDAAgD;AAChD,yDAAkD;AAClD,6FAA6F;AAC7F,6EAAqE;AACrE,sDAAkD;AAElD,uDAAgD;AAEhD,aAAa;AACb,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"code-solver-sdk.js","sourceRoot":"","sources":["../../src/code-solver-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ANTHROPIC_CONSTANTS = void 0;
|
|
4
|
+
exports.shouldUseInterleavedThinking = shouldUseInterleavedThinking;
|
|
5
|
+
exports.getBetaHeader = getBetaHeader;
|
|
6
|
+
/**
|
|
7
|
+
* 🧠 Константы для Anthropic API - централизованный источник истины
|
|
8
|
+
* Должны совпадать с backend константами в AnthropicThinkingValidatorService
|
|
9
|
+
*/
|
|
10
|
+
exports.ANTHROPIC_CONSTANTS = {
|
|
11
|
+
/** Beta header для interleaved thinking режима */
|
|
12
|
+
INTERLEAVED_THINKING_BETA: 'interleaved-thinking-2025-05-14',
|
|
13
|
+
/** Обязательная температура для thinking режима */
|
|
14
|
+
THINKING_TEMPERATURE: 1.0,
|
|
15
|
+
/** Минимальный бюджет токенов для thinking */
|
|
16
|
+
MIN_THINKING_BUDGET: 1024,
|
|
17
|
+
/** Ограничения top_p для thinking режима */
|
|
18
|
+
THINKING_TOP_P_MIN: 0.95,
|
|
19
|
+
THINKING_TOP_P_MAX: 1.0,
|
|
20
|
+
/** Модель по умолчанию */
|
|
21
|
+
DEFAULT_MODEL: 'claude-sonnet-4-20250514',
|
|
22
|
+
/** Максимальное количество токенов по умолчанию */
|
|
23
|
+
DEFAULT_MAX_TOKENS: 8192,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Проверяет нужен ли interleaved thinking beta header
|
|
27
|
+
*/
|
|
28
|
+
function shouldUseInterleavedThinking(thinking, tools) {
|
|
29
|
+
return !!(thinking && tools && tools.length > 0);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Получает правильный beta header для запроса
|
|
33
|
+
*/
|
|
34
|
+
function getBetaHeader(thinking, tools, userBeta) {
|
|
35
|
+
if (userBeta) {
|
|
36
|
+
return userBeta; // Пользователь явно указал beta
|
|
37
|
+
}
|
|
38
|
+
if (shouldUseInterleavedThinking(thinking, tools)) {
|
|
39
|
+
return exports.ANTHROPIC_CONSTANTS.INTERLEAVED_THINKING_BETA;
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/constants/anthropic.ts"],"names":[],"mappings":";;;AA4BA,oEAEC;AAKD,sCAUC;AA7CD;;;GAGG;AACU,QAAA,mBAAmB,GAAG;IACjC,kDAAkD;IAClD,yBAAyB,EAAE,iCAAiC;IAE5D,mDAAmD;IACnD,oBAAoB,EAAE,GAAG;IAEzB,8CAA8C;IAC9C,mBAAmB,EAAE,IAAI;IAEzB,4CAA4C;IAC5C,kBAAkB,EAAE,IAAI;IACxB,kBAAkB,EAAE,GAAG;IAEvB,0BAA0B;IAC1B,aAAa,EAAE,0BAA0B;IAEzC,mDAAmD;IACnD,kBAAkB,EAAE,IAAI;CAChB,CAAC;AAEX;;GAEG;AACH,SAAgB,4BAA4B,CAAC,QAAa,EAAE,KAAY;IACtE,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,QAAa,EAAE,KAAY,EAAE,QAAiB;IAC1E,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,CAAC,gCAAgC;IACnD,CAAC;IAED,IAAI,4BAA4B,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,2BAAmB,CAAC,yBAAyB,CAAC;IACvD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -160,7 +160,7 @@ async function createStandardDevelopmentTools(backendUrl) {
|
|
|
160
160
|
if (!data.tools || !Array.isArray(data.tools)) {
|
|
161
161
|
throw new Error('Неверный формат ответа от backend');
|
|
162
162
|
}
|
|
163
|
-
console.log(
|
|
163
|
+
console.log(`Загружено ${data.count} схем инструментов с backend`);
|
|
164
164
|
return data.tools;
|
|
165
165
|
}
|
|
166
166
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-helpers.js","sourceRoot":"","sources":["../../../src/utils/message-helpers.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAWH,gFA2BC;AAQD,8CAQC;AASD,wDA0BC;AAOD,sDAOC;AAOD,oDAKC;AAOD,0DAKC;AAOD,gDAOC;AAUD,oDAeC;AAOD,wEAgBC;AAQD,kDASC;AASD,0DAgBC;AASD,gDAWC;AASD,sEASC;AAOD,0CAKC;AAOD,8CAKC;AAOD,kDAKC;AA7SD;;;;;;GAMG;AACH,SAAgB,kCAAkC,CAChD,eAAuB,EACvB,SAAiB,EACjB,QAIC;IAED,MAAM,OAAO,GAAmB;QAC9B;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,SAAS;SACrB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB;KACF,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,IAAqC,EACrC,IAAY;IAEZ,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,IAAY,EACZ,eAAwB,EACxB,SAAkB;IAElB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,oCAAoC;IACpC,IAAI,eAAe,IAAI,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,OAAqC;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1D,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5B,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAChE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,OAAqC;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1D,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,OAAqC;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1D,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,OAAoB;IACrD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC1E,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAClC,IAAY,EACZ,WAAmB,EACnB,UAA+B,EAC/B,WAAqB,EAAE;IAEvB,OAAO;QACL,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,QAAQ;SACnB;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,8BAA8B,CAAC,UAAmB;IACtE,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,uBAAuB,uBAAuB,CAAC;IAE5E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"message-helpers.js","sourceRoot":"","sources":["../../../src/utils/message-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { handleStreamError, processStreamChunk } from './stream-utils';
|
|
2
|
+
import { getBetaHeader } from '../../constants/anthropic';
|
|
2
3
|
// Простая функция генерации ID
|
|
3
4
|
function generateId(length = 10) {
|
|
4
5
|
return Math.random().toString(36).substring(2, 2 + length);
|
|
@@ -25,7 +26,7 @@ export class ChatApi {
|
|
|
25
26
|
if (debugLevel === 'silent')
|
|
26
27
|
return;
|
|
27
28
|
if (streamLogging?.sseEvents || (debugLevel === 'verbose' || debugLevel === 'debug')) {
|
|
28
|
-
console.log(`🔍
|
|
29
|
+
console.log(`🔍 SSE Event: ${message}`, data);
|
|
29
30
|
}
|
|
30
31
|
},
|
|
31
32
|
streamChunk: (message, data) => {
|
|
@@ -49,13 +50,19 @@ export class ChatApi {
|
|
|
49
50
|
info: (message) => {
|
|
50
51
|
const debugLevel = this.options.debug;
|
|
51
52
|
if (debugLevel && debugLevel !== 'silent' && debugLevel !== 'error' && debugLevel !== 'warn') {
|
|
52
|
-
console.log(`🔧
|
|
53
|
+
console.log(`🔧 ${message}`);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
warn: (message) => {
|
|
57
|
+
const debugLevel = this.options.debug;
|
|
58
|
+
if (debugLevel !== 'silent') {
|
|
59
|
+
console.warn(`⚠️ ${message}`);
|
|
53
60
|
}
|
|
54
61
|
},
|
|
55
62
|
error: (message) => {
|
|
56
63
|
const debugLevel = this.options.debug;
|
|
57
64
|
if (debugLevel !== 'silent') {
|
|
58
|
-
console.error(`❌
|
|
65
|
+
console.error(`❌ ${message}`);
|
|
59
66
|
}
|
|
60
67
|
}
|
|
61
68
|
};
|
|
@@ -232,103 +239,56 @@ export class ChatApi {
|
|
|
232
239
|
}
|
|
233
240
|
const reader = response.body.getReader();
|
|
234
241
|
const decoder = new TextDecoder();
|
|
235
|
-
let buffer = '';
|
|
236
|
-
// ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: Используем stream-utils для thinking обработки
|
|
237
|
-
let isInThinkingBlock = false;
|
|
238
|
-
let thinkingContent = '';
|
|
239
|
-
let textContent = '';
|
|
240
|
-
let thinkingSignature = '';
|
|
241
242
|
try {
|
|
242
243
|
while (true) {
|
|
243
244
|
const { done, value } = await reader.read();
|
|
244
|
-
if (done)
|
|
245
|
+
if (done)
|
|
245
246
|
break;
|
|
246
|
-
}
|
|
247
|
-
const
|
|
248
|
-
buffer += chunkStr;
|
|
249
|
-
// ✅ ИСПРАВЛЕНИЕ: Обрабатываем каждый символ для реального времени
|
|
250
|
-
const lines = buffer.split('\n');
|
|
251
|
-
buffer = lines.pop() || ''; // Сохраняем неполную строку
|
|
247
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
248
|
+
const lines = chunk.split('\n');
|
|
252
249
|
for (const line of lines) {
|
|
253
|
-
//
|
|
254
|
-
if (line.
|
|
255
|
-
|
|
256
|
-
const eventData = JSON.parse(line.slice(6).trim());
|
|
257
|
-
this.logger.streamEvent(eventData.type, {
|
|
258
|
-
type: eventData.type,
|
|
259
|
-
delta: eventData.delta,
|
|
260
|
-
content_block: eventData.content_block,
|
|
261
|
-
index: eventData.index
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
catch (e) {
|
|
265
|
-
this.logger.streamEvent(`Raw SSE line: ${line}`);
|
|
266
|
-
}
|
|
250
|
+
// Игнорируем пустые строки
|
|
251
|
+
if (!line.trim()) {
|
|
252
|
+
continue;
|
|
267
253
|
}
|
|
268
|
-
// ✅
|
|
269
|
-
const result = processStreamChunk(line,
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
textContent = result.textContent;
|
|
274
|
-
thinkingSignature = result.thinkingSignature;
|
|
254
|
+
// ✅ ТОЛЬКО ОФИЦИАЛЬНЫЕ СОБЫТИЯ: Используем переписанный processStreamChunk
|
|
255
|
+
const result = processStreamChunk(line, this.logger, {
|
|
256
|
+
onVSCodeCommand: options?.onVSCodeCommand,
|
|
257
|
+
ignoreInvalidCommands: true
|
|
258
|
+
});
|
|
275
259
|
// Если есть чанк для отправки
|
|
276
|
-
if (result.chunk) {
|
|
260
|
+
if (result && result.chunk) {
|
|
277
261
|
this.logger.streamChunk('', {
|
|
278
262
|
type: result.chunk.type,
|
|
279
|
-
|
|
280
|
-
|
|
263
|
+
hasContentBlock: !!result.chunk.content_block,
|
|
264
|
+
hasDelta: !!result.chunk.delta,
|
|
281
265
|
hasOnEvent: !!options?.onEvent
|
|
282
266
|
});
|
|
283
|
-
// НОВОЕ: Обработка VS Code команд
|
|
284
|
-
if (result.chunk.type === 'vscode_command' && options?.onVSCodeCommand) {
|
|
285
|
-
try {
|
|
286
|
-
const vscodeCommand = result.chunk.data || result.chunk;
|
|
287
|
-
const commandResult = await options.onVSCodeCommand(vscodeCommand);
|
|
288
|
-
// Отправляем результат обратно в backend
|
|
289
|
-
// Отправка результата команды удалена
|
|
290
|
-
// Уведомляем extension о выполнении
|
|
291
|
-
yield {
|
|
292
|
-
type: 'command_executed',
|
|
293
|
-
data: commandResult
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
console.error(`Ошибка при обработке команды: ${error.message}`);
|
|
298
|
-
yield {
|
|
299
|
-
type: 'command_error',
|
|
300
|
-
data: { error: error.message }
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
continue;
|
|
304
|
-
}
|
|
305
267
|
yield result.chunk;
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
eventType: result.chunk.type,
|
|
322
|
-
isThinking: result.chunk.isThinking,
|
|
323
|
-
hasText: !!result.chunk.text
|
|
324
|
-
});
|
|
325
|
-
options.onEvent(result.chunk.type, result.chunk);
|
|
268
|
+
}
|
|
269
|
+
// ✅ ОФИЦИАЛЬНАЯ ОБРАБОТКА СОБЫТИЙ ANTHROPIC API
|
|
270
|
+
if (options && options.onEvent && line.startsWith('data: ') && line.slice(6).trim() !== '') {
|
|
271
|
+
try {
|
|
272
|
+
const originalEventData = JSON.parse(line.slice(6).trim());
|
|
273
|
+
this.logger.eventCallback('Передаем оригинальные данные события в onEvent', {
|
|
274
|
+
eventType: originalEventData.type,
|
|
275
|
+
hasContentBlock: !!originalEventData.content_block,
|
|
276
|
+
hasDelta: !!originalEventData.delta
|
|
277
|
+
});
|
|
278
|
+
// ✅ ТОЛЬКО ОРИГИНАЛЬНЫЕ ДАННЫЕ: согласно стандарту Anthropic API
|
|
279
|
+
options.onEvent(originalEventData.type, originalEventData);
|
|
280
|
+
// Завершаем поток при получении message_stop события
|
|
281
|
+
if (originalEventData.type === 'message_stop') {
|
|
282
|
+
break;
|
|
326
283
|
}
|
|
327
284
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
285
|
+
catch (e) {
|
|
286
|
+
// Если не удалось распарсить оригинальные данные - просто пропускаем
|
|
287
|
+
this.logger.eventCallback('Пропускаем событие с ошибкой парсинга', {
|
|
288
|
+
error: e instanceof Error ? e.message : String(e),
|
|
289
|
+
line: line.substring(0, 100)
|
|
290
|
+
});
|
|
291
|
+
}
|
|
332
292
|
}
|
|
333
293
|
}
|
|
334
294
|
}
|
|
@@ -355,11 +315,122 @@ export class ChatApi {
|
|
|
355
315
|
* @returns {AsyncGenerator<ChatStreamChunk>} Асинхронный генератор чанков ответа
|
|
356
316
|
*/
|
|
357
317
|
async *streamPrompt(prompt, options) {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
];
|
|
318
|
+
// Преобразуем простой prompt в массив сообщений
|
|
319
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
361
320
|
yield* this.streamChat(messages, options);
|
|
362
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* Отправляет continuation запрос для interleaved thinking
|
|
324
|
+
* @param {ChatMessage[]} messages Массив сообщений включая thinking блоки и tool_result
|
|
325
|
+
* @param {ChatStreamOptions} [options] Дополнительные параметры с thinking конфигурацией
|
|
326
|
+
* @returns {AsyncGenerator<ChatStreamChunk>} Асинхронный генератор чанков ответа
|
|
327
|
+
*/
|
|
328
|
+
async *sendContinuation(messages, options) {
|
|
329
|
+
if (!messages || messages.length === 0) {
|
|
330
|
+
throw new Error('Continuation требует минимум 3 сообщения для interleaved thinking');
|
|
331
|
+
}
|
|
332
|
+
// Валидация continuation структуры
|
|
333
|
+
if (messages.length < 3) {
|
|
334
|
+
throw new Error('Continuation требует минимум 3 сообщения: user → assistant (thinking + tool_use) → user (tool_result)');
|
|
335
|
+
}
|
|
336
|
+
// Проверяем что последнее сообщение содержит tool_result
|
|
337
|
+
const lastMessage = messages[messages.length - 1];
|
|
338
|
+
if (lastMessage.role !== 'user') {
|
|
339
|
+
throw new Error('Последнее сообщение в continuation должно быть от пользователя с tool_result');
|
|
340
|
+
}
|
|
341
|
+
if (Array.isArray(lastMessage.content)) {
|
|
342
|
+
const hasToolResult = lastMessage.content.some(block => block.type === 'tool_result');
|
|
343
|
+
if (!hasToolResult) {
|
|
344
|
+
throw new Error('Последнее сообщение должно содержать tool_result блок');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// Валидация параметров continuation
|
|
348
|
+
this.validateChatOptions(options);
|
|
349
|
+
try {
|
|
350
|
+
this.logger.info('📤 Отправляем continuation запрос');
|
|
351
|
+
// Подготавливаем параметры запроса для continuation
|
|
352
|
+
const requestParams = this.buildRequestParams(messages, {
|
|
353
|
+
...options,
|
|
354
|
+
stream: true, // Continuation всегда потоковый
|
|
355
|
+
});
|
|
356
|
+
this.logger.info(`🔄 Continuation request построен: ${requestParams.messages.length} сообщений`);
|
|
357
|
+
// Отправляем запрос на continuation endpoint
|
|
358
|
+
const response = await this.httpClient.postStream('/api/v1/chat/continue', requestParams);
|
|
359
|
+
this.logger.info('🌊 Continuation поток получен');
|
|
360
|
+
// Обрабатываем поток точно так же как в streamChat
|
|
361
|
+
if (!response.body || typeof response.body.getReader !== 'function') {
|
|
362
|
+
throw new Error('Ответ не содержит ReadableStream');
|
|
363
|
+
}
|
|
364
|
+
const reader = response.body.getReader();
|
|
365
|
+
const decoder = new TextDecoder();
|
|
366
|
+
try {
|
|
367
|
+
while (true) {
|
|
368
|
+
const { done, value } = await reader.read();
|
|
369
|
+
if (done)
|
|
370
|
+
break;
|
|
371
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
372
|
+
const lines = chunk.split('\n');
|
|
373
|
+
for (const line of lines) {
|
|
374
|
+
// Игнорируем пустые строки
|
|
375
|
+
if (!line.trim()) {
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
// Используем processStreamChunk для обработки
|
|
379
|
+
const result = processStreamChunk(line, this.logger, {
|
|
380
|
+
onVSCodeCommand: options?.onVSCodeCommand,
|
|
381
|
+
ignoreInvalidCommands: true
|
|
382
|
+
});
|
|
383
|
+
// Если есть чанк для отправки
|
|
384
|
+
if (result && result.chunk) {
|
|
385
|
+
this.logger.streamChunk('', {
|
|
386
|
+
type: result.chunk.type,
|
|
387
|
+
hasContentBlock: !!result.chunk.content_block,
|
|
388
|
+
hasDelta: !!result.chunk.delta,
|
|
389
|
+
hasOnEvent: !!options?.onEvent
|
|
390
|
+
});
|
|
391
|
+
yield result.chunk;
|
|
392
|
+
}
|
|
393
|
+
// Обработка событий
|
|
394
|
+
if (options && options.onEvent && line.startsWith('data: ') && line.slice(6).trim() !== '') {
|
|
395
|
+
try {
|
|
396
|
+
const originalEventData = JSON.parse(line.slice(6).trim());
|
|
397
|
+
this.logger.eventCallback('Передаем оригинальные данные события в onEvent', {
|
|
398
|
+
eventType: originalEventData.type,
|
|
399
|
+
hasContentBlock: !!originalEventData.content_block,
|
|
400
|
+
hasDelta: !!originalEventData.delta
|
|
401
|
+
});
|
|
402
|
+
options.onEvent(originalEventData.type, originalEventData);
|
|
403
|
+
// Завершаем поток при получении message_stop события
|
|
404
|
+
if (originalEventData.type === 'message_stop') {
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
catch (e) {
|
|
409
|
+
// Если не удалось распарсить оригинальные данные - просто пропускаем
|
|
410
|
+
this.logger.eventCallback('Пропускаем событие с ошибкой парсинга', {
|
|
411
|
+
error: e instanceof Error ? e.message : String(e),
|
|
412
|
+
line: line.substring(0, 100)
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
finally {
|
|
420
|
+
reader.releaseLock();
|
|
421
|
+
}
|
|
422
|
+
// Вызываем onComplete если передан
|
|
423
|
+
if (options?.onComplete) {
|
|
424
|
+
options.onComplete('Continuation stream completed');
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
if (options?.onError) {
|
|
429
|
+
options.onError(error);
|
|
430
|
+
}
|
|
431
|
+
throw handleStreamError(error);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
363
434
|
/**
|
|
364
435
|
* Валидирует опции чата согласно документации Anthropic
|
|
365
436
|
* @private
|
|
@@ -382,22 +453,25 @@ export class ChatApi {
|
|
|
382
453
|
// 3. tool_choice ограничения с thinking
|
|
383
454
|
if (options.tools && options.tool_choice) {
|
|
384
455
|
const choice = options.tool_choice;
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
456
|
+
if (options.thinking) {
|
|
457
|
+
// 🧠 НОВАЯ ДОКУМЕНТАЦИЯ ANTHROPIC: С thinking поддерживается ТОЛЬКО { type: "any" }
|
|
458
|
+
const isValidChoice = choice === 'any' ||
|
|
459
|
+
(typeof choice === 'object' && choice?.type === 'any');
|
|
460
|
+
if (!isValidChoice) {
|
|
461
|
+
this.logger.warn('tool_choice для thinking убран согласно документации Anthropic. ' +
|
|
462
|
+
'С расширенным мышлением поддерживается ТОЛЬКО { type: "any" }. ' +
|
|
463
|
+
`Исходное значение: ${JSON.stringify(choice)}`);
|
|
464
|
+
delete options.tool_choice; // Убираем недопустимый choice
|
|
390
465
|
}
|
|
391
466
|
}
|
|
392
|
-
else
|
|
393
|
-
//
|
|
394
|
-
if (choice
|
|
395
|
-
|
|
467
|
+
else {
|
|
468
|
+
// Без thinking - стандартные ограничения
|
|
469
|
+
if (choice === 'any' ||
|
|
470
|
+
(typeof choice === 'object' && (choice?.type === 'any' || choice?.type === 'tool'))) {
|
|
471
|
+
throw new Error('tool_choice: "any", { type: "any" }, { type: "tool" } поддерживаются ТОЛЬКО с thinking режимом. ' +
|
|
472
|
+
'Без thinking используйте: "auto", "none" или не указывайте tool_choice');
|
|
396
473
|
}
|
|
397
474
|
}
|
|
398
|
-
if (isInvalidChoice) {
|
|
399
|
-
throw new Error('При использовании thinking с инструментами поддерживаются только tool_choice: "auto" (по умолчанию) или "none" согласно документации Anthropic. НЕ поддерживаются: "any", { type: "any" }, { type: "tool", name: "..." }');
|
|
400
|
-
}
|
|
401
475
|
}
|
|
402
476
|
}
|
|
403
477
|
// Валидация бюджета токенов (только если задан явно)
|
|
@@ -474,8 +548,9 @@ export class ChatApi {
|
|
|
474
548
|
params.beta = options.beta;
|
|
475
549
|
}
|
|
476
550
|
// ✅ ИСПРАВЛЕНИЕ: Добавляем interleaved thinking только если beta не установлен пользователем
|
|
477
|
-
|
|
478
|
-
|
|
551
|
+
const calculatedBeta = getBetaHeader(options?.thinking, options?.tools || [], options?.beta);
|
|
552
|
+
if (calculatedBeta) {
|
|
553
|
+
params.beta = calculatedBeta;
|
|
479
554
|
}
|
|
480
555
|
// Добавляем другие параметры API
|
|
481
556
|
if (options?.temperature !== undefined) {
|
|
@@ -499,45 +574,63 @@ export class ChatApi {
|
|
|
499
574
|
return params;
|
|
500
575
|
}
|
|
501
576
|
/**
|
|
502
|
-
* Конвертирует ответ API в ChatStreamChunk
|
|
577
|
+
* Конвертирует ответ API в ChatStreamChunk (только официальные поля Anthropic API)
|
|
503
578
|
* @private
|
|
504
579
|
*/
|
|
505
580
|
convertToStreamChunk(data) {
|
|
506
581
|
if (!data || !data.type)
|
|
507
582
|
return null;
|
|
583
|
+
// ✅ ТОЛЬКО официальные события Anthropic API
|
|
584
|
+
const validEvents = [
|
|
585
|
+
'message_start', 'content_block_start', 'content_block_delta',
|
|
586
|
+
'content_block_stop', 'message_delta', 'message_stop', 'ping', 'error'
|
|
587
|
+
];
|
|
588
|
+
if (!validEvents.includes(data.type)) {
|
|
589
|
+
// Игнорируем неофициальные события
|
|
590
|
+
return null;
|
|
591
|
+
}
|
|
508
592
|
const chunk = {
|
|
509
|
-
type: data.type
|
|
510
|
-
message: data.message,
|
|
511
|
-
index: data.index,
|
|
512
|
-
content_block: data.content_block,
|
|
513
|
-
delta: data.delta
|
|
593
|
+
type: data.type
|
|
514
594
|
};
|
|
515
|
-
//
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
595
|
+
// Добавляем поля в зависимости от типа события
|
|
596
|
+
switch (data.type) {
|
|
597
|
+
case 'message_start':
|
|
598
|
+
if (data.message) {
|
|
599
|
+
chunk.message = data.message;
|
|
600
|
+
}
|
|
601
|
+
break;
|
|
602
|
+
case 'content_block_start':
|
|
603
|
+
if (data.index !== undefined) {
|
|
604
|
+
chunk.index = data.index;
|
|
605
|
+
}
|
|
606
|
+
if (data.content_block) {
|
|
607
|
+
chunk.content_block = data.content_block;
|
|
608
|
+
}
|
|
609
|
+
break;
|
|
610
|
+
case 'content_block_delta':
|
|
611
|
+
if (data.index !== undefined) {
|
|
612
|
+
chunk.index = data.index;
|
|
613
|
+
}
|
|
614
|
+
if (data.delta) {
|
|
615
|
+
chunk.delta = data.delta;
|
|
616
|
+
}
|
|
617
|
+
break;
|
|
618
|
+
case 'content_block_stop':
|
|
619
|
+
if (data.index !== undefined) {
|
|
620
|
+
chunk.index = data.index;
|
|
621
|
+
}
|
|
622
|
+
break;
|
|
623
|
+
case 'message_delta':
|
|
624
|
+
if (data.delta) {
|
|
625
|
+
chunk.message_delta = data.delta;
|
|
626
|
+
}
|
|
627
|
+
break;
|
|
628
|
+
case 'error':
|
|
629
|
+
if (data.error) {
|
|
630
|
+
chunk.error = data.error;
|
|
631
|
+
}
|
|
632
|
+
break;
|
|
633
|
+
// message_stop и ping не требуют дополнительных полей
|
|
541
634
|
}
|
|
542
635
|
return chunk;
|
|
543
636
|
}
|