diff --git a/demos/chatgpt-nextjs/package.json b/demos/chatgpt-nextjs/package.json index f0f45a55..ad3f3a1e 100644 --- a/demos/chatgpt-nextjs/package.json +++ b/demos/chatgpt-nextjs/package.json @@ -9,9 +9,10 @@ "start": "next start" }, "dependencies": { + "@ai-sdk/openai": "^0.0.33", "@ant-design/pro-chat": "^1.2.0", - "@ant-design/pro-editor": "^0.38.0", - "ai": "^2.2.31", + "@ant-design/pro-editor": "^1.2.1", + "ai": "^3.2.0", "antd": "^5.12.8", "antd-style": "^3.6.1", "next": "14.0.4", diff --git a/demos/chatgpt-nextjs/src/app/api/openai/route.ts b/demos/chatgpt-nextjs/src/app/api/openai/route.ts index 0117b65e..2f714817 100644 --- a/demos/chatgpt-nextjs/src/app/api/openai/route.ts +++ b/demos/chatgpt-nextjs/src/app/api/openai/route.ts @@ -1,14 +1,9 @@ -import { OpenAIStream, StreamingTextResponse } from 'ai'; -import OpenAI from 'openai'; +import { createOpenAI } from '@ai-sdk/openai'; +import { StreamingTextResponse, streamText } from 'ai'; export async function POST(request: Request) { const { messages = [] }: Partial<{ messages: Array }> = await request.json(); - const openai = new OpenAI({ - apiKey: 'OpenAI Key', // your openai key - baseURL: 'base url', // if u dont need change baseUrl,you can delete this line - }); - const PickMessages = messages.map((message) => { return { role: message.role, @@ -16,12 +11,15 @@ export async function POST(request: Request) { }; }); - const response = await openai.chat.completions.create({ - model: 'gpt-3.5-turbo', + const openai = createOpenAI({ + // custom settings, e.g. + apiKey: 'OpenAI Key', // your openai key + baseURL: 'base url', // if u dont need change baseUrl,you can delete this line + compatibility: 'compatible', + }); + const stream = await streamText({ + model: openai('gpt-3.5-turbo'), messages: [...PickMessages], - stream: true, }); - - const stream = OpenAIStream(response); - return new StreamingTextResponse(stream); + return new StreamingTextResponse(stream.textStream); } diff --git a/docs/guide/chatgpt.en-US.md b/docs/guide/chatgpt.en-US.md index 34fc402c..5bb298f4 100644 --- a/docs/guide/chatgpt.en-US.md +++ b/docs/guide/chatgpt.en-US.md @@ -36,17 +36,12 @@ We use Vercel's library to parse data streams without the need to manually confi > We need to combine role and content here because messages contain more content, but for ChatGPT, only these two contents are needed ```ts -import OpenAI from 'openai'; -import { OpenAIStream, StreamingTextResponse } from 'ai'; +import { createOpenAI } from '@ai-sdk/openai'; +import { StreamingTextResponse, streamText } from 'ai'; -export const POST = async (request: Request) => { +export async function POST(request: Request) { const { messages = [] }: Partial<{ messages: Array }> = await request.json(); - const openai = new OpenAI({ - apiKey: 'OpenAI Key', - baseURL: 'base url', - }); - const PickMessages = messages.map((message) => { return { role: message.role, @@ -54,15 +49,18 @@ export const POST = async (request: Request) => { }; }); - const response = await openai.chat.completions.create({ - model: 'gpt-3.5-turbo', - messages: [...messages], - stream: true, + const openai = createOpenAI({ + // custom settings, e.g. + apiKey: 'OpenAI Key', // your openai key + baseURL: 'base url', // if u dont need change baseUrl,you can delete this line + compatibility: 'compatible', }); - - const stream = OpenAIStream(response); - return new StreamingTextResponse(stream); -}; + const stream = await streamText({ + model: openai('gpt-3.5-turbo'), + messages: [...PickMessages], + }); + return new StreamingTextResponse(stream.textStream); +} ``` ## UI diff --git a/docs/guide/chatgpt.md b/docs/guide/chatgpt.md index 723b2e9d..940d51dd 100644 --- a/docs/guide/chatgpt.md +++ b/docs/guide/chatgpt.md @@ -36,17 +36,12 @@ bun add openai > 这里我们需要将 role 和 content 组合一下,因为 messages 包含的内容会更多一些,但是对于 ChatGPT 来说只需要这两个内容 ```ts -import OpenAI from 'openai'; -import { OpenAIStream, StreamingTextResponse } from 'ai'; +import { createOpenAI } from '@ai-sdk/openai'; +import { StreamingTextResponse, streamText } from 'ai'; -export const POST = async (request: Request) => { +export async function POST(request: Request) { const { messages = [] }: Partial<{ messages: Array }> = await request.json(); - const openai = new OpenAI({ - apiKey: 'OpenAI Key', - baseURL: 'base url', - }); - const PickMessages = messages.map((message) => { return { role: message.role, @@ -54,15 +49,18 @@ export const POST = async (request: Request) => { }; }); - const response = await openai.chat.completions.create({ - model: 'gpt-3.5-turbo', - messages: [...messages], - stream: true, + const openai = createOpenAI({ + // custom settings, e.g. + apiKey: 'OpenAI Key', // your openai key + baseURL: 'base url', // if u dont need change baseUrl,you can delete this line + compatibility: 'compatible', }); - - const stream = OpenAIStream(response); - return new StreamingTextResponse(stream); -}; + const stream = await streamText({ + model: openai('gpt-3.5-turbo'), + messages: [...PickMessages], + }); + return new StreamingTextResponse(stream.textStream); +} ``` ## 界面