55by merging explicit arguments with global default configurations.
66"""
77
8+ from dataclasses import dataclass
89from typing import Optional
910
1011from 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+
1336def 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 )
0 commit comments