solver-sdk 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,77 +1,76 @@
1
- # API Reference
1
+ # API Reference v2.5.0
2
2
 
3
- В этом документе описаны основные классы и методы SDK.
3
+ В этом документе описаны основные классы и методы AI Solver SDK v2.5.0.
4
4
 
5
5
  ## Содержание
6
6
 
7
7
  - [CodeSolverSDK](#codesolversdk)
8
- - [ChatApi](#chatapi)
9
8
  - [ProjectsApi](#projectsapi)
10
- - [SearchApi](#searchapi)
11
9
  - [ReasoningApi](#reasoningapi)
10
+ - [ChatApi](#chatapi)
11
+ - [SearchApi](#searchapi)
12
+ - [Helper Functions](#helper-functions)
12
13
 
13
14
  ## CodeSolverSDK
14
15
 
15
16
  Основной класс SDK, предоставляющий доступ ко всем API.
16
17
 
17
- ### Конструктор
18
+ ### Статический создатель (Рекомендуемый)
18
19
 
19
20
  ```javascript
20
- const sdk = new CodeSolverSDK(options);
21
+ const sdk = CodeSolverSDK.create(options);
21
22
  ```
22
23
 
23
24
  ### Параметры
24
25
 
25
- | Параметр | Тип | Описание | Обязательно |
26
- |----------|-----|----------|-------------|
27
- | `baseURL` | string | Базовый URL API | Да |
28
- | `apiKey` | string | API ключ для авторизации | Нет |
29
- | `wsURL` | string | URL для WebSocket соединений (если отличается от baseURL) | Нет |
30
- | `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
31
- | `headers` | object | Дополнительные HTTP заголовки | Нет |
32
- | `websocket` | object | Настройки WebSocket соединений | Нет |
33
- | `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
26
+ | Параметр | Тип | Описание | Обязательно | По умолчанию |
27
+ |----------|-----|----------|-------------|--------------|
28
+ | `baseURL` | string | Базовый URL API | Да | - |
29
+ | `apiKey` | string | API ключ для авторизации | Да | - |
30
+ | `autoConnect` | boolean | Автоматическое подключение WebSocket | Нет | false |
31
+ | `timeout` | number | Таймаут для HTTP запросов (мс) | Нет | 30000 |
32
+ | `headers` | object | Дополнительные HTTP заголовки | Нет | {} |
33
+ | `wsURL` | string | URL для WebSocket (если отличается) | Нет | baseURL |
34
34
 
35
35
  ### Методы
36
36
 
37
- #### `checkHealth()`
38
-
39
- Проверяет доступность API сервера.
40
-
41
- ```javascript
42
- const isHealthy = await sdk.checkHealth();
43
- ```
44
-
45
- #### `connect()`
37
+ #### `diagnoseAPI()`
46
38
 
47
- Подключается ко всем WebSocket сервисам одновременно.
39
+ Проверяет доступность всех API endpoints.
48
40
 
49
41
  ```javascript
50
- await sdk.connect();
42
+ const results = await sdk.diagnoseAPI();
43
+ console.log('Endpoints status:', results);
44
+ // Возвращает объект с результатами проверки каждого endpoint
51
45
  ```
52
46
 
53
- #### `disconnect()`
47
+ #### `diagnoseFull()`
54
48
 
55
- Отключается от всех WebSocket серверов.
49
+ Детальная диагностика API и WebSocket.
56
50
 
57
51
  ```javascript
58
- await sdk.disconnect();
52
+ const detailed = await sdk.diagnoseFull();
53
+ console.log('Full diagnostics:', detailed);
59
54
  ```
60
55
 
61
- #### `dispose()`
56
+ #### `diagnoseWebSocket()`
62
57
 
63
- Освобождает ресурсы, включая WebSocket соединения.
58
+ Проверяет статус WebSocket соединений.
64
59
 
65
60
  ```javascript
66
- sdk.dispose();
61
+ const wsStatus = await sdk.diagnoseWebSocket();
62
+ console.log('WebSocket status:', wsStatus);
67
63
  ```
68
64
 
69
- #### `setApiKey(apiKey)`
65
+ #### `updateOptions(newOptions)`
70
66
 
71
- Устанавливает новый API ключ для SDK.
67
+ Обновляет настройки SDK.
72
68
 
73
69
  ```javascript
74
- sdk.setApiKey('новый-api-ключ');
70
+ sdk.updateOptions({
71
+ apiKey: 'new-api-key',
72
+ timeout: 60000
73
+ });
75
74
  ```
76
75
 
77
76
  ## ChatApi
@@ -135,51 +134,64 @@ await sdk.chat.connectWebSocket();
135
134
 
136
135
  ## ProjectsApi
137
136
 
138
- API для работы с проектами.
137
+ API для работы с проектами. Доступен через `sdk.projects`.
139
138
 
140
139
  ### Методы
141
140
 
142
- #### `createProject(name, path, options)`
141
+ #### `create(projectData)`
143
142
 
144
143
  Создает новый проект.
145
144
 
146
145
  ```javascript
147
- const project = await sdk.projects.createProject(
148
- 'Мой проект',
149
- '/path/to/project',
150
- { excludePatterns: ['node_modules', '.git'] }
151
- );
146
+ const project = await sdk.projects.create({
147
+ name: 'My Project',
148
+ path: '/path/to/project',
149
+ description: 'Optional description'
150
+ });
151
+
152
+ // Возвращает объект проекта с id, name, path, статусами и метаданными
152
153
  ```
153
154
 
154
- #### `getProject(projectId)`
155
+ #### `get(projectId)`
155
156
 
156
- Получает информацию о проекте.
157
+ Получает информацию о проекте по ID.
157
158
 
158
159
  ```javascript
159
- const project = await sdk.projects.getProject('project-id');
160
+ const project = await sdk.projects.get('project-id');
160
161
  ```
161
162
 
162
- #### `getAllProjects()`
163
+ #### `getAll()`
163
164
 
164
165
  Получает список всех проектов.
165
166
 
166
167
  ```javascript
167
- const projects = await sdk.projects.getAllProjects();
168
+ const projects = await sdk.projects.getAll();
169
+ // Возвращает { projects: Array, total: number }
168
170
  ```
169
171
 
170
- #### `indexProject(projectId, options)`
172
+ #### `startIndexing(projectId)`
171
173
 
172
174
  Запускает индексацию проекта.
173
175
 
174
176
  ```javascript
175
- await sdk.projects.indexProject('project-id', {
176
- indexingMode: 'full' // или 'incremental', 'auto'
177
- });
177
+ await sdk.projects.startIndexing('project-id');
178
+ // Возвращает { message: 'Индексация запущена', projectId, status: 'accepted' }
178
179
  ```
179
180
 
181
+ #### `getIndexingStatus(projectId)`
182
+
183
+ Получает статус индексации проекта.
184
+
185
+ ```javascript
186
+ const status = await sdk.projects.getIndexingStatus('project-id');
187
+ // Возвращает { projectId, indexStatus, indexingProgress, filesIndexed, lastUpdated }
188
+ ```
189
+
190
+ ### WebSocket методы
191
+
180
192
  #### `connectWebSocket()`
181
193
 
182
- Подключается к WebSocket для отслеживания индексации.
194
+ Подключается к WebSocket для отслеживания событий проектов.
183
195
 
184
196
  ```javascript
185
197
  await sdk.projects.connectWebSocket();
@@ -187,118 +199,505 @@ await sdk.projects.connectWebSocket();
187
199
 
188
200
  #### `disconnectWebSocket()`
189
201
 
190
- Отключается от WebSocket индексации.
202
+ Отключается от WebSocket.
191
203
 
192
204
  ```javascript
193
205
  await sdk.projects.disconnectWebSocket();
194
206
  ```
195
207
 
196
- #### `on(event, callback)`
208
+ ### Event методы
209
+
210
+ #### `onIndexingProgress(callback)`
197
211
 
198
- Добавляет обработчик события для индексации.
212
+ Отслеживает прогресс индексации.
199
213
 
200
214
  ```javascript
201
- sdk.projects.on('indexing_progress', (data) => {
202
- console.log(`Прогресс: ${data.progress}%`);
215
+ sdk.projects.onIndexingProgress((data) => {
216
+ console.log(`Progress: ${data.percentage}%`);
217
+ console.log(`Files: ${data.processedFiles}/${data.totalFiles}`);
203
218
  });
204
219
  ```
205
220
 
206
- #### `stopIndexing(projectId)`
221
+ #### `onIndexingComplete(callback)`
207
222
 
208
- Останавливает индексацию проекта.
223
+ Событие завершения индексации.
209
224
 
210
225
  ```javascript
211
- await sdk.projects.stopIndexing('project-id');
226
+ sdk.projects.onIndexingComplete((data) => {
227
+ console.log('Indexing completed:', data.projectId);
228
+ console.log('Total files:', data.totalFiles);
229
+ });
212
230
  ```
213
231
 
214
- #### `getIndexingStatus(projectId)`
232
+ #### `onIndexingError(callback)`
215
233
 
216
- Получает статус индексации проекта.
234
+ Событие ошибки индексации.
217
235
 
218
236
  ```javascript
219
- const status = await sdk.projects.getIndexingStatus('project-id');
237
+ sdk.projects.onIndexingError((error) => {
238
+ console.error('Indexing error:', error.message);
239
+ });
240
+ ```
241
+
242
+ ### Алиасы для совместимости
243
+
244
+ ```javascript
245
+ // Старые методы (deprecated, но работают)
246
+ await sdk.projects.createProject(name, path, options); // → create()
247
+ await sdk.projects.indexProject(projectId); // → startIndexing()
248
+ await sdk.projects.getProject(projectId); // → get()
249
+ await sdk.projects.getAllProjects(); // → getAll()
220
250
  ```
221
251
 
222
252
  ## SearchApi
223
253
 
224
- API для поиска кода.
254
+ API для семантического поиска кода. Доступен через `sdk.search`.
225
255
 
226
256
  ### Методы
227
257
 
228
- #### `searchCode(projectId, options)`
258
+ #### `searchProject(projectId, options)`
229
259
 
230
- Выполняет поиск кода в проекте.
260
+ Выполняет семантический поиск в проекте (POST запрос).
231
261
 
232
262
  ```javascript
233
- const results = await sdk.search.searchCode('project-id', {
234
- query: 'function example',
235
- limit: 10
263
+ const results = await sdk.search.searchProject('project-id', {
264
+ query: 'функция для обработки HTTP запросов',
265
+ limit: 10,
266
+ minScore: 0.7
236
267
  });
268
+
269
+ // Возвращает массив результатов с релевантностью и фрагментами кода
237
270
  ```
238
271
 
239
- #### `semanticSearch(projectId, options)`
272
+ #### `searchProjectGet(projectId, query, options)`
240
273
 
241
- Выполняет семантический поиск в проекте.
274
+ Выполняет поиск через GET запрос с параметрами URL.
242
275
 
243
276
  ```javascript
244
- const results = await sdk.search.semanticSearch('project-id', {
245
- query: 'функция для обработки HTTP запросов',
246
- limit: 10,
247
- includeContent: true
277
+ const results = await sdk.search.searchProjectGet(
278
+ 'project-id',
279
+ 'поиск по коду',
280
+ { limit: 10 }
281
+ );
282
+ ```
283
+
284
+ ### Алиасы для совместимости
285
+
286
+ ```javascript
287
+ // Старые методы (deprecated, но работают)
288
+ await sdk.search.searchCode(projectId, options); // → searchProject()
289
+ await sdk.search.semanticSearch(projectId, options); // → searchProject()
290
+ ```
291
+
292
+ ## ChatApi
293
+
294
+ API для взаимодействия с AI чатом и Claude 4 thinking. Доступен через `sdk.chat`.
295
+
296
+ ### Методы
297
+
298
+ #### `send(messages, options)`
299
+
300
+ Отправляет сообщения в чат и получает ответ.
301
+
302
+ ```javascript
303
+ const response = await sdk.chat.send([
304
+ {
305
+ role: 'user',
306
+ content: 'Объясни как работает эта функция'
307
+ }
308
+ ], {
309
+ projectId: 'project-id',
310
+ model: 'claude-3-5-sonnet-20241022'
311
+ });
312
+
313
+ console.log(response.content);
314
+ ```
315
+
316
+ #### `stream(messages, options, onChunk)`
317
+
318
+ Отправляет сообщения с потоковой передачей ответа.
319
+
320
+ ```javascript
321
+ await sdk.chat.stream(
322
+ messages,
323
+ {
324
+ projectId: 'project-id',
325
+ model: 'claude-3-5-sonnet-20241022',
326
+ thinking: true
327
+ },
328
+ (chunk) => {
329
+ console.log('Chunk received:', chunk);
330
+ }
331
+ );
332
+ ```
333
+
334
+ ### Thinking Support (Claude 4)
335
+
336
+ #### С thinking блоками
337
+
338
+ ```javascript
339
+ await sdk.chat.stream(
340
+ messages,
341
+ {
342
+ thinking: true,
343
+ tool_choice: { type: 'auto' } // Только auto/none с thinking
344
+ },
345
+ (eventType, data) => {
346
+ switch (eventType) {
347
+ case 'thinking_delta':
348
+ console.log('Thinking:', data.thinking);
349
+ break;
350
+ case 'text_delta':
351
+ console.log('Text:', data.text);
352
+ break;
353
+ case 'tool_use':
354
+ console.log('Tool:', data.tool_name);
355
+ break;
356
+ }
357
+ }
358
+ );
359
+ ```
360
+
361
+ ### Complex Content Support
362
+
363
+ ```javascript
364
+ const complexMessage = {
365
+ role: 'user',
366
+ content: [
367
+ { type: 'text', text: 'Анализируй этот код:' },
368
+ { type: 'text', text: 'function example() { return 42; }' }
369
+ ]
370
+ };
371
+
372
+ const response = await sdk.chat.send([complexMessage], options);
373
+ ```
374
+
375
+ ### WebSocket методы
376
+
377
+ #### `connectWebSocket()`
378
+
379
+ Подключается к WebSocket для потокового чата.
380
+
381
+ ```javascript
382
+ await sdk.chat.connectWebSocket();
383
+ ```
384
+
385
+ #### `disconnectWebSocket()`
386
+
387
+ Отключается от chat WebSocket.
388
+
389
+ ```javascript
390
+ await sdk.chat.disconnectWebSocket();
391
+ ```
392
+
393
+ ### Event методы
394
+
395
+ #### `onTextDelta(callback)`
396
+
397
+ Событие получения текстового фрагмента.
398
+
399
+ ```javascript
400
+ sdk.chat.onTextDelta((text) => {
401
+ console.log('Text delta:', text);
248
402
  });
249
403
  ```
250
404
 
405
+ #### `onThinkingDelta(callback)`
406
+
407
+ Событие получения thinking фрагмента.
408
+
409
+ ```javascript
410
+ sdk.chat.onThinkingDelta((thinking) => {
411
+ console.log('Thinking delta:', thinking);
412
+ });
413
+ ```
414
+
415
+ #### `onToolUse(callback)`
416
+
417
+ Событие использования инструмента.
418
+
419
+ ```javascript
420
+ sdk.chat.onToolUse((tool) => {
421
+ console.log('Tool used:', tool.name, tool.input);
422
+ });
423
+ ```
424
+
425
+ #### `onMessageComplete(callback)`
426
+
427
+ Событие завершения сообщения.
428
+
429
+ ```javascript
430
+ sdk.chat.onMessageComplete((message) => {
431
+ console.log('Message completed:', message);
432
+ });
433
+ ```
434
+
435
+ ### Поддерживаемые модели
436
+
437
+ ```javascript
438
+ const models = [
439
+ 'claude-3-5-sonnet-20241022',
440
+ 'claude-3-5-haiku-20241022',
441
+ 'claude-3-opus-20240229'
442
+ ];
443
+ ```
444
+
251
445
  ## ReasoningApi
252
446
 
253
- API для работы с рассуждениями.
447
+ API для работы с AI reasoning процессами. Доступен через `sdk.reasoning`.
254
448
 
255
449
  ### Методы
256
450
 
257
- #### `createReasoning(options)`
451
+ #### `create(reasoningData)`
258
452
 
259
- Создаёт новое рассуждение.
453
+ Создаёт новый reasoning процесс.
260
454
 
261
455
  ```javascript
262
- const reasoning = await sdk.reasoning.createReasoning({
456
+ const reasoning = await sdk.reasoning.create({
263
457
  projectId: 'project-id',
264
- query: 'Объясни этот проект'
458
+ query: 'Проанализируй архитектуру этого проекта'
265
459
  });
460
+
461
+ // Возвращает объект reasoning с id, projectId, query, status
462
+ ```
463
+
464
+ #### `get(reasoningId)`
465
+
466
+ Получает информацию о reasoning процессе.
467
+
468
+ ```javascript
469
+ const reasoning = await sdk.reasoning.get('reasoning-id');
470
+ ```
471
+
472
+ #### `getByProject(projectId)`
473
+
474
+ Получает все reasoning процессы проекта.
475
+
476
+ ```javascript
477
+ const reasonings = await sdk.reasoning.getByProject('project-id');
478
+ // Возвращает массив всех reasoning процессов проекта
479
+ ```
480
+
481
+ #### `start(reasoningId)`
482
+
483
+ Запускает reasoning процесс.
484
+
485
+ ```javascript
486
+ await sdk.reasoning.start('reasoning-id');
487
+ // Возвращает { message: 'Reasoning процесс запущен', id: reasoningId }
488
+ ```
489
+
490
+ #### `stop(reasoningId)`
491
+
492
+ Останавливает reasoning процесс.
493
+
494
+ ```javascript
495
+ await sdk.reasoning.stop('reasoning-id');
496
+ // Возвращает { message: 'Reasoning процесс остановлен', id: reasoningId }
497
+ ```
498
+
499
+ ### WebSocket методы
500
+
501
+ #### `connectWebSocket()`
502
+
503
+ Подключается к WebSocket для отслеживания reasoning событий.
504
+
505
+ ```javascript
506
+ await sdk.reasoning.connectWebSocket();
266
507
  ```
267
508
 
268
- #### `getReasoning(reasoningId)`
509
+ #### `disconnectWebSocket()`
510
+
511
+ Отключается от reasoning WebSocket.
512
+
513
+ ```javascript
514
+ await sdk.reasoning.disconnectWebSocket();
515
+ ```
516
+
517
+ ### Event методы
518
+
519
+ #### `onReasoningStarted(callback)`
269
520
 
270
- Получает информацию о рассуждении.
521
+ Событие начала reasoning процесса.
271
522
 
272
523
  ```javascript
273
- const reasoning = await sdk.reasoning.getReasoning('reasoning-id');
524
+ sdk.reasoning.onReasoningStarted((data) => {
525
+ console.log('Reasoning started:', data.id);
526
+ console.log('Query:', data.query);
527
+ });
274
528
  ```
275
529
 
276
- #### `connectWebSocket(reasoningId)`
530
+ #### `onReasoningProgress(callback)`
277
531
 
278
- Подключается к WebSocket для отслеживания рассуждений.
532
+ Отслеживает прогресс reasoning.
279
533
 
280
534
  ```javascript
281
- await sdk.reasoning.connectWebSocket('reasoning-id');
535
+ sdk.reasoning.onReasoningProgress((data) => {
536
+ console.log('Progress:', data.progress);
537
+ console.log('Current step:', data.currentStep);
538
+ });
282
539
  ```
283
540
 
284
- #### `startReasoning(reasoningId)`
541
+ #### `onReasoningCompleted(callback)`
285
542
 
286
- Запускает процесс рассуждения.
543
+ Событие завершения reasoning.
287
544
 
288
545
  ```javascript
289
- await sdk.reasoning.startReasoning('reasoning-id');
546
+ sdk.reasoning.onReasoningCompleted((data) => {
547
+ console.log('Reasoning completed:', data.id);
548
+ console.log('Results:', data.results);
549
+ });
290
550
  ```
291
551
 
292
- #### `on(event, callback)`
552
+ #### `onReasoningError(callback)`
293
553
 
294
- Добавляет обработчик события для рассуждений.
554
+ Событие ошибки reasoning.
295
555
 
296
556
  ```javascript
297
- sdk.reasoning.on('thinking', (data) => {
298
- console.log('Мышление:', data.content);
557
+ sdk.reasoning.onReasoningError((error) => {
558
+ console.error('Reasoning error:', error.message);
299
559
  });
560
+ ```
561
+
562
+ ### Алиасы для совместимости
563
+
564
+ ```javascript
565
+ // Новые алиасы методов (v2.5.0)
566
+ await sdk.reasoning.create(data); // основной метод
567
+ await sdk.reasoning.start(id); // основной метод
568
+ await sdk.reasoning.stop(id); // основной метод
569
+
570
+ // Старые методы (deprecated, но работают)
571
+ await sdk.reasoning.createReasoning(data); // → create()
572
+ await sdk.reasoning.startReasoning(id); // → start()
573
+ await sdk.reasoning.stopReasoning(id); // → stop()
574
+ ```
575
+
576
+ ## Helper Functions
577
+
578
+ Вспомогательные функции для работы с сообщениями и инструментами.
579
+
580
+ ### Message Helpers
581
+
582
+ #### `createComplexAssistantMessage(textContent, thinkingBlocks, toolUseBlocks)`
583
+
584
+ Создает сложное assistant сообщение с thinking и tool blocks.
585
+
586
+ ```javascript
587
+ import { createComplexAssistantMessage } from '@ai-solver/sdk';
588
+
589
+ const message = createComplexAssistantMessage(
590
+ 'Вот анализ кода:',
591
+ ['thinking block 1', 'thinking block 2'],
592
+ [{ type: 'tool_use', name: 'read_file', input: { path: 'app.js' } }]
593
+ );
594
+ ```
595
+
596
+ #### `createToolResultMessage(toolUseId, isError, content)`
597
+
598
+ Создает сообщение с результатом выполнения инструмента.
599
+
600
+ ```javascript
601
+ import { createToolResultMessage } from '@ai-solver/sdk';
602
+
603
+ const resultMessage = createToolResultMessage(
604
+ 'tool_use_123',
605
+ false,
606
+ 'File contents: console.log("Hello");'
607
+ );
608
+ ```
609
+
610
+ #### `extractThinkingBlocks(message)`
300
611
 
301
- sdk.reasoning.on('complete', (data) => {
302
- console.log('Результат:', data.content);
612
+ Извлекает thinking блоки из сообщения.
613
+
614
+ ```javascript
615
+ import { extractThinkingBlocks } from '@ai-solver/sdk';
616
+
617
+ const thinkingBlocks = extractThinkingBlocks(assistantMessage);
618
+ console.log('Thinking blocks:', thinkingBlocks);
619
+ ```
620
+
621
+ #### `extractToolUseBlocks(message)`
622
+
623
+ Извлекает tool_use блоки из сообщения.
624
+
625
+ ```javascript
626
+ import { extractToolUseBlocks } from '@ai-solver/sdk';
627
+
628
+ const toolBlocks = extractToolUseBlocks(assistantMessage);
629
+ console.log('Tool blocks:', toolBlocks);
630
+ ```
631
+
632
+ ### Tool Helpers
633
+
634
+ #### `createStandardDevelopmentTools()`
635
+
636
+ Создает стандартный набор инструментов для разработки (8 инструментов как в Cursor).
637
+
638
+ ```javascript
639
+ import { createStandardDevelopmentTools } from '@ai-solver/sdk';
640
+
641
+ const tools = createStandardDevelopmentTools();
642
+ // Возвращает массив с инструментами:
643
+ // - read_file
644
+ // - edit_file
645
+ // - create_file
646
+ // - list_directory
647
+ // - search_files
648
+ // - run_command
649
+ // - analyze_code
650
+ // - explain_code
651
+
652
+ const response = await sdk.chat.stream(messages, {
653
+ tools: tools,
654
+ tool_choice: { type: 'auto' }
303
655
  });
304
- ```
656
+ ```
657
+
658
+ ### Type Definitions
659
+
660
+ #### `ChatMessage`
661
+
662
+ ```typescript
663
+ interface ChatMessage {
664
+ role: 'user' | 'assistant' | 'system' | 'tool';
665
+ content: string | ContentBlock[];
666
+ name?: string;
667
+ tool_call_id?: string;
668
+ }
669
+ ```
670
+
671
+ #### `ContentBlock`
672
+
673
+ ```typescript
674
+ interface ContentBlock {
675
+ type: 'text' | 'tool_use' | 'tool_result' | 'thinking';
676
+ text?: string;
677
+ id?: string;
678
+ name?: string;
679
+ input?: any;
680
+ content?: any;
681
+ is_error?: boolean;
682
+ }
683
+ ```
684
+
685
+ #### `ChatOptions`
686
+
687
+ ```typescript
688
+ interface ChatOptions {
689
+ projectId?: string;
690
+ model?: string;
691
+ thinking?: boolean;
692
+ tools?: Tool[];
693
+ tool_choice?: ToolChoice;
694
+ max_tokens?: number;
695
+ temperature?: number;
696
+ stream?: boolean;
697
+ }
698
+ ```
699
+
700
+ ---
701
+
702
+ **Документация обновлена для SDK v2.5.0**
703
+ **Дата обновления:** 28 июня 2025