UNPKG

solver-sdk

Version:

SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system

372 lines 14.7 kB
/** * Модели данных для чат-API с поддержкой Anthropic Extended Thinking */ import { ANTHROPIC_CONSTANTS } from '../../constants/anthropic'; import type { AnthropicStopReason } from '../../types/anthropic-interfaces.js'; /** * Конфигурация расширенного мышления (соответствует API Anthropic) */ export interface ThinkingConfig { /** Тип мышления - всегда 'enabled' для активации */ type: 'enabled'; /** Бюджет токенов для мышления (минимум 1024) */ budget_tokens: number; } /** * Схема входных данных для инструмента */ export interface ToolInputSchema { type: 'object'; properties: Record<string, any>; required?: string[]; } /** * Определение инструмента для модели */ export interface Tool { /** Название инструмента */ name: string; /** Описание функциональности инструмента */ description: string; /** Схема входных параметров */ input_schema: ToolInputSchema; } /** * Настройки выбора инструментов * Согласно документации Anthropic с thinking поддерживается ТОЛЬКО 'any' */ export type ToolChoice = 'auto' | 'none' | 'any' | { type: 'auto'; } | { type: 'none'; } | { type: 'any'; } | { type: 'tool'; name: string; }; /** * Блок содержимого в сообщении */ export interface ContentBlock { /** Тип блока содержимого */ type: 'text' | 'thinking' | 'redacted_thinking' | 'tool_use' | 'tool_result' | 'server_tool_use' | 'web_search_tool_result' | 'web_fetch_tool_result' | 'code_execution_tool_result' | 'text_editor_code_execution_tool_result'; /** Текстовое содержимое (для type: 'text') */ text?: string; /** Содержимое мышления (для type: 'thinking') */ thinking?: string; /** Криптографическая подпись для верификации (для type: 'thinking') */ signature?: string; /** Зашифрованные данные (для type: 'redacted_thinking') */ data?: string; /** ID вызова инструмента (для type: 'tool_use' | 'server_tool_use') */ id?: string; /** Название инструмента (для type: 'tool_use' | 'server_tool_use') */ name?: string; /** Входные параметры инструмента (для type: 'tool_use' | 'server_tool_use') */ input?: Record<string, any>; /** ID вызова инструмента для результата (для type: 'tool_result' | '*_tool_result') */ tool_use_id?: string; /** Содержимое результата инструмента (для type: 'tool_result' | '*_tool_result') */ content?: string | ContentBlock[] | Array<{ type: 'web_search_result'; url: string; title: string; encrypted_content: string; page_age?: string | null; }> | { stdout?: string; stderr?: string; content?: string; url?: string; title?: string; }; /** Флаг ошибки в результате инструмента (для type: 'tool_result') */ is_error?: boolean; } /** * Сообщение в чате с поддержкой complex content */ export interface ChatMessage { /** Роль отправителя сообщения */ role: 'system' | 'user' | 'assistant'; /** Содержимое сообщения - строка или массив блоков содержимого */ content: string | ContentBlock[]; /** Имя отправителя (опционально) */ name?: string; } /** * Опции для запроса в чат */ export interface ChatOptions { /** Название модели (по умолчанию 'claude-sonnet-4-5-20250929') */ model?: string; /** Температура генерации (0-1, не поддерживается с thinking) */ temperature?: number; /** Максимальное количество токенов в ответе */ max_tokens?: number; /** Последовательности для остановки генерации */ stop_sequences?: string[]; /** Конфигурация расширенного мышления */ thinking?: ThinkingConfig | boolean; /** Список доступных инструментов */ tools?: Tool[]; /** Настройки выбора инструментов (ТОЛЬКО 'any' поддерживается с thinking согласно документации Anthropic) */ tool_choice?: ToolChoice; /** Бета-функции (для чередующегося мышления) */ beta?: typeof ANTHROPIC_CONSTANTS.INTERLEAVED_THINKING_BETA; /** Регион API Anthropic */ region?: 'us-east-1' | 'eu-west-1' | 'ap-southeast-2'; /** Системная инструкция */ system?: string; /** ID сокета для HTTP соединения (устарело) */ socketId?: string; /** Флаг потоковой передачи */ stream?: boolean; /** top_p параметр (от 0.95 до 1 с thinking) */ top_p?: number; /** ID проекта для выполнения инструментов */ projectId?: string; /** Режим работы клиента (ask/learn/agent) */ mode?: 'ask' | 'learn' | 'agent'; /** Уровень обучающегося (для learn, свободный текст) */ learnerLevel?: string; /** Цель обучения (для learn, свободный текст) */ learningGoal?: string; /** Дополнительные опции модели */ [key: string]: any; } /** * Ответ модели на запрос в чате */ export interface ChatResponse { /** ID сообщения */ id: string; /** Тип ответа */ type: 'message'; /** Роль - всегда 'assistant' */ role: 'assistant'; /** Содержимое ответа - массив блоков */ content: ContentBlock[]; /** Модель, которая сгенерировала ответ */ model: string; /** Причина завершения генерации */ stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null; /** Последовательность остановки, если применимо */ stop_sequence: string | null; /** Информация об использовании токенов */ usage?: { input_tokens: number; output_tokens: number; cache_read_input_tokens?: number; cache_creation_input_tokens?: number; server_tool_use?: { web_search_requests?: number; code_execution_requests?: number; }; }; } /** * Дельта события для потоковой передачи мышления */ export interface ThinkingDelta { type: 'thinking_delta'; thinking: string; } /** * Дельта события для потоковой передачи текста */ export interface TextDelta { type: 'text_delta'; text: string; } /** * Дельта события для потоковой передачи подписи */ export interface SignatureDelta { type: 'signature_delta'; signature: string; } /** * Дельта события для потоковой передачи зашифрованного мышления */ export interface RedactedThinkingDelta { type: 'redacted_thinking_delta'; data: string; } /** * Дельта события для потоковой передачи JSON входных данных инструмента */ export interface InputJsonDelta { type: 'input_json_delta'; partial_json: string; } /** * Объединенный тип дельта событий */ export type ContentDelta = ThinkingDelta | TextDelta | SignatureDelta | RedactedThinkingDelta | InputJsonDelta; /** * 💓 НОВОЕ: Heartbeat событие для поддержания соединения */ export interface HeartbeatEvent { type: 'heartbeat'; timestamp: number; status: 'generating' | 'processing'; } /** * 🚀 НОВОЕ: Processing Started событие для early streaming */ export interface ProcessingStartedEvent { type: 'processing_started'; timestamp: number; estimated_duration_seconds?: number; complexity?: 'low' | 'medium' | 'high'; } /** * 🔄 НОВОЕ: Resume Started событие для continuation */ export interface ResumeStartedEvent { type: 'resume_started'; originalRequestId: string; partialContentLength: number; timestamp: number; } /** * 📋 TODO статус * * СТРОГО 3 статуса в kebab-case (соответствует Native VS Code): * - not-started: Задача не начата * - in-progress: Задача выполняется (макс. 1 одновременно) * - completed: Задача завершена */ export type TodoStatus = 'not-started' | 'in-progress' | 'completed'; /** * 📋 НОВОЕ: TODO Progress информация */ export interface TodoProgress { /** Количество завершенных задач */ completed: number; /** Общее количество задач */ total: number; /** Описание текущей задачи (content или activeForm) */ current: string; } /** * 📋 TODO item (SDK format для клиента) * * Backend конвертирует из Claude format: * - Claude: {id: number, title, description, status} * - SDK: {id: string, content, activeForm, status} */ export interface TodoItem { /** Уникальный ID (конвертирован из number в string) */ id: string; /** Описание задачи (конвертировано из title) */ content: string; /** Текущий статус (kebab-case) */ status: TodoStatus; /** Дополнительная информация (конвертировано из description) */ activeForm?: string; } /** * 📋 TODO Update событие * * Формат совместим с Native VS Code API */ export interface TodoUpdateEvent { type: 'todo_update'; /** Операция: write (обновить) или read (прочитать) */ operation: 'write' | 'read'; /** Список задач */ todos: TodoItem[]; /** ID tool_use который создал это событие */ tool_use_id: string; /** Прогресс выполнения (ОБЯЗАТЕЛЬНОЕ поле с v9.2.0+) */ progress: TodoProgress; } /** * Чанк потоковой передачи ответа от модели (соответствует официальному Anthropic API) */ export interface ChatStreamChunk { /** Тип события (официальные события Anthropic API + кастомные) */ type: 'message_start' | 'content_block_start' | 'content_block_delta' | 'content_block_stop' | 'message_delta' | 'message_stop' | 'ping' | 'error' | 'pause_turn' | 'heartbeat' | 'processing_started' | 'resume_started' | 'todo_update'; /** Данные сообщения (для message_start) */ message?: { id: string; type: string; role: string; model: string; content: []; usage?: { input_tokens: number; }; stop_reason?: AnthropicStopReason | null; stop_sequence?: string | null; }; /** Индекс блока содержимого (для content_block_* событий) */ index?: number; /** Блок содержимого для content_block_start */ content_block?: ContentBlock; /** Дельта изменений для content_block_delta */ delta?: ContentDelta; /** Дельта изменения сообщения (для message_delta) */ message_delta?: { stop_reason?: AnthropicStopReason | null; stop_sequence?: string | null; [key: string]: any; }; /** Данные ошибки для error событий */ error?: { type: string; message: string; code?: string; httpStatus?: number; provider?: string; details?: any; retryable?: boolean; retryAfter?: number; }; } /** * Опции для потоковой передачи */ export interface ChatStreamOptions extends ChatOptions { /** Обработчик получения каждого токена */ onToken?: (token: string) => void; /** Обработчик получения полного ответа */ onComplete?: (text: string) => void; /** Обработчик ошибок */ onError?: (error: Error) => void; /** Токен авторизации для HTTP соединения (устарело) */ authToken?: string; /** ID сессии для отслеживания контекста между запросами */ sessionId?: string; /** Флаг принудительной потоковой передачи (требуется когда max_tokens > 21333) */ stream?: true; /** Автоматически выполнять инструменты через backend (требует projectId) */ autoExecuteTools?: boolean; /** Callback для обработки tool_use (альтернатива autoExecuteTools) */ onToolUse?: (toolUse: any, projectId: string) => Promise<any>; } /** * Ответ на запрос потоковой передачи с thinking */ export interface ThinkingStreamResponse { /** Статус операции */ status: string; /** Сообщение */ message: string; /** ID сокета для получения событий */ socketId: string; /** Провайдер модели */ provider: string; /** Модель */ model: string; /** Включен ли режим thinking */ thinking: boolean; } /** * Тип обработчика событий */ export type EventHandler = (eventName: string, eventData: any) => void; //# sourceMappingURL=models.d.ts.map