Add per-model generation settings to the model selector

Each text and vision harness setting now carries the generation settings
its model takes (temperature, sampling limits, penalties, seed, reasoning
effort), edited in a modal under the model pick so the harness block stays
short. Nothing is set by default, so models keep their provider's own
values until a super admin or admin changes them.

A setting is only offered and only sent when the catalog says the model
takes it: OpenRouter's supported_parameters is now stored on
harness_models and refreshed by the hourly sync. Other providers list no
parameters, so their models get them all.
This commit is contained in:
2026-10-22 04:52:55 +01:00
parent fe502b38fe
commit c2553a4746
25 changed files with 644 additions and 13 deletions
@@ -54,6 +54,7 @@ export default async function grabHarnessModelEntries({
name: `${model.name || model.slug}${row.available == 0 ? " (no longer listed)" : ""}`,
free: model.free,
voices: model.voices,
supported_parameters: model.supported_parameters,
},
};
});
@@ -23,6 +23,7 @@ export default function harnessModelRowToCatalog({
context_length: numberOrUndefined(row.context_length),
max_output_tokens: numberOrUndefined(row.max_output_tokens),
voices: parseList({ text: row.voices }),
supported_parameters: parseList({ text: row.supported_parameters }),
intelligence_score: numberOrUndefined(row.intelligence_score),
agentic_score: numberOrUndefined(row.agentic_score),
released_at: numberOrUndefined(row.released_at),
@@ -21,6 +21,7 @@ const Columns = [
"context_length",
"max_output_tokens",
"voices",
"supported_parameters",
"intelligence_score",
"agentic_score",
"released_at",
@@ -69,6 +70,7 @@ export default async function upsertHarnessModels({
model.context_length ?? null,
model.max_output_tokens ?? null,
model.voices ? JSON.stringify(model.voices) : null,
model.supported_parameters ? JSON.stringify(model.supported_parameters) : null,
model.intelligence_score ?? null,
model.agentic_score ?? null,
model.released_at ?? null,