import { TraceLog, TraceOptions } from '../../types';
import { Trace } from './Trace';
/**
 * Manages the creation, updating, and finalization of traces.
 * Implements the Singleton pattern for global access.
 */
export declare class TraceManager {
    private static instance;
    private context;
    private constructor();
    /**
     * Gets the singleton instance of TraceManager.
     * @returns {TraceManager} The singleton instance of TraceManager.
     */
    static getInstance(): TraceManager;
    /**
     * Creates a new trace and adds it to the current context.
     * @param {string} name - The name of the trace.
     * @param {TraceOptions} [options] - Optional configuration for the trace.
     * @param isLLMCall
     * @returns {Trace} The newly created trace.
     */
    createTrace(name: string, options?: TraceOptions, isLLMCall?: boolean): Trace;
    /**
     * Finalizes a trace, running evaluations if necessary.
     * @param {Trace} trace - The trace to finalize.
     * @param {boolean} [skipEval=false] - Whether to skip evaluations.
     */
    finalizeTrace(trace: Trace, skipEval?: boolean): void;
    /**
     * Sets the output for a trace.
     * @param {Trace} trace - The trace to set the output for.
     * @param {any} value - The output value.
     * @param {Function} [accessOutputOfFunc] - Optional function to access specific output.
     */
    setTraceOutput(trace: Trace, value: any, accessOutputOfFunc?: (arg0: any) => string): void;
    /**
     * Gets the current active trace.
     * @returns {Trace | undefined} The current trace or undefined if no active trace.
     */
    getCurrentTrace(): Trace | undefined;
    /**
     * Gets the ID of the current active trace.
     * @returns {string | undefined} The ID of the current trace or undefined if no active trace.
     */
    getCurrentTraceId(): string | undefined;
    /**
     * Inserts data into the trace log for the current or specified trace.
     * @param {Partial<TraceLog>} data - The data to insert into the trace log.
     * @param {string} [traceId] - The ID of the trace to insert data into. If not provided, uses the current trace.
     */
    insertTraceData(data: Partial<TraceLog>, traceId?: string): void;
    /**
     * Runs a callback function within the current context or a new context if none exists.
     * @param {Function} callback - The function to run within the context.
     * @returns {T} The result of the callback function.
     * @template T
     */
    runInContext<T>(callback: () => T): T;
    /**
     * Runs evaluations asynchronously for a given trace.
     * @param {Trace} trace - The trace to run evaluations for.
     * @private
     */
    private runEvaluationsAsync;
    /**
     * Merges two values based on the provided key.
     * @param key - The key indicating the type of merge operation.
     * @param old - The old value to be merged.
     * @param newValue - The new value to be merged.
     * @returns The merged value.
     */
    private merge;
}
