| 1161 | #[allow(clippy::too_many_arguments)] |
| 1162 | #[pyo3(signature = (workspace, options=None, model=None, builtin_skills=None, skill_dirs=None, agent_dirs=None, queue_config=None, planning_mode=None, planning=None, goal_tracking=None, max_parse_retries=None, tool_timeout_ms=None, circuit_breaker_threshold=None, max_parallel_tasks=None, auto_parallel=None))] |
| 1163 | fn session( |
| 1164 | &self, |
| 1165 | workspace: String, |
| 1166 | options: Option<PySessionOptions>, |
| 1167 | model: Option<String>, |
| 1168 | builtin_skills: Option<bool>, |
| 1169 | skill_dirs: Option<Vec<String>>, |
| 1170 | agent_dirs: Option<Vec<String>>, |
| 1171 | queue_config: Option<PySessionQueueConfig>, |
| 1172 | planning_mode: Option<String>, |
| 1173 | planning: Option<bool>, |
| 1174 | goal_tracking: Option<bool>, |
| 1175 | max_parse_retries: Option<u32>, |
| 1176 | tool_timeout_ms: Option<u64>, |
| 1177 | circuit_breaker_threshold: Option<u32>, |
| 1178 | max_parallel_tasks: Option<usize>, |
| 1179 | auto_parallel: Option<bool>, |
| 1180 | ) -> PyResult<PySession> { |
| 1181 | // If a SessionOptions object is provided, build from it then apply named-argument overrides. |
| 1182 | let opts = if let Some(so) = options { |
| 1183 | let mut o = build_rust_session_options(so)?; |
| 1184 | // Named args take precedence over SessionOptions fields. |
| 1185 | o = apply_planning_mode(o, planning_mode.as_deref(), planning)?; |
| 1186 | if goal_tracking.unwrap_or(false) { |
| 1187 | o = o.with_goal_tracking(true); |
| 1188 | } |
| 1189 | if let Some(n) = max_parse_retries { |
| 1190 | o = o.with_parse_retries(n); |
| 1191 | } |
| 1192 | if let Some(ms) = tool_timeout_ms { |
| 1193 | o = o.with_tool_timeout(ms); |
| 1194 | } |
| 1195 | if let Some(n) = circuit_breaker_threshold { |
| 1196 | o = o.with_circuit_breaker(n); |
| 1197 | } |
| 1198 | if let Some(max_parallel_tasks) = max_parallel_tasks { |
| 1199 | o = o.with_max_parallel_tasks(max_parallel_tasks); |
| 1200 | } |
| 1201 | if let Some(auto_parallel) = auto_parallel { |
| 1202 | o = o.with_auto_parallel_delegation(auto_parallel); |
| 1203 | } |
| 1204 | Some(o) |
| 1205 | } else { |
| 1206 | // Fall back to individual named arguments. |
| 1207 | let has_overrides = model.is_some() |
| 1208 | || builtin_skills.is_some() |
| 1209 | || skill_dirs.is_some() |
| 1210 | || agent_dirs.is_some() |
| 1211 | || queue_config.is_some() |
| 1212 | || planning_mode.is_some() |
| 1213 | || planning.is_some() |
| 1214 | || goal_tracking.is_some() |
| 1215 | || max_parse_retries.is_some() |
| 1216 | || tool_timeout_ms.is_some() |
| 1217 | || circuit_breaker_threshold.is_some() |
| 1218 | || max_parallel_tasks.is_some() |
| 1219 | || auto_parallel.is_some(); |
| 1220 | |