starchat-ui / pages /api /models.ts
matthoffner's picture
Duplicate from matthoffner/chatbot
13095e0
raw
history blame
2.11 kB
import { OPENAI_API_HOST, OPENAI_API_TYPE, OPENAI_API_VERSION, OPENAI_ORGANIZATION } from '@/utils/app/const';
import { OpenAIModel, OpenAIModelID, OpenAIModels } from '@/types/openai';
export const config = {
runtime: 'edge',
};
const handler = async (req: Request): Promise<Response> => {
try {
const { key } = (await req.json()) as {
key: string;
};
let url = `${OPENAI_API_HOST}/v1/models`;
if (OPENAI_API_TYPE === 'azure') {
url = `${OPENAI_API_HOST}/openai/deployments?api-version=${OPENAI_API_VERSION}`;
}
const response = await fetch(url, {
headers: {
'Content-Type': 'application/json',
...(OPENAI_API_TYPE === 'openai' && {
Authorization: `Bearer ${key ? key : process.env.OPENAI_API_KEY}`
}),
...(OPENAI_API_TYPE === 'azure' && {
'api-key': `${key ? key : process.env.OPENAI_API_KEY}`
}),
...((OPENAI_API_TYPE === 'openai' && OPENAI_ORGANIZATION) && {
'OpenAI-Organization': OPENAI_ORGANIZATION,
}),
},
});
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) => {
const model_name = (OPENAI_API_TYPE === 'azure') ? model.model : model.id;
for (const [key, value] of Object.entries(OpenAIModelID)) {
if (value === model_name) {
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;