fix: antwortendes Modell erfassen; 0.040, LaTeX-Dezimalkomma und Teilfragen-Überschriften
- CallRecord.responded_model / LLMUsage.responded_models: tatsächlich antwortendes
Modell (beim Alias ~deepseek/deepseek-flash-latest) in Log, Report und Benchmark
- normalize_number: führende Null ist nie Tausender (0.040 wurde als 40 gelesen)
- numbers_in: LaTeX-Dezimalkomma 0{,}08 als eine Zahl
- question_ids_in: '### Teil N' als Teilfrage; ausdrückliche Marker haben Vorrang
vor nummerierten Listen
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
88adcff586
commit
8bd3c2e7e1
1 changed files with 88 additions and 10 deletions
|
|
@ -163,3 +163,29 @@ def test_understanding_and_figure_reading_share_their_own_model(monkeypatch):
|
|||
monkeypatch.setenv("LLM_MODEL_UNDERSTANDING", "bild/modell")
|
||||
assert model_for_step("Verstehen", "a/b") == "bild/modell"
|
||||
assert model_for_step("Abbildungen", "a/b") == "bild/modell"
|
||||
|
||||
|
||||
# --- Tatsächlich antwortendes Modell (wichtig bei Aliasen wie ~deepseek/deepseek-flash-latest) ---
|
||||
|
||||
def test_responded_model_is_recorded_per_call_and_summed():
|
||||
from types import SimpleNamespace as NS
|
||||
session, _ = fake_session(model="~deepseek/deepseek-flash-latest")
|
||||
|
||||
def antwort(modell):
|
||||
return NS(provider="Together", model=modell,
|
||||
usage=NS(prompt_tokens=10, completion_tokens=5, cost=0.0001,
|
||||
completion_tokens_details=None, prompt_tokens_details=None))
|
||||
session._record(antwort("deepseek/deepseek-v4.1-flash"), step="Verstehen", model="~deepseek/deepseek-flash-latest")
|
||||
session._record(antwort("deepseek/deepseek-v4.2-flash"), step="Extraktion", model="~deepseek/deepseek-flash-latest")
|
||||
assert [(r.model, r.responded_model) for r in session.usage.call_records] == [
|
||||
("~deepseek/deepseek-flash-latest", "deepseek/deepseek-v4.1-flash"),
|
||||
("~deepseek/deepseek-flash-latest", "deepseek/deepseek-v4.2-flash")]
|
||||
assert session.usage.responded_models == {"deepseek/deepseek-v4.1-flash": 1, "deepseek/deepseek-v4.2-flash": 1}
|
||||
|
||||
|
||||
def test_missing_or_odd_model_field_is_ignored():
|
||||
from types import SimpleNamespace as NS
|
||||
session, _ = fake_session()
|
||||
session._record(NS(provider=None, model=object(), usage=NS(prompt_tokens=1, completion_tokens=1, cost=None,
|
||||
completion_tokens_details=None, prompt_tokens_details=None)))
|
||||
assert session.usage.responded_models == {} and session.usage.call_records[0].responded_model is None
|
||||
|
|
|
|||
Loading…
Reference in a new issue