UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

43 lines (42 loc) • 3.23 kB
import { readMember } from "../core/thrown-value.js"; export const ROUTE_CREDENTIAL_SOURCES = Object.freeze(["per-model", "deployment-config", "absent"]); export const ROUTE_CARRIERS = Object.freeze(["apiKey", "header"]); export const ROUTE_CARRIER_BAGS = Object.freeze(["options", "model", "config"]); export const REQUEST_ROOT_ORIGINS = Object.freeze(["model", "deployment", "lane-default"]); export function requestRouteOf(credential, root) { const carrier = credential.apiKey !== undefined ? "apiKey" : credential.headersBorne === true ? "header" : undefined; return { credentialSource: credential.source, ...(carrier !== undefined ? { carrier } : {}), ...(credential.headersBorne === true && credential.carrierBag !== undefined ? { carrierBag: credential.carrierBag } : {}), root, }; } export const ROUTE_CREDENTIAL_PAIRING = Object.freeze([ { credentialSource: "per-model", carrier: "apiKey", credentialKnobs: ["getApiKeyAndHeaders().apiKey"], pairsWith: "Model.baseUrl" }, { credentialSource: "per-model", carrier: "apiKey", carrierBag: "options", credentialKnobs: ["getApiKeyAndHeaders().apiKey", "getApiKeyAndHeaders().headers"], pairsWith: "Model.baseUrl" }, { credentialSource: "per-model", carrier: "header", carrierBag: "options", credentialKnobs: ["getApiKeyAndHeaders().headers"], pairsWith: "Model.baseUrl" }, { credentialSource: "per-model", carrier: "header", carrierBag: "model", credentialKnobs: ["Model.headers"], pairsWith: "Model.baseUrl" }, { credentialSource: "deployment-config", carrier: "apiKey", credentialKnobs: ["config.apiKey"], pairsWith: "config.baseUrl" }, { credentialSource: "deployment-config", carrier: "apiKey", carrierBag: "config", credentialKnobs: ["config.apiKey", "config.headers"], pairsWith: "config.baseUrl" }, { credentialSource: "deployment-config", carrier: "header", carrierBag: "config", credentialKnobs: ["config.headers"], pairsWith: "config.baseUrl" }, { credentialSource: "absent", credentialKnobs: [] }, ].map((row) => Object.freeze({ ...row, credentialKnobs: Object.freeze([...row.credentialKnobs]) }))); export function routePairingRowOf(route) { return ROUTE_CREDENTIAL_PAIRING.find((row) => row.credentialSource === route.credentialSource && row.carrier === route.carrier && row.carrierBag === route.carrierBag); } const ROOT_ORIGIN_SET = new Set(REQUEST_ROOT_ORIGINS); export function admittedRequestRoute(value) { if (value === null || typeof value !== "object") return undefined; const credentialSource = readMember(value, "credentialSource"); const carrier = readMember(value, "carrier"); const carrierBag = readMember(value, "carrierBag"); const root = readMember(value, "root"); if (!ROOT_ORIGIN_SET.has(root)) return undefined; const row = ROUTE_CREDENTIAL_PAIRING.find((r) => r.credentialSource === credentialSource && r.carrier === carrier && r.carrierBag === carrierBag); if (row === undefined) return undefined; return { credentialSource: row.credentialSource, ...(row.carrier !== undefined ? { carrier: row.carrier } : {}), ...(row.carrierBag !== undefined ? { carrierBag: row.carrierBag } : {}), root: root }; }