Skip to content

feat(orchestration): add planner_provider field to OrchestrationConfig#2184

Merged
bug-ops merged 2 commits intomainfrom
feat/issue-2172/planner-provider
Mar 27, 2026
Merged

feat(orchestration): add planner_provider field to OrchestrationConfig#2184
bug-ops merged 2 commits intomainfrom
feat/issue-2172/planner-provider

Conversation

@bug-ops
Copy link
Copy Markdown
Owner

@bug-ops bug-ops commented Mar 27, 2026

Summary

Follow-up to #2183 per multi-model design requirement in #2172 (project owner comment).

  • Adds planner_provider: String to [orchestration] config — references a [[llm.providers]] entry by name; empty = primary provider fallback
  • Removes dead planner_model: Option<String> field (never wired, pre-v1.0.0 clean removal)
  • Wires resolved provider through bootstrap → OrchestrationStateLlmPlanner::new() at all 3 sites (daemon, runner, acp)
  • migrate_planner_model_to_provider() auto-migration step comments out old planner_model value with MIGRATED marker
  • Latency-threshold doc comment on TopologyClassifier::suggest_max_parallel (m13v insight: >= 500ms threshold for parallel overhead payoff)

Breaking Changes

  • planner_model config field removed; run zeph --migrate-config --in-place to auto-convert

Test plan

  • +50 tests (6504 → 6554), all passing
  • migrate_planner_model_to_provider with field present and no-op case
  • build_planner_provider fallback paths covered via integration fixture
  • fmt/clippy clean

Closes #2172

#2172)

Follow-up to #2183 per multi-model design principle: LlmPlanner now
accepts a dedicated provider reference instead of always using the
primary provider.

Config field `planner_provider = "fast"` in `[orchestration]`
references a `[[llm.providers]]` entry by name; empty string falls
back to the primary provider. Field replaces the dead
`planner_model: Option<String>` (never wired, pre-v1.0.0 removal).

`build_planner_provider()` in bootstrap resolves the named provider
and passes it to `LlmPlanner::new()` at all three wiring sites
(daemon, runner, acp). `OrchestrationState.planner_provider` holds
the optional resolved provider, scoped to orchestration rather than
the global ProviderState.

`migrate_planner_model_to_provider()` auto-migration step comments
out any existing `planner_model` value with a MIGRATED marker so
users know to supply a provider name instead of a model name.

Also adds latency-threshold doc comment on
`TopologyClassifier::suggest_max_parallel` (parallel scheduling
overhead only pays off when individual tool calls take >= 500ms;
for LLM API calls this is always satisfied; for local tools such as
file reads, consider keeping topology_selection disabled).

+50 tests (6504 -> 6554).
@github-actions github-actions bot added enhancement New feature or request size/L Large PR (201-500 lines) documentation Improvements or additions to documentation rust Rust code changes core zeph-core crate tests Test-related changes and removed enhancement New feature or request labels Mar 27, 2026
@github-actions github-actions bot added the enhancement New feature or request label Mar 27, 2026
@bug-ops bug-ops merged commit 94b8bbf into main Mar 27, 2026
29 checks passed
@bug-ops bug-ops deleted the feat/issue-2172/planner-provider branch March 27, 2026 00:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core zeph-core crate documentation Improvements or additions to documentation enhancement New feature or request rust Rust code changes size/L Large PR (201-500 lines) tests Test-related changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

research: GAP graph-based parallel tool scheduling for LlmPlanner/DagScheduler

1 participant