solver-sdk 1.7.3 → 1.7.5
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 +40 -49
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +37 -151
- 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/code-solver-sdk.js +10 -15
- 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.map +1 -1
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +34 -151
- 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/code-solver-sdk.js +8 -13
- 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.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 -79
- 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/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/utils/code-solver-websocket-client.d.ts +28 -34
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +168 -0
- package/docs/AUTHENTICATION.md +179 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/README.md +32 -56
- package/docs/WEBSOCKET.md +55 -394
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/package.json +1 -1
- 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
- package/docs/REGIONS.md +0 -140
- package/docs/WEBSOCKET_EVENTS.md +0 -183
- package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
- package/docs/thinking/streaming-thinking-guide.md +0 -164
- package/docs/thinking/thinking-mode.md +0 -366
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
В этом документе описаны основные классы и методы SDK.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [CodeSolverSDK](#codesolversdk)
|
|
8
|
+
- [ChatApi](#chatapi)
|
|
9
|
+
- [ReasoningApi](#reasoningapi)
|
|
10
|
+
- [ProjectsApi](#projectsapi)
|
|
11
|
+
- [SearchApi](#searchapi)
|
|
12
|
+
|
|
13
|
+
## CodeSolverSDK
|
|
14
|
+
|
|
15
|
+
Основной класс SDK, предоставляющий доступ ко всем API.
|
|
16
|
+
|
|
17
|
+
### Конструктор
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
const sdk = new CodeSolverSDK(options);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Параметры
|
|
24
|
+
|
|
25
|
+
| Параметр | Тип | Описание | Обязательно |
|
|
26
|
+
|----------|-----|----------|-------------|
|
|
27
|
+
| `baseURL` | string | Базовый URL API | Да |
|
|
28
|
+
| `apiKey` | string | API ключ для авторизации | Нет |
|
|
29
|
+
| `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
|
|
30
|
+
| `websocket` | object | Настройки WebSocket | Нет |
|
|
31
|
+
|
|
32
|
+
### Методы
|
|
33
|
+
|
|
34
|
+
#### `getWebSocketClient()`
|
|
35
|
+
|
|
36
|
+
Возвращает экземпляр WebSocket клиента для работы с соединениями.
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
const wsClient = sdk.getWebSocketClient();
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### `checkHealth()`
|
|
43
|
+
|
|
44
|
+
Проверяет доступность API сервера.
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
const isHealthy = await sdk.checkHealth();
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## ChatApi
|
|
51
|
+
|
|
52
|
+
API для работы с чатом и потоковой передачей мышления.
|
|
53
|
+
|
|
54
|
+
### Методы
|
|
55
|
+
|
|
56
|
+
#### `streamChatWithThinking(messages, options, callback)`
|
|
57
|
+
|
|
58
|
+
Отправляет запрос чата с потоковой передачей мышления через WebSocket.
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
const response = await sdk.chat.streamChatWithThinking(
|
|
62
|
+
messages,
|
|
63
|
+
options,
|
|
64
|
+
callback
|
|
65
|
+
);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
##### Параметры
|
|
69
|
+
|
|
70
|
+
| Параметр | Тип | Описание | Обязательно |
|
|
71
|
+
|----------|-----|----------|-------------|
|
|
72
|
+
| `messages` | Array | Массив сообщений для отправки модели | Да |
|
|
73
|
+
| `options` | Object | Параметры запроса (модель, thinking: true) | Да |
|
|
74
|
+
| `callback` | Function | Обработчик событий | Да |
|
|
75
|
+
|
|
76
|
+
#### `chat(messages, options)`
|
|
77
|
+
|
|
78
|
+
Отправляет запрос чата и возвращает полный ответ.
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
const response = await sdk.chat.chat(
|
|
82
|
+
messages,
|
|
83
|
+
options
|
|
84
|
+
);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### `getModels()`
|
|
88
|
+
|
|
89
|
+
Получает список доступных моделей.
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
const models = await sdk.chat.getModels();
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## ReasoningApi
|
|
96
|
+
|
|
97
|
+
API для работы с рассуждениями.
|
|
98
|
+
|
|
99
|
+
### Методы
|
|
100
|
+
|
|
101
|
+
#### `createReasoning(options)`
|
|
102
|
+
|
|
103
|
+
Создаёт новое рассуждение.
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
const reasoning = await sdk.reasoning.createReasoning({
|
|
107
|
+
projectId: 'project-id',
|
|
108
|
+
query: 'Объясни этот проект'
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### `getReasoning(reasoningId)`
|
|
113
|
+
|
|
114
|
+
Получает информацию о рассуждении.
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
const reasoning = await sdk.reasoning.getReasoning('reasoning-id');
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## ProjectsApi
|
|
121
|
+
|
|
122
|
+
API для работы с проектами.
|
|
123
|
+
|
|
124
|
+
### Методы
|
|
125
|
+
|
|
126
|
+
#### `createProject(name, path)`
|
|
127
|
+
|
|
128
|
+
Создаёт новый проект.
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
const project = await sdk.projects.createProject('Мой проект', '/path/to/project');
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### `indexProject(projectId)`
|
|
135
|
+
|
|
136
|
+
Запускает индексацию проекта.
|
|
137
|
+
|
|
138
|
+
```javascript
|
|
139
|
+
await sdk.projects.indexProject('project-id');
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## SearchApi
|
|
143
|
+
|
|
144
|
+
API для поиска кода.
|
|
145
|
+
|
|
146
|
+
### Методы
|
|
147
|
+
|
|
148
|
+
#### `searchCode(projectId, options)`
|
|
149
|
+
|
|
150
|
+
Выполняет поиск кода в проекте.
|
|
151
|
+
|
|
152
|
+
```javascript
|
|
153
|
+
const results = await sdk.search.searchCode('project-id', {
|
|
154
|
+
query: 'function example',
|
|
155
|
+
limit: 10
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### `semanticSearch(projectId, options)`
|
|
160
|
+
|
|
161
|
+
Выполняет семантический поиск в проекте.
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
const results = await sdk.search.semanticSearch('project-id', {
|
|
165
|
+
query: 'функция для обработки HTTP запросов',
|
|
166
|
+
limit: 10
|
|
167
|
+
});
|
|
168
|
+
```
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Аутентификация в Solver SDK
|
|
2
|
+
|
|
3
|
+
В этом документе описаны методы аутентификации в Solver SDK для различных API и WebSocket соединений.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [HTTP API аутентификация](#http-api-аутентификация)
|
|
8
|
+
- [WebSocket аутентификация](#websocket-аутентификация)
|
|
9
|
+
- [Тестовая аутентификация](#тестовая-аутентификация)
|
|
10
|
+
- [Обработка ошибок аутентификации](#обработка-ошибок-аутентификации)
|
|
11
|
+
|
|
12
|
+
## HTTP API аутентификация
|
|
13
|
+
|
|
14
|
+
SDK поддерживает два основных метода аутентификации для HTTP запросов:
|
|
15
|
+
|
|
16
|
+
### 1. API ключ
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
const sdk = new CodeSolverSDK({
|
|
20
|
+
baseURL: 'https://api.example.com',
|
|
21
|
+
apiKey: 'your-api-key'
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
API ключ автоматически добавляется в заголовок `X-API-Key` для всех HTTP запросов.
|
|
26
|
+
|
|
27
|
+
### 2. Пользовательские заголовки
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
const sdk = new CodeSolverSDK({
|
|
31
|
+
baseURL: 'https://api.example.com',
|
|
32
|
+
headers: {
|
|
33
|
+
'Authorization': 'Bearer your-jwt-token',
|
|
34
|
+
'X-Custom-Header': 'Custom-Value'
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## WebSocket аутентификация
|
|
40
|
+
|
|
41
|
+
Для WebSocket соединений SDK использует отдельный механизм аутентификации через специальное событие `authenticate`.
|
|
42
|
+
|
|
43
|
+
### Стандартная аутентификация WebSocket
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
// 1. Создаем экземпляр SDK
|
|
47
|
+
const sdk = new CodeSolverSDK({
|
|
48
|
+
baseURL: 'https://api.example.com',
|
|
49
|
+
apiKey: 'your-api-key'
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// 2. Опции для streamChatWithThinking
|
|
53
|
+
const options = {
|
|
54
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
55
|
+
thinking: true,
|
|
56
|
+
authToken: 'your-auth-token' // ← Токен для WebSocket аутентификации
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// 3. Отправка запроса
|
|
60
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Параметр `authToken` используется для аутентификации WebSocket соединений и передается в событии `authenticate`.
|
|
64
|
+
|
|
65
|
+
### Низкоуровневая WebSocket аутентификация
|
|
66
|
+
|
|
67
|
+
Если вы работаете напрямую с WebSocket клиентом, вы можете настроить аутентификацию следующим образом:
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
// Получаем WebSocket клиент
|
|
71
|
+
const wsClient = sdk.getWebSocketClient();
|
|
72
|
+
|
|
73
|
+
// Настраиваем опции подключения с аутентификацией
|
|
74
|
+
const connectionOptions = {
|
|
75
|
+
namespace: 'reasoning',
|
|
76
|
+
authToken: 'your-auth-token',
|
|
77
|
+
query: {
|
|
78
|
+
reasoningId: 'reasoning-123'
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Подключаемся к WebSocket серверу
|
|
83
|
+
await wsClient.connect(connectionOptions);
|
|
84
|
+
|
|
85
|
+
// Проверяем статус аутентификации
|
|
86
|
+
const isAuthenticated = wsClient.isAuthenticated();
|
|
87
|
+
console.log('Аутентификация WebSocket:', isAuthenticated);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Тестовая аутентификация
|
|
91
|
+
|
|
92
|
+
Для тестовых сред SDK поддерживает упрощенную аутентификацию:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
const options = {
|
|
96
|
+
// Другие параметры...
|
|
97
|
+
authToken: 'test-token'
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> **Важно**: Начиная с версии 1.7.4, устаревший параметр `testToken` удален в пользу унифицированного параметра `authToken`.
|
|
104
|
+
|
|
105
|
+
## Обработка ошибок аутентификации
|
|
106
|
+
|
|
107
|
+
SDK предоставляет механизм обработки ошибок аутентификации:
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
// Обработчик событий WebSocket
|
|
111
|
+
const handleEvent = (eventType, data) => {
|
|
112
|
+
if (eventType === 'authentication_error') {
|
|
113
|
+
console.error('Ошибка аутентификации:', data.message);
|
|
114
|
+
|
|
115
|
+
// Возможная реакция на ошибку (переподключение, запрос нового токена и т.д.)
|
|
116
|
+
switch (data.code) {
|
|
117
|
+
case 'TOKEN_EXPIRED':
|
|
118
|
+
// Запросить новый токен
|
|
119
|
+
break;
|
|
120
|
+
case 'INVALID_TOKEN':
|
|
121
|
+
// Перенаправить на страницу входа
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
// Общая обработка ошибок
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Коды ошибок аутентификации
|
|
132
|
+
|
|
133
|
+
| Код ошибки | Описание |
|
|
134
|
+
|------------|----------|
|
|
135
|
+
| `TOKEN_EXPIRED` | Истек срок действия токена |
|
|
136
|
+
| `INVALID_TOKEN` | Недействительный токен |
|
|
137
|
+
| `MISSING_TOKEN` | Отсутствует токен |
|
|
138
|
+
| `AUTH_ERROR` | Общая ошибка аутентификации |
|
|
139
|
+
| `FORBIDDEN` | Доступ запрещен |
|
|
140
|
+
|
|
141
|
+
## Примеры
|
|
142
|
+
|
|
143
|
+
### Полный пример аутентификации для рассуждений
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
const { CodeSolverSDK, WebSocketNamespace } = require('solver-sdk');
|
|
147
|
+
|
|
148
|
+
async function exampleWithAuthentication() {
|
|
149
|
+
// 1. Создаем экземпляр SDK
|
|
150
|
+
const sdk = new CodeSolverSDK({
|
|
151
|
+
baseURL: 'https://api.example.com',
|
|
152
|
+
apiKey: 'your-api-key'
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// 2. Создаем рассуждение
|
|
156
|
+
const reasoning = await sdk.reasoning.createReasoning({
|
|
157
|
+
projectId: 'project-id',
|
|
158
|
+
query: 'Объясни этот проект'
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// 3. Подключаемся через WebSocket с аутентификацией
|
|
162
|
+
await sdk.reasoning.connectWebSocket({
|
|
163
|
+
reasoningId: reasoning.id,
|
|
164
|
+
authToken: 'your-auth-token'
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// 4. Настраиваем обработчики событий
|
|
168
|
+
sdk.reasoning.on('authentication_error', (data) => {
|
|
169
|
+
console.error('Ошибка аутентификации:', data);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
sdk.reasoning.on('authenticated', (data) => {
|
|
173
|
+
console.log('Успешная аутентификация:', data);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// 5. Отправляем запрос
|
|
177
|
+
await sdk.reasoning.startReasoning(reasoning.id);
|
|
178
|
+
}
|
|
179
|
+
```
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Обработка ошибок в Solver SDK
|
|
2
|
+
|
|
3
|
+
Документация по системе обработки ошибок в Solver SDK, включая общие ошибки, ошибки WebSocket и географические ограничения.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [Общие принципы](#общие-принципы)
|
|
8
|
+
- [Типы ошибок](#типы-ошибок)
|
|
9
|
+
- [HTTP ошибки](#http-ошибки)
|
|
10
|
+
- [WebSocket ошибки](#websocket-ошибки)
|
|
11
|
+
- [Ошибки географических ограничений](#ошибки-географических-ограничений)
|
|
12
|
+
- [Примеры обработки ошибок](#примеры-обработки-ошибок)
|
|
13
|
+
|
|
14
|
+
## Общие принципы
|
|
15
|
+
|
|
16
|
+
Solver SDK использует следующие принципы при работе с ошибками:
|
|
17
|
+
|
|
18
|
+
1. **Унифицированный формат** — все ошибки имеют единую структуру
|
|
19
|
+
2. **Информативные сообщения** — ошибки содержат детальное описание проблемы
|
|
20
|
+
3. **Коды ошибок** — каждая ошибка имеет уникальный код для идентификации
|
|
21
|
+
4. **Типизация** — ошибки классифицируются по типам для удобной обработки
|
|
22
|
+
|
|
23
|
+
## Типы ошибок
|
|
24
|
+
|
|
25
|
+
Основные типы ошибок в SDK:
|
|
26
|
+
|
|
27
|
+
| Тип ошибки | Описание |
|
|
28
|
+
|------------|----------|
|
|
29
|
+
| `http_error` | Ошибки HTTP запросов |
|
|
30
|
+
| `websocket_error` | Ошибки WebSocket соединений |
|
|
31
|
+
| `validation_error` | Ошибки валидации входных данных |
|
|
32
|
+
| `authentication_error` | Ошибки аутентификации |
|
|
33
|
+
| `rate_limit_error` | Ошибки превышения лимита запросов |
|
|
34
|
+
| `provider_error` | Ошибки провайдеров API (Anthropic, OpenAI) |
|
|
35
|
+
| `geo_restriction` | Ошибки географических ограничений |
|
|
36
|
+
|
|
37
|
+
## HTTP ошибки
|
|
38
|
+
|
|
39
|
+
HTTP ошибки возникают при проблемах с HTTP запросами:
|
|
40
|
+
|
|
41
|
+
```javascript
|
|
42
|
+
try {
|
|
43
|
+
const result = await sdk.chat.chat([{ role: 'user', content: 'Hello' }]);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.error(`Код ошибки: ${error.code}`);
|
|
46
|
+
console.error(`Сообщение: ${error.message}`);
|
|
47
|
+
|
|
48
|
+
// Проверка типа ошибки
|
|
49
|
+
if (error.code === 401) {
|
|
50
|
+
console.error('Ошибка аутентификации: проверьте API ключ');
|
|
51
|
+
} else if (error.code === 429) {
|
|
52
|
+
console.error('Превышен лимит запросов: повторите позже');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## WebSocket ошибки
|
|
58
|
+
|
|
59
|
+
WebSocket ошибки обрабатываются через обработчики событий:
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
const handleEvent = (eventType, data) => {
|
|
63
|
+
if (eventType === 'error') {
|
|
64
|
+
console.error(`WebSocket ошибка: ${data.message} (код: ${data.code})`);
|
|
65
|
+
|
|
66
|
+
// Обработка конкретных типов ошибок
|
|
67
|
+
switch (data.type) {
|
|
68
|
+
case 'connection_error':
|
|
69
|
+
console.error('Проблема с подключением, пробуем переподключиться...');
|
|
70
|
+
break;
|
|
71
|
+
case 'authentication_error':
|
|
72
|
+
console.error('Проблема аутентификации, запрашиваем новый токен...');
|
|
73
|
+
break;
|
|
74
|
+
case 'timeout_error':
|
|
75
|
+
console.error('Превышен таймаут ожидания ответа');
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Передаем обработчик событий
|
|
82
|
+
await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Ошибки географических ограничений
|
|
86
|
+
|
|
87
|
+
> **Добавлено в версии 1.7.4**
|
|
88
|
+
|
|
89
|
+
Начиная с версии 1.7.4 SDK поддерживает специальную обработку ошибок географических ограничений API Anthropic. Эти ошибки возникают, когда запросы отправляются из регионов, не поддерживаемых API Anthropic:
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
try {
|
|
93
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
94
|
+
} catch (error) {
|
|
95
|
+
// Проверка наличия ошибки географических ограничений
|
|
96
|
+
if (error.type === 'geo_restriction') {
|
|
97
|
+
console.error('==============================================');
|
|
98
|
+
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
99
|
+
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
100
|
+
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
101
|
+
console.error('==============================================');
|
|
102
|
+
|
|
103
|
+
// Возможные действия:
|
|
104
|
+
// 1. Предложить пользователю включить VPN
|
|
105
|
+
// 2. Переключиться на другой провайдер API
|
|
106
|
+
// 3. Использовать прокси-сервер
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Через обработчик WebSocket событий:
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
const handleEvent = (eventType, data) => {
|
|
115
|
+
if (eventType === 'error' && data.type === 'geo_restriction') {
|
|
116
|
+
console.error('Необходимо включить VPN для доступа к API Anthropic из вашего региона');
|
|
117
|
+
|
|
118
|
+
// Выполнить действия по настройке VPN или показать инструкции пользователю
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Причины ошибок географических ограничений
|
|
124
|
+
|
|
125
|
+
Основные причины возникновения ошибок географических ограничений:
|
|
126
|
+
|
|
127
|
+
1. **Региональные ограничения API Anthropic** — API доступен только из определенных регионов (США, Европа и некоторые другие)
|
|
128
|
+
2. **Регуляторные требования** — законодательство некоторых стран ограничивает доступ к определенным API
|
|
129
|
+
3. **IP-блокировка** — некоторые IP-адреса могут быть заблокированы провайдером API
|
|
130
|
+
|
|
131
|
+
### Решение проблемы
|
|
132
|
+
|
|
133
|
+
Для решения проблемы географических ограничений:
|
|
134
|
+
|
|
135
|
+
1. **Использование VPN** — подключитесь через VPN к поддерживаемому региону (США, Европа)
|
|
136
|
+
2. **Прокси-сервер** — настройте прокси для запросов к API
|
|
137
|
+
3. **Альтернативные провайдеры** — используйте альтернативных провайдеров, доступных в вашем регионе
|
|
138
|
+
|
|
139
|
+
## Примеры обработки ошибок
|
|
140
|
+
|
|
141
|
+
### Комплексная обработка ошибок
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
async function exampleWithErrorHandling() {
|
|
145
|
+
const sdk = new CodeSolverSDK({
|
|
146
|
+
baseURL: 'https://api.example.com',
|
|
147
|
+
apiKey: 'your-api-key'
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
const messages = [
|
|
151
|
+
{ role: 'user', content: 'Explain quantum computing' }
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
const options = {
|
|
155
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
156
|
+
thinking: true,
|
|
157
|
+
authToken: 'your-auth-token'
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// Обработчик WebSocket событий
|
|
161
|
+
const handleEvent = (eventType, data) => {
|
|
162
|
+
// Обработка ошибок
|
|
163
|
+
if (eventType === 'error') {
|
|
164
|
+
console.error(`Ошибка: ${data.message}`);
|
|
165
|
+
|
|
166
|
+
// Проверка типа ошибки
|
|
167
|
+
switch (data.type) {
|
|
168
|
+
case 'geo_restriction':
|
|
169
|
+
console.error('Географическое ограничение: требуется VPN');
|
|
170
|
+
break;
|
|
171
|
+
case 'authentication_error':
|
|
172
|
+
console.error('Ошибка аутентификации: неверный токен');
|
|
173
|
+
break;
|
|
174
|
+
case 'rate_limit_error':
|
|
175
|
+
console.error('Превышен лимит запросов');
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
console.error(`Неизвестная ошибка типа: ${data.type}`);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
try {
|
|
185
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
186
|
+
console.log(`Успешно отправлен запрос, Socket ID: ${response.socketId}`);
|
|
187
|
+
} catch (error) {
|
|
188
|
+
console.error(`Критическая ошибка: ${error.message}`);
|
|
189
|
+
|
|
190
|
+
// Обработка специфических типов ошибок
|
|
191
|
+
if (error.type === 'geo_restriction') {
|
|
192
|
+
showVpnInstructions(); // Показать инструкции по настройке VPN
|
|
193
|
+
} else if (error.status === 429) {
|
|
194
|
+
scheduleRetry(5000); // Запланировать повторную попытку через 5 секунд
|
|
195
|
+
} else {
|
|
196
|
+
reportError(error); // Отправить отчет об ошибке
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Обработка ошибок при работе с рассуждениями
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
try {
|
|
206
|
+
// Создание рассуждения
|
|
207
|
+
const reasoning = await sdk.reasoning.createReasoning({
|
|
208
|
+
projectId: 'project-123',
|
|
209
|
+
query: 'Analyze this codebase'
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
// Подключение WebSocket
|
|
213
|
+
await sdk.reasoning.connectWebSocket({
|
|
214
|
+
reasoningId: reasoning.id,
|
|
215
|
+
authToken: 'your-auth-token',
|
|
216
|
+
onError: (error) => {
|
|
217
|
+
console.error(`WebSocket ошибка: ${error.message}`);
|
|
218
|
+
|
|
219
|
+
if (error.type === 'geo_restriction') {
|
|
220
|
+
// Показать сообщение о необходимости VPN
|
|
221
|
+
showVpnAlert();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
// Запуск рассуждения
|
|
227
|
+
await sdk.reasoning.startReasoning(reasoning.id);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
console.error(`HTTP ошибка: ${error.message}`);
|
|
230
|
+
|
|
231
|
+
// Обработка HTTP ошибок
|
|
232
|
+
if (error.status === 401) {
|
|
233
|
+
// Перенаправить на страницу входа
|
|
234
|
+
redirectToLogin();
|
|
235
|
+
} else if (error.status === 403) {
|
|
236
|
+
// Показать сообщение об отсутствии доступа
|
|
237
|
+
showAccessDeniedMessage();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|