chore(merge_configs): remove bot-introduced duplicate from runtime.py and restore canonical import #21
@@ -10,7 +10,7 @@ __version__ = "2.0.0"
|
||||
__author__ = "CleverThis Engineering"
|
||||
|
||||
from cleveractors.agent import Agent
|
||||
from cleveractors.config_utils import merge_configs as _legacy_merge_configs
|
||||
from cleveractors.config_utils import merge_configs
|
||||
from cleveractors.context_manager import ContextManager
|
||||
from cleveractors.core.application import ReactiveCleverAgentsApp
|
||||
from cleveractors.core.exceptions import CleverAgentsException
|
||||
@@ -19,7 +19,6 @@ from cleveractors.runtime import (
|
||||
Executor,
|
||||
NodeUsage,
|
||||
create_executor,
|
||||
merge_configs,
|
||||
validate_dict,
|
||||
)
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
This module provides the public API that the CleverThis router consumes:
|
||||
- validate_dict(d, platform_limits)
|
||||
- merge_configs(*dicts)
|
||||
- create_executor(config_dict, credentials, limits, pricing)
|
||||
- ActorResult / NodeUsage dataclasses
|
||||
|
||||
@@ -137,48 +136,6 @@ def validate_dict(config_dict: dict[str, Any], platform_limits: Optional[dict[st
|
||||
return copy.deepcopy(config_dict)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Config merging
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def merge_configs(*dicts: dict[str, Any]) -> dict[str, Any]:
|
||||
"""Deep-merge multiple config dicts per the spec's §3.1 merge algorithm.
|
||||
|
||||
Rules:
|
||||
- absent keys are added
|
||||
- both-mapping keys are deep-merged recursively
|
||||
- both-sequence keys are appended
|
||||
- all other cases: the later value replaces the earlier
|
||||
"""
|
||||
if not dicts:
|
||||
return {}
|
||||
|
||||
result: dict[str, Any] = copy.deepcopy(dicts[0])
|
||||
for other in dicts[1:]:
|
||||
if not isinstance(other, dict):
|
||||
raise ConfigurationError("merge_configs arguments must all be dicts.")
|
||||
result = _deep_merge_two(result, other)
|
||||
return result
|
||||
|
||||
|
||||
def _deep_merge_two(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]:
|
||||
"""Merge override into base recursively."""
|
||||
merged = copy.deepcopy(base)
|
||||
for key, val in override.items():
|
||||
if key in merged:
|
||||
existing = merged[key]
|
||||
if isinstance(existing, dict) and isinstance(val, dict):
|
||||
merged[key] = _deep_merge_two(existing, val)
|
||||
elif isinstance(existing, list) and isinstance(val, list):
|
||||
merged[key] = existing + val
|
||||
else:
|
||||
merged[key] = copy.deepcopy(val)
|
||||
else:
|
||||
merged[key] = copy.deepcopy(val)
|
||||
return merged
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Executor
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -463,7 +420,7 @@ class Executor:
|
||||
# Inject credentials for each provider we have keys for
|
||||
for provider, creds in self.credentials.items():
|
||||
# Find agents using this provider and inject creds
|
||||
for agent_name, agent_cfg in agents_block.items():
|
||||
for _agent_name, agent_cfg in agents_block.items():
|
||||
if isinstance(agent_cfg, dict):
|
||||
agent_provider = agent_cfg.get("provider") or agent_cfg.get("config", {}).get("provider", "openai")
|
||||
if agent_provider == provider or provider == "openai_compatible":
|
||||
|
||||
Reference in New Issue
Block a user