chat fab
This commit is contained in:
@@ -6,13 +6,14 @@ import { eq, and } from 'drizzle-orm'
|
||||
import { env } from '~/env'
|
||||
import { db } from '~/server/db'
|
||||
import { chatSession, chatMessage } from '~/server/dbschema/schema'
|
||||
import { servTrpc } from '~/app/_trpc/ServerClient'
|
||||
import { scheduleMeeting } from '~/app/actions/scheduleMeeting'
|
||||
|
||||
const openai = createOpenAI({ apiKey: env.OPENAI_API_KEY })
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const { userId } = await auth()
|
||||
if (!userId) return new Response('Unauthorized', { status: 401 })
|
||||
if (userId == null) return new Response('Unauthorized', { status: 401 })
|
||||
|
||||
const { messages, sessionId } = (await req.json()) as {
|
||||
messages: UIMessage[]
|
||||
@@ -29,6 +30,8 @@ export async function POST(req: Request) {
|
||||
|
||||
if (!session) return new Response('Session not found', { status: 404 })
|
||||
|
||||
const systemPrompt = await servTrpc.chat.getSystemPrompt() || 'You are an AI recruiter assistant.'
|
||||
|
||||
// Save the latest user message
|
||||
const lastMessage = messages[messages.length - 1]
|
||||
if (lastMessage?.role === 'user') {
|
||||
@@ -43,16 +46,7 @@ export async function POST(req: Request) {
|
||||
|
||||
const result = streamText({
|
||||
model: openai('gpt-4o'),
|
||||
system: `You are an AI recruiter assistant on Gregor Lohaus's personal portfolio website.
|
||||
Your role is to help visitors learn about Gregor's background, skills, and experience, and to schedule meetings.
|
||||
|
||||
About Gregor:
|
||||
- Fullstack developer specialising in TypeScript, React, Next.js, and modern web technologies
|
||||
- Experienced with Drizzle ORM, tRPC, PostgreSQL, server components, and the T3 stack
|
||||
- Also experienced with React Native, Expo, Java/Spring, gRPC, AWS, and Linux/Debian server administration
|
||||
- Open to new opportunities and collaboration
|
||||
|
||||
Be professional, friendly, and concise. When a visitor wants to schedule a meeting, collect the necessary details (preferred date/time, duration, and optionally their name/email) and use the scheduleMeeting tool.`,
|
||||
system: systemPrompt,
|
||||
messages: await convertToModelMessages(messages),
|
||||
tools: {
|
||||
scheduleMeeting: tool({
|
||||
|
||||
Reference in New Issue
Block a user