EvoScientist 0.0.1.dev2__tar.gz → 0.0.1.dev4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/EvoScientist.py +58 -22
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/__init__.py +19 -0
- evoscientist-0.0.1.dev4/EvoScientist/cli.py +668 -0
- evoscientist-0.0.1.dev4/EvoScientist/config.py +274 -0
- evoscientist-0.0.1.dev4/EvoScientist/llm/__init__.py +21 -0
- evoscientist-0.0.1.dev4/EvoScientist/llm/models.py +99 -0
- evoscientist-0.0.1.dev4/EvoScientist/memory.py +715 -0
- evoscientist-0.0.1.dev4/EvoScientist/middleware.py +80 -0
- evoscientist-0.0.1.dev4/EvoScientist/onboard.py +725 -0
- evoscientist-0.0.1.dev4/EvoScientist/paths.py +44 -0
- evoscientist-0.0.1.dev4/EvoScientist/skills_manager.py +391 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/stream/__init__.py +25 -0
- evoscientist-0.0.1.dev4/EvoScientist/stream/display.py +604 -0
- evoscientist-0.0.1.dev4/EvoScientist/stream/events.py +415 -0
- evoscientist-0.0.1.dev4/EvoScientist/stream/state.py +343 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/stream/utils.py +23 -16
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/tools.py +75 -2
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist.egg-info/PKG-INFO +144 -4
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist.egg-info/SOURCES.txt +14 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist.egg-info/requires.txt +6 -1
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/PKG-INFO +144 -4
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/README.md +138 -3
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/pyproject.toml +14 -3
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_backends.py +0 -3
- evoscientist-0.0.1.dev4/tests/test_config.py +345 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_imports.py +4 -12
- evoscientist-0.0.1.dev4/tests/test_llm.py +226 -0
- evoscientist-0.0.1.dev4/tests/test_onboard.py +408 -0
- evoscientist-0.0.1.dev4/tests/test_skills_manager.py +341 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_stream_tracker.py +1 -1
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_stream_utils.py +19 -2
- evoscientist-0.0.1.dev2/EvoScientist/cli.py +0 -1553
- evoscientist-0.0.1.dev2/EvoScientist/middleware.py +0 -35
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/__main__.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/backends.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/prompts.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/accelerate/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/accelerate/references/custom-plugins.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/accelerate/references/megatron-integration.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/accelerate/references/performance.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/bitsandbytes/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/bitsandbytes/references/memory-optimization.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/bitsandbytes/references/qlora-training.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/bitsandbytes/references/quantization-formats.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/find-skills/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/find-skills/scripts/install_skill.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/flash-attention/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/flash-attention/references/benchmarks.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/flash-attention/references/transformers-integration.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/llama-cpp/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/llama-cpp/references/optimization.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/llama-cpp/references/quantization.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/llama-cpp/references/server.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/lm-evaluation-harness/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/lm-evaluation-harness/references/api-evaluation.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/lm-evaluation-harness/references/benchmark-guide.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/lm-evaluation-harness/references/custom-tasks.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/lm-evaluation-harness/references/distributed-eval.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/references/checklists.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/references/citation-workflow.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/references/reviewer-guidelines.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/references/sources.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/references/writing-guide.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/README.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/aaai2026/README.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026-unified-supp.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026-unified-template.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026.bib +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026.bst +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/README.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/acl.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/acl_latex.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/acl_lualatex.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/acl_natbib.bst +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/anthology.bib.txt +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/custom.bib +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/acl/formatting.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/README.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.bib +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.bst +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.pdf +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/fancyhdr.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/math_commands.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/colm2025/natbib.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/fancyhdr.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.bib +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.bst +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.pdf +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/math_commands.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/iclr2026/natbib.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/algorithm.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/algorithmic.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/example_paper.bib +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/example_paper.pdf +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/example_paper.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/fancyhdr.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/icml2026.bst +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/icml2026.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/icml2026/icml_numpapers.pdf +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/neurips2025/Makefile +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/neurips2025/extra_pkgs.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/neurips2025/main.tex +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ml-paper-writing/templates/neurips2025/neurips.sty +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/peft/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/peft/references/advanced-usage.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/peft/references/troubleshooting.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ray-data/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ray-data/references/integration.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/ray-data/references/transformations.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/LICENSE.txt +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/SKILL.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/references/output-patterns.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/references/workflows.md +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/scripts/init_skill.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/scripts/package_skill.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/skills/skill-creator/scripts/quick_validate.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/stream/emitter.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/stream/formatter.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/stream/tracker.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/subagent.yaml +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist/utils.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist.egg-info/dependency_links.txt +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist.egg-info/entry_points.txt +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/EvoScientist.egg-info/top_level.txt +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/LICENSE +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/setup.cfg +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_prompts.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_stream_emitter.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_stream_state.py +0 -0
- {evoscientist-0.0.1.dev2 → evoscientist-0.0.1.dev4}/tests/test_tools.py +0 -0
|
@@ -13,34 +13,47 @@ Usage:
|
|
|
13
13
|
...
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
import os
|
|
17
16
|
from datetime import datetime
|
|
18
17
|
from pathlib import Path
|
|
19
18
|
|
|
20
19
|
from deepagents import create_deep_agent
|
|
21
20
|
from deepagents.backends import FilesystemBackend, CompositeBackend
|
|
22
|
-
from langchain.chat_models import init_chat_model
|
|
23
21
|
|
|
24
22
|
from .backends import CustomSandboxBackend, MergedReadOnlyBackend
|
|
25
|
-
from .
|
|
23
|
+
from .config import get_effective_config, apply_config_to_env
|
|
24
|
+
from .llm import get_chat_model
|
|
25
|
+
from .middleware import create_skills_middleware, create_memory_middleware
|
|
26
26
|
from .prompts import RESEARCHER_INSTRUCTIONS, get_system_prompt
|
|
27
27
|
from .utils import load_subagents
|
|
28
|
-
from .tools import tavily_search, think_tool
|
|
28
|
+
from .tools import tavily_search, think_tool, skill_manager
|
|
29
|
+
from .paths import (
|
|
30
|
+
ensure_dirs,
|
|
31
|
+
default_workspace_dir,
|
|
32
|
+
MEMORY_DIR as _MEMORY_DIR_PATH,
|
|
33
|
+
USER_SKILLS_DIR as _USER_SKILLS_DIR_PATH,
|
|
34
|
+
)
|
|
29
35
|
|
|
30
36
|
# =============================================================================
|
|
31
37
|
# Configuration
|
|
32
38
|
# =============================================================================
|
|
33
39
|
|
|
40
|
+
# Load configuration from file/env/defaults
|
|
41
|
+
_config = get_effective_config()
|
|
42
|
+
apply_config_to_env(_config)
|
|
43
|
+
|
|
34
44
|
# Backend mode: "sandbox" (with execute) or "filesystem" (read/write only)
|
|
35
45
|
BACKEND_MODE = "sandbox"
|
|
36
46
|
|
|
37
|
-
# Research limits
|
|
38
|
-
MAX_CONCURRENT =
|
|
39
|
-
MAX_ITERATIONS =
|
|
47
|
+
# Research limits (from config)
|
|
48
|
+
MAX_CONCURRENT = _config.max_concurrent
|
|
49
|
+
MAX_ITERATIONS = _config.max_iterations
|
|
40
50
|
|
|
41
51
|
# Workspace settings
|
|
42
|
-
|
|
52
|
+
ensure_dirs()
|
|
53
|
+
WORKSPACE_DIR = str(default_workspace_dir())
|
|
54
|
+
MEMORY_DIR = str(_MEMORY_DIR_PATH) # Shared across sessions (not per-session)
|
|
43
55
|
SKILLS_DIR = str(Path(__file__).parent / "skills")
|
|
56
|
+
USER_SKILLS_DIR = str(_USER_SKILLS_DIR_PATH)
|
|
44
57
|
SUBAGENTS_CONFIG = Path(__file__).parent / "subagent.yaml"
|
|
45
58
|
|
|
46
59
|
# =============================================================================
|
|
@@ -56,10 +69,10 @@ SYSTEM_PROMPT = get_system_prompt(
|
|
|
56
69
|
max_iterations=MAX_ITERATIONS,
|
|
57
70
|
)
|
|
58
71
|
|
|
59
|
-
# Initialize chat model
|
|
60
|
-
chat_model =
|
|
61
|
-
model=
|
|
62
|
-
|
|
72
|
+
# Initialize chat model using the LLM module (respects config settings)
|
|
73
|
+
chat_model = get_chat_model(
|
|
74
|
+
model=_config.model,
|
|
75
|
+
provider=_config.provider,
|
|
63
76
|
# thinking={"type": "enabled", "budget_tokens": 2000},
|
|
64
77
|
)
|
|
65
78
|
|
|
@@ -76,16 +89,25 @@ else:
|
|
|
76
89
|
virtual_mode=True,
|
|
77
90
|
)
|
|
78
91
|
|
|
79
|
-
# Skills backend: merge user-installed (
|
|
92
|
+
# Skills backend: merge user-installed (./skills/) and system (package) skills
|
|
80
93
|
_skills_backend = MergedReadOnlyBackend(
|
|
81
|
-
primary_dir=
|
|
94
|
+
primary_dir=USER_SKILLS_DIR, # user-installed, takes priority
|
|
82
95
|
secondary_dir=SKILLS_DIR, # package built-in, fallback
|
|
83
96
|
)
|
|
84
97
|
|
|
85
|
-
#
|
|
98
|
+
# Memory backend: persistent filesystem for long-term memory (shared across sessions)
|
|
99
|
+
_memory_backend = FilesystemBackend(
|
|
100
|
+
root_dir=MEMORY_DIR,
|
|
101
|
+
virtual_mode=True,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
# Composite backend: workspace as default, skills and memory mounted
|
|
86
105
|
backend = CompositeBackend(
|
|
87
106
|
default=_workspace_backend,
|
|
88
|
-
routes={
|
|
107
|
+
routes={
|
|
108
|
+
"/skills/": _skills_backend,
|
|
109
|
+
"/memory/": _memory_backend,
|
|
110
|
+
},
|
|
89
111
|
)
|
|
90
112
|
|
|
91
113
|
tool_registry = {
|
|
@@ -107,10 +129,13 @@ subagents = load_subagents(
|
|
|
107
129
|
_AGENT_KWARGS = dict(
|
|
108
130
|
name="EvoScientist",
|
|
109
131
|
model=chat_model,
|
|
110
|
-
tools=[think_tool],
|
|
132
|
+
tools=[think_tool, skill_manager],
|
|
111
133
|
backend=backend,
|
|
112
134
|
subagents=subagents,
|
|
113
|
-
middleware=[
|
|
135
|
+
middleware=[
|
|
136
|
+
create_memory_middleware(MEMORY_DIR, extraction_model=chat_model),
|
|
137
|
+
create_skills_middleware(SKILLS_DIR, user_skills_dir=USER_SKILLS_DIR),
|
|
138
|
+
],
|
|
114
139
|
system_prompt=SYSTEM_PROMPT,
|
|
115
140
|
)
|
|
116
141
|
|
|
@@ -124,7 +149,7 @@ def create_cli_agent(workspace_dir: str | None = None):
|
|
|
124
149
|
Args:
|
|
125
150
|
workspace_dir: Optional per-session workspace directory. If provided,
|
|
126
151
|
creates a fresh backend rooted at this path. If None, uses the
|
|
127
|
-
module-level default backend (./workspace
|
|
152
|
+
module-level default backend (./workspace).
|
|
128
153
|
"""
|
|
129
154
|
from langgraph.checkpoint.memory import InMemorySaver # type: ignore[import-untyped]
|
|
130
155
|
|
|
@@ -135,14 +160,25 @@ def create_cli_agent(workspace_dir: str | None = None):
|
|
|
135
160
|
timeout=300,
|
|
136
161
|
)
|
|
137
162
|
sk_backend = MergedReadOnlyBackend(
|
|
138
|
-
primary_dir=
|
|
163
|
+
primary_dir=USER_SKILLS_DIR,
|
|
139
164
|
secondary_dir=SKILLS_DIR,
|
|
140
165
|
)
|
|
166
|
+
# Memory always uses SHARED directory (not per-session) for cross-session persistence
|
|
167
|
+
mem_backend = FilesystemBackend(
|
|
168
|
+
root_dir=MEMORY_DIR,
|
|
169
|
+
virtual_mode=True,
|
|
170
|
+
)
|
|
141
171
|
be = CompositeBackend(
|
|
142
172
|
default=ws_backend,
|
|
143
|
-
routes={
|
|
173
|
+
routes={
|
|
174
|
+
"/skills/": sk_backend,
|
|
175
|
+
"/memory/": mem_backend,
|
|
176
|
+
},
|
|
144
177
|
)
|
|
145
|
-
mw = [
|
|
178
|
+
mw = [
|
|
179
|
+
create_memory_middleware(MEMORY_DIR, extraction_model=chat_model),
|
|
180
|
+
create_skills_middleware(SKILLS_DIR, user_skills_dir=USER_SKILLS_DIR),
|
|
181
|
+
]
|
|
146
182
|
kwargs = dict(
|
|
147
183
|
_AGENT_KWARGS,
|
|
148
184
|
backend=be,
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
"""EvoScientist Agent — AI-powered research & code execution."""
|
|
2
2
|
|
|
3
3
|
from .backends import CustomSandboxBackend, ReadOnlyFilesystemBackend
|
|
4
|
+
from .config import (
|
|
5
|
+
EvoScientistConfig,
|
|
6
|
+
load_config,
|
|
7
|
+
save_config,
|
|
8
|
+
get_effective_config,
|
|
9
|
+
get_config_path,
|
|
10
|
+
)
|
|
11
|
+
from .llm import get_chat_model, MODELS, list_models, DEFAULT_MODEL
|
|
4
12
|
from .middleware import create_skills_middleware
|
|
5
13
|
from .prompts import get_system_prompt, RESEARCHER_INSTRUCTIONS
|
|
6
14
|
from .tools import tavily_search, think_tool
|
|
@@ -13,6 +21,17 @@ __all__ = [
|
|
|
13
21
|
# Backends
|
|
14
22
|
"CustomSandboxBackend",
|
|
15
23
|
"ReadOnlyFilesystemBackend",
|
|
24
|
+
# Configuration
|
|
25
|
+
"EvoScientistConfig",
|
|
26
|
+
"load_config",
|
|
27
|
+
"save_config",
|
|
28
|
+
"get_effective_config",
|
|
29
|
+
"get_config_path",
|
|
30
|
+
# LLM
|
|
31
|
+
"get_chat_model",
|
|
32
|
+
"MODELS",
|
|
33
|
+
"list_models",
|
|
34
|
+
"DEFAULT_MODEL",
|
|
16
35
|
# Middleware
|
|
17
36
|
"create_skills_middleware",
|
|
18
37
|
# Prompts
|