Skip to content

Commit 7509d72

Browse files
committed
refactor: use dataclass instead of tuple
1 parent de29362 commit 7509d72

4 files changed

Lines changed: 122 additions & 91 deletions

File tree

python/scenario/config/model_config_resolver.py

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,34 @@
55
by merging explicit arguments with global default configurations.
66
"""
77

8+
from dataclasses import dataclass
89
from typing import Optional
910

1011
from scenario.config import ModelConfig, ScenarioConfig
1112

1213

14+
@dataclass
15+
class ResolvedModelConfig:
16+
"""
17+
Resolved model configuration with all parameters merged from explicit args and defaults.
18+
19+
Attributes:
20+
model: The resolved model identifier
21+
api_base: The resolved API base URL (if any)
22+
api_key: The resolved API key (if any)
23+
temperature: The resolved temperature value (if any)
24+
max_tokens: The resolved max tokens value (if any)
25+
extra_params: Additional parameters for the model provider
26+
"""
27+
28+
model: str
29+
api_base: Optional[str]
30+
api_key: Optional[str]
31+
temperature: Optional[float]
32+
max_tokens: Optional[int]
33+
extra_params: dict
34+
35+
1336
def resolve_model_config(
1437
*,
1538
model: Optional[str] = None,
@@ -18,7 +41,7 @@ def resolve_model_config(
1841
temperature: Optional[float] = None,
1942
max_tokens: Optional[int] = None,
2043
**extra_kwargs,
21-
) -> tuple[str, Optional[str], Optional[str], Optional[float], Optional[int], dict]:
44+
) -> ResolvedModelConfig:
2245
"""
2346
Resolve model configuration by merging explicit params with global config.
2447
@@ -37,8 +60,7 @@ def resolve_model_config(
3760
(e.g., timeout, headers, client, etc.)
3861
3962
Returns:
40-
Tuple of (model, api_base, api_key, temperature, max_tokens, extra_params)
41-
with values resolved from explicit params and global config.
63+
ResolvedModelConfig with all values resolved from explicit params and global config.
4264
4365
Raises:
4466
ValueError: If no model is configured either explicitly or in global config
@@ -55,12 +77,19 @@ def resolve_model_config(
5577
)
5678
5779
# Resolve with overrides
58-
resolved = resolve_model_config(
80+
config = resolve_model_config(
5981
model=None, # Use config default
6082
temperature=0.0, # Override (important: 0.0 is valid!)
6183
timeout=60 # Override extra param
6284
)
63-
# Result: ("openai/gpt-4", None, None, 0.0, None, {"timeout": 60})
85+
# Result: ResolvedModelConfig(
86+
# model="openai/gpt-4",
87+
# api_base=None,
88+
# api_key=None,
89+
# temperature=0.0,
90+
# max_tokens=None,
91+
# extra_params={"timeout": 60}
92+
# )
6493
```
6594
6695
Note:
@@ -110,11 +139,11 @@ def resolve_model_config(
110139
"Model must be configured either explicitly or in ScenarioConfig.default_config"
111140
)
112141

113-
return (
114-
resolved_model,
115-
resolved_api_base,
116-
resolved_api_key,
117-
resolved_temp,
118-
resolved_max_tokens,
119-
resolved_extra,
142+
return ResolvedModelConfig(
143+
model=resolved_model,
144+
api_base=resolved_api_base,
145+
api_key=resolved_api_key,
146+
temperature=resolved_temp,
147+
max_tokens=resolved_max_tokens,
148+
extra_params=resolved_extra,
120149
)

python/scenario/judge_agent.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,20 @@ def __init__(
172172
self.system_prompt = system_prompt
173173

174174
try:
175-
(
176-
self.model,
177-
self.api_base,
178-
self.api_key,
179-
self.temperature,
180-
self.max_tokens,
181-
self._extra_params,
182-
) = resolve_model_config(
175+
config = resolve_model_config(
183176
model=model,
184177
api_base=api_base,
185178
api_key=api_key,
186179
temperature=temperature,
187180
max_tokens=max_tokens,
188181
**extra_params,
189182
)
183+
self.model = config.model
184+
self.api_base = config.api_base
185+
self.api_key = config.api_key
186+
self.temperature = config.temperature
187+
self.max_tokens = config.max_tokens
188+
self._extra_params = config.extra_params
190189
except ValueError:
191190
raise Exception(agent_not_configured_error_message("JudgeAgent"))
192191

python/scenario/user_simulator_agent.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,21 +145,20 @@ def __init__(
145145
self.system_prompt = system_prompt
146146

147147
try:
148-
(
149-
self.model,
150-
self.api_base,
151-
self.api_key,
152-
self.temperature,
153-
self.max_tokens,
154-
self._extra_params,
155-
) = resolve_model_config(
148+
config = resolve_model_config(
156149
model=model,
157150
api_base=api_base,
158151
api_key=api_key,
159152
temperature=temperature,
160153
max_tokens=max_tokens,
161154
**extra_params,
162155
)
156+
self.model = config.model
157+
self.api_base = config.api_base
158+
self.api_key = config.api_key
159+
self.temperature = config.temperature
160+
self.max_tokens = config.max_tokens
161+
self._extra_params = config.extra_params
163162
except ValueError:
164163
raise Exception(agent_not_configured_error_message("UserSimulatorAgent"))
165164

0 commit comments

Comments
 (0)