hide complicated openai config override behavior somewhere else

This commit is contained in:
hjc-puro 2025-05-03 14:18:50 -07:00
parent fe616ec7fa
commit 4348dd2ec1
3 changed files with 166 additions and 41 deletions

View file

@ -10,8 +10,11 @@ import openai
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.completion import Completion
from pydantic import BaseModel, Field
from pydantic_cli import FailedExecutionException
from tenacity import retry, stop_after_attempt, wait_random_exponential
from atroposlib.envs.constants import NAMESPACE_SEP, OPENAI_NAMESPACE
class OpenaiConfig(BaseModel):
"""
@ -294,3 +297,79 @@ class OpenAIServer:
self.eval_request_timings.append(stat_dict["end"] - stat_dict["start"])
self.eval_attempts_list.append(stat_dict["attempts"])
return ret_data
def resolve_openai_configs(
default_server_configs,
openai_config_dict,
yaml_config,
cli_passed_flags,
logger,
):
"""
Helper to resolve the final server_configs, handling single, multiple servers, and overrides.
"""
from atroposlib.envs.server_handling.server_manager import ServerBaseline
openai_full_prefix = f"{OPENAI_NAMESPACE}{NAMESPACE_SEP}"
openai_yaml_config = yaml_config.get(OPENAI_NAMESPACE, None)
openai_cli_config = {
k: v for k, v in cli_passed_flags.items() if k.startswith(openai_full_prefix)
}
is_multi_server_yaml = (
isinstance(openai_yaml_config, list) and len(openai_yaml_config) >= 2
)
is_multi_server_default = (
(not is_multi_server_yaml)
and isinstance(default_server_configs, list)
and len(default_server_configs) >= 2
)
if (is_multi_server_yaml or is_multi_server_default) and openai_cli_config:
raise FailedExecutionException(
f"CLI overrides for OpenAI settings (--{openai_full_prefix}*) are not supported "
f"when multiple servers are defined (either via YAML list under '{OPENAI_NAMESPACE}' "
"or a default list with length >= 2)."
)
if is_multi_server_yaml:
logger.info(
f"Using multi-server configuration defined in YAML under '{OPENAI_NAMESPACE}'."
)
try:
server_configs = [OpenaiConfig(**cfg) for cfg in openai_yaml_config]
except Exception as e:
raise FailedExecutionException(
f"Error parsing multi-server OpenAI configuration from YAML under '{OPENAI_NAMESPACE}': {e}"
) from e
elif isinstance(default_server_configs, ServerBaseline):
logger.info("Using ServerBaseline configuration.")
server_configs = default_server_configs
elif is_multi_server_default:
logger.info("Using default multi-server configuration (length >= 2).")
server_configs = default_server_configs
else:
logger.info(
"Using single OpenAI server configuration based on merged settings (default/YAML/CLI)."
)
try:
final_openai_config = OpenaiConfig(**openai_config_dict)
except Exception as e:
raise FailedExecutionException(
f"Error creating final OpenAI configuration from merged settings: {e}\n"
f"Merged Dict: {openai_config_dict}"
) from e
if isinstance(default_server_configs, OpenaiConfig):
server_configs = final_openai_config
elif isinstance(default_server_configs, list):
server_configs = [final_openai_config]
else:
logger.warning(
f"Unexpected type for default_server_configs: {type(default_server_configs)}. "
f"Proceeding with single OpenAI server configuration based on merged settings."
)
server_configs = [final_openai_config]
return server_configs