UNPKG

agentfootprint

Version:

The explainable agent framework — backtrack a wrong answer to the exact context that caused it (evidence, not guesses). Built on footprintjs.

44 lines • 1.96 kB
import { thinkingHandlerFor } from './thinkingHandlerFor.js'; /** Plain data only; handler functions stay in the chart's build-time closure. */ export function tagThinkingResponse(response, answeredBy) { return response.rawThinking === undefined ? response : { ...response, rawThinking: { answeredBy, raw: response.rawThinking }, }; } /** Decode only with the handler belonging to the transport that answered. */ export function dispatchThinkingHandler(id, handlers, untagged) { return { id, normalize(value) { if (typeof value === 'object' && value !== null && 'answeredBy' in value && typeof value.answeredBy === 'string' && 'raw' in value && Object.hasOwn(handlers, value.answeredBy)) { return handlers[value.answeredBy]?.normalize(value.raw) ?? []; } if (untagged !== undefined) return untagged.normalize(value); throw new TypeError('This thinking does not say which side answered, so no matching handler can read it.'); }, }; } /** Keep explicit override/null intent while routing declared handlers by list index. */ export function thinkingForProviders(provider, providers = [], override) { if (override === null) return undefined; const base = override ?? thinkingHandlerFor(provider); if (providers.length === 0) return base; const handlers = Object.fromEntries(providers.map((entry, index) => [String(index), override ?? thinkingHandlerFor(entry)])); if (base === undefined && Object.values(handlers).every((handler) => handler === undefined)) return undefined; return dispatchThinkingHandler(`selected-${Object.values(handlers) .map((handler) => handler?.id ?? 'none') .join('-or-')}`, handlers, base); } //# sourceMappingURL=dispatch.js.map