'use client'; import { UIMessage, useChat } from '@ai-sdk/react'; import ChatInput from '@/component/chat-input'; import { ChatTransport, convertToModelMessages, streamText } from 'ai'; import { createOpenAI } from '@ai-sdk/openai'; // Note: this needs a client-side OpenAI API key to work. // DO NOT USE THIS IN ENVIRONMENTS WHERE THE API KEY IS CONFIDENTIAL. const openai = createOpenAI({ apiKey: process.env.NEXT_PUBLIC_OPENAI_API_KEY, }); export default function Chat() { const { error, status, sendMessage, messages, regenerate, stop } = useChat({ transport: { sendMessages: async ({ messages, abortSignal }) => { const result = streamText({ model: openai('gpt-4o'), messages: convertToModelMessages(messages), abortSignal, }); return result.toUIMessageStream(); }, reconnectToStream: async ({ chatId }) => { throw new Error('Not implemented'); }, } satisfies ChatTransport, }); return (
{messages.map(m => (
{m.role === 'user' ? 'User: ' : 'AI: '} {m.parts.map(part => { if (part.type === 'text') { return part.text; } })}
))} {(status === 'submitted' || status === 'streaming') && (
{status === 'submitted' &&
Loading...
}
)} {error && (
An error occurred.
)} sendMessage({ text })} />
); }