visual_rubric/pool/
config.rs1use std::ffi::OsString;
2use std::path::PathBuf;
3use std::time::Duration;
4
5use crate::{
6 DEFAULT_CODEX_ACP_MODEL, DEFAULT_CODEX_ACP_REASONING_EFFORT, DEFAULT_SYSTEM_PROMPT,
7 RubricEffort, RubricOptions, default_codex_acp_binary,
8};
9
10pub(super) const DEFAULT_SUBMIT_TIMEOUT: Duration = Duration::from_secs(600);
11
12#[derive(Clone, Debug, PartialEq, Eq)]
14pub struct PoolConfig {
15 pub workers: usize,
17 pub max_prompts_per_worker: u32,
19 pub max_retries: u32,
21 pub backoff_base: Duration,
23 pub backoff_cap: Duration,
25 pub default_options: RubricOptions,
27 pub codex_acp_binary: PathBuf,
29 pub extra_env: Vec<(OsString, OsString)>,
31 pub submit_timeout: Duration,
33 pub source_codex_home: Option<PathBuf>,
35 pub log_capture: Option<LogCaptureConfig>,
37}
38
39impl Default for PoolConfig {
40 fn default() -> Self {
41 Self {
42 workers: 4,
43 max_prompts_per_worker: 50,
44 max_retries: 4,
45 backoff_base: Duration::from_secs(30),
46 backoff_cap: Duration::from_secs(300),
47 default_options: default_options(),
48 codex_acp_binary: default_codex_acp_binary(),
49 extra_env: Vec::new(),
50 submit_timeout: DEFAULT_SUBMIT_TIMEOUT,
51 source_codex_home: None,
52 log_capture: None,
53 }
54 }
55}
56
57fn default_options() -> RubricOptions {
58 RubricOptions {
59 model: Some(DEFAULT_CODEX_ACP_MODEL.to_string()),
60 effort: Some(RubricEffort::from(DEFAULT_CODEX_ACP_REASONING_EFFORT)),
61 system_prompt: Some(DEFAULT_SYSTEM_PROMPT.to_string()),
62 }
63}
64
65#[derive(Clone, Debug, PartialEq, Eq)]
67pub struct LogCaptureConfig {
68 pub temp_dir: PathBuf,
70 pub output_dir: PathBuf,
72 pub path_mode: LogPathMode,
74}
75
76#[derive(Clone, Debug, Default, PartialEq, Eq)]
78pub enum LogPathMode {
79 RelativeTo(PathBuf),
81 #[default]
83 Absolute,
84}
85
86#[derive(Clone, Debug, Default, PartialEq, Eq)]
88pub struct PoolStats {
89 pub completed: u64,
91 pub failures: u64,
93 pub rate_limit_events: Vec<crate::RateLimitEvent>,
95 pub worker_recycles: u64,
97}