You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import {
|
|
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({
|
|
sendMessage: publicProcedure
|
|
.input(
|
|
(x) =>
|
|
x as {
|
|
messages: Array<UIMessage>;
|
|
systemPrompt: string;
|
|
parameters: OtherParameters;
|
|
},
|
|
)
|
|
.query(async ({ input: { messages, systemPrompt, parameters } }) => {
|
|
const response = await generateText({
|
|
model: openrouter("mistralai/mistral-nemo"),
|
|
messages: [
|
|
{ role: "system" as const, content: systemPrompt },
|
|
...messages,
|
|
],
|
|
maxSteps: 3,
|
|
tools: undefined,
|
|
...parameters,
|
|
});
|
|
return response;
|
|
}),
|
|
});
|