legends810/testingnew
0
1import { useState } from 'react';2import type { ProviderInfo } from '~/types/model';3import { createScopedLogger } from '~/utils/logger';4 5const logger = createScopedLogger('usePromptEnhancement');6 7export function usePromptEnhancer() {8 const [enhancingPrompt, setEnhancingPrompt] = useState(false);9 const [promptEnhanced, setPromptEnhanced] = useState(false);10 11 const resetEnhancer = () => {12 setEnhancingPrompt(false);13 setPromptEnhanced(false);14 };15 16 const enhancePrompt = async (17 input: string,18 setInput: (value: string) => void,19 model: string,20 provider: ProviderInfo,21 apiKeys?: Record<string, string>,22 ) => {23 setEnhancingPrompt(true);24 setPromptEnhanced(false);25 26 const requestBody: any = {27 message: input,28 model,29 provider,30 };31 32 if (apiKeys) {33 requestBody.apiKeys = apiKeys;34 }35 36 const response = await fetch('/api/enhancer', {37 method: 'POST',38 body: JSON.stringify(requestBody),39 });40 41 const reader = response.body?.getReader();42 43 const originalInput = input;44 45 if (reader) {46 const decoder = new TextDecoder();47 48 let _input = '';49 let _error;50 51 try {52 setInput('');53 54 while (true) {55 const { value, done } = await reader.read();56 57 if (done) {58 break;59 }60 61 _input += decoder.decode(value);62 63 logger.trace('Set input', _input);64 65 setInput(_input);66 }67 } catch (error) {68 _error = error;69 setInput(originalInput);70 } finally {71 if (_error) {72 logger.error(_error);73 }74 75 setEnhancingPrompt(false);76 setPromptEnhanced(true);77 78 setTimeout(() => {79 setInput(_input);80 });81 }82 }83 };84 85 return { enhancingPrompt, promptEnhanced, enhancePrompt, resetEnhancer };86}87 