@sema-agent/core
Version:
Stateless, task-oriented AI agent core
43 lines (42 loc) • 3.23 kB
JavaScript
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 };
}