Ctrl K
ComunidadGuías…

lib/assistant-reasoning.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import type { AssistantMessage } from "./assistant-types";

/** Keep assistant reasoning traces as compact as code-agent reasoning events. */
export const ASSISTANT_REASONING_MAX_CHARS = 2_000;

export interface AssistantReasoning {
  text: string;
  durationMs: number;
}

export function appendAssistantReasoning(text: string, delta: string): string {
  if (text.length >= ASSISTANT_REASONING_MAX_CHARS) return text;
  return (text + delta).slice(0, ASSISTANT_REASONING_MAX_CHARS);
}

/** Read the durable reasoning trace attached to an assistant message. */
export function assistantMessageReasoning(
  message: AssistantMessage | null | undefined,
): AssistantReasoning | null {
  if (!message || message.role !== "assistant") return null;
  const raw = message.metadata?.reasoning;
  if (!raw || typeof raw !== "object") return null;

  const text = (raw as { text?: unknown }).text;
  const durationMs = (raw as { durationMs?: unknown }).durationMs;
  if (typeof text !== "string" || !text.trim()) return null;

  return {
    text: text.slice(0, ASSISTANT_REASONING_MAX_CHARS),
    durationMs:
      typeof durationMs === "number" && Number.isFinite(durationMs)
        ? Math.max(0, durationMs)
        : 0,
  };
}