Sink/server/api/link/ai.get.ts
2024-05-25 08:09:30 +08:00

40 lines
1.2 KiB
TypeScript

import { z } from 'zod'
import { destr } from 'destr'
export default eventHandler(async (event) => {
const url = (await getValidatedQuery(event, z.object({
url: z.string().url(),
}).parse)).url
const { cloudflare } = event.context
const { AI } = cloudflare.env
if (AI) {
const { aiPrompt, aiModel } = useRuntimeConfig(event)
const { slugRegex } = useAppConfig(event)
const messages = [
{ role: 'system', content: aiPrompt.replace('{slugRegex}', slugRegex.toString()) },
{ role: 'user', content: 'https://www.cloudflare.com/' },
{ role: 'assistant', content: '{"slug": "cloudflare"}' },
{ role: 'user', content: 'https://github.com/nuxt-hub/' },
{ role: 'assistant', content: '{"slug": "nuxt-hub"}' },
{ role: 'user', content: 'https://sink.cool/' },
{ role: 'assistant', content: '{"slug": "sink-cool"}' },
{ role: 'user', content: 'https://github.com/ccbikai/sink' },
{ role: 'assistant', content: '{"slug": "sink"}' },
{
role: 'user',
content: url,
},
]
const { response } = await AI.run(aiModel, { messages })
return destr(response)
}
else {
throw createError({ status: 501, statusText: 'AI not enabled' })
}
})