import { CopilotRuntime, OpenAIAdapter, copilotRuntimeNextJSAppRouterEndpoint, } from "@copilotkit/runtime"; import { ChatPromptTemplate } from "@langchain/core/prompts"; import { ChatOpenAI } from "@langchain/openai"; const runtime = new CopilotRuntime({ actions: [ { name: "sayHello", description: "Says hello to someone.", parameters: [ { name: "name", type: "string", description: "The name of the person to say hello to.", required: true, }, ], handler: async ({ name }) => { const prompt = ChatPromptTemplate.fromMessages([ [ "system", "The user tells you their name. Say hello to the person in the most " + " ridiculous way, roasting their name.", ], ["user", "My name is {name}"], ]); const chain = prompt.pipe(new ChatOpenAI()); return chain.invoke({ name: name, }); }, }, { name: "sayGoodbye", description: "Says goodbye to someone.", parameters: [ { name: "name", type: "string", description: "The name of the person to say goodbye to.", required: true, }, ], handler: async ({ name }) => { const prompt = ChatPromptTemplate.fromMessages([ [ "system", "The user tells you their name. Say goodbye to the person in the most " + " ridiculous way, roasting their name.", ], ["user", "My name is {name}"], ]); const chain = prompt.pipe(new ChatOpenAI()); return chain.stream({ name: name, }); }, }, ], langserve: [ { chainUrl: "http://localhost:8000/retriever", name: "askAboutAnimals", description: "Always call this function if the users asks about a certain animal.", }, { chainUrl: "http://localhost:8000/agent", name: "askAboutEugeneThoughts", description: "Always call this function if the users asks about Eugene's thoughts on a certain topic.", }, ], }); const serviceAdapter = new OpenAIAdapter(); export const { GET, POST, OPTIONS } = copilotRuntimeNextJSAppRouterEndpoint({ runtime, serviceAdapter, endpoint: "/api/copilotkit/openai", debug: true, }) as any;