From 4f356153bb891bbbb2dd8f7ef7e4d823f1a537b2 Mon Sep 17 00:00:00 2001 From: Avraham Sakal Date: Mon, 30 Jun 2025 08:44:49 -0400 Subject: [PATCH] * trpc same data shape as `generateText` * read `.env` file * use zustand for state management * fix peer dependency warnings by installing zod * install milvus client --- hono-entry.ts | 1 + package.json | 12 +- pages/chat/+Page.tsx | 81 +++++- pages/chat/trpc.ts | 48 +++- pages/chat/types.ts | 20 ++ pnpm-lock.yaml | 635 ++++++++++++++++++++++++++++++++++++----- pnpm-workspace.yaml | 2 + server/env.ts | 10 + server/trpc-handler.ts | 1 + trpc/client.ts | 1 + 10 files changed, 710 insertions(+), 101 deletions(-) create mode 100644 pages/chat/types.ts create mode 100644 server/env.ts diff --git a/hono-entry.ts b/hono-entry.ts index ed7dd8d..c8fce2b 100644 --- a/hono-entry.ts +++ b/hono-entry.ts @@ -1,3 +1,4 @@ +import "dotenv/config.js"; import { authjsHandler, authjsSessionMiddleware, diff --git a/package.json b/package.json index ac3a888..347ecd4 100644 --- a/package.json +++ b/package.json @@ -10,26 +10,30 @@ "deploy": "run-s build deploy:wrangler" }, "dependencies": { - "@ai-sdk/openai": "2.0.0-beta.2", - "@ai-sdk/react": "2.0.0-beta.3", + "@ai-sdk/react": "^1.2.12", "@auth/core": "^0.40.0", "@compiled/react": "^0.18.6", "@hono/node-server": "^1.14.4", "@mantine/core": "^8.1.1", "@mantine/hooks": "^8.1.1", + "@openrouter/ai-sdk-provider": "^0.7.2", "@sinclair/typebox": "^0.34.37", "@trpc/client": "^11.4.2", "@trpc/server": "^11.4.2", "@universal-middleware/core": "^0.4.8", "@universal-middleware/hono": "^0.4.14", "@vitejs/plugin-react": "^4.6.0", - "ai": "5.0.0-beta.3", + "@zilliz/milvus2-sdk-node": "^2.5.11", + "ai": "^4.3.16", + "dotenv": "^17.0.0", "hono": "^4.8.2", "react": "^19.1.0", "react-dom": "^19.1.0", "vike": "^0.4.235", "vike-cloudflare": "^0.1.7", - "vike-react": "^0.6.4" + "vike-react": "^0.6.4", + "zod": "^3.25.67", + "zustand": "^5.0.6" }, "devDependencies": { "@biomejs/biome": "1.9.4", diff --git a/pages/chat/+Page.tsx b/pages/chat/+Page.tsx index 55db79e..7b59176 100644 --- a/pages/chat/+Page.tsx +++ b/pages/chat/+Page.tsx @@ -1,34 +1,76 @@ import { JsonInput, Tabs, Textarea } from "@mantine/core"; -import { useState } from "react"; +import { trpc } from "../../trpc/client"; +import { create } from "zustand"; +import type { Message as UIMessage } from "ai"; +import type { OtherParameters, Store } from "./types.js"; const defaultSystemPrompt = `You are a helpful assistant that answers questions based on the provided context. If you don't know the answer, just say that you don't know, don't try to make up an answer.`; const defaultParameters = { temperature: 0.5, max_tokens: 100, -}; +} as OtherParameters; + +const useStore = create()((set) => ({ + messages: [], + message: "", + systemPrompt: defaultSystemPrompt, + parameters: defaultParameters, + loading: false, + setMessages: (messages) => set({ messages }), + setMessage: (message) => set({ message }), + setSystemPrompt: (systemPrompt) => set({ systemPrompt }), + setParameters: (parameters) => set({ parameters }), + setLoading: (loading) => set({ loading }), +})); export default function ChatPage() { - const [prompt, setPrompt] = useState(""); - const [systemPrompt, setSystemPrompt] = useState(defaultSystemPrompt); - const [parameters, setParameters] = useState(defaultParameters); + const messages = useStore((state) => state.messages); + const message = useStore((state) => state.message); + const systemPrompt = useStore((state) => state.systemPrompt); + const parameters = useStore((state) => state.parameters); + const loading = useStore((state) => state.loading); + const setMessages = useStore((state) => state.setMessages); + const setMessage = useStore((state) => state.setMessage); + const setSystemPrompt = useStore((state) => state.setSystemPrompt); + const setParameters = useStore((state) => state.setParameters); + const setLoading = useStore((state) => state.setLoading); return ( - + - Prompt + Message System Prompt Parameters - + +