* trpc same data shape as `generateText`
* read `.env` file * use zustand for state management * fix peer dependency warnings by installing zod * install milvus clientmaster
parent
e0c5329ff6
commit
4f356153bb
@ -1,22 +1,40 @@
|
|||||||
import { router, publicProcedure, Validator } from "../../trpc/server";
|
import {
|
||||||
import { Type as T } from "@sinclair/typebox";
|
router,
|
||||||
|
publicProcedure,
|
||||||
|
// Validator
|
||||||
|
} from "../../trpc/server";
|
||||||
|
// import { Type as T } from "@sinclair/typebox";
|
||||||
|
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
|
||||||
|
import { generateText } from "ai";
|
||||||
|
import type { Message as UIMessage } from "ai";
|
||||||
|
import type { OtherParameters } from "./types.js";
|
||||||
|
import { env } from "../../server/env.js";
|
||||||
|
|
||||||
|
const openrouter = createOpenRouter({
|
||||||
|
apiKey: env.OPENROUTER_API_KEY,
|
||||||
|
});
|
||||||
|
|
||||||
export const chat = router({
|
export const chat = router({
|
||||||
sendMessage: publicProcedure
|
sendMessage: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
Validator(
|
(x) =>
|
||||||
T.Object({
|
x as {
|
||||||
prompt: T.String(),
|
messages: Array<UIMessage>;
|
||||||
systemPrompt: T.String(),
|
systemPrompt: string;
|
||||||
parameters: T.Object({
|
parameters: OtherParameters;
|
||||||
temperature: T.Number(),
|
},
|
||||||
max_tokens: T.Number(),
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
.mutation(async ({ input: { prompt, systemPrompt, parameters } }) => {
|
.query(async ({ input: { messages, systemPrompt, parameters } }) => {
|
||||||
console.log("Received new todo", { prompt, systemPrompt, parameters });
|
const response = await generateText({
|
||||||
return { prompt, systemPrompt, parameters };
|
model: openrouter("mistralai/mistral-nemo"),
|
||||||
|
messages: [
|
||||||
|
{ role: "system" as const, content: systemPrompt },
|
||||||
|
...messages,
|
||||||
|
],
|
||||||
|
maxSteps: 3,
|
||||||
|
tools: undefined,
|
||||||
|
...parameters,
|
||||||
|
});
|
||||||
|
return response;
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
import type { Message as UIMessage } from "ai";
|
||||||
|
import type { generateText } from "ai";
|
||||||
|
|
||||||
|
export type OtherParameters = Omit<
|
||||||
|
Parameters<typeof generateText>[0],
|
||||||
|
"model" | "messages" | "abortSignal"
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type Store = {
|
||||||
|
messages: Array<UIMessage>;
|
||||||
|
message: string;
|
||||||
|
systemPrompt: string;
|
||||||
|
parameters: OtherParameters;
|
||||||
|
loading: boolean;
|
||||||
|
setMessages: (messages: Array<UIMessage>) => void;
|
||||||
|
setMessage: (message: string) => void;
|
||||||
|
setSystemPrompt: (systemPrompt: string) => void;
|
||||||
|
setParameters: (parameters: OtherParameters) => void;
|
||||||
|
setLoading: (loading: boolean) => void;
|
||||||
|
};
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,9 @@
|
|||||||
ignoredBuiltDependencies:
|
ignoredBuiltDependencies:
|
||||||
|
- protobufjs
|
||||||
- sharp
|
- sharp
|
||||||
- workerd
|
- workerd
|
||||||
|
|
||||||
onlyBuiltDependencies:
|
onlyBuiltDependencies:
|
||||||
- '@biomejs/biome'
|
- '@biomejs/biome'
|
||||||
- esbuild
|
- esbuild
|
||||||
|
- protobufjs
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
export const env: Record<string, string | undefined> =
|
||||||
|
typeof process?.env !== "undefined"
|
||||||
|
? process.env
|
||||||
|
: import.meta && "env" in import.meta
|
||||||
|
? (
|
||||||
|
import.meta as ImportMeta & {
|
||||||
|
env: Record<string, string | undefined>;
|
||||||
|
}
|
||||||
|
).env
|
||||||
|
: {};
|
Loading…
Reference in New Issue