solver-sdk
Version:
SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system
179 lines • 8.94 kB
TypeScript
/**
* API для работы с чатом с поддержкой Anthropic Extended Thinking
*/
import { IHttpClient } from '../../interfaces/http-client';
import { ChatService } from './interfaces';
import { ChatMessage, ChatOptions, ChatResponse, ChatStreamChunk, ChatStreamOptions } from './models';
import { ChatCancelMethods } from './cancel-methods';
/**
* Опции для ChatApi
*/
interface ChatApiOptions {
debug?: boolean | 'verbose' | 'silent' | 'error' | 'warn' | 'info' | 'debug';
streamLogging?: {
sseEvents?: boolean;
streamChunks?: boolean;
eventCallbacks?: boolean;
importantOnly?: boolean;
};
}
export * from './models';
export * from './interfaces';
/**
* 🔧 WorkAI: Persistent SSE Connection Interface
* Represents a long-lived SSE connection for chat session
*/
export interface PersistentSSEConnection {
id: string;
sessionId: string;
isConnected: boolean;
lastPing: number;
createdAt: number;
waitForReady(): Promise<void>;
close(reason?: string): Promise<void>;
on(event: 'ping' | 'error' | 'close' | 'reconnecting', callback: (data?: any) => void): void;
off(event: string, callback: (data?: any) => void): void;
}
/**
* API для работы с чатом с поддержкой Anthropic Extended Thinking
*/
export declare class ChatApi extends ChatCancelMethods implements ChatService {
private options;
/** Logger для ChatApi с настраиваемыми уровнями */
private readonly logger;
/**
* Создает новый экземпляр API для работы с чатом
* @param {IHttpClient} httpClient HTTP клиент
* @param {ChatApiOptions} options Опции логирования (опционально)
*/
constructor(httpClient: IHttpClient, options?: ChatApiOptions);
/**
* 🔧 WorkAI: Выполняет streaming GET запрос используя нативный fetch
* Используется для persistent SSE connections, где axios не работает
*
* @param url - Полный URL для запроса
* @param headers - HTTP заголовки
* @returns Promise<Response> с ReadableStream body
*
* Best practice from undici docs: Node 18+ has global fetch
*/
private fetchStream;
/**
* Отправляет сообщение в чат и получает ответ от модели
* @param {ChatMessage[]} messages Массив сообщений для отправки
* @param {ChatOptions} [options] Дополнительные параметры
* @returns {Promise<ChatResponse>} Ответ модели
*/
chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
/**
* Алиас для метода chat для совместимости с другими SDK
* @param {ChatMessage[]} messages Массив сообщений для отправки
* @param {ChatOptions} [options] Дополнительные параметры
* @returns {Promise<ChatResponse>} Ответ модели
*/
chatCompletion(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
/**
* Проверяет доступность API чата
* @returns {Promise<boolean>} Результат проверки
*/
checkAvailability(): Promise<boolean>;
/**
* Отправляет сообщение в чат и получает ответ от модели
* с автоматическим переключением между регионами при ошибках перегрузки
* @param {ChatMessage[]} messages Массив сообщений для отправки
* @param {ChatOptions} [options] Дополнительные параметры
* @returns {Promise<ChatResponse>} Ответ модели
*/
chatWithRegionFailover(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
/**
* Отправляет одиночный запрос к модели с автоматическим переключением регионов
* @param {string} prompt Запрос к модели
* @param {ChatOptions} [options] Дополнительные параметры
* @returns {Promise<string>} Текстовый ответ модели
*/
sendPromptWithRegionFailover(prompt: string, options?: ChatOptions): Promise<string>;
/**
* Потоковый чат с поддержкой thinking
* @param {ChatMessage[]} messages Массив сообщений для отправки
* @param {ChatStreamOptions} [options] Дополнительные параметры
* @returns {AsyncGenerator<ChatStreamChunk>} Асинхронный генератор чанков ответа
*/
streamChat(messages: ChatMessage[], options?: ChatStreamOptions & {
onEvent?: (eventType: string, data: any) => void;
socketId?: string;
}): AsyncGenerator<ChatStreamChunk>;
/**
* Отправляет одиночный запрос в потоковом режиме
* @param {string} prompt Запрос к модели
* @param {ChatStreamOptions} [options] Дополнительные параметры
* @returns {AsyncGenerator<ChatStreamChunk>} Асинхронный генератор чанков ответа
*/
streamPrompt(prompt: string, options?: ChatStreamOptions): AsyncGenerator<ChatStreamChunk>;
/**
* 🔧 WorkAI: Send continuation via persistent SSE connection
* Uses existing connection instead of creating new one
*/
sendContinuationViaPersistent(connection: PersistentSSEConnection, messages: ChatMessage[], options?: ChatStreamOptions): AsyncGenerator<ChatStreamChunk>;
/**
* Отправляет continuation запрос для interleaved thinking
*/
sendContinuation(messages: ChatMessage[], options?: ChatStreamOptions): AsyncGenerator<ChatStreamChunk>;
/**
* 🔄 Продолжает прерванный ответ (resume после timeout)
* @param {string} originalRequestId ID оригинального запроса
* @param {ChatMessage[]} messages История сообщений
* @param {string} partialText Частично полученный текст
* @param {ChatStreamOptions} [options] Дополнительные параметры
* @returns {AsyncGenerator<ChatStreamChunk>} Асинхронный генератор чанков
*/
resumeChat(originalRequestId: string, messages: ChatMessage[], partialText: string, options?: ChatStreamOptions): AsyncGenerator<ChatStreamChunk>;
/**
* Валидирует опции чата согласно документации Anthropic
* @private
*/
private validateChatOptions;
/**
* Подготавливает параметры запроса для отправки на сервер
* @param {ChatMessage[]} messages Сообщения
* @param {ChatOptions} options Опции
* @returns {Record<string, any>} Параметры запроса
*/
private buildRequestParams;
/**
* Конвертирует ответ API в ChatStreamChunk (только официальные поля Anthropic API)
* @private
*/
private convertToStreamChunk;
/**
* Обрабатывает автоматическое выполнение инструментов
* @private
*/
private handleAutoToolExecution;
/**
* 🔌 Pre-subscribe к SSE для получения continuation response
*
* Решает race condition: клиент подключается к SSE ПЕРЕД отправкой tool_result,
* гарантируя получение continuation response.
*
* Flow:
* 1. await subscribeToResponse(requestId) - подключение к SSE
* 2. await sendContinuation(messages) - отправка tool_result
* 3. for await (const chunk of subscription) - получение response
*
* @param clientRequestId - ID запроса клиента (передается в tool_result)
* @param options - Опции подключения
* @returns AsyncGenerator SSE events
*/
subscribeToResponse(clientRequestId: string, options: {
projectId: string;
onSubscribed?: () => void;
persistentConnection?: PersistentSSEConnection;
}): AsyncGenerator<ChatStreamChunk>;
/**
* 🔧 WorkAI: Open persistent SSE connection for chat session
*/
openPersistentSSE(sessionId: string, clientRequestId: string, options: {
projectId: string;
}): Promise<PersistentSSEConnection>;
}
//# sourceMappingURL=index.d.ts.map