export type JsonObject = Record; export type ModelContractMode = Readonly<{ id: string; legacy: Readonly; v2Body: Readonly; }>; export type ModelContract = Readonly<{ family: string; aliases: readonly string[]; modes: readonly ModelContractMode[]; defaultMode: string; reasoning: true; variantDefault: false; }>; export type OpenCodeModel = JsonObject & { id?: string; name?: string; cost?: { input: number; output: number; cache_read?: number; cache_write?: number; }; limit?: { context: number; input?: number; output: number; }; modalities?: { input: string[]; output: string[]; }; attachment?: boolean; reasoning?: boolean; tool_call?: boolean; variants?: Record; }; export type OpenCodeModelV2 = JsonObject & { family?: string; name?: string; api?: { id?: string; type: "aisdk"; package: string; url?: string; settings?: JsonObject; }; capabilities?: { tools: boolean; reasoning: boolean; attachment: boolean; input: string[]; output: string[]; }; request?: { headers?: Record; body?: JsonObject; variant?: string; }; variants?: Array<{ id: string; headers?: Record; body?: JsonObject; }>; cost?: { input: number; output: number; cache?: { read?: number; write?: number; }; }; disabled?: boolean; limit?: { context?: number; input?: number; output?: number; }; }; export type OpenCodeProvider = JsonObject & { id?: string; name?: string; npm?: string; api?: string; options?: JsonObject; models: Record; }; export type OpenCodeProviderV2 = JsonObject & { name?: string; api: { type: "aisdk"; package: string; url?: string; settings?: JsonObject; }; request: { headers?: Record; body: JsonObject; }; models: Record; }; export type LiteLLMPluginOptions = { baseURL?: string; apiKey?: string; apiKeyEnv?: string; providerKey?: string; providerName?: string; overrides?: Record; providerOverrides?: JsonObject; includeModes?: string[]; excludeModels?: string[]; includeModels?: string[]; timeoutMs?: number; strict?: boolean; }; export type LiteLLMModelInfo = JsonObject & { model_name?: string; litellm_params?: JsonObject & { model?: string; }; model_info?: JsonObject & { id?: string; base_model?: string; mode?: string; input_cost_per_token?: number | string; output_cost_per_token?: number | string; cache_creation_input_token_cost?: number | string; cache_read_input_token_cost?: number | string; max_tokens?: number | string; max_input_tokens?: number | string; max_output_tokens?: number | string; supports_function_calling?: boolean; supports_tool_choice?: boolean; supports_vision?: boolean; supports_pdf_input?: boolean; supports_reasoning?: boolean; supported_reasoning_efforts?: string[]; supports_low_reasoning_effort?: boolean; supports_xhigh_reasoning_effort?: boolean; supports_max_reasoning_effort?: boolean; supported_modalities?: string[]; output_modalities?: string[]; supported_params?: string[]; }; }; export type LiteLLMModelInfoResponse = LiteLLMModelInfo[] | { data?: LiteLLMModelInfo[]; models?: LiteLLMModelInfo[]; model_info?: LiteLLMModelInfo[]; }; export type LiteLLMModelGroup = JsonObject & { model_group?: string; mode?: string; input_cost_per_token?: number | string; output_cost_per_token?: number | string; cache_creation_input_token_cost?: number | string; cache_read_input_token_cost?: number | string; max_tokens?: number | string; max_input_tokens?: number | string; max_output_tokens?: number | string; supports_function_calling?: boolean; supports_tool_choice?: boolean; supports_vision?: boolean; supports_pdf_input?: boolean; supports_reasoning?: boolean; supported_reasoning_efforts?: string[]; supported_modalities?: string[]; output_modalities?: string[]; supported_openai_params?: string[]; }; export type OpenCodeConfig = { provider?: Record; providers?: Record; }; export type PluginContext = { client?: { app?: { log?: (input: { body: { service: string; level: "info" | "warn" | "error" | "debug"; message: string; extra?: JsonObject; }; }) => Promise; }; }; };