Skip to content

fix: use Mapping for dict params, Any for ValidatedParameters#289

Merged
Abhijeet Prasad (AbhiPrasad) merged 1 commit intobraintrustdata:mainfrom
willfrey:fix/mapping-and-validated-params
Apr 14, 2026
Merged

fix: use Mapping for dict params, Any for ValidatedParameters#289
Abhijeet Prasad (AbhiPrasad) merged 1 commit intobraintrustdata:mainfrom
willfrey:fix/mapping-and-validated-params

Conversation

@willfrey
Copy link
Copy Markdown
Contributor

Summary

Three type annotation fixes in framework2.py and parameters.py:

  • choice_scores: dict[str, float]Mapping[str, float] in ScorerBuilder.create() (all 3 overloads). Input parameter — dict invariance means dict[str, int] was rejected even though int is compatible with float.
  • metadata: dict[str, Any]Mapping[str, Any] in CodeParameters dataclass field and ParametersBuilder.create(). Input parameter — same invariance class as the Metadata alias change in PR fix: use Mapping for Metadata and ParametersSchema type aliases #285. Other metadata params in this file already use the Metadata alias.
  • ValidatedParameters = dict[str, object]dict[str, Any]. Values are Pydantic models, strings, Prompt objects, etc. Using object forces every caller to narrow; Any is the practical type for this heterogeneous container.

Test plan

  • Existing tests pass (annotation-only changes, no runtime impact)
  • dict[str, int] is now accepted for choice_scores by type checkers
  • Retrieved ValidatedParameters values no longer require narrowing from object

- choice_scores: dict[str, float] → Mapping[str, float] in
  ScorerBuilder.create() — input parameter, dict invariance means
  dict[str, int] was rejected even though int is compatible with float
- CodeParameters.metadata and ParametersBuilder.create(metadata=...):
  dict[str, Any] → Mapping[str, Any] — input parameter, same
  invariance issue; other metadata parameters already use the Metadata
  alias which is being changed to Mapping in a separate PR
- ValidatedParameters: dict[str, object] → dict[str, Any] — values
  are Pydantic models, strings, Prompt objects, etc. Using object
  forces callers to narrow every retrieved value; Any is the practical
  type for this heterogeneous container
@AbhiPrasad Abhijeet Prasad (AbhiPrasad) merged commit 553ac76 into braintrustdata:main Apr 14, 2026
84 checks passed
@AbhiPrasad
Copy link
Copy Markdown
Member

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants