Coverage for agentos/config/presets.py: 69%
32 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-09 07:12 +0800
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-09 07:12 +0800
1"""
2Config Presets — Ready-to-use configuration profiles for common AgentOS scenarios. # noqa: E501
4Each preset provides sensible defaults for specific use cases:
5development, production, testing, and budget-constrained environments.
6"""
8from __future__ import annotations
10from dataclasses import dataclass
13@dataclass
14class AgentOSPreset:
15 """A named preset configuration for AgentOS."""
17 name: str
18 description: str
19 model: str = "gpt-4o-mini"
20 max_iterations: int = 10
21 temperature: float = 0.7
22 enable_cache: bool = True
23 enable_rate_limit: bool = True
24 enable_guardrails: bool = False
25 enable_streaming: bool = False
26 enable_cost_tracking: bool = True
27 memory_window_size: int = 20
28 max_retries: int = 3
29 log_level: str = "INFO"
32PRESETS: dict[str, AgentOSPreset] = {
33 "development": AgentOSPreset(
34 name="development",
35 description="Local development with verbose logging, guardrails disabled, and GPT-4o-mini for fast iteration.",
36 model="gpt-4o-mini",
37 max_iterations=15,
38 temperature=0.8,
39 enable_cache=True,
40 enable_rate_limit=False,
41 enable_guardrails=False,
42 enable_streaming=True,
43 enable_cost_tracking=True,
44 memory_window_size=30,
45 max_retries=2,
46 log_level="DEBUG",
47 ),
48 "production": AgentOSPreset(
49 name="production",
50 description="Production deployment with guardrails, rate limiting, and cost tracking. Uses GPT-4o for reliability.", # noqa: E501
51 model="gpt-4o",
52 max_iterations=20,
53 temperature=0.3,
54 enable_cache=True,
55 enable_rate_limit=True,
56 enable_guardrails=True,
57 enable_streaming=False,
58 enable_cost_tracking=True,
59 memory_window_size=50,
60 max_retries=5,
61 log_level="WARNING",
62 ),
63 "testing": AgentOSPreset(
64 name="testing",
65 description="Testing environment with determinism (temperature=0), guardrails off, and mock-friendly settings.",
66 model="gpt-4o-mini",
67 max_iterations=5,
68 temperature=0.0,
69 enable_cache=False,
70 enable_rate_limit=False,
71 enable_guardrails=False,
72 enable_streaming=False,
73 enable_cost_tracking=False,
74 memory_window_size=10,
75 max_retries=1,
76 log_level="ERROR",
77 ),
78 "budget": AgentOSPreset(
79 name="budget",
80 description="Cost-optimized: GPT-4o-mini, minimal iterations, aggressive caching, rate limits enabled.",
81 model="gpt-4o-mini",
82 max_iterations=5,
83 temperature=0.5,
84 enable_cache=True,
85 enable_rate_limit=True,
86 enable_guardrails=True,
87 enable_streaming=False,
88 enable_cost_tracking=True,
89 memory_window_size=10,
90 max_retries=2,
91 log_level="WARNING",
92 ),
93 "creative": AgentOSPreset(
94 name="creative",
95 description="Creative mode: high temperature, streaming, Claude 3.5 Sonnet for nuanced output.",
96 model="claude-3.5-sonnet",
97 max_iterations=12,
98 temperature=0.95,
99 enable_cache=True,
100 enable_rate_limit=False,
101 enable_guardrails=False,
102 enable_streaming=True,
103 enable_cost_tracking=True,
104 memory_window_size=25,
105 max_retries=3,
106 log_level="INFO",
107 ),
108 "deep_research": AgentOSPreset(
109 name="deep_research",
110 description="Deep research: Claude 3 Opus, many iterations, large memory window, guardrails off for exploration.", # noqa: E501
111 model="claude-3-opus",
112 max_iterations=30,
113 temperature=0.4,
114 enable_cache=True,
115 enable_rate_limit=True,
116 enable_guardrails=False,
117 enable_streaming=False,
118 enable_cost_tracking=True,
119 memory_window_size=80,
120 max_retries=5,
121 log_level="INFO",
122 ),
123 "gemini_fast": AgentOSPreset(
124 name="gemini_fast",
125 description="High-speed: Gemini 2.0 Flash, many iterations, streaming enabled, minimal cost.",
126 model="gemini-2.0-flash",
127 max_iterations=25,
128 temperature=0.7,
129 enable_cache=True,
130 enable_rate_limit=True,
131 enable_guardrails=True,
132 enable_streaming=True,
133 enable_cost_tracking=True,
134 memory_window_size=40,
135 max_retries=4,
136 log_level="INFO",
137 ),
138 "gemini_pro": AgentOSPreset(
139 name="gemini_pro",
140 description="Gemini Pro with 2M context: massive memory window, guardrails enabled, streaming.",
141 model="gemini-1.5-pro",
142 max_iterations=20,
143 temperature=0.5,
144 enable_cache=True,
145 enable_rate_limit=True,
146 enable_guardrails=True,
147 enable_streaming=True,
148 enable_cost_tracking=True,
149 memory_window_size=100,
150 max_retries=4,
151 log_level="INFO",
152 ),
153}
156def get_preset(name: str) -> AgentOSPreset | None:
157 """Get a preset by name. Returns None if not found."""
158 return PRESETS.get(name.lower())
161def list_presets() -> list[AgentOSPreset]:
162 """List all available presets."""
163 return list(PRESETS.values())
166def get_preset_names() -> list[str]:
167 """List all preset names."""
168 return list(PRESETS.keys())
171def apply_preset(preset_name: str, config: dict) -> dict:
172 """
173 Apply a preset to an existing config dict.
175 Only overrides keys present in the preset; preserves all other keys.
177 Args:
178 preset_name: Name of the preset to apply.
179 config: Existing configuration dict.
181 Returns:
182 Updated configuration dict.
183 """
184 preset = get_preset(preset_name)
185 if not preset:
186 raise ValueError(f"Unknown preset: '{preset_name}'. Available: {list(PRESETS.keys())}")
188 mapping = {
189 "model": "model",
190 "max_iterations": "max_iterations",
191 "temperature": "temperature",
192 "enable_cache": "enable_cache",
193 "enable_rate_limit": "enable_rate_limit",
194 "enable_guardrails": "enable_guardrails",
195 "enable_streaming": "enable_streaming",
196 "enable_cost_tracking": "enable_cost_tracking",
197 "memory_window_size": "memory_window_size",
198 "max_retries": "max_retries",
199 "log_level": "log_level",
200 }
202 for preset_key, config_key in mapping.items():
203 config[config_key] = getattr(preset, preset_key)
205 return config