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