Spaces:
Running
Running
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', | |
}); | |
} | |
} | |