mirror of
https://github.com/stackblitz/bolt.new
synced 2024-11-27 22:42:21 +00:00
72 lines
1.5 KiB
TypeScript
72 lines
1.5 KiB
TypeScript
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 };
|
|
}
|