Spaces:
Running
Running
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; | |
} | |
_input += decoder.decode(value); | |
logger.trace('Set input', _input); | |
setInput(_input); | |
} | |
} catch (error) { | |
_error = error; | |
setInput(originalInput); | |
} finally { | |
if (_error) { | |
logger.error(_error); | |
} | |
setEnhancingPrompt(false); | |
setPromptEnhanced(true); | |
setTimeout(() => { | |
setInput(_input); | |
}); | |
} | |
} | |
}; | |
return { enhancingPrompt, promptEnhanced, enhancePrompt, resetEnhancer }; | |
} | |