import { BaseCallbackHandler, BaseCallbackHandlerInput } from "@langchain/core/callbacks/base";
import { MaximLogger } from "../../../../index";
type HandleLLMStartParameters = Parameters<NonNullable<BaseCallbackHandler["handleLLMStart"]>>;
type HandleLLMEndParameters = Parameters<NonNullable<BaseCallbackHandler["handleLLMEnd"]>>;
type HandleLLMErrorParameters = Parameters<NonNullable<BaseCallbackHandler["handleLLMError"]>>;
type HandleChatModelStartParameters = Parameters<NonNullable<BaseCallbackHandler["handleChatModelStart"]>>;
type HandleRetrieverStartParameters = Parameters<NonNullable<BaseCallbackHandler["handleRetrieverStart"]>>;
type HandleRetrieverEndParameters = Parameters<NonNullable<BaseCallbackHandler["handleRetrieverEnd"]>>;
type HandleChainStartParameters = Parameters<NonNullable<BaseCallbackHandler["handleChainStart"]>>;
type HandleChainEndParameters = Parameters<NonNullable<BaseCallbackHandler["handleChainEnd"]>>;
type HandleToolStartParameters = Parameters<NonNullable<BaseCallbackHandler["handleToolStart"]>>;
type HandleToolEndParameters = Parameters<NonNullable<BaseCallbackHandler["handleToolEnd"]>>;
type HandleToolErrorParameters = Parameters<NonNullable<BaseCallbackHandler["handleToolError"]>>;
type HandleChainErrorParameters = Parameters<NonNullable<BaseCallbackHandler["handleChainError"]>>;
/**
 * LangChain callback handler for automatic observability with the Maxim platform.
 *
 * Extends LangChain's BaseCallbackHandler to automatically trace and log
 * LangChain application executions including LLM calls, chains, tools, and
 * retrievers. Seamlessly integrates with existing LangChain applications
 * to provide comprehensive observability without code changes.
 *
 * @class MaximLangchainTracer
 * @extends {BaseCallbackHandler}
 * @example
 * import { MaximLangchainTracer } from '@maximai/maxim-js';
 * import { ChatOpenAI } from '@langchain/openai';
 *
 * // Basic setup
 * const maxim = new Maxim({ apiKey: 'your-api-key' });
 * const logger = await maxim.logger({ id: 'langchain-app' });
 * const tracer = new MaximLangchainTracer(logger);
 *
 * // Use with LangChain models
 * const model = new ChatOpenAI({
 *   openAIApiKey: process.env.OPENAI_API_KEY,
 *   modelName: "gpt-4o-mini",
 *   callbacks: [tracer],
 *   metadata: {
 *     maxim: {
 *       generationName: "basic-openai-chat",
 *       generationTags: { testType: "basic", model: "openai" }
 *     },
 *   },
 * });
 *
 * const response = await model.invoke("Hello world");
 * // Automatically logged to Maxim
 */
export declare class MaximLangchainTracer extends BaseCallbackHandler {
    private readonly logger;
    readonly name = "MaximLangchainTracer";
    private containerManager;
    /**
     * Creates a new MaximLangchainTracer instance.
     *
     * @param logger - The Maxim logger instance to use for tracing
     * @param input - Optional LangChain callback handler configuration
     * @example
     * const maxim = new Maxim({ apiKey: 'your-api-key' });
     * const logger = await maxim.logger({ id: 'my-app' });
     * const tracer = new MaximLangchainTracer(logger);
     *
     * @example
     * // With custom callback configuration
     * const tracer = new MaximLangchainTracer(logger, {
     *   ignoreLLM: false,
     *   ignoreChain: false,
     *   ignoreAgent: false
     * });
     */
    constructor(logger: MaximLogger, input?: BaseCallbackHandlerInput);
    /**
     * Safely serializes any value to string, handling circular references and unsupported types like BigInt
     */
    private safeStringify;
    private getMetadataClassFromRecord;
    private getContainer;
    handleChainStart(_chain: HandleChainStartParameters[0], inputs: HandleChainStartParameters[1], runId: HandleChainStartParameters[2], parentRunId?: HandleChainStartParameters[3], tags?: HandleChainStartParameters[4], metadata?: HandleChainStartParameters[5], _runType?: HandleChainStartParameters[6], runName?: HandleChainStartParameters[7]): void;
    handleChainEnd(outputs: HandleChainEndParameters[0], runId: HandleChainEndParameters[1], _parentRunId?: HandleChainEndParameters[2], tags?: HandleChainEndParameters[3], _kwargs?: HandleChainEndParameters[4]): void;
    handleChainError(err: HandleChainErrorParameters[0], runId: HandleChainErrorParameters[1], _parentRunId?: HandleChainErrorParameters[2], tags?: HandleChainErrorParameters[3]): void;
    handleLLMStart(llm: HandleLLMStartParameters[0], prompts: HandleLLMStartParameters[1], runId: HandleLLMStartParameters[2], parentRunId?: HandleLLMStartParameters[3], extraParams?: HandleLLMStartParameters[4], tags?: HandleLLMStartParameters[5], metadata?: HandleLLMStartParameters[6], name?: HandleLLMStartParameters[7]): Promise<void>;
    handleLLMEnd(output: HandleLLMEndParameters[0], runId: HandleLLMEndParameters[1], parentRunId?: HandleLLMEndParameters[2], tags?: HandleLLMEndParameters[3]): void;
    handleLLMError(err: HandleLLMErrorParameters[0], runId: HandleLLMErrorParameters[1], parentRunId?: HandleLLMErrorParameters[2], tags?: HandleLLMErrorParameters[3]): void;
    handleChatModelStart(llm: HandleChatModelStartParameters[0], messages: HandleChatModelStartParameters[1], runId: HandleChatModelStartParameters[2], parentRunId?: HandleChatModelStartParameters[3], extraParams?: HandleChatModelStartParameters[4], tags?: HandleChatModelStartParameters[5], metadata?: HandleChatModelStartParameters[6], runName?: HandleChatModelStartParameters[7]): Promise<void>;
    handleRetrieverStart(_retriever: HandleRetrieverStartParameters[0], query: HandleRetrieverStartParameters[1], runId: HandleRetrieverStartParameters[2], parentRunId?: HandleRetrieverStartParameters[3], tags?: HandleRetrieverStartParameters[4], metadata?: HandleRetrieverStartParameters[5], name?: HandleRetrieverStartParameters[6]): void;
    handleRetrieverEnd(documents: HandleRetrieverEndParameters[0], runId: HandleRetrieverEndParameters[1], parentRunId?: HandleRetrieverEndParameters[2], tags?: HandleRetrieverEndParameters[3]): void;
    handleToolStart(tool: HandleToolStartParameters[0], input: HandleToolStartParameters[1], runId: HandleToolStartParameters[2], parentRunId?: HandleToolStartParameters[3], tags?: HandleToolStartParameters[4], metadata?: HandleToolStartParameters[5], runName?: HandleToolStartParameters[6]): void;
    handleToolEnd(output: HandleToolEndParameters[0], runId: HandleToolEndParameters[1], parentRunId?: HandleToolEndParameters[2], tags?: HandleToolEndParameters[3]): void;
    handleToolError(error: HandleToolErrorParameters[0], runId: HandleToolErrorParameters[1], parentRunId?: HandleToolErrorParameters[2], tags?: HandleToolErrorParameters[3]): void;
}
export {};
