import { useState } from 'react'; import { createScopedLogger } from '~/utils/logger'; const logger = createScopedLogger('usePromptEnhancement'); export function usePromptEnhancer() { const [enhancingPrompt, setEnhancingPrompt] = useState(false); const [promptEnhanced, setPromptEnhanced] = useState(false); const resetEnhancer = () => { setEnhancingPrompt(false); setPromptEnhanced(false); }; const enhancePrompt = async (input: string, setInput: (value: string) => void) => { setEnhancingPrompt(true); setPromptEnhanced(false); const response = await fetch('/api/enhancer', { method: 'POST', body: JSON.stringify({ message: input, }), }); const reader = response.body?.getReader(); const originalInput = input; if (reader) { const decoder = new TextDecoder(); let _input = ''; let _error; try { setInput(''); while (true) { const { value, done } = await reader.read(); if (done) { break; } const chunk = decoder.decode(value); const lines = chunk.split('\n'); for (const line of lines) { if (line.startsWith('0:')) { const content = JSON.parse(line.slice(2)); _input += content; setInput(_input); } else if (line.startsWith('e:') || line.startsWith('d:')) { // 处理元数据,如果需要的话 logger.trace('Metadata', line); } } logger.trace('Processed input', _input); } } catch (error) { _error = error; setInput(originalInput); } finally { if (_error) { logger.error(_error); } setEnhancingPrompt(false); setPromptEnhanced(true); } } }; return { enhancingPrompt, promptEnhanced, enhancePrompt, resetEnhancer }; }