symfonic.agent.config¶
config ¶
FrameworkConfig -- unified configuration for the symfonic agent framework.
Composes core AgentConfig and memory OrchestratorConfig with framework-specific behaviour flags.
FrameworkConfig ¶
Bases: BaseModel
Immutable configuration composing core and memory configs.
Framework-specific flags control automatic hydration, consolidation, lazy tool routing, and streaming.
v8.7.1: unknown kwargs are ignored but logged once (WARNING). The
class previously set only frozen=True while Pydantic's extra
default is "ignore", so a typo'd or renamed flag on this 100+-flag
config was dropped silently. Rather than hard-fail (extra="forbid"
would break adopters passing stale flags on upgrade), unknown fields are
still dropped -- preserving the original wire behaviour -- but each is
logged once via _warn_unknown_fields so the typo is visible.
task_scheduler
property
¶
Return the configured scheduler or a NullScheduler fallback.
child
classmethod
¶
child(
parent: FrameworkConfig,
*,
name: str | None = None,
description: str | None = None,
model_name: str | None = None,
temperature: float | None = None,
max_tokens: int | None = None,
**overrides: Any,
) -> FrameworkConfig
Derive a sub-agent config from parent, overriding only what's named.
v9.1.0 (issue #28). The inheritance primitive the declarative
SubAgentSpec (#27) builds on. A child agent inherits every
behaviour flag from parent (auto_hydrate, auto_consolidate,
lazy_tooling, enable_hms_prompt, the whole agent/orchestrator
config, ...) so sub-agents don't drift from the parent's settings;
only the arguments you pass are overridden.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
parent
|
FrameworkConfig
|
The config to inherit from. |
required |
name
|
str | None
|
Sets the child |
None
|
description
|
str | None
|
Sets the child |
None
|
model_name
|
str | None
|
Override the child |
None
|
temperature
|
float | None
|
Override the child |
None
|
max_tokens
|
int | None
|
Override the child |
None
|
**overrides
|
Any
|
Any other top-level |
{}
|
Returns:
| Type | Description |
|---|---|
FrameworkConfig
|
A new frozen |
Source code in src/symfonic/agent/config.py
2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 | |
resolve_force_tool_choice ¶
v7.20.0 T-7.20.0.8: single source of truth for the effective force-lever mode the engine should use.
Precedence (deliberate):
procedural_force_tool_choiceset explicitly to non-default ("soft"or"hard") wins — that's the precise field.- Legacy
procedural_force_first_action_tool=Truewith the enum at its default"off"resolves to"soft"— preserves v7.19.5 runtime semantics (clean abstain on provider refusal). - Both defaults →
"off"(no forcing).
The engine's force-resolver site at
engine.py::_maybe_resolve_forced_tool_choice MUST consult
this method rather than reading either field directly so the
precedence rule lives in exactly one place.