import { OpenAIModel, OpenAIModelID, OpenAIModels } from '@/types'; import { OPENAI_API_HOST } from '@/utils/app/const'; export const config = { runtime: 'edge', }; const handler = async (req: Request): Promise => { try { const { key } = (await req.json()) as { key: string; }; const response = await fetch(`${OPENAI_API_HOST}/v1/models`, { headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key ? key : process.env.OPENAI_API_KEY}`, }, }); if (response.status === 401) { return new Response(response.body, { status: 500, headers: response.headers, }); } else if (response.status !== 200) { console.error( `OpenAI API returned an error ${ response.status }: ${await response.text()}`, ); throw new Error('OpenAI API returned an error'); } const json = await response.json(); const models: OpenAIModel[] = json.data .map((model: any) => { for (const [key, value] of Object.entries(OpenAIModelID)) { if (value === model.id) { return { id: model.id, name: OpenAIModels[value].name, }; } } }) .filter(Boolean); return new Response(JSON.stringify(models), { status: 200 }); } catch (error) { console.error(error); return new Response('Error', { status: 500 }); } }; export default handler;