MCPcopy Create free account
hub / github.com/altic-dev/Pilot / POST

Function POST

src/app/api/chat/route.ts:23–181  ·  view source on GitHub ↗
(request: Request)

Source from the content-addressed store, hash-verified

21} from "@/lib/model-provider";
22
23export async function POST(request: Request) {
24 const body = await request.json();
25 const {
26 messages,
27 modelProvider,
28 }: {
29 messages: UIMessage[];
30 modelProvider?: string;
31 } = body;
32
33 // Validate and sanitize model provider
34 const provider: ModelProvider =
35 modelProvider && isProviderValid(modelProvider) ? modelProvider : "sonnet"; // default fallback
36
37 logger.info("Chat API called", {
38 messageCount: messages.length,
39 lastMessageRole: messages[messages.length - 1]?.role,
40 modelProvider: provider,
41 });
42
43 // Parse component context from the last user message if present
44 let componentContext = null;
45 let processedMessages = messages;
46
47 const lastMessage = messages[messages.length - 1];
48 if (lastMessage?.role === "user") {
49 const textPart = lastMessage.parts?.find(
50 (part: any) => part.type === "text",
51 ) as any;
52 const textContent = textPart?.text;
53
54 if (textContent) {
55 const componentMatch = textContent.match(
56 /\[SELECTED COMPONENT\]\n([\s\S]*?)\n\n\[USER MESSAGE\]\n([\s\S]*)/,
57 );
58
59 if (componentMatch) {
60 try {
61 componentContext = JSON.parse(componentMatch[1]);
62 const userMessage = componentMatch[2];
63
64 // Replace the last message with the extracted user message
65 processedMessages = [
66 ...messages.slice(0, -1),
67 {
68 ...lastMessage,
69 parts: [
70 {
71 type: "text",
72 text: userMessage,
73 },
74 ],
75 },
76 ];
77
78 logger.info("Component context extracted", {
79 componentName: componentContext.componentName,
80 hasText: !!componentContext.text,

Callers

nothing calls this directly

Calls 2

isProviderValidFunction · 0.90
getModelFunction · 0.90

Tested by

no test coverage detected