Download packages/ai/src/api/github-copilot-headers.ts from SaylorTwift/pi: direct link, hf CLI and curl.
- Browser
- Download file 1.18 kB
-
https://huggingface.co/SaylorTwift/pi/resolve/main/packages/ai/src/api/github-copilot-headers.ts
- Command line
-
hf download hf://SaylorTwift/pi/packages/ai/src/api/github-copilot-headers.ts
-
curl -L -o github-copilot-headers.ts https://huggingface.co/SaylorTwift/pi/resolve/main/packages/ai/src/api/github-copilot-headers.ts
1.18 kB
| import type { Message } from "../types.ts"; | |
| // Copilot expects X-Initiator to indicate whether the request is user-initiated | |
| // or agent-initiated (e.g. follow-up after assistant/tool messages). | |
| export function inferCopilotInitiator(messages: Message[]): "user" | "agent" { | |
| const last = messages[messages.length - 1]; | |
| return last && last.role !== "user" ? "agent" : "user"; | |
| } | |
| // Copilot requires Copilot-Vision-Request header when sending images | |
| export function hasCopilotVisionInput(messages: Message[]): boolean { | |
| return messages.some((msg) => { | |
| if (msg.role === "user" && Array.isArray(msg.content)) { | |
| return msg.content.some((c) => c.type === "image"); | |
| } | |
| if (msg.role === "toolResult" && Array.isArray(msg.content)) { | |
| return msg.content.some((c) => c.type === "image"); | |
| } | |
| return false; | |
| }); | |
| } | |
| export function buildCopilotDynamicHeaders(params: { | |
| messages: Message[]; | |
| hasImages: boolean; | |
| }): Record<string, string> { | |
| const headers: Record<string, string> = { | |
| "X-Initiator": inferCopilotInitiator(params.messages), | |
| "Openai-Intent": "conversation-edits", | |
| }; | |
| if (params.hasImages) { | |
| headers["Copilot-Vision-Request"] = "true"; | |
| } | |
| return headers; | |
| } | |