@sema-agent/core
Version:
Stateless, task-oriented AI agent core
77 lines (76 loc) • 2.98 kB
JavaScript
import { resolveModel, resolveTaskModel } from "../core/roles.js";
export function runnerRoleMap(runner) {
try {
return runner?.agentCatalog?.roles;
}
catch {
return undefined;
}
}
export function deploymentStatesSubagentModel(roles) {
const s = roles?.subagent;
if (s == null)
return false;
if (typeof s === "string")
return s !== "default";
if ("id" in s && "api" in s)
return true;
const cfg = s;
if (cfg.model !== undefined)
return cfg.model !== "default";
return cfg.select !== undefined;
}
export function deploymentSubagentThinking(roles) {
return subagentRolePresets(roles)?.thinking;
}
export function deploymentSubagentSystemPrompt(roles) {
return subagentRolePresets(roles)?.systemPrompt;
}
function subagentRolePresets(roles) {
const s = roles?.subagent;
if (s == null || typeof s === "string")
return undefined;
if ("id" in s && "api" in s)
return undefined;
return s;
}
export function childThinkingSeat(explicit, deploymentStated, parent) {
const level = explicit ?? deploymentStated ?? parent;
return level !== undefined ? { thinking: level } : {};
}
export function deploymentSubagentTierModel(deps) {
if (deps === undefined || !deploymentStatesSubagentModel(deps.roles))
return undefined;
const resolved = resolveTaskModel({ modelRole: "subagent" }, deps);
return { model: resolved.model, ...(inheritableRef(resolved.modelRef, resolved.model, deps.models) !== undefined ? { modelRef: resolved.modelRef } : {}) };
}
export function inheritedParentModel(parent, catalog) {
return typeof parent === "string" ? resolveModel(parent, catalog) : parent;
}
function inheritableRef(word, seated, catalog) {
if (typeof word !== "string")
return undefined;
try {
return resolveModel(word, catalog) === seated ? word : undefined;
}
catch {
return undefined;
}
}
export function childModelSeat(explicit, deploymentStated, parent, catalog, explicitRef) {
const inheritArm = explicit === undefined && !deploymentStated;
const model = explicit ?? (inheritArm ? inheritedParentModel(parent, catalog) : undefined);
const word = inheritArm ? parent : typeof explicit === "string" ? undefined : explicitRef;
const modelRef = model !== undefined && typeof model !== "string" ? inheritableRef(word, model, catalog) : undefined;
return {
seat: { modelRole: "subagent", ...(model !== undefined ? { model } : {}) },
...(modelRef !== undefined ? { modelRef } : {}),
};
}
export function forkModelSeat(callerModel, inheritedRef, catalog) {
const modelRef = callerModel !== undefined && typeof callerModel !== "string" ? inheritableRef(inheritedRef, callerModel, catalog) : undefined;
return {
seat: callerModel !== undefined ? { model: callerModel } : {},
...(modelRef !== undefined ? { modelRef } : {}),
};
}