gglib_core/domain/server_config.rs
1//! Server-level default configuration for models.
2//!
3//! This module defines [`ServerConfig`], which stores per-model server
4//! parameters that override global settings but can themselves be overridden
5//! at request time.
6//!
7//! # Fallback Chain
8//!
9//! Parameters are resolved in strict priority order:
10//!
11//! 1. Runtime request / CLI flag (highest priority)
12//! 2. Model `server_defaults` (from DB, stored as JSON)
13//! 3. Global app setting
14//! 4. Hardcoded default (lowest priority)
15
16use serde::{Deserialize, Serialize};
17
18/// Server-level defaults for a specific model.
19///
20/// Stores per-model server configuration parameters that override global
21/// settings but can themselves be overridden at request time. This is part
22/// of the 4-level fallback chain:
23///
24/// 1. Runtime request / CLI flag (highest priority)
25/// 2. Model `server_defaults` (from DB, stored as JSON in `server_defaults` column)
26/// 3. Global app setting
27/// 4. Hardcoded default (lowest priority)
28///
29/// All fields are optional to support partial configuration.
30///
31/// # Examples
32///
33/// ```rust
34/// use gglib_core::domain::ServerConfig;
35///
36/// // Override only the context length for a long-context model
37/// let config = ServerConfig {
38/// context_length: Some(32768),
39/// };
40/// ```
41#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
42#[serde(rename_all = "camelCase")]
43pub struct ServerConfig {
44 /// Context length (number of tokens) for the model server.
45 ///
46 /// Controls the maximum context window the server will use.
47 /// Common values: 4096 (default), 8192, 32768, 131072
48 pub context_length: Option<usize>,
49}