/**
 * KgServiceContainerController — lifecycle for olam-kg-service.
 *
 * Mirrors McpAuthContainerController (./services.ts) since kg-service, like
 * mcp-auth-service, is not a @olam/core package. The persistent HTTP classifier
 * inside the container holds bge-small-en-v1.5 in memory; we pre-warm at
 * start() to eliminate the first-call cold cliff (see Phase A latency bench at
 * ~/kg-benchmark/kg-service-poc/latency-results.json).
 */
export declare const KG_SERVICE_PORT = 9997;
export declare const KG_SERVICE_CONTAINER = "olam-kg-service";
export declare const KG_SERVICE_LOCAL_TAG = "olam-kg-service:local";
export declare const KG_SERVICE_PUBLISHED_TAG = "ghcr.io/pleri/olam-kg-service:latest";
export declare const KG_SERVICE_DEV_TAG = "olam-kg-service:dev";
export declare const KG_SERVICE_HEALTH_URL = "http://127.0.0.1:9997/health";
export declare const KG_SERVICE_CLASSIFY_URL = "http://127.0.0.1:9997/classify";
export declare const KG_SERVICE_HEALTH_TIMEOUT_MS = 60000;
type ContainerState = 'running' | 'stopped' | 'missing';
export interface KgServiceStatus {
    readonly state: ContainerState;
    readonly port: number;
    readonly containerId?: string;
    readonly ready?: boolean;
}
export declare class KgServiceContainerController {
    private imageTag;
    status(): KgServiceStatus;
    private imageExists;
    /**
     * Resolve the first available image tag: local → dev → published.
     * Throws if none exist (operator should run `olam bootstrap` to pull).
     */
    private resolveImage;
    /**
     * Idempotent start. If already running → return. If stopped → docker start.
     * If missing → docker run with port-forward + kg-data volume mount + restart
     * policy. The container's CMD is `python -u /app/src/server.py` which begins
     * loading bge-small immediately; the model is warm by the time /health
     * returns ready=true. We additionally fire a synthetic /classify after
     * readiness to JIT-warm the embedding hot path.
     */
    start(): void;
    /**
     * Returns true when no kg-service image exists locally — useful for callers
     * (e.g. servicesUp) to distinguish "operator opted out of kg-service" from
     * "kg-service was supposed to work but is broken". The opted-out case
     * should be silent; the broken case should warn.
     */
    imageMissingEverywhere(): boolean;
    stop(): void;
    remove(): void;
    /**
     * Poll /health until ready=true OR timeoutMs elapses. The container reports
     * ready=true only after the bge-small model + 31 exemplars have loaded
     * (~1.3s on a warm machine; longer on first pull where the image needs to
     * unpack).
     */
    waitForReady(timeoutMs?: number): Promise<boolean>;
    /**
     * Fire a synthetic classify against the warm server. Called by `servicesUp`
     * after `waitForReady` succeeds — extra insurance that the embedding
     * inference hot path is JITted before the first operator-driven call.
     * Errors are swallowed; pre-warm is best-effort.
     */
    prewarm(): Promise<void>;
}
export {};
//# sourceMappingURL=kg-service-container.d.ts.map