74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
"""EvoScientist Agent - AI-powered research and code execution.
|
|
|
|
This package exposes a convenience API at the package root while keeping
|
|
imports lazy, so lightweight modules (for example config helpers) can be used
|
|
without importing heavy runtime dependencies.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from importlib import import_module
|
|
|
|
_EXPORTS: dict[str, tuple[str, str]] = {
|
|
# Agent graph (lazy to avoid expensive initialization at import time)
|
|
"EvoScientist_agent": (".EvoScientist", "EvoScientist_agent"),
|
|
"create_cli_agent": (".EvoScientist", "create_cli_agent"),
|
|
# Backends
|
|
"CustomSandboxBackend": (".backends", "CustomSandboxBackend"),
|
|
"ReadOnlyFilesystemBackend": (".backends", "ReadOnlyFilesystemBackend"),
|
|
# Configuration
|
|
"EvoScientistConfig": (".config", "EvoScientistConfig"),
|
|
"load_config": (".config", "load_config"),
|
|
"save_config": (".config", "save_config"),
|
|
"get_effective_config": (".config", "get_effective_config"),
|
|
"get_config_path": (".config", "get_config_path"),
|
|
# LLM
|
|
"get_chat_model": (".llm", "get_chat_model"),
|
|
"MODELS": (".llm", "MODELS"),
|
|
"list_models": (".llm", "list_models"),
|
|
"DEFAULT_MODEL": (".llm", "DEFAULT_MODEL"),
|
|
# Prompts
|
|
"get_system_prompt": (".prompts", "get_system_prompt"),
|
|
"RESEARCHER_INSTRUCTIONS": (".prompts", "RESEARCHER_INSTRUCTIONS"),
|
|
# Tools
|
|
"tavily_search": (".tools", "tavily_search"),
|
|
"think_tool": (".tools", "think_tool"),
|
|
# Sessions
|
|
"get_checkpointer": (".sessions", "get_checkpointer"),
|
|
"generate_thread_id": (".sessions", "generate_thread_id"),
|
|
"list_threads": (".sessions", "list_threads"),
|
|
"delete_thread": (".sessions", "delete_thread"),
|
|
}
|
|
|
|
|
|
def __getattr__(name: str):
|
|
"""Lazily import and cache package-level attributes.
|
|
|
|
Args:
|
|
name: The attribute name to look up.
|
|
|
|
Returns:
|
|
The resolved attribute value.
|
|
|
|
Raises:
|
|
AttributeError: If the name is not in _EXPORTS.
|
|
"""
|
|
target = _EXPORTS.get(name)
|
|
if target is None:
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
|
|
module_name, attr_name = target
|
|
module = import_module(module_name, package=__name__)
|
|
value = getattr(module, attr_name)
|
|
# Cache after first load to avoid repeated import lookups.
|
|
globals()[name] = value
|
|
return value
|
|
|
|
|
|
def __dir__() -> list[str]:
|
|
"""List available public attributes including lazy exports."""
|
|
return sorted(set(globals()) | set(_EXPORTS))
|
|
|
|
|
|
__all__ = list(_EXPORTS)
|