Open the eval database read-only outside population
Retrieval and QA only read from the database, but the benchmark opened it
writable, where an embedder identity differing from the stored one aborts
instead of warning. Running a pre-built database against a different
serving stack then needed a `rebuild --set-embedder` first.
Correct the debug-evals skill alongside it: the pydantic-ai span names are
`execute_tool {tool_name}` and `invoke_agent agent`, targets are
`{rag,analysis}-capability`, and no `skill_model` metadata key exists.
This commit is contained in:
parent
f13a3fb677
commit
044da7ae99
3 changed files with 5 additions and 4 deletions
|
|
@ -31,7 +31,7 @@ A run is one experiment span; its cases are direct children sharing its
|
||||||
- `attributes->>'name'` — run label (the `--name` arg, or `{dataset}_qa_evaluation` / `{dataset}_retrieval_evaluation`).
|
- `attributes->>'name'` — run label (the `--name` arg, or `{dataset}_qa_evaluation` / `{dataset}_retrieval_evaluation`).
|
||||||
- `attributes->>'dataset_name'` — dataset.
|
- `attributes->>'dataset_name'` — dataset.
|
||||||
- `(attributes->>'assertion_pass_rate')::float` — overall judge pass rate (QA runs).
|
- `(attributes->>'assertion_pass_rate')::float` — overall judge pass rate (QA runs).
|
||||||
- `attributes->'logfire.experiment.metadata'->'metadata'` — run config: `target` (`rag-skill`|`analysis-skill`), `qa_model`, `embedder_model`, `chunk_size`, `search_limit`, `rerank_model`, `judge_model`, `skill_model`, etc.
|
- `attributes->'logfire.experiment.metadata'->'metadata'` — run config: `target` (`rag-capability`|`analysis-capability`), `qa_model`, `embedder_model`, `chunk_size`, `search_limit`, `rerank_model`, `judge_model`, `qa_max_searches`, etc.
|
||||||
- `trace_id` — scopes the whole run.
|
- `trace_id` — scopes the whole run.
|
||||||
- Case span: `span_name = 'case: {case_name}'` (scope `pydantic-evals`).
|
- Case span: `span_name = 'case: {case_name}'` (scope `pydantic-evals`).
|
||||||
- `message` — `case: <id>`.
|
- `message` — `case: <id>`.
|
||||||
|
|
@ -39,8 +39,8 @@ A run is one experiment span; its cases are direct children sharing its
|
||||||
- `attributes->'scores'->'cited_map'->>'value'` — citation average precision (0..1).
|
- `attributes->'scores'->'cited_map'->>'value'` — citation average precision (0..1).
|
||||||
- `attributes->'scores'->'number_match'->>'value'` — numeric-answer match (datasets that use it).
|
- `attributes->'scores'->'number_match'->>'value'` — numeric-answer match (datasets that use it).
|
||||||
- `duration` — task time in seconds.
|
- `duration` — task time in seconds.
|
||||||
- Inside each case the skill under test emits agent spans (scope `pydantic-ai`):
|
- Inside each case the capability under test emits agent spans (scope `pydantic-ai`):
|
||||||
`execute {task}`, `agent run`, `running tool`, `chat {model}`.
|
`execute {task}`, `invoke_agent agent`, `execute_tool {tool_name}`, `chat {model}`.
|
||||||
|
|
||||||
The service is `evals` regardless of model, so filter on `service_name = 'evals'`
|
The service is `evals` regardless of model, so filter on `service_name = 'evals'`
|
||||||
first. `otel_scope_name` separates the layers (`pydantic-evals` for run/case,
|
first. `otel_scope_name` separates the layers (`pydantic-evals` for run/case,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
- `Store.set_haiku_version` stamps the store's own config into a recreated settings row instead of the process-global `Config`.
|
- `Store.set_haiku_version` stamps the store's own config into a recreated settings row instead of the process-global `Config`.
|
||||||
- `check_source_accessible` returns `False` for a URI it cannot resolve (unparseable host, unreadable path) instead of raising and aborting a full rebuild.
|
- `check_source_accessible` returns `False` for a URI it cannot resolve (unparseable host, unreadable path) instead of raising and aborting a full rebuild.
|
||||||
|
- `evaluations run` opens the database read-only outside the population phase, so an embedder identity differing from the stored one warns instead of aborting the run.
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,7 @@ async def run_retrieval_benchmark(
|
||||||
)
|
)
|
||||||
|
|
||||||
db = spec.db_path(db_path)
|
db = spec.db_path(db_path)
|
||||||
async with HaikuRAG(db, config=config) as rag:
|
async with HaikuRAG(db, config=config, read_only=True) as rag:
|
||||||
|
|
||||||
async def retrieval_target(question: str) -> list[str]:
|
async def retrieval_target(question: str) -> list[str]:
|
||||||
chunks = await rag.search(query=question, limit=5)
|
chunks = await rag.search(query=question, limit=5)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue