Repository navigation
Conversation
usersim eval runs every scorer it is given on every row, and --scorers auto gives it the default scorers of every probe in the run, so a run that mixes tool_calling with other probes hands tool_use their rows too. Each probe's own scorer skips a row without its probe's columns. Without that check, tool_use judges every row, and the capability report, which counts any row whose scorer result is ok, takes the general probes' conversations as evidence for the two tool-use capabilities. tool_use skips a row with no tool_subset, before any model call, with the no ... scorer skipped error that the report counts as not applicable. A test runs every built-in probe's scorer on a general_open_ended row with no models and checks that each skips it, and the authoring guide and architecture/evaluator.md say how a scorer skips a row. Signed-off-by: Yev Meyer <ymeyer@nvidia.com>
Data Designer gives every row of a run the columns of one seed-table row, whatever the row's probe, so in a mix with tool_calling the other probes' rows store a toolset their conversations never offered: toolset_source, toolset_category, toolset_name, num_tools and tools. clear_seed_columns_of_other_probes empties the attached table's columns on the rows of the probes that do not declare it, resolving the table as the run does, and usersim simulate, notebook 01 and materialize_episode_inputs apply it before they store or return rows. The reading probe's rows keep their values and types. The catalog README and architecture/probes.md describe it. Signed-off-by: Yev Meyer <ymeyer@nvidia.com>
The probe template README's out-of-sim judges note and the engine README's evaluation paragraph put a new probe's scorer in evaluator/scorers/<your_probe>.py. A probe's scorer lives in its own package as engine/probes/<your_probe>/scorer.py, as the template's checklist and AUTHORING_A_PROBE.md say, and its module path, usersim.engine.probes.<your_probe>.scorer, goes in DEFAULT_SCORER_MODULES. Signed-off-by: Yev Meyer <ymeyer@nvidia.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed and why
In a run that mixes probes, each probe's scorer judges only its own probe's rows, and each row stores only the inputs its own probe used.
Builds on #134.
tool_useskips a row that offers no tools (first commit).usersim evalruns every scorer it is given on every row, and--scorers autogives it the default scorers of every probe in the run, so a run that mixestool_callingwith other probes handstool_usetheir rows too. Each probe's own scorer skips a row without its probe's columns. Without that check,tool_usejudges every row, and the capability report, which counts any row whose scorer result is ok, takes the general probes' conversations as evidence for the two tool-use capabilities.tool_useskips a row with notool_subset, before any model call, with theno ... scorer skippederror that the report counts as not applicable.tests/engine/evaluator/test_scorers_skip_other_probes.pyruns every built-in probe's scorer on ageneral_open_endedrow with no models and checks that each skips it; the authoring guide andarchitecture/evaluator.mdsay how a scorer skips a row.tool_callingthe other probes' rows store a toolset their conversations never offered (toolset_source,toolset_category,toolset_name,num_tools,tools).clear_seed_columns_of_other_probesempties the attached table's columns on the rows of the probes that do not declare it, resolving the table as the run does;usersim simulate, notebook 01 andmaterialize_episode_inputsapply it before they store or return rows. The reading probe's rows keep their values and types.evaluator/scorers/<your_probe>.py; they sayengine/probes/<your_probe>/scorer.pyand give the module path to add toDEFAULT_SCORER_MODULES, as the template's checklist andAUTHORING_A_PROBE.mddo.Changes for callers
tool_useresults, and the tool-use capability numbers, for its rows that offered tools only. An evaluation that holdstool_useresults on other probes' rows keeps them until the run is evaluated again;usersim rescoredoes not reruntool_use, since it calls a model.How it was verified
At each commit, on that commit's tree:
At the head:
That set ran on the second commit's tree. The third commit changes two Markdown files only; on its tree the quick set passes, as do
make check-doc-linksand the test files that read the docs (test_packaging_contract,test_security_defaults,test_check_doc_links,test_extension_api,test_cli: 163 passed).With
tool_useas feat(engine): declare seed tables and close out the extension work #134 has it, the new scorer test fails: run on ageneral_open_endedrow with no models, it tries to call the judge (ValueError: Model alias 'judge_model' not found in models dict) and returns an error, not a skip.With the call removed from
usersim simulate, the new write-path test fails on thegeneral_open_endedrow's seed columns.make health-checkfortool_callingagainst a custom provider config ended with✓ simulate, eval and report all completed, and every model's requests showfailed=0.usersim simulatewithtool_calling=0.5,general_open_ended=0.5, six rows, thenusersim eval --scorers autoandusersim report, against the same config: