1use serde::{Deserialize, Serialize};
16
17use crate::providers::ProviderName;
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
21#[serde(rename_all = "snake_case")]
22#[non_exhaustive]
23pub enum TriggerPolicy {
24 #[default]
26 HasRetrieval,
27 Always,
29 Manual,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct QualityConfig {
36 #[serde(default)]
38 pub self_check: bool,
39
40 #[serde(default)]
42 pub proposer_provider: ProviderName,
43
44 #[serde(default)]
46 pub checker_provider: ProviderName,
47
48 #[serde(default)]
50 pub trigger: TriggerPolicy,
51
52 #[serde(default = "default_min_evidence")]
54 pub min_evidence: f32,
55
56 #[serde(default)]
58 pub async_run: bool,
59
60 #[serde(default = "default_latency_budget_ms")]
62 pub latency_budget_ms: u64,
63
64 #[serde(default = "default_per_call_timeout_ms")]
66 pub per_call_timeout_ms: u64,
67
68 #[serde(default = "default_max_assertions")]
70 pub max_assertions: usize,
71
72 #[serde(default = "default_max_response_chars")]
74 pub max_response_chars: usize,
75
76 #[serde(default = "default_cache_disabled_for_checker")]
78 pub cache_disabled_for_checker: bool,
79
80 #[serde(default = "default_flag_marker")]
82 pub flag_marker: String,
83}
84
85fn default_min_evidence() -> f32 {
86 0.6
87}
88fn default_latency_budget_ms() -> u64 {
89 4_000
90}
91fn default_per_call_timeout_ms() -> u64 {
92 2_000
93}
94fn default_max_assertions() -> usize {
95 12
96}
97fn default_max_response_chars() -> usize {
98 8_000
99}
100fn default_cache_disabled_for_checker() -> bool {
101 true
102}
103fn default_flag_marker() -> String {
104 "[verify]".into()
105}
106
107impl Default for QualityConfig {
108 fn default() -> Self {
109 Self {
110 self_check: false,
111 proposer_provider: ProviderName::default(),
112 checker_provider: ProviderName::default(),
113 trigger: TriggerPolicy::default(),
114 min_evidence: default_min_evidence(),
115 async_run: false,
116 latency_budget_ms: default_latency_budget_ms(),
117 per_call_timeout_ms: default_per_call_timeout_ms(),
118 max_assertions: default_max_assertions(),
119 max_response_chars: default_max_response_chars(),
120 cache_disabled_for_checker: default_cache_disabled_for_checker(),
121 flag_marker: default_flag_marker(),
122 }
123 }
124}