import type { ModelCatalogEntry } from "../../agents/model-catalog.js"; import type { SessionEntry } from "../../config/sessions/types.js"; import type { OpenClawConfig } from "../../config/types.openclaw.js"; import type { ThinkLevel } from "./directives.js"; export { resolveModelDirectiveSelection, type ModelDirectiveSelection, } from "./model-selection-directive.js"; type ModelCatalog = ModelCatalogEntry[]; type ModelSelectionState = { provider: string; model: string; allowedModelKeys: Set; allowedModelCatalog: ModelCatalog; resetModelOverride: boolean; resetModelOverrideRef?: string; resolveThinkingCatalog: () => Promise; resolveDefaultThinkingLevel: () => Promise; /** Default reasoning level from model capability: "on" if model has reasoning, else "off". */ resolveDefaultReasoningLevel: () => Promise<"on" | "off">; needsModelCatalog: boolean; }; export declare function createFastTestModelSelectionState(params: { agentCfg: NonNullable["defaults"]> | undefined; provider: string; model: string; }): ModelSelectionState; export declare function createModelSelectionState(params: { cfg: OpenClawConfig; agentId?: string; agentCfg: NonNullable["defaults"]> | undefined; sessionEntry?: SessionEntry; sessionStore?: Record; sessionKey?: string; parentSessionKey?: string; storePath?: string; defaultProvider: string; defaultModel: string; provider: string; model: string; hasModelDirective: boolean; /** True when heartbeat.model was explicitly resolved for this run. * In that case, skip session-stored overrides so the heartbeat selection wins. */ hasResolvedHeartbeatModelOverride?: boolean; }): Promise; export declare function resolveContextTokens(params: { cfg: OpenClawConfig; agentCfg: NonNullable["defaults"]> | undefined; provider: string; model: string; }): number;