UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

77 lines (76 loc) • 2.98 kB
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 } : {}), }; }