import { type Context, defineService, type ReplicatedState } from "@earendil-works/chord"; import type { ThinkingLevel } from "@earendil-works/pi-agent-core"; export interface ModelRef { provider: string; modelId: string; } export interface ModelSummary extends ModelRef { name: string; reasoning: boolean; } export interface ModelsState { catalog: { revision: number; availableModels: ModelSummary[]; }; configuration: { model: ModelRef | null; thinkingLevel: ThinkingLevel; }; refresh: { status: "idle" | "refreshing" | "done" } | { status: "warning"; errors: Record }; } export interface Models { readonly state: ReplicatedState; cycleThinking(context: Context): Promise; getThinkingLevels(context: Context): Promise; refresh(context: Context): Promise; select(model: ModelRef, context: Context): Promise; selectThinking(level: ThinkingLevel, context: Context): Promise; } export const Models = defineService("pi.models");