Issues with Streaming API Responses to Frontend on AWS using Vercel's AI SDK
Unanswered
Mahati Singh posted this in #help-forum
I am currently working on a project where I use Vercel's AI SDK to stream API responses to the frontend of my application. Everything works perfectly when I run the application locally, however, I encounter problems when deploying it on AWS(Amplify). I get the response but it is not streamed.
https://github.com/vercel/ai/tree/main/examples/next-langchain
Below is the code I have for my API route and UI:
API route
Frontend Code
'use client';
https://github.com/vercel/ai/tree/main/examples/next-langchain
Below is the code I have for my API route and UI:
API route
import { StreamingTextResponse, LangChainStream, Message } from 'ai';
import { ChatOpenAI } from 'langchain/chat_models/openai';
import { AIMessage, HumanMessage } from 'langchain/schema';
export const runtime = 'edge';
export async function POST(req: Request) {
const { messages } = await req.json();
const { stream, handlers } = LangChainStream();
const llm = new ChatOpenAI({
streaming: true,
});
llm
.call(
(messages as Message[]).map(m =>
m.role == 'user'
? new HumanMessage(m.content)
: new AIMessage(m.content),
),
{},
[handlers],
)
.catch(console.error);
return new StreamingTextResponse(stream);
}Frontend Code
'use client';
import { useChat } from 'ai/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div className="mx-auto w-full max-w-md py-24 flex flex-col stretch">
{messages.length > 0
? messages.map(m => (
<div key={m.id} className="whitespace-pre-wrap">
{m.role === 'user' ? 'User: ' : 'AI: '}
{m.content}
</div>
))
: null}
<form onSubmit={handleSubmit}>
<input
className="fixed w-full max-w-md bottom-0 border border-gray-300 rounded mb-8 shadow-xl p-2"
value={input}
placeholder="Say something..."
onChange={handleInputChange}
/>
</form>
</div>
);
}