UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

49 lines (48 loc) • 2.02 kB
import { resolveReasoning } from "../../brain/reasoning.js"; import { emitTrace } from "../trace.js"; export function runReasoningSeat(input) { const { prepared, rs, taskIdRef } = input; let reasoningResolution = prepared.thinking && prepared.thinking !== "off" ? resolveReasoning(prepared.thinking, prepared.model) : undefined; const publishReasoningResolution = (r) => { reasoningResolution = r; if (taskIdRef) taskIdRef.effectiveReasoning = r; emitTrace(rs.telemetry.tracer, () => ({ kind: "reasoning.resolved", version: 1, taskId: rs.telemetry.taskId, model: prepared.model.id, requested: r.requested, effective: r.effective, graded: r.graded, clamped: r.clamped, format: r.format, endpoint: r.endpoint, ...(r.dropped === true ? { dropped: true } : {}), ts: Date.now(), })); }; if (reasoningResolution !== undefined) publishReasoningResolution(reasoningResolution); let reasoningFactsConsumed = false; const observeReasoningWireFacts = (facts) => { if (reasoningFactsConsumed) return; reasoningFactsConsumed = true; if (prepared.thinking === undefined || prepared.thinking === "off") return; const next = resolveReasoning(prepared.thinking, prepared.model, facts); const current = reasoningResolution; if (current !== undefined && current.effective === next.effective && current.graded === next.graded && current.clamped === next.clamped && current.format === next.format && current.endpoint === next.endpoint && current.dropped === next.dropped) { return; } publishReasoningResolution(next); }; return { observeReasoningWireFacts, reasoningResolution: { get current() { return reasoningResolution; } } }; }