Spaces:
Running
Running
import { useState } from 'react'; | |
import type { ProviderInfo } from '~/types/model'; | |
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, | |
model: string, | |
provider: ProviderInfo, | |
apiKeys?: Record<string, string>, | |
) => { | |
setEnhancingPrompt(true); | |
setPromptEnhanced(false); | |
const requestBody: any = { | |
message: input, | |
model, | |
provider, | |
}; | |
if (apiKeys) { | |
requestBody.apiKeys = apiKeys; | |
} | |
const response = await fetch('/api/enhancer', { | |
method: 'POST', | |
body: JSON.stringify(requestBody), | |
}); | |
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 }; | |
} | |