solver-sdk 1.8.0 → 1.8.1
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/README.md +176 -468
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
- package/dist/cjs/api/chat-api/index.js.map +1 -0
- package/dist/cjs/api/chat-api/interfaces.js +3 -0
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
- package/dist/cjs/api/chat-api/models.js +6 -0
- package/dist/cjs/api/chat-api/models.js.map +1 -0
- package/dist/cjs/api/chat-api/stream-utils.js +192 -0
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/cjs/api/projects-api.js +279 -5
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +12 -17
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +77 -52
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +87 -56
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/http-client.js +7 -0
- package/dist/cjs/utils/http-client.js.map +1 -1
- package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
- package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/cjs/utils/websocket-client.js +37 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
- package/dist/esm/api/chat-api/index.js.map +1 -0
- package/dist/esm/api/chat-api/interfaces.js +2 -0
- package/dist/esm/api/chat-api/interfaces.js.map +1 -0
- package/dist/esm/api/chat-api/models.js +5 -0
- package/dist/esm/api/chat-api/models.js.map +1 -0
- package/dist/esm/api/chat-api/stream-utils.js +188 -0
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
- package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
- package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/esm/api/projects-api.js +279 -5
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +10 -15
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +76 -51
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +87 -56
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/http-client.js +7 -0
- package/dist/esm/utils/http-client.js.map +1 -1
- package/dist/esm/utils/reasoning-auth-helper.js +54 -0
- package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/esm/utils/websocket-client.js +37 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +81 -0
- package/dist/types/api/chat-api/index.d.ts.map +1 -0
- package/dist/types/api/chat-api/interfaces.d.ts +47 -0
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
- package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
- package/dist/types/api/chat-api/models.d.ts.map +1 -0
- package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +114 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +1 -1
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +65 -36
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/interfaces/http-client.d.ts +1 -1
- package/dist/types/interfaces/http-client.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +44 -43
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/http-client.d.ts +5 -0
- package/dist/types/utils/http-client.d.ts.map +1 -1
- package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
- package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
- package/dist/types/utils/websocket-client.d.ts +6 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +432 -0
- package/docs/AUTHENTICATION.md +179 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/INTEGRATION_EXAMPLES.md +342 -0
- package/docs/PING_PONG.md +212 -0
- package/docs/README.md +102 -0
- package/docs/WEBSOCKET.md +299 -0
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/docs/indexing/INDEXING.md +231 -0
- package/package.json +4 -3
- package/dist/cjs/api/chat-api.js.map +0 -1
- package/dist/esm/api/chat-api.js.map +0 -1
- package/dist/types/api/chat-api.d.ts.map +0 -1
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import { generateId, setupSocketEventHandlers } from './websocket-helpers';
|
|
2
|
+
import { handleStreamError, processStreamChunk } from './stream-utils';
|
|
3
|
+
// Экспортируем все типы и интерфейсы для внешнего использования
|
|
4
|
+
export * from './models';
|
|
5
|
+
export * from './interfaces';
|
|
1
6
|
/**
|
|
2
7
|
* API для работы с чатом
|
|
3
8
|
*/
|
|
4
9
|
export class ChatApi {
|
|
5
10
|
/**
|
|
6
11
|
* Создает новый экземпляр API для работы с чатом
|
|
7
|
-
* @param {
|
|
12
|
+
* @param {IHttpClient} httpClient HTTP клиент
|
|
8
13
|
*/
|
|
9
14
|
constructor(httpClient) {
|
|
10
15
|
this.httpClient = httpClient;
|
|
@@ -52,8 +57,11 @@ export class ChatApi {
|
|
|
52
57
|
*/
|
|
53
58
|
async checkAvailability() {
|
|
54
59
|
try {
|
|
55
|
-
// Используем
|
|
56
|
-
await this.httpClient.
|
|
60
|
+
// Используем HEAD запрос вместо GET, так как эндпоинт поддерживает только HEAD/POST
|
|
61
|
+
await this.httpClient.request({
|
|
62
|
+
method: 'HEAD',
|
|
63
|
+
url: '/api/v1/chat'
|
|
64
|
+
});
|
|
57
65
|
return true;
|
|
58
66
|
}
|
|
59
67
|
catch (error) {
|
|
@@ -195,78 +203,21 @@ export class ChatApi {
|
|
|
195
203
|
for (const line of lines) {
|
|
196
204
|
if (!line.startsWith('data:'))
|
|
197
205
|
continue;
|
|
198
|
-
const
|
|
199
|
-
|
|
206
|
+
const result = processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, options?.onToken);
|
|
207
|
+
isInThinkingBlock = result.isInThinkingBlock;
|
|
208
|
+
thinkingContent = result.thinkingContent;
|
|
209
|
+
textContent = result.textContent;
|
|
210
|
+
thinkingSignature = result.thinkingSignature;
|
|
211
|
+
if (result.chunk) {
|
|
212
|
+
yield result.chunk;
|
|
213
|
+
}
|
|
214
|
+
if (result.isDone) {
|
|
200
215
|
// Поток завершен
|
|
201
216
|
if (options?.onComplete) {
|
|
202
217
|
options.onComplete(textContent);
|
|
203
218
|
}
|
|
204
|
-
yield {
|
|
205
|
-
text: '',
|
|
206
|
-
isComplete: true,
|
|
207
|
-
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
208
|
-
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
209
|
-
};
|
|
210
219
|
return;
|
|
211
220
|
}
|
|
212
|
-
try {
|
|
213
|
-
const parsedData = JSON.parse(data);
|
|
214
|
-
// Обрабатываем различные типы событий
|
|
215
|
-
if (parsedData.type === 'thinking_start' || parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
216
|
-
isInThinkingBlock = true;
|
|
217
|
-
// Отправляем начало блока thinking
|
|
218
|
-
if (options?.onToken) {
|
|
219
|
-
options.onToken('[THINKING_START]');
|
|
220
|
-
}
|
|
221
|
-
yield {
|
|
222
|
-
text: '[THINKING_START]',
|
|
223
|
-
isComplete: false,
|
|
224
|
-
isThinking: true
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
else if (parsedData.type === 'thinking_end' || parsedData.type === 'content_block_stop' && isInThinkingBlock) {
|
|
228
|
-
isInThinkingBlock = false;
|
|
229
|
-
// Отправляем конец блока thinking
|
|
230
|
-
if (options?.onToken) {
|
|
231
|
-
options.onToken('[THINKING_END]');
|
|
232
|
-
}
|
|
233
|
-
yield {
|
|
234
|
-
text: '[THINKING_END]',
|
|
235
|
-
isComplete: false,
|
|
236
|
-
isThinking: true
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
else if (parsedData.type === 'content_block_delta' || parsedData.type === 'thinking_delta') {
|
|
240
|
-
const text = parsedData.delta?.text || '';
|
|
241
|
-
if (isInThinkingBlock || parsedData.type === 'thinking_delta') {
|
|
242
|
-
// Добавляем текст к блоку размышлений
|
|
243
|
-
thinkingContent += text;
|
|
244
|
-
if (options?.onToken) {
|
|
245
|
-
options.onToken(text);
|
|
246
|
-
}
|
|
247
|
-
yield {
|
|
248
|
-
text,
|
|
249
|
-
isComplete: false,
|
|
250
|
-
isThinking: true
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
// Добавляем текст к основному содержимому
|
|
255
|
-
textContent += text;
|
|
256
|
-
if (options?.onToken) {
|
|
257
|
-
options.onToken(text);
|
|
258
|
-
}
|
|
259
|
-
yield {
|
|
260
|
-
text,
|
|
261
|
-
isComplete: false,
|
|
262
|
-
isThinking: false
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
catch (e) {
|
|
268
|
-
console.error('Ошибка при парсинге данных:', e);
|
|
269
|
-
}
|
|
270
221
|
}
|
|
271
222
|
}
|
|
272
223
|
// Финальный чанк, если поток завершился без [DONE]
|
|
@@ -281,10 +232,11 @@ export class ChatApi {
|
|
|
281
232
|
};
|
|
282
233
|
}
|
|
283
234
|
catch (error) {
|
|
235
|
+
const errorObj = handleStreamError(error);
|
|
284
236
|
if (options?.onError) {
|
|
285
|
-
options.onError(
|
|
237
|
+
options.onError(errorObj);
|
|
286
238
|
}
|
|
287
|
-
throw
|
|
239
|
+
throw errorObj;
|
|
288
240
|
}
|
|
289
241
|
}
|
|
290
242
|
/**
|
|
@@ -310,7 +262,7 @@ export class ChatApi {
|
|
|
310
262
|
* Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
|
|
311
263
|
* @param {ChatMessage[]} messages Массив сообщений для отправки
|
|
312
264
|
* @param {ChatStreamOptions} [options] Дополнительные параметры
|
|
313
|
-
* @param {
|
|
265
|
+
* @param {EventHandler} [onEvent] Обработчик событий WebSocket
|
|
314
266
|
* @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
|
|
315
267
|
*/
|
|
316
268
|
async streamChatWithThinking(messages, options = {}, onEvent) {
|
|
@@ -318,82 +270,79 @@ export class ChatApi {
|
|
|
318
270
|
throw new Error('Необходимо предоставить хотя бы одно сообщение');
|
|
319
271
|
}
|
|
320
272
|
try {
|
|
321
|
-
// 1. Создаем
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
const connectResponse = await this.connectWebSocket();
|
|
330
|
-
socketId = connectResponse.socketId;
|
|
331
|
-
// Если есть обработчик событий, подключаемся к WebSocket и настраиваем форвардинг событий
|
|
332
|
-
if (onEvent && typeof window !== 'undefined') {
|
|
273
|
+
// 1. Создаем параметры для запроса
|
|
274
|
+
const socketId = `socket_${Date.now()}_${generateId(10)}`;
|
|
275
|
+
// Создаем sessionId для отслеживания контекста между запросами
|
|
276
|
+
const sessionId = options.sessionId || `thinking-${Date.now()}`;
|
|
277
|
+
let socket = null;
|
|
278
|
+
// 2. Подключаемся к WebSocket и ждем успешного подключения
|
|
279
|
+
if (onEvent) {
|
|
280
|
+
await new Promise((resolve, reject) => {
|
|
333
281
|
try {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
const { io } = await import('socket.io-client');
|
|
337
|
-
const socket = io(`${connectResponse.protocol}://${new URL(connectResponse.url).host}${connectResponse.namespace}`, {
|
|
338
|
-
transports: ['websocket', 'polling'],
|
|
282
|
+
const socketOptions = {
|
|
283
|
+
transports: ['websocket'],
|
|
339
284
|
reconnection: true,
|
|
340
|
-
reconnectionAttempts:
|
|
285
|
+
reconnectionAttempts: 3,
|
|
341
286
|
reconnectionDelay: 1000,
|
|
287
|
+
timeout: 10000,
|
|
342
288
|
query: {
|
|
343
|
-
socketId
|
|
289
|
+
socketId: socketId,
|
|
290
|
+
token: options.authToken || 'test-token'
|
|
344
291
|
}
|
|
292
|
+
};
|
|
293
|
+
// Динамически импортируем socket.io-client
|
|
294
|
+
import('socket.io-client').then((socketIoModule) => {
|
|
295
|
+
const io = socketIoModule.default || socketIoModule.io;
|
|
296
|
+
if (!io) {
|
|
297
|
+
reject(new Error('Не удалось импортировать socket.io-client'));
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
// Создаем соединение с сервером WebSocket
|
|
301
|
+
const serverUrl = this.httpClient.getBaseURL?.() || 'http://localhost:3000';
|
|
302
|
+
socket = io(`${serverUrl}/reasoning`, socketOptions);
|
|
303
|
+
// Устанавливаем обработчики событий
|
|
304
|
+
setupSocketEventHandlers(socket, socketId, sessionId, onEvent);
|
|
305
|
+
// Разрешаем промис, продолжаем выполнение
|
|
306
|
+
resolve();
|
|
307
|
+
// Обработчик таймаута соединения
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
if (socket && !socket.connected) {
|
|
310
|
+
reject(new Error('WebSocket connection timeout'));
|
|
311
|
+
}
|
|
312
|
+
}, 10000);
|
|
313
|
+
}).catch(error => {
|
|
314
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
315
|
+
reject(new Error(`Ошибка импорта socket.io-client: ${errorMessage}`));
|
|
345
316
|
});
|
|
346
|
-
// Настраиваем обработчики событий
|
|
347
|
-
socket.on('connect', () => {
|
|
348
|
-
onEvent('connect', { status: 'connected', socketId });
|
|
349
|
-
});
|
|
350
|
-
socket.on('disconnect', () => {
|
|
351
|
-
onEvent('disconnect', { status: 'disconnected', socketId });
|
|
352
|
-
});
|
|
353
|
-
socket.on('error', (error) => {
|
|
354
|
-
onEvent('error', { error, socketId });
|
|
355
|
-
});
|
|
356
|
-
// Настраиваем обработчики для всех типов событий из документации Anthropic
|
|
357
|
-
const eventTypes = [
|
|
358
|
-
'message_start', 'content_block_start', 'thinking_start',
|
|
359
|
-
'text_delta', 'thinking_delta', 'signature_delta', 'input_json_delta',
|
|
360
|
-
'content_block_stop', 'message_delta', 'message_stop',
|
|
361
|
-
'ping', 'tool_use_start', 'unknown_event', 'retry', 'done'
|
|
362
|
-
];
|
|
363
|
-
eventTypes.forEach(eventType => {
|
|
364
|
-
socket.on(eventType, (data) => {
|
|
365
|
-
onEvent(eventType, data);
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
// Сохраняем сокет, чтобы не собирался мусор
|
|
369
|
-
this._socket = socket;
|
|
370
317
|
}
|
|
371
|
-
catch (
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
// Данные все равно будут получены через HTTP ответ
|
|
318
|
+
catch (error) {
|
|
319
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
320
|
+
reject(new Error(`Ошибка WebSocket: ${errorMessage}`));
|
|
375
321
|
}
|
|
376
|
-
}
|
|
322
|
+
});
|
|
377
323
|
}
|
|
378
|
-
//
|
|
324
|
+
// 3. Отправляем HTTP запрос для инициации потока
|
|
379
325
|
return this.httpClient.post('/api/v1/chat/stream-chat', {
|
|
380
326
|
model: options.model || 'claude-3-7-sonnet-20240229',
|
|
381
327
|
messages,
|
|
382
328
|
temperature: options.temperature,
|
|
383
329
|
maxTokens: options.maxTokens,
|
|
384
330
|
socketId: socketId,
|
|
331
|
+
sessionId: sessionId, // Добавляем sessionId для кэширования блоков мышления
|
|
385
332
|
thinking: true,
|
|
386
333
|
region: options.region
|
|
387
334
|
}, {
|
|
388
|
-
'X-Socket-ID': socketId
|
|
335
|
+
'X-Socket-ID': socketId,
|
|
336
|
+
'X-Session-ID': sessionId // Добавляем ID сессии в заголовки
|
|
389
337
|
});
|
|
390
338
|
}
|
|
391
339
|
catch (error) {
|
|
340
|
+
const errorObj = handleStreamError(error);
|
|
392
341
|
if (options.onError) {
|
|
393
|
-
options.onError(
|
|
342
|
+
options.onError(errorObj);
|
|
394
343
|
}
|
|
395
|
-
throw
|
|
344
|
+
throw errorObj;
|
|
396
345
|
}
|
|
397
346
|
}
|
|
398
347
|
}
|
|
399
|
-
//# sourceMappingURL=
|
|
348
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/chat-api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/api/chat-api/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/api/chat-api/models.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Обрабатывает чанк данных из потока SSE
|
|
3
|
+
*/
|
|
4
|
+
export function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
|
|
5
|
+
// Проверяем формат строки
|
|
6
|
+
if (!line.startsWith('data:')) {
|
|
7
|
+
return {
|
|
8
|
+
isInThinkingBlock,
|
|
9
|
+
thinkingContent,
|
|
10
|
+
textContent,
|
|
11
|
+
thinkingSignature,
|
|
12
|
+
isDone: false
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const data = line.slice(5).trim();
|
|
16
|
+
// Проверяем завершение потока
|
|
17
|
+
if (data === '[DONE]') {
|
|
18
|
+
if (onToken) {
|
|
19
|
+
onToken('');
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
isInThinkingBlock,
|
|
23
|
+
thinkingContent,
|
|
24
|
+
textContent,
|
|
25
|
+
thinkingSignature,
|
|
26
|
+
chunk: {
|
|
27
|
+
text: '',
|
|
28
|
+
isComplete: true,
|
|
29
|
+
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
30
|
+
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
31
|
+
},
|
|
32
|
+
isDone: true
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsedData = JSON.parse(data);
|
|
37
|
+
// Обрабатываем типы событий по актуальному API Anthropic
|
|
38
|
+
if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
39
|
+
const newIsInThinkingBlock = true;
|
|
40
|
+
if (onToken) {
|
|
41
|
+
onToken('[THINKING_START]');
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
isInThinkingBlock: newIsInThinkingBlock,
|
|
45
|
+
thinkingContent,
|
|
46
|
+
textContent,
|
|
47
|
+
thinkingSignature,
|
|
48
|
+
chunk: {
|
|
49
|
+
text: '[THINKING_START]',
|
|
50
|
+
isComplete: false,
|
|
51
|
+
isThinking: true
|
|
52
|
+
},
|
|
53
|
+
isDone: false
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
else if (parsedData.type === 'content_block_stop' && isInThinkingBlock) {
|
|
57
|
+
const newIsInThinkingBlock = false;
|
|
58
|
+
if (onToken) {
|
|
59
|
+
onToken('[THINKING_END]');
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
isInThinkingBlock: newIsInThinkingBlock,
|
|
63
|
+
thinkingContent,
|
|
64
|
+
textContent,
|
|
65
|
+
thinkingSignature,
|
|
66
|
+
chunk: {
|
|
67
|
+
text: '[THINKING_END]',
|
|
68
|
+
isComplete: false,
|
|
69
|
+
isThinking: true
|
|
70
|
+
},
|
|
71
|
+
isDone: false
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else if (parsedData.type === 'content_block_delta') {
|
|
75
|
+
// Получаем тип дельты из данных события
|
|
76
|
+
const deltaType = parsedData.delta?.type;
|
|
77
|
+
// Обрабатываем дельту в зависимости от типа
|
|
78
|
+
if (deltaType === 'text_delta') {
|
|
79
|
+
const text = parsedData.delta?.text || '';
|
|
80
|
+
const newTextContent = textContent + text;
|
|
81
|
+
if (onToken) {
|
|
82
|
+
onToken(text);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
isInThinkingBlock,
|
|
86
|
+
thinkingContent,
|
|
87
|
+
textContent: newTextContent,
|
|
88
|
+
thinkingSignature,
|
|
89
|
+
chunk: {
|
|
90
|
+
text,
|
|
91
|
+
isComplete: false,
|
|
92
|
+
isThinking: false
|
|
93
|
+
},
|
|
94
|
+
isDone: false
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else if (deltaType === 'thinking_delta') {
|
|
98
|
+
const thinking = parsedData.delta?.thinking || '';
|
|
99
|
+
const newThinkingContent = thinkingContent + thinking;
|
|
100
|
+
if (onToken) {
|
|
101
|
+
onToken(thinking);
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
isInThinkingBlock: true,
|
|
105
|
+
thinkingContent: newThinkingContent,
|
|
106
|
+
textContent,
|
|
107
|
+
thinkingSignature,
|
|
108
|
+
chunk: {
|
|
109
|
+
text: thinking,
|
|
110
|
+
isComplete: false,
|
|
111
|
+
isThinking: true
|
|
112
|
+
},
|
|
113
|
+
isDone: false
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else if (deltaType === 'signature_delta') {
|
|
117
|
+
const signature = parsedData.delta?.signature || '';
|
|
118
|
+
return {
|
|
119
|
+
isInThinkingBlock,
|
|
120
|
+
thinkingContent,
|
|
121
|
+
textContent,
|
|
122
|
+
thinkingSignature: signature,
|
|
123
|
+
isDone: false
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
else if (deltaType === 'input_json_delta') {
|
|
127
|
+
const jsonData = parsedData.delta?.input_json || '';
|
|
128
|
+
if (onToken) {
|
|
129
|
+
onToken(jsonData);
|
|
130
|
+
}
|
|
131
|
+
// Убираем свойство isToolUse, добавляем метаданные
|
|
132
|
+
return {
|
|
133
|
+
isInThinkingBlock,
|
|
134
|
+
thinkingContent,
|
|
135
|
+
textContent,
|
|
136
|
+
thinkingSignature,
|
|
137
|
+
chunk: {
|
|
138
|
+
text: jsonData,
|
|
139
|
+
isComplete: false,
|
|
140
|
+
isThinking: false
|
|
141
|
+
},
|
|
142
|
+
isDone: false
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Возвращаем без изменений, если тип события не обрабатывается
|
|
147
|
+
return {
|
|
148
|
+
isInThinkingBlock,
|
|
149
|
+
thinkingContent,
|
|
150
|
+
textContent,
|
|
151
|
+
thinkingSignature,
|
|
152
|
+
isDone: false
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
console.error('Ошибка при парсинге данных:', e);
|
|
157
|
+
return {
|
|
158
|
+
isInThinkingBlock,
|
|
159
|
+
thinkingContent,
|
|
160
|
+
textContent,
|
|
161
|
+
thinkingSignature,
|
|
162
|
+
isDone: false
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Обрабатывает ошибку из потока
|
|
168
|
+
*/
|
|
169
|
+
export function handleStreamError(error) {
|
|
170
|
+
// Проверяем наличие ошибки географических ограничений
|
|
171
|
+
const errorObj = error;
|
|
172
|
+
const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
|
|
173
|
+
errorObj.message &&
|
|
174
|
+
(errorObj.message.includes('ограничен в вашем регионе') ||
|
|
175
|
+
errorObj.message.includes('Request not allowed') ||
|
|
176
|
+
errorObj.message.includes('forbidden'));
|
|
177
|
+
if (isGeoRestriction) {
|
|
178
|
+
console.error('\n==============================================');
|
|
179
|
+
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
180
|
+
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
181
|
+
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
182
|
+
console.error('==============================================');
|
|
183
|
+
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
184
|
+
errorObj.type = 'geo_restriction';
|
|
185
|
+
}
|
|
186
|
+
return errorObj;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../../src/api/chat-api/stream-utils.ts"],"names":[],"mappings":"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"}
|