Add support for Azure OpenAI (#495)
This commit is contained in:
+19
-11
@@ -1,7 +1,7 @@
|
||||
import { Message } from '@/types/chat';
|
||||
import { OpenAIModel } from '@/types/openai';
|
||||
|
||||
import { OPENAI_API_HOST } from '../app/const';
|
||||
import { OPENAI_API_HOST, OPENAI_API_TYPE, OPENAI_API_VERSION, OPENAI_ORGANIZATION } from '../app/const';
|
||||
|
||||
import {
|
||||
ParsedEvent,
|
||||
@@ -29,17 +29,26 @@ export const OpenAIStream = async (
|
||||
key: string,
|
||||
messages: Message[],
|
||||
) => {
|
||||
const res = await fetch(`${OPENAI_API_HOST}/v1/chat/completions`, {
|
||||
let url = `${OPENAI_API_HOST}/v1/chat/completions`;
|
||||
if (OPENAI_API_TYPE === 'azure') {
|
||||
url = `${OPENAI_API_HOST}/openai/deployments/${model.id}/chat/completions?api-version=${OPENAI_API_VERSION}`;
|
||||
}
|
||||
const res = await fetch(url, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${key ? key : process.env.OPENAI_API_KEY}`,
|
||||
...(process.env.OPENAI_ORGANIZATION && {
|
||||
'OpenAI-Organization': process.env.OPENAI_ORGANIZATION,
|
||||
...(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,
|
||||
}),
|
||||
},
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
model: model.id,
|
||||
...(OPENAI_API_TYPE === 'openai' && {model: model.id}),
|
||||
messages: [
|
||||
{
|
||||
role: 'system',
|
||||
@@ -80,13 +89,12 @@ export const OpenAIStream = async (
|
||||
if (event.type === 'event') {
|
||||
const data = event.data;
|
||||
|
||||
if (data === '[DONE]') {
|
||||
controller.close();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const json = JSON.parse(data);
|
||||
if (json.choices[0].finish_reason != null) {
|
||||
controller.close();
|
||||
return;
|
||||
}
|
||||
const text = json.choices[0].delta.content;
|
||||
const queue = encoder.encode(text);
|
||||
controller.enqueue(queue);
|
||||
|
||||
Reference in New Issue
Block a user