| import { type ActionFunctionArgs } from '@remix-run/cloudflare'; | |
| import { StreamingTextResponse, parseStreamPart } from 'ai'; | |
| import { streamText } from '~/lib/.server/llm/stream-text'; | |
| import { stripIndents } from '~/utils/stripIndent'; | |
| const encoder = new TextEncoder(); | |
| const decoder = new TextDecoder(); | |
| export async function action(args: ActionFunctionArgs) { | |
| return enhancerAction(args); | |
| } | |
| async function enhancerAction({ context, request }: ActionFunctionArgs) { | |
| const { message } = await request.json<{ message: string }>(); | |
| try { | |
| const result = await streamText( | |
| [ | |
| { | |
| role: 'user', | |
| content: stripIndents` | |
| I want you to improve the user prompt that is wrapped in \`<original_prompt>\` tags. | |
| IMPORTANT: Only respond with the improved prompt and nothing else! | |
| <original_prompt> | |
| ${message} | |
| </original_prompt> | |
| `, | |
| }, | |
| ], | |
| context.cloudflare.env, | |
| ); | |
| const transformStream = new TransformStream({ | |
| transform(chunk, controller) { | |
| const processedChunk = decoder | |
| .decode(chunk) | |
| .split('\n') | |
| .filter((line) => line !== '') | |
| .map(parseStreamPart) | |
| .map((part) => part.value) | |
| .join(''); | |
| controller.enqueue(encoder.encode(processedChunk)); | |
| }, | |
| }); | |
| const transformedStream = result.toAIStream().pipeThrough(transformStream); | |
| return new StreamingTextResponse(transformedStream); | |
| } catch (error) { | |
| console.log(error); | |
| throw new Response(null, { | |
| status: 500, | |
| statusText: 'Internal Server Error', | |
| }); | |
| } | |
| } | |