@jovan158/vantage
Version:
See and control what your coding agent does
57 lines (56 loc) • 2.22 kB
JavaScript
// 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;
}