// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { CoderProviderConfig } from "./CoderProviderConfig";

/**
 * Read/write payload for `coder_get_model_settings` /
 * `coder_set_model_settings`.
 *
 * Mirrors the [`crate::app_state::CoderAppState`] subset the
 * picker cares about. The runner reads `standard_model` /
 * `cheap_model` / `bill_to` straight from
 * [`moon_coder::CoderModels`] (kept in sync on every write); slugs
 * are already in their final `model:provider` form by the time they
 * get here because the picker concatenates on click.
 *
 * **Active provider** is `None` for the implicit HF route (the
 * `standard_model` / `cheap_model` / `bill_to` fields apply only
 * in that case), or `Some(id)` matching one of the [`providers`]
 * entries — in which case the runner reads the picks off that
 * provider's record instead. User providers don't have a
 * `bill_to`; the HF-specific header is suppressed off the wire when
 * active.
 *
 * [`providers`]: Self::providers
 */
export type CoderModelSettings = { standard_model: string, cheap_model: string, bill_to: string, active_provider?: string | null, providers: Array<CoderProviderConfig>, 
/**
 * Per-slug context-window caps in tokens. See
 * [`crate::app_state::CoderAppState::context_window_overrides`]
 * for the wire-shape rationale; this field round-trips the
 * same map through the picker so the user can edit the cap
 * next to the model field.
 *
 * Slug is the full wire id used at the call site (with any
 * `:provider` suffix for HF, bare id for user providers).
 * `None` / missing entry = use the model's catalog window
 * directly. The runner clamps to `min(catalog, cap)` at
 * every [`moon_coder::CoderModels::context_window`] call
 * site so the usage ring + auto-compaction respect the cap
 * the same way they respect the actual window.
 */
context_window_overrides: { [key in string]: number }, 
/**
 * Per-workspace lock on the active provider. `None` means
 * "no lock; this workspace follows the global
 * `active_provider`". `Some(_)` means "this workspace is
 * pinned, ignore global writes from sibling workspaces".
 *
 * Round-trips through the picker: read returns the
 * workspace's current lock; write applies the new lock
 * (replacing or clearing). When the lock is `Some(_)`, the
 * `active_provider` field on this struct is interpreted as
 * "what the workspace's lock should be set to" — the global
 * default isn't touched. When the lock is `None`, writes
 * fall through to the global default like before.
 */
provider_lock?: CoderProviderLock | null, 
/**
 * Effective standard-model slug the next round-trip will use,
 * after the runner's fallback chain (active provider's pick →
 * HF pick → hardcoded default) has been applied. Read-only:
 * filled by the runner on read so the UI can show "which model
 * am I talking to" without duplicating the fallback logic;
 * ignored on write.
 */
resolved_standard_model: string, 
/**
 * Whether [`resolved_standard_model`](Self::resolved_standard_model)
 * accepts image input, per the runner's catalog-derived vision
 * map. Read-only, filled on read like `resolved_standard_model`.
 * `None` = unknown (catalog not primed yet, or the provider
 * doesn't advertise modalities) — the composer allows attaching
 * in that case and the runner strips at the wire if it later
 * learns better.
 */
resolved_standard_supports_images?: boolean | null, };
