UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API

192 lines 7.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processStreamChunk = processStreamChunk; exports.handleStreamError = handleStreamError; /** * Обрабатывает чанк данных из потока SSE */ function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) { // Проверяем формат строки if (!line.startsWith('data:')) { return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false }; } const data = line.slice(5).trim(); // Проверяем завершение потока if (data === '[DONE]') { if (onToken) { onToken(''); } return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, chunk: { text: '', isComplete: true, thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined, thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined }, isDone: true }; } try { const parsedData = JSON.parse(data); // Обрабатываем типы событий по актуальному API Anthropic if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') { const newIsInThinkingBlock = true; if (onToken) { onToken('[THINKING_START]'); } return { isInThinkingBlock: newIsInThinkingBlock, thinkingContent, textContent, thinkingSignature, chunk: { text: '[THINKING_START]', isComplete: false, isThinking: true }, isDone: false }; } else if (parsedData.type === 'content_block_stop' && isInThinkingBlock) { const newIsInThinkingBlock = false; if (onToken) { onToken('[THINKING_END]'); } return { isInThinkingBlock: newIsInThinkingBlock, thinkingContent, textContent, thinkingSignature, chunk: { text: '[THINKING_END]', isComplete: false, isThinking: true }, isDone: false }; } else if (parsedData.type === 'content_block_delta') { // Получаем тип дельты из данных события const deltaType = parsedData.delta?.type; // Обрабатываем дельту в зависимости от типа if (deltaType === 'text_delta') { const text = parsedData.delta?.text || ''; const newTextContent = textContent + text; if (onToken) { onToken(text); } return { isInThinkingBlock, thinkingContent, textContent: newTextContent, thinkingSignature, chunk: { text, isComplete: false, isThinking: false }, isDone: false }; } else if (deltaType === 'thinking_delta') { const thinking = parsedData.delta?.thinking || ''; const newThinkingContent = thinkingContent + thinking; if (onToken) { onToken(thinking); } return { isInThinkingBlock: true, thinkingContent: newThinkingContent, textContent, thinkingSignature, chunk: { text: thinking, isComplete: false, isThinking: true }, isDone: false }; } else if (deltaType === 'signature_delta') { const signature = parsedData.delta?.signature || ''; return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature: signature, isDone: false }; } else if (deltaType === 'input_json_delta') { const jsonData = parsedData.delta?.input_json || ''; if (onToken) { onToken(jsonData); } // Убираем свойство isToolUse, добавляем метаданные return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, chunk: { text: jsonData, isComplete: false, isThinking: false }, isDone: false }; } } // Возвращаем без изменений, если тип события не обрабатывается return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false }; } catch (e) { console.error('Ошибка при парсинге данных:', e); return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false }; } } /** * Обрабатывает ошибку из потока */ function handleStreamError(error) { // Проверяем наличие ошибки географических ограничений const errorObj = error; const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) && errorObj.message && (errorObj.message.includes('ограничен в вашем регионе') || errorObj.message.includes('Request not allowed') || errorObj.message.includes('forbidden')); if (isGeoRestriction) { console.error('\n=============================================='); console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC'); console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси'); console.error('⚠️ Anthropic API доступен только из определенных регионов'); console.error('=============================================='); // Обогащаем объект ошибки информацией о географических ограничениях errorObj.type = 'geo_restriction'; } return errorObj; } //# sourceMappingURL=stream-utils.js.map