Replace default_system_prompt.md with the llama prompt content. The default
backend (gpt_oss_120b) carries all real traffic, but used the permissive
prompt that lets the model SUBSTITUTE dictated terms with its own guess;
the llama prompt keeps the dictated word and only flags it for review.
Validated in the experiments sandbox against 16 real alpha-test cases
(full pipeline: pre-gazetteer -> gpt_oss_120b -> post-gazetteer, 3 runs
each, independently judged): dangerous-error rate per run drops from
44% (20/45) to 10% (5/49), and the 3 runs that produced no output at all
(reasoning length-exhaustion) drop to 0.
The two prompt files are now content-identical, as backend.rs already
anticipated. Follow-up: the DEFAULT_SYSTEM_PROMPT doc-comment in
analyze/backend.rs still describes the old prompt and should be refreshed.
Add Fachrichtung to prompt and refine medical terms.
Added Fachrichtung to the system prompt, instructing the LLM to consider
the medical specialty for precise terminology.
Also, added "Abdomensonographie" to the `medical_terms.txt` file.
Replace the single [llm] block in settings.toml with a curated catalog
of LLM "backends" (provider + model + sampling params + system prompt)
in server/src/analyze/backend.rs. Two backends ship initially:
gpt_oss_120b (default, reasoning_effort=medium) and llama_3_1_405b
(uses response_format: json_schema to sidestep the <|eot_id|> leak).
The case page now renders one submit button per available backend; the
clicked button's name=backend value rides through AnalysisInput.backend_id
to the worker, which looks it up via find_backend() with default fallback.
A submitted unknown backend id is rejected as 400. .analysis_failed.json
records the failed backend and the failure banner surfaces its label.
The API key now comes from IONOS_API_KEY (env), not settings.toml; the
[llm] section is read into a discarded field so old configs still load.
Backends without a satisfied requires_api_key are filtered from the UI
(any_backend_available()). Three end-to-end tests that mocked the LLM
endpoint via settings.llm.url are #[ignore]'d with a clear note — they
need per-test backend injection (Arc<Vec<LlmBackend>> through the worker)
before they can be re-enabled.