import { ClientOptions } from '@langchain/openai';
import { BehaviorSubject, Subject } from 'rxjs';
import { BusinessRoleType, ICopilot } from './types';
/**
 * Copilot Service
 */
export declare abstract class CopilotService {
    #private;
    get copilot(): ICopilot;
    set copilot(value: Partial<ICopilot> | null);
    readonly copilot$: import("rxjs").Observable<ICopilot>;
    readonly enabled$: import("rxjs").Observable<string>;
    get secondary(): ICopilot;
    set secondary(value: ICopilot | null);
    readonly secondary$: import("rxjs").Observable<ICopilot>;
    /**
     * If the provider has tools function
     */
    readonly isTools$: import("rxjs").Observable<boolean>;
    readonly clientOptions$: BehaviorSubject<ClientOptions>;
    /**
     * Token usage event
     */
    readonly tokenUsage$: Subject<{
        copilot: ICopilot;
        tokenUsed: number;
    }>;
    constructor(copilot?: ICopilot);
    update(copilot: Partial<ICopilot>): void;
    abstract roles(): BusinessRoleType[];
    abstract role(): string;
    abstract setRole(role: string): void;
    getModels(): import("rxjs").Observable<any>;
    recordTokenUsage(usage: {
        copilot: ICopilot;
        tokenUsed: number;
    }): void;
}
