Skip to content

refactor(delegation): simplifications across strategies#207

Merged
miguelgfierro merged 1 commit into
mainfrom
refactor/delegation-simplifications
May 21, 2026
Merged

refactor(delegation): simplifications across strategies#207
miguelgfierro merged 1 commit into
mainfrom
refactor/delegation-simplifications

Conversation

@miguelgfierro
Copy link
Copy Markdown
Contributor

Summary

Cluster of small simplifications across delegation.py:

  • Candidate.metadata. Mirrors RoutingDecision.metadata. WeightedStrategy now records per-strategy component scores in Candidate.metadata['components'] instead of formatting them into the reason string. reason is now display-only ('weighted blend').
  • CapabilityStrategy.metadata['match_count'] dropped — redundant with len(decision.candidates).
  • RoundRobinStrategy reset check now compares object-identity tuples (tuple(id(a) for a in agents)) instead of running list equality. Cheaper per element and avoids any reliance on agent __eq__. Docstring notes the cycle effectively resets when used inside a combinator that passes freshly-built sub-pools.
  • CostAwareStrategy.__init__ collapses five sample_*_tokens kwargs into a single sample: CostContext | None = None. The model field is overwritten per agent via dataclasses.replace. Default sample is 1000 input / 500 output, matching the previous defaults.
  • ChainStrategy returns dataclasses.replace(last_decision, ...) instead of rebuilding the RoutingDecision by hand.

Breaking changes

  • CostAwareStrategy(sample_input_tokens=..., sample_output_tokens=..., ...) no longer accepts the individual sample_*_tokens kwargs. Callers that tuned them must pass sample=CostContext(...) instead. Default behaviour unchanged.
  • Candidate(...) gained an optional metadata field. Positional construction (Candidate(agent, score, reason)) still works; replace(c, metadata={...}) etc. now possible.

Test plan

  • pytest tests/unit -q — 1410 passed.
  • ruff format --check — clean.

- Add Candidate.metadata (Mapping[str, Any]) mirroring RoutingDecision.metadata.
  WeightedStrategy now records per-strategy component scores in
  Candidate.metadata['components'] instead of stuffing them into a formatted
  string in reason. reason is now display-only ('weighted blend').
- Drop CapabilityStrategy.metadata['match_count'] — redundant with
  len(decision.candidates).
- RoundRobinStrategy reset check now compares object-identity tuples instead
  of running list equality; docstring notes the cycle effectively resets when
  used inside a combinator that passes freshly-built sub-pools.
- CostAwareStrategy collapses five sample_*_tokens kwargs into a single
  sample: CostContext | None = None. The model field is overwritten per
  agent via dataclasses.replace. Default sample is 1000 input / 500 output.
- ChainStrategy returns dataclasses.replace(last_decision, ...) instead of
  rebuilding RoutingDecision by hand.
@miguelgfierro miguelgfierro merged commit ab98cf4 into main May 21, 2026
9 checks passed
@miguelgfierro miguelgfierro deleted the refactor/delegation-simplifications branch May 21, 2026 08:30
ancongui pushed a commit that referenced this pull request May 31, 2026
…plifications

refactor(delegation): simplifications across strategies
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.

1 participant