import { RequestUsageData, UsageData, TokenDetails } from './types/protocol';
export type RequestUsageInput = Partial<RequestUsageData & {
    input_tokens: number;
    output_tokens: number;
    total_tokens: number;
    input_tokens_details: object;
    output_tokens_details: object;
    endpoint?: string;
}>;
export type UsageInput = Partial<UsageData & {
    input_tokens: number;
    output_tokens: number;
    total_tokens: number;
    input_tokens_details: TokenDetails | Array<TokenDetails> | object;
    output_tokens_details: TokenDetails | Array<TokenDetails> | object;
    request_usage_entries: RequestUsageInput[];
}> & {
    requests?: number;
    requestUsageEntries?: RequestUsageInput[];
};
/**
 * Usage details for a single API request.
 */
export declare class RequestUsage {
    /**
     * The number of input tokens used for this request.
     */
    inputTokens: number;
    /**
     * The number of output tokens used for this request.
     */
    outputTokens: number;
    /**
     * The total number of tokens sent and received for this request.
     */
    totalTokens: number;
    /**
     * Details about the input tokens used for this request.
     */
    inputTokensDetails: TokenDetails;
    /**
     * Details about the output tokens used for this request.
     */
    outputTokensDetails: TokenDetails;
    /**
     * The endpoint that produced this usage entry (e.g., responses.create, responses.compact).
     */
    endpoint?: 'responses.create' | 'responses.compact' | (string & {});
    constructor(input?: RequestUsageInput);
    /**
     * Reconstructs a RequestUsage instance from a JSON-compatible wire value.
     */
    static fromJSON(input?: RequestUsageInput): RequestUsage;
}
export declare function cloneTokenDetails(details: TokenDetails): TokenDetails;
/**
 * Tracks token usage and request counts for an agent run.
 */
export declare class Usage {
    /**
     * The number of requests made to the LLM API.
     */
    requests: number;
    /**
     * The number of input tokens used across all requests.
     */
    inputTokens: number;
    /**
     * The number of output tokens used across all requests.
     */
    outputTokens: number;
    /**
     * The total number of tokens sent and received, across all requests.
     */
    totalTokens: number;
    /**
     * Details about the input tokens used across all requests.
     */
    inputTokensDetails: Array<TokenDetails>;
    /**
     * Details about the output tokens used across all requests.
     */
    outputTokensDetails: Array<TokenDetails>;
    /**
     * List of per-request usage entries for detailed cost calculations.
     */
    requestUsageEntries: RequestUsage[] | undefined;
    constructor(input?: UsageInput);
    /**
     * Reconstructs a Usage instance from a JSON-compatible wire value.
     */
    static fromJSON(input?: UsageInput): Usage;
    add(newUsage: Usage): void;
}
export { RequestUsageData, UsageData };
