Store preferences by model profile

This commit is contained in:
Georg Bauer
2026-08-02 12:38:21 +02:00
parent 69c83e7059
commit e52efb80b0
13 changed files with 606 additions and 196 deletions

View File

@@ -25,7 +25,7 @@ use crate::engine::ChatTurn;
use crate::metrics::{Metrics, WorkSource};
use crate::model::{self, ModelChoice};
use crate::runtime::{CheckpointTarget, GenerationEvent, GenerationService};
use crate::settings::{ReasoningMode, effective_settings};
use crate::settings::{GenerationPreferences, ReasoningMode, effective_settings};
use serde::Deserialize;
use serde_json::value::RawValue;
use serde_json::{Map, Value, json};
@@ -375,10 +375,8 @@ fn handle(mut stream: TcpStream, state: &State) {
let model = model_alias(id).filter(|model| installed.contains(model));
if let Some(model) = model {
let (context, tokens) = state.config.read().map_or((32_768, 32_768), |config| {
(
config.generation.context_tokens,
config.generation.max_generated_tokens,
)
let generation = config.generation_for(model, config.reasoning_mode(model));
(generation.context_tokens, generation.max_generated_tokens)
});
send_json_with_cors(
&mut stream,
@@ -505,17 +503,23 @@ fn installed_endpoint_models(models_path: &std::path::Path) -> Vec<ModelChoice>
}
fn models_json(state: &State) -> Value {
let (context, tokens) = state.config.read().map_or((32_768, 32_768), |config| {
(
config.generation.context_tokens,
config.generation.max_generated_tokens,
)
});
let config = state.config.read().ok().map(|config| config.clone());
json!({
"object": "list",
"data": installed_endpoint_models(&state.models_path)
.into_iter()
.map(|model| model_json(model.id(), model, context, tokens))
.map(|model| {
let generation = config.as_ref().map_or_else(
GenerationPreferences::default,
|config| config.generation_for(model, config.reasoning_mode(model)),
);
model_json(
model.id(),
model,
generation.context_tokens,
generation.max_generated_tokens,
)
})
.collect::<Vec<_>>()
})
}