solver-sdk
Version:
SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system
372 lines • 14.7 kB
TypeScript
/**
* Модели данных для чат-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