solver-sdk 1.7.0 → 1.7.2
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 +69 -98
- package/dist/cjs/api/chat-api.js +263 -6
- package/dist/cjs/api/chat-api.js.map +1 -1
- package/dist/cjs/api/reasoning-api.js +62 -0
- package/dist/cjs/api/reasoning-api.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +17 -0
- package/dist/cjs/constants/websocket-events.constants.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/websocket-client.js +37 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/esm/api/chat-api.js +230 -6
- package/dist/esm/api/chat-api.js.map +1 -1
- package/dist/esm/api/reasoning-api.js +62 -0
- package/dist/esm/api/reasoning-api.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +17 -0
- package/dist/esm/constants/websocket-events.constants.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/websocket-client.js +37 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/types/api/chat-api.d.ts +72 -3
- package/dist/types/api/chat-api.d.ts.map +1 -1
- package/dist/types/api/reasoning-api.d.ts +8 -0
- package/dist/types/api/reasoning-api.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +11 -1
- 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/interfaces/sdk-options.d.ts +54 -0
- package/dist/types/interfaces/sdk-options.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/websocket-client.d.ts +6 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@ SDK для интеграции с Code Solver Backend API. Поддержива
|
|
|
14
14
|
- Поддержка Server-Sent Events (SSE)
|
|
15
15
|
- Инкрементальная индексация отдельных файлов
|
|
16
16
|
- Обработка ошибок и повторные попытки
|
|
17
|
+
- Поддержка региональных эндпоинтов Anthropic API
|
|
17
18
|
- Полная документация API
|
|
18
19
|
|
|
19
20
|
## Установка
|
|
@@ -521,6 +522,8 @@ console.log(response.choices[0].message.content);
|
|
|
521
522
|
|
|
522
523
|
### Использование через WebSocket (потоковое получение событий мышления)
|
|
523
524
|
|
|
525
|
+
В версии 1.7.0 SDK добавлена полная поддержка событий потокового мышления в соответствии с документацией Anthropic. Теперь вы можете получать события `thinking_delta`, `text_delta`, `signature_delta` и другие в режиме реального времени.
|
|
526
|
+
|
|
524
527
|
```javascript
|
|
525
528
|
const { CodeSolverSDK } = require('solver-sdk');
|
|
526
529
|
|
|
@@ -530,32 +533,44 @@ async function streamThinking() {
|
|
|
530
533
|
apiKey: 'ваш-ключ-api'
|
|
531
534
|
});
|
|
532
535
|
|
|
533
|
-
//
|
|
534
|
-
const
|
|
536
|
+
// Сообщения для отправки
|
|
537
|
+
const messages = [
|
|
538
|
+
{ role: 'user', content: 'Объясни, как работает blockchain' }
|
|
539
|
+
];
|
|
535
540
|
|
|
536
|
-
//
|
|
537
|
-
const
|
|
538
|
-
|
|
541
|
+
// Опции запроса
|
|
542
|
+
const options = {
|
|
543
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
544
|
+
temperature: 0.7,
|
|
545
|
+
thinking: true
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
// Обработчик событий WebSocket
|
|
549
|
+
const handleEvent = (eventType, data) => {
|
|
550
|
+
switch(eventType) {
|
|
551
|
+
case 'thinking_start':
|
|
552
|
+
console.log('Начало размышлений:');
|
|
553
|
+
break;
|
|
554
|
+
|
|
555
|
+
case 'thinking_delta':
|
|
556
|
+
process.stdout.write(data.text); // Потоковый вывод размышлений
|
|
557
|
+
break;
|
|
558
|
+
|
|
559
|
+
case 'text_delta':
|
|
560
|
+
process.stdout.write(data.text); // Потоковый вывод итогового текста
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
539
563
|
};
|
|
540
564
|
|
|
541
565
|
try {
|
|
542
|
-
//
|
|
543
|
-
const
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
query: 'Объясни асинхронное программирование в JavaScript',
|
|
549
|
-
options: {
|
|
550
|
-
thinking: true,
|
|
551
|
-
socketId: wsClient.getSocketId()
|
|
552
|
-
}
|
|
553
|
-
});
|
|
566
|
+
// Отправляем запрос с потоковым мышлением
|
|
567
|
+
const response = await sdk.chat.streamChatWithThinking(
|
|
568
|
+
messages,
|
|
569
|
+
options,
|
|
570
|
+
handleEvent
|
|
571
|
+
);
|
|
554
572
|
|
|
555
|
-
|
|
556
|
-
await sdk.reasoning.startReasoning(result.id);
|
|
557
|
-
|
|
558
|
-
console.log('Рассуждение запущено, шаги мышления будут приходить через WebSocket');
|
|
573
|
+
console.log(`Запрос успешно отправлен. Socket ID: ${response.socketId}`);
|
|
559
574
|
} catch (error) {
|
|
560
575
|
console.error('Ошибка:', error);
|
|
561
576
|
}
|
|
@@ -564,31 +579,48 @@ async function streamThinking() {
|
|
|
564
579
|
streamThinking();
|
|
565
580
|
```
|
|
566
581
|
|
|
582
|
+
#### Поддерживаемые события WebSocket
|
|
583
|
+
|
|
584
|
+
SDK теперь поддерживает полный набор событий из документации Anthropic:
|
|
585
|
+
|
|
586
|
+
- `message_start` - начало сообщения от модели
|
|
587
|
+
- `content_block_start` - начало блока контента (текст или thinking)
|
|
588
|
+
- `thinking_delta` - фрагмент размышления модели
|
|
589
|
+
- `text_delta` - фрагмент итогового текста
|
|
590
|
+
- `signature_delta` - подпись блока размышлений
|
|
591
|
+
- `content_block_stop` - завершение блока контента
|
|
592
|
+
- `message_delta` - изменения верхнего уровня сообщения
|
|
593
|
+
- `message_stop` - завершение сообщения
|
|
594
|
+
- `ping` - событие для поддержания соединения
|
|
595
|
+
- `tool_use_start` - начало использования инструмента
|
|
596
|
+
- `input_json_delta` - фрагмент JSON входных данных для инструмента
|
|
597
|
+
|
|
567
598
|
### Примеры использования
|
|
568
599
|
|
|
569
600
|
Полные примеры кода можно найти в директории `examples`:
|
|
570
|
-
- `examples/chat-example.js` - пример использования thinking в чате
|
|
601
|
+
- `examples/chat-example.js` - пример использования thinking в обычном чате
|
|
571
602
|
- `examples/thinking-example.js` - пример использования thinking через WebSocket
|
|
572
603
|
|
|
573
604
|
### Параметры режима мышления
|
|
574
605
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
- `CONCISE` - краткие шаги рассуждения
|
|
578
|
-
- `STANDARD` - стандартный уровень детализации (по умолчанию)
|
|
579
|
-
- `DETAILED` - подробное рассуждение с промежуточными шагами
|
|
580
|
-
- `VERBOSE` - максимальная детализация процесса мышления
|
|
606
|
+
Вы можете управлять режимом мышления с помощью следующих параметров:
|
|
581
607
|
|
|
582
608
|
```javascript
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
609
|
+
// Активация режима thinking
|
|
610
|
+
const options = {
|
|
611
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
612
|
+
thinking: true, // Активируем режим мышления
|
|
613
|
+
temperature: 0.7,
|
|
614
|
+
maxTokens: 4096
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
// Использование с автоматическим созданием WebSocket соединения
|
|
618
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, eventHandler);
|
|
619
|
+
|
|
620
|
+
// Или с существующим socketId
|
|
621
|
+
const connectResponse = await sdk.chat.connectWebSocket();
|
|
622
|
+
options.socketId = connectResponse.socketId;
|
|
623
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, eventHandler);
|
|
592
624
|
```
|
|
593
625
|
|
|
594
626
|
## Обновление до версии 1.6.1
|
|
@@ -671,64 +703,3 @@ cd test
|
|
|
671
703
|
### Примечание по совместимости
|
|
672
704
|
|
|
673
705
|
При использовании SDK в браузере и Node.js окружении могут быть различия в работе некоторых API, особенно WebSocket. Для Node.js рекомендуется использовать пакет `ws` и настроить соответствующие параметры в опциях SDK.
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
### Важные изменения
|
|
677
|
-
|
|
678
|
-
Публичный API SDK остался без изменений, но внутренняя логика работы с WebSocket была значительно улучшена.
|
|
679
|
-
Если вы столкнулись с проблемами при подключении к серверу WebSocket или получении данных через Socket.IO,
|
|
680
|
-
обновление до версии 1.6.1 должно их решить.
|
|
681
|
-
|
|
682
|
-
## Обновления и важные изменения
|
|
683
|
-
|
|
684
|
-
### Синхронизация WebSocket событий (v1.6.3)
|
|
685
|
-
|
|
686
|
-
Произведена полная синхронизация констант WebSocket событий между SDK и бэкендом. Добавлена поддержка новых событий:
|
|
687
|
-
|
|
688
|
-
- `REASONING_CREATED` (`reasoning:created`)
|
|
689
|
-
- `JOINED_REASONING` (`joined_reasoning`)
|
|
690
|
-
- `JOIN_RESPONSE` (`join_response`)
|
|
691
|
-
- `UPDATE_CONTEXT_OPTIONS` (`update_context_options`)
|
|
692
|
-
- `ESTIMATE_CONTEXT` (`estimate_context`)
|
|
693
|
-
- `CONTEXT_OPTIONS_UPDATED` (`context_options_updated`)
|
|
694
|
-
- `CONTEXT_ESTIMATION` (`context_estimation`)
|
|
695
|
-
- `CHAT_REQUEST` (`chat_request`)
|
|
696
|
-
- `CHAT_STARTED` (`chat_started`)
|
|
697
|
-
- `MESSAGE_START` (`message_start`)
|
|
698
|
-
- `CONTENT_BLOCK_START` (`content_block_start`)
|
|
699
|
-
- `THINKING_DELTA` (`thinking_delta`)
|
|
700
|
-
- `TEXT_DELTA` (`text_delta`)
|
|
701
|
-
- `CONTENT_BLOCK_STOP` (`content_block_stop`)
|
|
702
|
-
- `MESSAGE_STOP` (`message_stop`)
|
|
703
|
-
- `TYPESCRIPT_ERRORS` (`typescript_errors`)
|
|
704
|
-
- `TYPESCRIPT_ERRORS_RECEIVED` (`typescript_errors_received`)
|
|
705
|
-
- `TEST_MODULES_CREATED` (`test_modules_created`)
|
|
706
|
-
- `CREATE_TEST_MODULES` (`create_test_modules`)
|
|
707
|
-
- `CONNECTION_PING` (`connection_ping`)
|
|
708
|
-
- `CONNECTION_PONG` (`connection_pong`)
|
|
709
|
-
- `RECONNECT_TOKEN` (`reconnect_token`)
|
|
710
|
-
- `JOIN` (`join`)
|
|
711
|
-
- `JOINED` (`joined`)
|
|
712
|
-
|
|
713
|
-
### Улучшенная совместимость с модульными системами
|
|
714
|
-
|
|
715
|
-
Добавлены тесты совместимости для проверки работы SDK в различных окружениях:
|
|
716
|
-
- CommonJS (для Node.js)
|
|
717
|
-
- ESM (для современного JavaScript)
|
|
718
|
-
|
|
719
|
-
Для запуска тестов используйте:
|
|
720
|
-
|
|
721
|
-
```bash
|
|
722
|
-
cd test
|
|
723
|
-
./run-tests.sh
|
|
724
|
-
```
|
|
725
|
-
|
|
726
|
-
### Результаты тестирования
|
|
727
|
-
|
|
728
|
-
✅ **CommonJS тесты**: Успешно пройдены
|
|
729
|
-
✅ **ESM тесты**: Успешно пройдены через ESM/CommonJS адаптер
|
|
730
|
-
✅ **WebSocket событий**: Все 62 события синхронизированы между бэкендом и SDK
|
|
731
|
-
|
|
732
|
-
### Примечание по совместимости
|
|
733
|
-
|
|
734
|
-
При использовании SDK в браузере и Node.js окружении могут быть различия в работе некоторых API, особенно WebSocket. Для Node.js рекомендуется использовать пакет `ws` и настроить соответствующие параметры в опциях SDK.
|
package/dist/cjs/api/chat-api.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.ChatApi = void 0;
|
|
4
37
|
/**
|
|
@@ -36,7 +69,8 @@ class ChatApi {
|
|
|
36
69
|
stopSequences: options?.stopSequences,
|
|
37
70
|
functions: options?.functions,
|
|
38
71
|
functionCall: options?.functionCall,
|
|
39
|
-
thinking: options?.thinking
|
|
72
|
+
thinking: options?.thinking,
|
|
73
|
+
region: options?.region
|
|
40
74
|
});
|
|
41
75
|
}
|
|
42
76
|
/**
|
|
@@ -54,8 +88,11 @@ class ChatApi {
|
|
|
54
88
|
*/
|
|
55
89
|
async checkAvailability() {
|
|
56
90
|
try {
|
|
57
|
-
// Используем
|
|
58
|
-
await this.httpClient.
|
|
91
|
+
// Используем HEAD запрос вместо GET, так как эндпоинт поддерживает только HEAD/POST
|
|
92
|
+
await this.httpClient.request({
|
|
93
|
+
method: 'HEAD',
|
|
94
|
+
url: '/api/v1/chat'
|
|
95
|
+
});
|
|
59
96
|
return true;
|
|
60
97
|
}
|
|
61
98
|
catch (error) {
|
|
@@ -63,16 +100,77 @@ class ChatApi {
|
|
|
63
100
|
}
|
|
64
101
|
}
|
|
65
102
|
/**
|
|
66
|
-
* Отправляет
|
|
103
|
+
* Отправляет сообщение в чат и получает ответ от модели
|
|
104
|
+
* с автоматическим переключением между регионами при ошибках перегрузки
|
|
105
|
+
* @param {ChatMessage[]} messages Массив сообщений для отправки
|
|
106
|
+
* @param {ChatOptions} [options] Дополнительные параметры
|
|
107
|
+
* @returns {Promise<ChatResponse>} Ответ модели
|
|
108
|
+
*/
|
|
109
|
+
async chatWithRegionFailover(messages, options) {
|
|
110
|
+
// Список всех доступных регионов
|
|
111
|
+
const allRegions = ['us-east-1', 'eu-west-1', 'ap-southeast-2'];
|
|
112
|
+
// Начинаем с региона из параметров, или первого в списке
|
|
113
|
+
let startRegionIndex = 0;
|
|
114
|
+
if (options?.region) {
|
|
115
|
+
const regionIndex = allRegions.indexOf(options.region);
|
|
116
|
+
if (regionIndex !== -1) {
|
|
117
|
+
startRegionIndex = regionIndex;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Реорганизуем массив, чтобы начать с указанного региона
|
|
121
|
+
const regions = [
|
|
122
|
+
...allRegions.slice(startRegionIndex),
|
|
123
|
+
...allRegions.slice(0, startRegionIndex)
|
|
124
|
+
];
|
|
125
|
+
// Последняя ошибка, будет возвращена если все регионы недоступны
|
|
126
|
+
let lastError = null;
|
|
127
|
+
// Пробуем каждый регион по очереди
|
|
128
|
+
for (let i = 0; i < regions.length; i++) {
|
|
129
|
+
const region = regions[i];
|
|
130
|
+
try {
|
|
131
|
+
console.log(`Попытка запроса к Anthropic API в регионе ${region}`);
|
|
132
|
+
// Копируем опции и устанавливаем текущий регион
|
|
133
|
+
const regionOptions = {
|
|
134
|
+
...options,
|
|
135
|
+
region
|
|
136
|
+
};
|
|
137
|
+
// Отправляем запрос с конкретным регионом
|
|
138
|
+
return await this.chat(messages, regionOptions);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
lastError = error;
|
|
142
|
+
// Проверяем, является ли ошибка ошибкой перегрузки (код 529)
|
|
143
|
+
const isOverloadError = error.status === 529 ||
|
|
144
|
+
error.code === 529 ||
|
|
145
|
+
(error.response?.status === 529) ||
|
|
146
|
+
(error.message && error.message.includes('overloaded')) ||
|
|
147
|
+
(error.error?.type === 'overloaded_error');
|
|
148
|
+
if (isOverloadError) {
|
|
149
|
+
console.warn(`Регион ${region} перегружен, пробуем следующий регион`);
|
|
150
|
+
// Продолжаем цикл и пробуем следующий регион
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Если ошибка не связана с перегрузкой, прекращаем попытки
|
|
155
|
+
console.error(`Ошибка в регионе ${region}, не связанная с перегрузкой:`, error);
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Если мы здесь, значит все регионы перегружены
|
|
161
|
+
throw lastError || new Error('Все регионы Anthropic API перегружены, попробуйте позже');
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Отправляет одиночный запрос к модели с автоматическим переключением регионов
|
|
67
165
|
* @param {string} prompt Запрос к модели
|
|
68
166
|
* @param {ChatOptions} [options] Дополнительные параметры
|
|
69
167
|
* @returns {Promise<string>} Текстовый ответ модели
|
|
70
168
|
*/
|
|
71
|
-
async
|
|
169
|
+
async sendPromptWithRegionFailover(prompt, options) {
|
|
72
170
|
const messages = [
|
|
73
171
|
{ role: 'user', content: prompt }
|
|
74
172
|
];
|
|
75
|
-
const response = await this.
|
|
173
|
+
const response = await this.chatWithRegionFailover(messages, options);
|
|
76
174
|
if (response.choices && response.choices.length > 0) {
|
|
77
175
|
return response.choices[0].message.content;
|
|
78
176
|
}
|
|
@@ -240,6 +338,165 @@ class ChatApi {
|
|
|
240
338
|
];
|
|
241
339
|
yield* this.streamChat(messages, options);
|
|
242
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Создает новое WebSocket соединение для потокового чата
|
|
343
|
+
* @returns {Promise<WebSocketConnectResponse>} Информация о созданном соединении
|
|
344
|
+
*/
|
|
345
|
+
async connectWebSocket() {
|
|
346
|
+
return this.httpClient.post('/api/v1/chat/connect');
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
|
|
350
|
+
* @param {ChatMessage[]} messages Массив сообщений для отправки
|
|
351
|
+
* @param {ChatStreamOptions} [options] Дополнительные параметры
|
|
352
|
+
* @param {(eventType: string, data: any) => void} [onEvent] Обработчик событий WebSocket
|
|
353
|
+
* @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
|
|
354
|
+
*/
|
|
355
|
+
async streamChatWithThinking(messages, options = {}, onEvent) {
|
|
356
|
+
if (!messages || messages.length === 0) {
|
|
357
|
+
throw new Error('Необходимо предоставить хотя бы одно сообщение');
|
|
358
|
+
}
|
|
359
|
+
try {
|
|
360
|
+
// 1. Создаем параметры для запроса
|
|
361
|
+
const socketId = `socket_${Date.now()}_${this.generateId(10)}`;
|
|
362
|
+
let socket = null;
|
|
363
|
+
// 2. Подключаемся к WebSocket и ждем успешного подключения
|
|
364
|
+
if (onEvent) {
|
|
365
|
+
await new Promise((resolve, reject) => {
|
|
366
|
+
try {
|
|
367
|
+
const socketOptions = {
|
|
368
|
+
transports: ['websocket'],
|
|
369
|
+
reconnection: true,
|
|
370
|
+
reconnectionAttempts: 3,
|
|
371
|
+
reconnectionDelay: 1000,
|
|
372
|
+
timeout: 10000,
|
|
373
|
+
query: {
|
|
374
|
+
socketId: socketId,
|
|
375
|
+
isTest: 'true',
|
|
376
|
+
testToken: options.testToken || 'test-token'
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
// Динамически импортируем socket.io-client
|
|
380
|
+
Promise.resolve().then(() => __importStar(require('socket.io-client'))).then((socketIoModule) => {
|
|
381
|
+
const io = socketIoModule.default || socketIoModule.io;
|
|
382
|
+
if (!io) {
|
|
383
|
+
reject(new Error('Не удалось импортировать socket.io-client'));
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// Создаем соединение с сервером WebSocket
|
|
387
|
+
const serverUrl = this.httpClient.getBaseURL() || 'http://localhost:3000';
|
|
388
|
+
socket = io(`${serverUrl}/reasoning`, socketOptions);
|
|
389
|
+
// Устанавливаем обработчики событий
|
|
390
|
+
socket.on('connect', () => {
|
|
391
|
+
console.log(`[SDK] WebSocket подключен: ${socket.id}, задано socketId: ${socketId}`);
|
|
392
|
+
// При подключении отправляем событие аутентификации
|
|
393
|
+
socket.emit('authenticate', {
|
|
394
|
+
isTest: true,
|
|
395
|
+
socketId: socketId,
|
|
396
|
+
testToken: options.testToken || 'test-token'
|
|
397
|
+
});
|
|
398
|
+
// Отправляем событие присоединения к комнате с ID
|
|
399
|
+
socket.emit('join_room', { roomId: socketId });
|
|
400
|
+
// Вызываем обработчик события connect
|
|
401
|
+
if (onEvent) {
|
|
402
|
+
onEvent('connect', { socketId });
|
|
403
|
+
}
|
|
404
|
+
// Разрешаем промис, продолжаем выполнение
|
|
405
|
+
resolve();
|
|
406
|
+
});
|
|
407
|
+
// Обработчик сообщений от сервера
|
|
408
|
+
socket.on('message', (data) => {
|
|
409
|
+
if (onEvent && data && data.type) {
|
|
410
|
+
onEvent(data.type, data.data || data);
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
// Обработчик ошибок
|
|
414
|
+
socket.on('error', (error) => {
|
|
415
|
+
console.error('[SDK] WebSocket error:', error);
|
|
416
|
+
if (onEvent) {
|
|
417
|
+
onEvent('error', { message: error.message || 'Unknown WebSocket error', code: error.code });
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
// Обработчик отключения
|
|
421
|
+
socket.on('disconnect', (reason) => {
|
|
422
|
+
console.log(`[SDK] WebSocket отключен: ${reason}`);
|
|
423
|
+
if (onEvent) {
|
|
424
|
+
onEvent('disconnect', { reason });
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
// Обработчики для событий аутентификации
|
|
428
|
+
socket.on('authenticated', (data) => {
|
|
429
|
+
console.log('[SDK] Аутентификация успешна', data);
|
|
430
|
+
if (onEvent) {
|
|
431
|
+
onEvent('authenticated', data);
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
socket.on('authentication_error', (data) => {
|
|
435
|
+
console.error('[SDK] Ошибка аутентификации:', data);
|
|
436
|
+
if (onEvent) {
|
|
437
|
+
onEvent('error', { message: 'Ошибка аутентификации: ' + (data.message || 'Unknown error'), code: 'AUTH_ERROR' });
|
|
438
|
+
}
|
|
439
|
+
reject(new Error('Ошибка аутентификации: ' + (data.message || 'Unknown error')));
|
|
440
|
+
});
|
|
441
|
+
// Регистрируем обработчики для всех событий потока мышления
|
|
442
|
+
['message_start', 'content_block_start', 'thinking_start', 'thinking_delta',
|
|
443
|
+
'text_delta', 'content_block_stop', 'message_stop', 'done'].forEach(eventType => {
|
|
444
|
+
socket.on(eventType, (data) => {
|
|
445
|
+
if (onEvent) {
|
|
446
|
+
onEvent(eventType, data);
|
|
447
|
+
}
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
// Обработчик таймаута соединения
|
|
451
|
+
setTimeout(() => {
|
|
452
|
+
if (socket && !socket.connected) {
|
|
453
|
+
reject(new Error('WebSocket connection timeout'));
|
|
454
|
+
}
|
|
455
|
+
}, 10000);
|
|
456
|
+
}).catch(error => {
|
|
457
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
458
|
+
reject(new Error(`Ошибка импорта socket.io-client: ${errorMessage}`));
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
463
|
+
reject(new Error(`Ошибка WebSocket: ${errorMessage}`));
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
// 3. Отправляем HTTP запрос для инициации потока
|
|
468
|
+
return this.httpClient.post('/api/v1/chat/stream-chat', {
|
|
469
|
+
model: options.model || 'claude-3-7-sonnet-20240229',
|
|
470
|
+
messages,
|
|
471
|
+
temperature: options.temperature,
|
|
472
|
+
maxTokens: options.maxTokens,
|
|
473
|
+
socketId: socketId,
|
|
474
|
+
thinking: true,
|
|
475
|
+
region: options.region
|
|
476
|
+
}, {
|
|
477
|
+
'X-Socket-ID': socketId
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
if (options.onError) {
|
|
482
|
+
options.onError(error);
|
|
483
|
+
}
|
|
484
|
+
throw error;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Генерирует случайный ID указанной длины
|
|
489
|
+
* @param {number} length Длина ID
|
|
490
|
+
* @returns {string} Сгенерированный ID
|
|
491
|
+
*/
|
|
492
|
+
generateId(length) {
|
|
493
|
+
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
494
|
+
let result = '';
|
|
495
|
+
for (let i = 0; i < length; i++) {
|
|
496
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
497
|
+
}
|
|
498
|
+
return result;
|
|
499
|
+
}
|
|
243
500
|
}
|
|
244
501
|
exports.ChatApi = ChatApi;
|
|
245
502
|
//# sourceMappingURL=chat-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-api.js","sourceRoot":"","sources":["../../../src/api/chat-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-api.js","sourceRoot":"","sources":["../../../src/api/chat-api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6JA;;GAEG;AACH,MAAa,OAAO;IAIlB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,QAAuB,EAAE,OAAqB;QAC9D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,6DAA6D;QAC7D,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QAED,+BAA+B;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;YAC1C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,QAAQ;YACjC,QAAQ;YACR,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,aAAa,EAAE,OAAO,EAAE,aAAa;YACrC,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc,CAAC,QAAuB,EAAE,OAAqB;QACxE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,iBAAiB;QAC5B,IAAI,CAAC;YACH,oFAAoF;YACpF,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC5B,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,cAAc;aACpB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,sBAAsB,CAAC,QAAuB,EAAE,OAAqB;QAChF,iCAAiC;QACjC,MAAM,UAAU,GAAqD,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAElH,yDAAyD;QACzD,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,gBAAgB,GAAG,WAAW,CAAC;YACjC,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,MAAM,OAAO,GAAG;YACd,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC;YACrC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;SACzC,CAAC;QAEF,iEAAiE;QACjE,IAAI,SAAS,GAAiB,IAAI,CAAC;QAEnC,mCAAmC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,6CAA6C,MAAM,EAAE,CAAC,CAAC;gBAEnE,gDAAgD;gBAChD,MAAM,aAAa,GAAG;oBACpB,GAAG,OAAO;oBACV,MAAM;iBACP,CAAC;gBAEF,0CAA0C;gBAC1C,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,SAAS,GAAG,KAAK,CAAC;gBAElB,6DAA6D;gBAC7D,MAAM,eAAe,GACnB,KAAK,CAAC,MAAM,KAAK,GAAG;oBACpB,KAAK,CAAC,IAAI,KAAK,GAAG;oBAClB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;oBAChC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACvD,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,kBAAkB,CAAC,CAAC;gBAE7C,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,uCAAuC,CAAC,CAAC;oBACtE,6CAA6C;oBAC7C,SAAS;gBACX,CAAC;qBAAM,CAAC;oBACN,2DAA2D;oBAC3D,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,+BAA+B,EAAE,KAAK,CAAC,CAAC;oBAChF,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC1F,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,4BAA4B,CAAC,MAAc,EAAE,OAAqB;QAC7E,MAAM,QAAQ,GAAkB;YAC9B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SAClC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEtE,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,CAAC,UAAU,CAAC,QAAuB,EAAE,OAA2B;QAC3E,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,6DAA6D;QAC7D,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,QAAQ;gBACjC,QAAQ;gBACR,WAAW,EAAE,OAAO,EAAE,WAAW;gBACjC,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,aAAa,EAAE,OAAO,EAAE,aAAa;gBACrC,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;gBACnC,QAAQ,EAAE,OAAO,EAAE,QAAQ;gBAC3B,MAAM,EAAE,IAAI;aACb,CAAC;YAEF,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,GAAG,EAAE,qBAAqB;gBAC1B,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,QAAQ,EAAE,mBAAmB;oBAC7B,eAAe,EAAE,UAAU;iBAC5B;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,6BAA6B;YAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAElC,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,IAAI,eAAe,GAAG,EAAE,CAAC;YACzB,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,iBAAiB,GAAG,EAAE,CAAC;YAE3B,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE5C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM;gBACR,CAAC;gBAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAExC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACtB,iBAAiB;wBACjB,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;4BACxB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;wBAClC,CAAC;wBAED,MAAM;4BACJ,IAAI,EAAE,EAAE;4BACR,UAAU,EAAE,IAAI;4BAChB,eAAe,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;4BACzE,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;yBAChF,CAAC;wBAEF,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAEpC,sCAAsC;wBACtC,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,IAAI,UAAU,CAAC,IAAI,KAAK,qBAAqB,IAAI,UAAU,CAAC,aAAa,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;4BACvI,iBAAiB,GAAG,IAAI,CAAC;4BAEzB,mCAAmC;4BACnC,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;gCACrB,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;4BACtC,CAAC;4BAED,MAAM;gCACJ,IAAI,EAAE,kBAAkB;gCACxB,UAAU,EAAE,KAAK;gCACjB,UAAU,EAAE,IAAI;6BACjB,CAAC;wBACJ,CAAC;6BACI,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,IAAI,UAAU,CAAC,IAAI,KAAK,oBAAoB,IAAI,iBAAiB,EAAE,CAAC;4BAC7G,iBAAiB,GAAG,KAAK,CAAC;4BAE1B,kCAAkC;4BAClC,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;gCACrB,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;4BACpC,CAAC;4BAED,MAAM;gCACJ,IAAI,EAAE,gBAAgB;gCACtB,UAAU,EAAE,KAAK;gCACjB,UAAU,EAAE,IAAI;6BACjB,CAAC;wBACJ,CAAC;6BACI,IAAI,UAAU,CAAC,IAAI,KAAK,qBAAqB,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;4BAC3F,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;4BAE1C,IAAI,iBAAiB,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gCAC9D,sCAAsC;gCACtC,eAAe,IAAI,IAAI,CAAC;gCAExB,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;oCACrB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gCACxB,CAAC;gCAED,MAAM;oCACJ,IAAI;oCACJ,UAAU,EAAE,KAAK;oCACjB,UAAU,EAAE,IAAI;iCACjB,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,0CAA0C;gCAC1C,WAAW,IAAI,IAAI,CAAC;gCAEpB,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;oCACrB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gCACxB,CAAC;gCAED,MAAM;oCACJ,IAAI;oCACJ,UAAU,EAAE,KAAK;oCACjB,UAAU,EAAE,KAAK;iCAClB,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YAED,MAAM;gBACJ,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gBACzE,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;aAChF,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,CAAC,YAAY,CAAC,MAAc,EAAE,OAA2B;QACpE,MAAM,QAAQ,GAAkB;YAC9B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SAClC,CAAC;QAEF,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,sBAAsB,CACjC,QAAuB,EACvB,UAA6B,EAAE,EAC/B,OAAgD;QAEhD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,MAAM,GAAQ,IAAI,CAAC;YAEvB,2DAA2D;YAC3D,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC1C,IAAI,CAAC;wBACH,MAAM,aAAa,GAAG;4BACpB,UAAU,EAAE,CAAC,WAAW,CAAC;4BACzB,YAAY,EAAE,IAAI;4BAClB,oBAAoB,EAAE,CAAC;4BACvB,iBAAiB,EAAE,IAAI;4BACvB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE;gCACL,QAAQ,EAAE,QAAQ;gCAClB,MAAM,EAAE,MAAM;gCACd,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,YAAY;6BAC7C;yBACF,CAAC;wBAEF,2CAA2C;wBAC3C,kDAAO,kBAAkB,IAAE,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;4BACjD,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC;4BAEvD,IAAI,CAAC,EAAE,EAAE,CAAC;gCACR,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;gCAC/D,OAAO;4BACT,CAAC;4BAED,0CAA0C;4BAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,uBAAuB,CAAC;4BAC1E,MAAM,GAAG,EAAE,CAAC,GAAG,SAAS,YAAY,EAAE,aAAa,CAAC,CAAC;4BAErD,oCAAoC;4BACpC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gCACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,EAAE,sBAAsB,QAAQ,EAAE,CAAC,CAAC;gCAErF,oDAAoD;gCACpD,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;oCAC1B,MAAM,EAAE,IAAI;oCACZ,QAAQ,EAAE,QAAQ;oCAClB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,YAAY;iCAC7C,CAAC,CAAC;gCAEH,kDAAkD;gCAClD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gCAE/C,sCAAsC;gCACtC,IAAI,OAAO,EAAE,CAAC;oCACZ,OAAO,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gCACnC,CAAC;gCAED,0CAA0C;gCAC1C,OAAO,EAAE,CAAC;4BACZ,CAAC,CAAC,CAAC;4BAEH,kCAAkC;4BAClC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAS,EAAE,EAAE;gCACjC,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oCACjC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;gCACxC,CAAC;4BACH,CAAC,CAAC,CAAC;4BAEH,oBAAoB;4BACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;gCAChC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gCAC/C,IAAI,OAAO,EAAE,CAAC;oCACZ,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,yBAAyB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gCAC9F,CAAC;4BACH,CAAC,CAAC,CAAC;4BAEH,wBAAwB;4BACxB,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE;gCACzC,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;gCACnD,IAAI,OAAO,EAAE,CAAC;oCACZ,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gCACpC,CAAC;4BACH,CAAC,CAAC,CAAC;4BAEH,yCAAyC;4BACzC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAS,EAAE,EAAE;gCACvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;gCAClD,IAAI,OAAO,EAAE,CAAC;oCACZ,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gCACjC,CAAC;4BACH,CAAC,CAAC,CAAC;4BAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,IAAS,EAAE,EAAE;gCAC9C,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;gCACpD,IAAI,OAAO,EAAE,CAAC;oCACZ,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,yBAAyB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gCACnH,CAAC;gCACD,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;4BACnF,CAAC,CAAC,CAAC;4BAEH,4DAA4D;4BAC5D,CAAC,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB;gCAC1E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gCAC/E,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAS,EAAE,EAAE;oCACjC,IAAI,OAAO,EAAE,CAAC;wCACZ,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oCAC3B,CAAC;gCACH,CAAC,CAAC,CAAC;4BACL,CAAC,CAAC,CAAC;4BAEH,iCAAiC;4BACjC,UAAU,CAAC,GAAG,EAAE;gCACd,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oCAChC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;gCACpD,CAAC;4BACH,CAAC,EAAE,KAAK,CAAC,CAAC;wBACZ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;4BACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC5E,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,YAAY,EAAE,CAAC,CAAC,CAAC;wBACxE,CAAC,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC5E,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,iDAAiD;YACjD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAyB,0BAA0B,EAAE;gBAC9E,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,4BAA4B;gBACpD,QAAQ;gBACR,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,EAAE;gBACD,aAAa,EAAE,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,MAAc;QAC/B,MAAM,KAAK,GAAG,sCAAsC,CAAC;QACrD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAlhBD,0BAkhBC"}
|
|
@@ -43,6 +43,68 @@ class ReasoningApi {
|
|
|
43
43
|
async createReasoning(options) {
|
|
44
44
|
return this.httpClient.post('/api/v1/reasoning/create', options);
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Создает новое рассуждение с автоматическим переключением между регионами при ошибке перегрузки
|
|
48
|
+
* @param {ReasoningOptions} options Опции для рассуждения
|
|
49
|
+
* @returns {Promise<Reasoning>} Созданное рассуждение
|
|
50
|
+
*/
|
|
51
|
+
async createReasoningWithRegionFailover(options) {
|
|
52
|
+
// Список всех доступных регионов
|
|
53
|
+
const allRegions = ['us-east-1', 'eu-west-1', 'ap-southeast-2'];
|
|
54
|
+
// Начинаем с региона из параметров, или первого в списке
|
|
55
|
+
let startRegionIndex = 0;
|
|
56
|
+
if (options.options?.region) {
|
|
57
|
+
const regionIndex = allRegions.indexOf(options.options.region);
|
|
58
|
+
if (regionIndex !== -1) {
|
|
59
|
+
startRegionIndex = regionIndex;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Реорганизуем массив, чтобы начать с указанного региона
|
|
63
|
+
const regions = [
|
|
64
|
+
...allRegions.slice(startRegionIndex),
|
|
65
|
+
...allRegions.slice(0, startRegionIndex)
|
|
66
|
+
];
|
|
67
|
+
// Последняя ошибка, будет возвращена если все регионы недоступны
|
|
68
|
+
let lastError = null;
|
|
69
|
+
// Пробуем каждый регион по очереди
|
|
70
|
+
for (let i = 0; i < regions.length; i++) {
|
|
71
|
+
const region = regions[i];
|
|
72
|
+
try {
|
|
73
|
+
console.log(`Попытка запроса рассуждения к Anthropic API в регионе ${region}`);
|
|
74
|
+
// Копируем опции и устанавливаем текущий регион
|
|
75
|
+
const regionOptions = {
|
|
76
|
+
...options,
|
|
77
|
+
options: {
|
|
78
|
+
...(options.options || {}),
|
|
79
|
+
region
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
// Отправляем запрос с конкретным регионом
|
|
83
|
+
return await this.createReasoning(regionOptions);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
lastError = error;
|
|
87
|
+
// Проверяем, является ли ошибка ошибкой перегрузки (код 529)
|
|
88
|
+
const isOverloadError = error.status === 529 ||
|
|
89
|
+
error.code === 529 ||
|
|
90
|
+
(error.response?.status === 529) ||
|
|
91
|
+
(error.message && error.message.includes('overloaded')) ||
|
|
92
|
+
(error.error?.type === 'overloaded_error');
|
|
93
|
+
if (isOverloadError) {
|
|
94
|
+
console.warn(`Регион ${region} перегружен, пробуем следующий регион для рассуждения`);
|
|
95
|
+
// Продолжаем цикл и пробуем следующий регион
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Если ошибка не связана с перегрузкой, прекращаем попытки
|
|
100
|
+
console.error(`Ошибка в регионе ${region}, не связанная с перегрузкой:`, error);
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Если мы здесь, значит все регионы перегружены
|
|
106
|
+
throw lastError || new Error('Все регионы Anthropic API перегружены, попробуйте создать рассуждение позже');
|
|
107
|
+
}
|
|
46
108
|
/**
|
|
47
109
|
* Запускает рассуждение
|
|
48
110
|
* @param {string} reasoningId ID рассуждения
|