UNPKG

@jovan158/vantage

Version:

See and control what your coding agent does

57 lines (56 loc) • 2.22 kB
// The API formats Vantage reads, told apart by the request path. Everything // above this layer (meter, event log, replay, policy, quota) works on the // same TurnContent, whichever agent and provider it came from. import { createTurnExtractor, extractTurnFromJson, requestInfoFrom, } from "../turn.js"; import { chatParts, chatTurnFromJson, createChatExtractor, createResponsesExtractor, responsesParts, responsesRequestInfo, responsesTurnFromJson, } from "./openai.js"; import { createGeminiExtractor, geminiParts, geminiRequestInfo, geminiTurnFromJson } from "./gemini.js"; import { anthropicParts } from "./parts.js"; const anthropic = { name: "anthropic", createTurnExtractor: () => createTurnExtractor(), extractTurnFromJson: (body) => extractTurnFromJson(body), requestInfo: requestInfoFrom, parts: anthropicParts, }; const responses = { name: "openai-responses", createTurnExtractor: () => createResponsesExtractor(), extractTurnFromJson: (body) => responsesTurnFromJson(body), requestInfo: responsesRequestInfo, parts: responsesParts, }; const chat = { name: "openai-chat", createTurnExtractor: () => createChatExtractor(), extractTurnFromJson: (body) => chatTurnFromJson(body), // Chat messages have the Messages API's role/content shape. requestInfo: requestInfoFrom, parts: chatParts, }; const gemini = { name: "gemini", createTurnExtractor: (path) => createGeminiExtractor(path), extractTurnFromJson: (body, path) => geminiTurnFromJson(body, path), requestInfo: geminiRequestInfo, parts: geminiParts, }; export const FORMATS = { anthropic, "openai-responses": responses, "openai-chat": chat, gemini, }; // The format of a request that carries a model turn, or null for everything // else an agent sends (model lists, token counts, telemetry, …). export function formatForPath(path) { const p = path.split("?")[0].replace(/\/+$/, ""); if (/\/messages$/.test(p)) return anthropic; if (/\/responses$/.test(p)) return responses; if (/\/chat\/completions$/.test(p)) return chat; if (/:(?:stream)?[gG]enerateContent$/.test(p)) return gemini; return null; }