chatbot-ui/app/api/chat/google/route.ts

65 lines
1.9 KiB
TypeScript

import { checkApiKey, getServerProfile } from "@/lib/server/server-chat-helpers"
import { ChatSettings } from "@/types"
import { GoogleGenerativeAI } from "@google/generative-ai"
export const runtime = "edge"
export async function POST(request: Request) {
const json = await request.json()
const { chatSettings, messages } = json as {
chatSettings: ChatSettings
messages: any[]
}
try {
const profile = await getServerProfile()
checkApiKey(profile.google_gemini_api_key, "Google")
const genAI = new GoogleGenerativeAI(profile.google_gemini_api_key || "")
const googleModel = genAI.getGenerativeModel({ model: chatSettings.model })
const lastMessage = messages.pop()
const chat = googleModel.startChat({
history: messages,
generationConfig: {
temperature: chatSettings.temperature
}
})
const response = await chat.sendMessageStream(lastMessage.parts)
const encoder = new TextEncoder()
const readableStream = new ReadableStream({
async start(controller) {
for await (const chunk of response.stream) {
const chunkText = chunk.text()
controller.enqueue(encoder.encode(chunkText))
}
controller.close()
}
})
return new Response(readableStream, {
headers: { "Content-Type": "text/plain" }
})
} catch (error: any) {
let errorMessage = error.message || "An unexpected error occurred"
const errorCode = error.status || 500
if (errorMessage.toLowerCase().includes("api key not found")) {
errorMessage =
"Google Gemini API Key not found. Please set it in your profile settings."
} else if (errorMessage.toLowerCase().includes("api key not valid")) {
errorMessage =
"Google Gemini API Key is incorrect. Please fix it in your profile settings."
}
return new Response(JSON.stringify({ message: errorMessage }), {
status: errorCode
})
}
}