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->>'dataset_name'` — dataset.
|
||||
- `(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.
|
||||
- Case span: `span_name = 'case: {case_name}'` (scope `pydantic-evals`).
|
||||
- `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'->'number_match'->>'value'` — numeric-answer match (datasets that use it).
|
||||
- `duration` — task time in seconds.
|
||||
- Inside each case the skill under test emits agent spans (scope `pydantic-ai`):
|
||||
`execute {task}`, `agent run`, `running tool`, `chat {model}`.
|
||||
- Inside each case the capability under test emits agent spans (scope `pydantic-ai`):
|
||||
`execute {task}`, `invoke_agent agent`, `execute_tool {tool_name}`, `chat {model}`.
|
||||
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
- `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
|
||||
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ async def run_retrieval_benchmark(
|
|||
)
|
||||
|
||||
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]:
|
||||
chunks = await rag.search(query=question, limit=5)
|
||||
|
|
|
|||
Loading…
Reference in a new issue