export declare class StreamTranslator {
    private state;
    private blockIndex;
    private messageId;
    private requestModel;
    private inputTokenEstimate;
    private outputCharCount;
    private upstreamUsage;
    private currentToolCalls;
    private messageStartEmitted;
    constructor(requestModel: string, inputTokenEstimate: number);
    processLine(dataContent: string): string[];
    flush(): string[];
    private makeEvent;
    private makeMessageStart;
    private get estimatedOutputTokens();
    /**
     * Usage object for the final message_delta event. message_start can only
     * carry an input ESTIMATE (the real upstream usage arrives at stream end), so
     * the final message_delta is the only place a streaming client can learn the
     * true input_tokens and prefix-cache hit. When real upstream usage is present
     * (e.g. owlmlx / OpenAI-compatible servers that report prompt_tokens_details),
     * surface input/cache_read (kept disjoint, matching the Anthropic shape) so a
     * downstream consumer of owlcoda's SSE sees local-backend cache hits — not
     * just owlcoda's internal /cost. With no upstream usage, stay output-only (no
     * regression: the estimate already went out in message_start).
     */
    private finalDeltaUsage;
    private mapFinishReason;
    getFinalUsage(): {
        inputTokens: number;
        outputTokens: number;
        cacheReadTokens: number;
    };
}
