A modular framework for mechanistic reasoning and experimental design. Eubiota orchestrates specialized agents to drive tool-grounded discovery through outcome-driven refinement.
Eubiota is a modular agentic platform for end-to-end discovery in the human microbiome, combining multi-agent reasoning with domain-specific tools.
Specialized agents orchestrate an iterative cycle of planning, execution, and verification via shared memory to ensure rigorous evidence grounding.
- [2026.02] Coming.
- Python 3.11 (recommended)
Quick Install with UV (Recommended)
bash setup.sh
source .venv/bin/activateThis installs with inference dependencies: uv pip install -e ".[infer]"
Installation Options
| Use case | Command |
|---|---|
| Inference only (recommended) | bash setup.sh infer |
| Training | bash setup.sh infer train |
| Extended engines (Dashscope, Together, Ollama) | uv pip install -e ".[extended-engines]" |
| Full (all features + training) | uv pip install -e ".[all]" and bash setup_stable_gpu.sh |
cd data
source create_all_dbs.shCopy the .env.template file from scientist/.env.template and rename it to .env, then place it in the scientist/ folder. Update the following variables with your own API keys:
OPENAI_API_KEY(for judging reasponse)GOOGLE_API_KEY(for Google Search tool)PERPLEXITY_API_KEY(for Perplexity Search tool)
Please check API Key Setup Guide for detailed instructions on how to obtain these keys.
Run a single query:
python scientist/solver_scientist.pyBefore running inference or training, we recommend verifying that your API keys and environment are properly configured.
Run the following command to test all integrated tools:
cd scientist
python -m tools.test_toolsExample output:
Success Rate: 100.0%
Tools requiring LLM: 8
- pubmed_search
- ...
Tools not requiring LLM: 6
- kegg_gene_search
- ...
Verify that your LLM engines (OpenAI, DashScope, Gemini, etc.) are correctly initialized and responding:
python scientist/scripts/test_llm_engine.pyexample output:
π Starting fault-tolerant test for 11 engines...
β
Success: 6
β’ gpt-4o
β’ azure-gpt-4
β’ dashscope-qwen2.5-3b-instruct
β’ gemini-1.5-pro
β’ vllm-meta-llama/Llama-3-8b-instruct
β’ together-meta-llama/Llama-3-70b-chat-hf
...
π Testing complete. Script did NOT crash despite errors.
Serve the trained planner model with VLLM (here we deploy our Eubiota-8b planner model):
bash setup.sh train
bash tests/exp/serve_vllm.shfor more vllm serving local model details, please see guidance
Run inference on specific benchmark tasks:
cd test
# Run Our Drug-Microbiome_Impact benchmark
bash tests/Drug-Microbiome_Impact/run.shAfter running, each task folder (e.g., test/Drug-Microbiome_Impact/) will contain:
data/: Contains the evaluation dataset (e.g.,data.json).logs/: Contains detailed execution logs for each problem index (organized by model label).results/: Contains the model's generated answers (output_i.json) and final evaluation scores (finalscore_*.log).
You can find more benchmarking details in benchmark.md.
We mix four domains datasets for training: NQ (Natural Questions) for agentic search, DeepMath-103K for mathematical reasoning, PubMedQA & MedQA-USMLE for general medical-biology reasoning, and our curated microbiome reasoning dataset. (Please remember to access before you run make_train_data.py)
# train & validation data with specified ratio
python data/make_train_data.pyfor more useage of how to customize training & validation data, see data/data_prepare.md
After that, data dir should be:
data/
βββ train/
β βββ train.parquet
βββ val/
β βββ val.parquet (100 samples)
βββ make_train_data.py
Training uses Group Relative Policy Optimization for Multi-Agent Systems (GRPO-MAS) for the planner module.
Start training with tmux:
# Login to wandb first
wandb login
# Create tmux session and start agentflow service (Window 0, make sure you are at the project root and ran `source .venv/bin/activate` in each window)
tmux new-session -s eubiota
bash trainer/train_scientist/serve_with_logs.sh
# Create new window (Ctrl+B then C), modify the `BASE_DATA_DIR` in `trainer/train_scientist/config.yaml` to the absolute path of the data directory, and then start training (Window 1)
bash trainer/train_scientist/train_with_logs.shConfiguration:
All training hyperparameters are in trainer/train_scientist/config.yaml (model settings, tools, RL parameters, resources, etc.)
For more details, please see Configuration Guide.
Logging: We provide a comprehensive logging to monitor training. See logs.md for more details.
For detailed instructions on adding new tools and configuring the agent modules, please refer to the Customization Guide.
An example of our scientific experiment verified workflow visualization is as follows:
Experience designing your own workflow online
|
Step 1: Create Tool Directory scientist/tools/your_tool_name/
βββ tool.py
βββ config.yaml
βββ README.md |
Step 2: Implement Tool Card class YourTool(BaseTool):
def execute(self, query):
# Your tool logic
return result |
|
Step 3: Register in from .your_tool_name import YourTool
# Add to __all__ and TOOL_REGISTRY
__all__.append("YourTool")
TOOL_REGISTRY["Your_Tool"] = YourTool |
Step 4: Register Tool Add to configuration: enabled_tools:
- Your_Tool_Name |
Eubiota driven inflammatory stress gene discovery
Eubiota assisted therapeutic design for gut diseases
Eubiota enabled pathogen-biased antibiotic cocktail design
Eubiota guided anti-inflammatory molecule discovery
We also thank the following open-source projects:
- VeRL for the excellent RL framework design.
- vLLM for fast LLM inference support.
- AgentFlow and Agent Lightning for early-stage exploration in multi-agent RL training.
We are grateful for all the help we got from our contributors!
@article{lu2026eubiota,
title = {Eubiota: Modular Agentic AI for Autonomous Discovery in the Gut Microbiome},
author = {Lu, Pan and Gao, Yifan and Peng, William G. and Zhang, Haoxiang and Zhu, Kunlun and Robinson, Elektra K. and Xu, Qixin and Kotaka, Masakazu and Zhang, Harrison G. and Li, Bingxuan and Shiver, Anthony L. and Choi, Yejin and Huang, Kerwyn Casey and Sonnenburg, Justin and Zou, James},
journal = {bioRxiv},
year = {2026},
month = {feb},
day = {27},
doi = {10.64898/2026.02.27.708412},
url = {https://www.biorxiv.org/content/10.64898/2026.02.27.708412v1},
publisher = {Cold Spring Harbor Laboratory}
}





