{"version":3,"file":"run.mjs","sources":["../../src/run.ts"],"sourcesContent":["// src/run.ts\nimport './instrumentation';\nimport { ObservabilityCallbackHandler } from '@illuma-ai/observability-langchain';\nimport { Command, isGraphInterrupt } from '@langchain/langgraph';\nimport { PromptTemplate } from '@langchain/core/prompts';\nimport { RunnableLambda } from '@langchain/core/runnables';\nimport { AzureChatOpenAI, ChatOpenAI } from '@langchain/openai';\nimport { BaseCallbackHandler } from '@langchain/core/callbacks/base';\nimport type {\n  MessageContentComplex,\n  BaseMessage,\n} from '@langchain/core/messages';\nimport type { StringPromptValue } from '@langchain/core/prompt_values';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type * as t from '@/types';\nimport {\n  createCompletionTitleRunnable,\n  createTitleRunnable,\n} from '@/utils/title';\nimport { createTokenCounter, encodingForModel } from '@/utils/tokens';\nimport { GraphEvents, Callback, TitleMethod } from '@/common';\nimport { MultiAgentGraph } from '@/graphs/MultiAgentGraph';\nimport { StandardGraph } from '@/graphs/Graph';\nimport { HandlerRegistry } from '@/events';\nimport { executeHooks } from '@/hooks';\nimport type { HookRegistry } from '@/hooks';\nimport { ToolOutputReferenceRegistry } from '@/tools/toolOutputReferences';\nimport { isOpenAILike } from '@/utils/llm';\nimport { isPresent } from '@/utils/misc';\n\nfunction findLastMessageOfType(\n  messages: BaseMessage[],\n  type: string\n): BaseMessage | undefined {\n  for (let i = messages.length - 1; i >= 0; i--) {\n    if (messages[i].getType() === type) {\n      return messages[i];\n    }\n  }\n  return undefined;\n}\n\nfunction extractPromptText(message: BaseMessage): string {\n  const content = message.content;\n  if (typeof content === 'string') {\n    return content;\n  }\n  if (!Array.isArray(content)) {\n    return String(content);\n  }\n  const parts: string[] = [];\n  for (const block of content) {\n    if (\n      typeof block === 'object' &&\n      'type' in block &&\n      block.type === 'text' &&\n      'text' in block &&\n      typeof block.text === 'string'\n    ) {\n      parts.push(block.text);\n    }\n  }\n  return parts.join('\\n');\n}\n\nexport const defaultOmitOptions = new Set([\n  'stream',\n  'thinking',\n  'streaming',\n  'maxTokens',\n  'clientOptions',\n  'thinkingConfig',\n  'thinkingBudget',\n  'includeThoughts',\n  'maxOutputTokens',\n  'additionalModelRequestFields',\n]);\n\nexport class Run<_T extends t.BaseGraphState> {\n  id: string;\n  private tokenCounter?: t.TokenCounter;\n  private handlerRegistry?: HandlerRegistry;\n  private hookRegistry?: HookRegistry;\n  private toolOutputRegistry?: ToolOutputReferenceRegistry;\n  private indexTokenCountMap?: Record<string, number>;\n  graphRunnable?: t.CompiledStateWorkflow;\n  Graph: StandardGraph | MultiAgentGraph | undefined;\n  returnContent: boolean = false;\n  private skipCleanup: boolean = false;\n  private _originalCallbacksSnapshot?: t.ProvidedCallbacks;\n\n  private constructor(config: Partial<t.RunConfig>) {\n    const runId = config.runId ?? '';\n    if (!runId) {\n      throw new Error('Run ID not provided');\n    }\n\n    this.id = runId;\n    this.tokenCounter = config.tokenCounter;\n    this.indexTokenCountMap = config.indexTokenCountMap;\n\n    const handlerRegistry = new HandlerRegistry();\n\n    if (config.customHandlers) {\n      for (const [eventType, handler] of Object.entries(\n        config.customHandlers\n      )) {\n        handlerRegistry.register(eventType, handler);\n      }\n    }\n\n    this.handlerRegistry = handlerRegistry;\n    /**\n     * Capture hookRegistry BEFORE graph compilation so it propagates into\n     * any ToolNode the graph builds during createWorkflow(). createLegacyGraph\n     * threads `this.hookRegistry` onto the graph instance via Graph.hookRegistry\n     * before compile, which Graph.createToolNodeForAgent reads when constructing\n     * each ToolNode.\n     */\n    this.hookRegistry = config.hooks;\n    /**\n     * Same lifecycle for the tool-output reference registry: build it\n     * here (when enabled) and let createLegacyGraph / createMultiAgentGraph\n     * thread it onto the graph before compile so every ToolNode sees the\n     * same instance.\n     */\n    if (config.toolOutputReferences?.enabled === true) {\n      this.toolOutputRegistry = new ToolOutputReferenceRegistry({\n        maxOutputSize: config.toolOutputReferences.maxOutputSize,\n        maxTotalSize: config.toolOutputReferences.maxTotalSize,\n      });\n    }\n\n    if (!config.graphConfig) {\n      throw new Error('Graph config not provided');\n    }\n\n    /** Handle different graph types */\n    if (config.graphConfig.type === 'multi-agent') {\n      this.graphRunnable = this.createMultiAgentGraph(config.graphConfig);\n      if (this.Graph) {\n        this.Graph.handlerRegistry = handlerRegistry;\n      }\n    } else {\n      /** Default to legacy graph for 'standard' or undefined type */\n      this.graphRunnable = this.createLegacyGraph(config.graphConfig);\n      if (this.Graph) {\n        this.Graph.compileOptions =\n          config.graphConfig.compileOptions ?? this.Graph.compileOptions;\n        this.Graph.handlerRegistry = handlerRegistry;\n      }\n    }\n\n    this.returnContent = config.returnContent ?? false;\n    this.skipCleanup = config.skipCleanup ?? false;\n  }\n\n  private createLegacyGraph(\n    config: t.LegacyGraphConfig | t.StandardGraphConfig\n  ): t.CompiledStateWorkflow {\n    let agentConfig: t.AgentInputs;\n    let signal: AbortSignal | undefined;\n\n    /** Check if this is a multi-agent style config (has agents array) */\n    if ('agents' in config && Array.isArray(config.agents)) {\n      if (config.agents.length === 0) {\n        throw new Error('At least one agent must be provided');\n      }\n      agentConfig = config.agents[0];\n      signal = config.signal;\n    } else {\n      /** Legacy path: build agent config from llmConfig */\n      const {\n        type: _type,\n        llmConfig,\n        signal: legacySignal,\n        tools = [],\n        ...agentInputs\n      } = config as t.LegacyGraphConfig;\n      const { provider, ...clientOptions } = llmConfig;\n\n      agentConfig = {\n        ...agentInputs,\n        tools,\n        provider,\n        clientOptions,\n        agentId: 'default',\n      };\n      signal = legacySignal;\n    }\n\n    const standardGraph = new StandardGraph({\n      signal,\n      runId: this.id,\n      agents: [agentConfig],\n      tokenCounter: this.tokenCounter,\n      indexTokenCountMap: this.indexTokenCountMap,\n    });\n    /** Propagate compile options from graph config */\n    standardGraph.compileOptions = config.compileOptions;\n    if (this.hookRegistry) {\n      standardGraph.hookRegistry = this.hookRegistry;\n    }\n    if (this.toolOutputRegistry) {\n      standardGraph.toolOutputRegistry = this.toolOutputRegistry;\n    }\n    this.Graph = standardGraph;\n    return standardGraph.createWorkflow();\n  }\n\n  private createMultiAgentGraph(\n    config: t.MultiAgentGraphConfig\n  ): t.CompiledStateWorkflow {\n    const { agents, edges, compileOptions, resumeFromAgentId } = config;\n\n    const multiAgentGraph = new MultiAgentGraph({\n      runId: this.id,\n      agents,\n      edges,\n      resumeFromAgentId,\n      tokenCounter: this.tokenCounter,\n      indexTokenCountMap: this.indexTokenCountMap,\n    });\n\n    if (compileOptions != null) {\n      multiAgentGraph.compileOptions = compileOptions;\n    }\n\n    if (this.hookRegistry) {\n      multiAgentGraph.hookRegistry = this.hookRegistry;\n    }\n    if (this.toolOutputRegistry) {\n      multiAgentGraph.toolOutputRegistry = this.toolOutputRegistry;\n    }\n    this.Graph = multiAgentGraph;\n    return multiAgentGraph.createWorkflow();\n  }\n\n  static async create<T extends t.BaseGraphState>(\n    config: t.RunConfig\n  ): Promise<Run<T>> {\n    /** Create tokenCounter if indexTokenCountMap is provided but tokenCounter is not */\n    if (config.indexTokenCountMap && !config.tokenCounter) {\n      const gc = config.graphConfig;\n      const clientOpts =\n        'agents' in gc ? gc.agents[0]?.clientOptions : gc.clientOptions;\n      const model = (clientOpts as { model?: string } | undefined)?.model ?? '';\n      config.tokenCounter = await createTokenCounter(encodingForModel(model));\n    }\n    return new Run<T>(config);\n  }\n\n  getRunMessages(): BaseMessage[] | undefined {\n    if (!this.Graph) {\n      throw new Error(\n        'Graph not initialized. Make sure to use Run.create() to instantiate the Run.'\n      );\n    }\n    return this.Graph.getRunMessages();\n  }\n\n  /**\n   * Manually trigger cleanup of heavy state (messages, config, etc.).\n   * Call this after all continuations are complete when using skipCleanup=true.\n   */\n  clearState(): void {\n    if (this.Graph) {\n      this.Graph.clearHeavyState();\n    }\n  }\n\n  /**\n   * Returns the normalized finish/stop reason from the last LLM invocation.\n   * Delegates to the underlying Graph instance.\n   */\n  getLastFinishReason(): string | undefined {\n    if (this.Graph && 'getLastFinishReason' in this.Graph) {\n      return (this.Graph as StandardGraph).getLastFinishReason();\n    }\n    return undefined;\n  }\n\n  /**\n   * Returns the ID of the last agent that produced output in a multi-agent graph.\n   * Used by auto-continuation to determine which agent's context to preserve\n   * when a response is truncated after an agent handoff.\n   * Returns undefined for single-agent graphs.\n   */\n  getLastActiveAgentId(): string | undefined {\n    if (this.Graph && this.Graph instanceof MultiAgentGraph) {\n      // Last entry in the run's participating agent set is the most-recent\n      // active agent. Derived from contentData step trail rather than\n      // a tracked field — same observation surface, fewer state slots.\n      const ids = this.Graph.getActiveAgentIds();\n      return ids.length > 0 ? ids[ids.length - 1] : undefined;\n    }\n    return undefined;\n  }\n\n  /**\n   * Creates a custom event callback handler that intercepts custom events\n   * and processes them through our handler registry instead of EventStreamCallbackHandler\n   */\n  private createCustomEventCallback() {\n    return async (\n      eventName: string,\n      data: unknown,\n      runId: string,\n      tags?: string[],\n      metadata?: Record<string, unknown>\n    ): Promise<void> => {\n      const handler = this.handlerRegistry?.getHandler(eventName);\n      if (handler && this.Graph) {\n        return await handler.handle(\n          eventName,\n          data as\n            | t.StreamEventData\n            | t.ModelEndData\n            | t.RunStep\n            | t.RunStepDeltaEvent\n            | t.MessageDeltaEvent\n            | t.ReasoningDeltaEvent\n            | { result: t.ToolEndEvent },\n          metadata,\n          this.Graph\n        );\n      }\n    };\n  }\n\n  /**\n   * Processes the graph stream for a given input.\n   *\n   * @param inputs - Either the initial state (IState) for a new run, or a\n   *   Command (e.g., `new Command({ resume: ... })`) to resume from an interrupt.\n   * @param config - Runnable config with version and optional run_id.\n   * @param streamOptions - Optional stream event callbacks and options.\n   */\n  async processStream(\n    inputs: t.IState | Command,\n    config: Partial<RunnableConfig> & { version: 'v1' | 'v2'; run_id?: string },\n    streamOptions?: t.EventStreamOptions\n  ): Promise<MessageContentComplex[] | undefined> {\n    if (this.graphRunnable == null) {\n      throw new Error(\n        'Run not initialized. Make sure to use Run.create() to instantiate the Run.'\n      );\n    }\n    if (!this.Graph) {\n      throw new Error(\n        'Graph not initialized. Make sure to use Run.create() to instantiate the Run.'\n      );\n    }\n\n    this.Graph.resetValues(streamOptions?.keepContent);\n\n    /** Custom event callback to intercept and handle custom events */\n    const customEventCallback = this.createCustomEventCallback();\n\n    // IMPORTANT: snapshot the ORIGINAL caller-provided callbacks once and\n    // reuse that snapshot on every invocation. Previously we read\n    // `config.callbacks` on each call and concat'd onto it — but the same\n    // `config` object is passed back to processStream() on HITL resume, so\n    // the previous run's appended callbacks became the new \"base\" and we\n    // ended up stacking duplicate stream + custom handlers on every cycle.\n    // That produced N-times duplicated message_delta events on the SSE\n    // stream (character-interleaved text in the UI after tool approval).\n    if (!this._originalCallbacksSnapshot) {\n      this._originalCallbacksSnapshot =\n        (config.callbacks as t.ProvidedCallbacks) ?? [];\n    }\n    const baseCallbacks = this._originalCallbacksSnapshot;\n    const streamCallbacks = streamOptions?.callbacks\n      ? this.getCallbacks(streamOptions.callbacks)\n      : [];\n\n    const customHandler = BaseCallbackHandler.fromMethods({\n      [Callback.CUSTOM_EVENT]: customEventCallback,\n    });\n    customHandler.awaitHandlers = true;\n\n    config.callbacks = baseCallbacks\n      .concat(streamCallbacks)\n      .concat(customHandler);\n\n    const illumaSecretKey = process.env.ILLUMA_SECRET_KEY;\n    const illumaPublicKey = process.env.ILLUMA_PUBLIC_KEY;\n    const illumaBaseUrl = process.env.ILLUMA_BASE_URL;\n\n    if (\n      isPresent(illumaSecretKey) &&\n      isPresent(illumaPublicKey) &&\n      isPresent(illumaBaseUrl)\n    ) {\n      try {\n        const userId = config.configurable?.user_id;\n        const sessionId = config.configurable?.thread_id;\n        const handler = new ObservabilityCallbackHandler({\n          clientOptions: {\n            secretKey: illumaSecretKey!,\n            publicKey: illumaPublicKey!,\n            baseUrl: illumaBaseUrl!,\n          },\n          userId,\n          sessionId,\n          metadata: {\n            messageId: this.id,\n            parentMessageId: config.configurable?.requestBody?.parentMessageId,\n          },\n        });\n        config.callbacks = (\n          (config.callbacks as t.ProvidedCallbacks) ?? []\n        ).concat([handler]);\n      } catch {\n        // Gracefully skip if @illuma-ai/observability-node is not installed\n      }\n    }\n\n    if (!this.id) {\n      throw new Error('Run ID not provided');\n    }\n\n    config.run_id = this.id;\n    config.configurable = Object.assign(config.configurable ?? {}, {\n      run_id: this.id,\n    });\n\n    const threadId = config.configurable.thread_id as string | undefined;\n\n    if (this.hookRegistry != null) {\n      await executeHooks({\n        registry: this.hookRegistry,\n        input: {\n          hook_event_name: 'RunStart',\n          runId: this.id,\n          threadId,\n          agentId: this.Graph.defaultAgentId,\n          messages: (inputs as { messages?: BaseMessage[] }).messages ?? [],\n        },\n        sessionId: this.id,\n      });\n\n      const messages = (inputs as { messages?: BaseMessage[] }).messages ?? [];\n      const lastHuman = findLastMessageOfType(messages, 'human');\n      if (lastHuman != null) {\n        const promptResult = await executeHooks({\n          registry: this.hookRegistry,\n          input: {\n            hook_event_name: 'UserPromptSubmit',\n            runId: this.id,\n            threadId,\n            agentId: this.Graph.defaultAgentId,\n            prompt: extractPromptText(lastHuman),\n          },\n          sessionId: this.id,\n        });\n        if (\n          promptResult.decision === 'deny' ||\n          promptResult.decision === 'ask'\n        ) {\n          this.hookRegistry.clearSession(this.id);\n          config.callbacks = undefined;\n          return undefined;\n        }\n      }\n    }\n\n    const stream = this.graphRunnable.streamEvents(inputs, config, {\n      raiseError: true,\n      /**\n       * Prevent EventStreamCallbackHandler from processing custom events.\n       * Custom events are already handled via our createCustomEventCallback()\n       * which routes them through the handlerRegistry.\n       * Without this flag, EventStreamCallbackHandler throws errors when\n       * custom events are dispatched for run IDs not in its internal map\n       * (due to timing issues in parallel execution or after run cleanup).\n       */\n      ignoreCustomEvent: true,\n    });\n\n    try {\n      for await (const event of stream) {\n        const { data, metadata, ...info } = event;\n\n        const eventName: t.EventName = info.event;\n\n        /** Skip custom events as they're handled by our callback */\n        if (eventName === GraphEvents.ON_CUSTOM_EVENT) {\n          continue;\n        }\n\n        const handler = this.handlerRegistry?.getHandler(eventName);\n        if (handler) {\n          await handler.handle(eventName, data, metadata, this.Graph);\n        }\n      }\n\n      if (this.hookRegistry?.hasHookFor('Stop', this.id) === true) {\n        const inputMessages =\n          (inputs as { messages?: BaseMessage[] }).messages ?? [];\n        await executeHooks({\n          registry: this.hookRegistry,\n          input: {\n            hook_event_name: 'Stop',\n            runId: this.id,\n            threadId,\n            agentId: this.Graph.defaultAgentId,\n            messages: this.Graph.getRunMessages() ?? inputMessages,\n            stopHookActive: false,\n          },\n          sessionId: this.id,\n        }).catch(() => {\n          /* Stop hook errors must not masquerade as stream failures */\n        });\n      }\n    } catch (e) {\n      // GraphInterrupt is expected when interrupt() fires (HITL approval flow).\n      // Exit gracefully so the host can check hasInterrupts() and resume.\n      if (isGraphInterrupt(e)) {\n        return undefined;\n      }\n      if (this.hookRegistry?.hasHookFor('StopFailure', this.id) === true) {\n        const runMessages = this.Graph.getRunMessages() ?? [];\n        await executeHooks({\n          registry: this.hookRegistry,\n          input: {\n            hook_event_name: 'StopFailure',\n            runId: this.id,\n            threadId,\n            agentId: this.Graph.defaultAgentId,\n            error: e instanceof Error ? e.message : String(e),\n            lastAssistantMessage: findLastMessageOfType(runMessages, 'ai'),\n          },\n          sessionId: this.id,\n        }).catch(() => {\n          /* swallow hook errors — original error must propagate */\n        });\n      }\n      throw e;\n    } finally {\n      this.hookRegistry?.clearSession(this.id);\n    }\n\n    /**\n     * Break the reference chain that keeps heavy data alive via\n     * LangGraph's internal `__pregel_scratchpad.currentTaskInput` →\n     * `@langchain/core` `RunTree.extra[lc:child_config]` →\n     * Node.js `AsyncLocalStorage` context captured by timers/promises.\n     *\n     * Without this, base64-encoded images/PDFs in message content remain\n     * reachable from lingering `Timeout` handles until GC runs.\n     */\n    if (!this.skipCleanup) {\n      if (\n        (config.configurable as Record<string, unknown> | undefined) != null\n      ) {\n        for (const key of Object.getOwnPropertySymbols(config.configurable)) {\n          const val = config.configurable[key as unknown as string] as\n            | Record<string, unknown>\n            | undefined;\n          if (\n            val != null &&\n            typeof val === 'object' &&\n            'currentTaskInput' in val\n          ) {\n            (val as Record<string, unknown>).currentTaskInput = undefined;\n          }\n          delete config.configurable[key as unknown as string];\n        }\n        config.configurable = undefined;\n      }\n      config.callbacks = undefined;\n    }\n\n    const result = this.returnContent\n      ? this.Graph.getContentParts()\n      : undefined;\n\n    if (!this.skipCleanup) {\n      this.Graph.clearHeavyState();\n    }\n    return result;\n  }\n\n  private createSystemCallback<K extends keyof t.ClientCallbacks>(\n    clientCallbacks: t.ClientCallbacks,\n    key: K\n  ): t.SystemCallbacks[K] {\n    return ((...args: unknown[]) => {\n      const clientCallback = clientCallbacks[key];\n      if (clientCallback && this.Graph) {\n        (clientCallback as (...args: unknown[]) => void)(this.Graph, ...args);\n      }\n    }) as t.SystemCallbacks[K];\n  }\n\n  /**\n   * Checks whether the graph was interrupted (e.g., by HITL tool approval).\n   * Call after processStream() returns to determine if the graph is waiting\n   * for a resume via Command({ resume }).\n   *\n   * Requires a checkpointer to be configured — without one, interrupt state\n   * is not persisted and this always returns false.\n   */\n  async hasInterrupts(config: Partial<RunnableConfig>): Promise<boolean> {\n    if (!this.graphRunnable) {\n      return false;\n    }\n    try {\n      const state = await this.graphRunnable.getState(config);\n      return state.tasks.some((task) => task.interrupts.length > 0) ?? false;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Returns the interrupt values from the graph state.\n   * Each interrupt's `value` contains the data passed to `interrupt()` by the node\n   * (e.g., a ToolApprovalRequest for HITL).\n   */\n  async getInterruptValues(\n    config: Partial<RunnableConfig>\n  ): Promise<unknown[]> {\n    if (!this.graphRunnable) {\n      return [];\n    }\n    try {\n      const state = await this.graphRunnable.getState(config);\n      return (\n        state.tasks.flatMap((task) =>\n          (task.interrupts ?? []).map((i) => i.value)\n        ) ?? []\n      );\n    } catch {\n      return [];\n    }\n  }\n\n  getCallbacks(clientCallbacks: t.ClientCallbacks): t.SystemCallbacks {\n    return {\n      [Callback.TOOL_ERROR]: this.createSystemCallback(\n        clientCallbacks,\n        Callback.TOOL_ERROR\n      ),\n      [Callback.TOOL_START]: this.createSystemCallback(\n        clientCallbacks,\n        Callback.TOOL_START\n      ),\n      [Callback.TOOL_END]: this.createSystemCallback(\n        clientCallbacks,\n        Callback.TOOL_END\n      ),\n    };\n  }\n\n  async generateTitle({\n    provider,\n    inputText,\n    contentParts,\n    titlePrompt,\n    clientOptions,\n    chainOptions,\n    skipLanguage,\n    titleMethod = TitleMethod.COMPLETION,\n    titlePromptTemplate,\n  }: t.RunTitleOptions): Promise<{ language?: string; title?: string }> {\n    const titleSecretKey = process.env.ILLUMA_SECRET_KEY;\n    const titlePublicKey = process.env.ILLUMA_PUBLIC_KEY;\n    const titleBaseUrl = process.env.ILLUMA_BASE_URL;\n\n    if (\n      chainOptions != null &&\n      isPresent(titleSecretKey) &&\n      isPresent(titlePublicKey) &&\n      isPresent(titleBaseUrl)\n    ) {\n      try {\n        const userId = chainOptions.configurable?.user_id;\n        const sessionId = chainOptions.configurable?.thread_id;\n        const handler = new ObservabilityCallbackHandler({\n          clientOptions: {\n            secretKey: titleSecretKey!,\n            publicKey: titlePublicKey!,\n            baseUrl: titleBaseUrl!,\n          },\n          userId,\n          sessionId,\n          metadata: {\n            messageId: 'title-' + this.id,\n          },\n        });\n        chainOptions.callbacks = (\n          (chainOptions.callbacks as t.ProvidedCallbacks) ?? []\n        ).concat([handler]);\n      } catch {\n        // Gracefully skip if @illuma-ai/observability-node is not installed\n      }\n    }\n\n    const convoTemplate = PromptTemplate.fromTemplate(\n      titlePromptTemplate ?? 'User: {input}\\nAI: {output}'\n    );\n\n    const response = contentParts\n      .map((part) => {\n        if (part?.type === 'text') return part.text;\n        return '';\n      })\n      .join('\\n');\n\n    const model = this.Graph?.getNewModel({\n      provider,\n      clientOptions,\n    });\n    if (!model) {\n      return { language: '', title: '' };\n    }\n    if (\n      isOpenAILike(provider) &&\n      (model instanceof ChatOpenAI || model instanceof AzureChatOpenAI)\n    ) {\n      model.temperature = (clientOptions as t.OpenAIClientOptions | undefined)\n        ?.temperature as number;\n      model.topP = (clientOptions as t.OpenAIClientOptions | undefined)\n        ?.topP as number;\n      model.frequencyPenalty = (\n        clientOptions as t.OpenAIClientOptions | undefined\n      )?.frequencyPenalty as number;\n      model.presencePenalty = (\n        clientOptions as t.OpenAIClientOptions | undefined\n      )?.presencePenalty as number;\n      model.n = (clientOptions as t.OpenAIClientOptions | undefined)\n        ?.n as number;\n    }\n\n    const convoToTitleInput = new RunnableLambda({\n      func: (\n        promptValue: StringPromptValue\n      ): { convo: string; inputText: string; skipLanguage?: boolean } => ({\n        convo: promptValue.value,\n        inputText,\n        skipLanguage,\n      }),\n    }).withConfig({ runName: 'ConvoTransform' });\n\n    const titleChain =\n      titleMethod === TitleMethod.COMPLETION\n        ? await createCompletionTitleRunnable(model, titlePrompt)\n        : await createTitleRunnable(model, titlePrompt);\n\n    /** Pipes `convoTemplate` -> `transformer` -> `titleChain` */\n    const fullChain = convoTemplate\n      .withConfig({ runName: 'ConvoTemplate' })\n      .pipe(convoToTitleInput)\n      .pipe(titleChain)\n      .withConfig({ runName: 'TitleChain' });\n\n    const invokeConfig = Object.assign({}, chainOptions, {\n      run_id: this.id,\n      runId: this.id,\n    });\n\n    try {\n      return await fullChain.invoke(\n        { input: inputText, output: response },\n        invokeConfig\n      );\n    } catch (_e) {\n      // Fallback: strip callbacks to avoid EventStream tracer errors in certain environments\n      // But preserve observability handler if it exists\n      const observabilityHandler = (\n        invokeConfig.callbacks as t.ProvidedCallbacks\n      )?.find((cb) => cb instanceof ObservabilityCallbackHandler);\n      const { callbacks: _cb, ...rest } = invokeConfig;\n      const safeConfig = Object.assign({}, rest, {\n        callbacks: observabilityHandler ? [observabilityHandler] : [],\n      });\n      return await fullChain.invoke(\n        { input: inputText, output: response },\n        safeConfig as Partial<RunnableConfig>\n      );\n    }\n  }\n}\n"],"names":["ChatOpenAI","AzureChatOpenAI"],"mappings":"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"}