import { Generation, GenerationConfig, MaximLogger, Retrieval, RetrievalConfig, Span, SpanConfig, ToolCall, ToolCallConfig } from "../../../index";
export interface MaximMetadata {
    sessionId?: string;
    traceId?: string;
    spanId?: string;
    chainName?: string;
    spanName?: string;
    traceName?: string;
    generationName?: string;
    retrievalName?: string;
    toolCallName?: string;
    generationTags?: Record<string, string>;
    retrievalTags?: Record<string, string>;
    toolCallTags?: Record<string, string>;
    traceTags?: Record<string, string>;
    chainTags?: Record<string, string>;
}
export declare const MetadataKeys: string[];
export declare class Metadata implements MaximMetadata {
    sessionId?: string;
    traceId?: string;
    spanId?: string;
    chainName?: string;
    spanName?: string;
    traceName?: string;
    generationName?: string;
    retrievalName?: string;
    toolCallName?: string;
    generationTags?: Record<string, string>;
    retrievalTags?: Record<string, string>;
    toolCallTags?: Record<string, string>;
    traceTags?: Record<string, string>;
    chainTags?: Record<string, string>;
    private _parseTagsField;
    constructor(metadata?: Record<string, unknown>);
    toJSON(): Record<string, any>;
}
export declare class ContainerManager {
    private allContainers;
    private traceIdToContainerIds;
    private containerIdToTraceId;
    addContainer(container: Container): void;
    getContainer(id: string): Container | undefined;
    setContainer(runId: string, container: Container): void;
    deleteContainer(id: string): void;
    getTraceContainer(containerId: string): Container | undefined;
    removeContainer(container: Container): void;
    getContainersInTrace(traceId: string): string[];
    isTraceComplete(traceId: string): boolean;
    removeRunIdMapping(runId: string): void;
}
export declare abstract class Container {
    protected containerManager: ContainerManager;
    protected readonly logger: MaximLogger;
    protected readonly _id: string;
    protected readonly _type: "trace" | "span";
    protected readonly _name?: string | undefined;
    protected _parentId?: string | undefined;
    protected _created: boolean;
    protected _ended: boolean;
    private _activeChildCount;
    constructor(containerManager: ContainerManager, logger: MaximLogger, _id: string, _type: "trace" | "span", _name?: string | undefined, _parentId?: string | undefined, markCreated?: boolean);
    abstract create(tags?: Record<string, string>): void;
    get id(): string;
    get type(): "trace" | "span";
    get parentId(): string | undefined;
    set parentId(id: string | undefined);
    isCreated(): boolean;
    isEnded(): boolean;
    incrementChildCount(): void;
    decrementChildCount(): void;
    hasActiveChildren(): boolean;
    abstract addGeneration(config: GenerationConfig): Generation;
    abstract addToolCall(config: ToolCallConfig): ToolCall;
    abstract addEvent(eventId: string, name: string, tags: Record<string, string>): void;
    abstract addSpan(config: SpanConfig): Span;
    abstract addRetrieval(config: RetrievalConfig): Retrieval;
    abstract addTags(tags: Record<string, string>): void;
    abstract addMetadata(metadata: Record<string, unknown>): void;
    abstract internalEnd(): void;
    end(): void;
    private cleanupIfComplete;
    getTraceContainer(): Container | undefined;
    abstract getTraceId(): string | undefined;
}
export declare class TraceContainer extends Container {
    private _input;
    constructor(containerManager: ContainerManager, logger: MaximLogger, traceId: string, traceName?: string, parentId?: string, markCreated?: boolean);
    create(tags?: Record<string, string>, sessionId?: string): void;
    setInput(input: string): void;
    addGeneration(config: GenerationConfig): Generation;
    addRetrieval(config: RetrievalConfig): Retrieval;
    addEvent(eventId: string, name: string, tags: Record<string, string>): void;
    addSpan(config: SpanConfig): Span;
    addTags(tags: Record<string, string>): void;
    addMetadata(metadata: Record<string, unknown>): void;
    addToolCall(config: ToolCallConfig): ToolCall;
    internalEnd(): void;
    getTraceId(): string;
}
export declare class SpanContainer extends Container {
    private _parentTraceId;
    constructor(containerManager: ContainerManager, logger: MaximLogger, spanId: string, spanName?: string, parentId?: string, parentTraceId?: string, markCreated?: boolean);
    create(tags?: Record<string, string>): void;
    addGeneration(config: GenerationConfig): Generation;
    addRetrieval(config: RetrievalConfig): Retrieval;
    addEvent(eventId: string, name: string, tags: Record<string, string>): void;
    addSpan(config: SpanConfig): Span;
    addTags(tags: Record<string, string>): void;
    addMetadata(metadata: Record<string, unknown>): void;
    addToolCall(config: ToolCallConfig): ToolCall;
    internalEnd(): void;
    getTraceId(): string | undefined;
}
