Conversation
…rallel agents + synthesizer
- Set default teamSize=4
- Add synthesizer role (agent-4) that outputs structured JSON {final, reasoning, sources}
- Update roleFor/modelFor/synth detection to use agent-4 for synthesis
- Enhance synthesizeDeterministic to parse JSON from synthesizer when present
- Update docs and plugin config
- Use subagent runtime parallelism via existing Promise.all fan-out
Closes braintrust-json-agents task.
0ebeddf to
bf7d299
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f04449a124
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| function configuredModelFor(role: WorkerRole, settings: BraintrustSettings): string { | ||
| if (role === "critic") return settings.criticModel; | ||
| if (role === "researcher") return settings.researcherModel; | ||
| if (role === "synthesizer") return settings.synthModel; |
There was a problem hiding this comment.
Route synthesizer to active chat model, not persisted synthModel
The new settings contract marks synthModel as deprecated and says synthesis should inherit the active chat model, but this branch still returns settings.synthModel for the synthesizer role. In environments upgrading from older state/config (where synthModel is populated, e.g. opus), the synthesizer will keep using that stale model instead of the active runtime model, which can silently change provider behavior/cost and contradict the documented routing semantics.
Useful? React with 👍 / 👎.
| this.state.settingsOverrides = { | ||
| teamSize: initialSettings.teamSize, | ||
| strategy: initialSettings.strategy, | ||
| model: initialSettings.model, | ||
| criticModel: initialSettings.criticModel, |
There was a problem hiding this comment.
Stop freezing plugin settings in persisted overrides
On first run, this constructor copies every initial config value into state.settingsOverrides; later, mergeSettings applies those overrides on top of current plugin config, so edits to configured team size/models/quorum are ignored as long as .braintrust/state.json exists. This makes runtime behavior diverge from declared config after the first launch and forces manual state deletion to apply config changes.
Useful? React with 👍 / 👎.
No description provided.