ProCreations's picture
|
download
raw
4.62 kB
# Part III: Compositional Agents Process
This folder contains the data synthesis pipeline used to construct **Part III compositional agents**. The pipeline converts existing Part I and Part II supervision into new agent configurations that combine backbone LLMs and tools.
The goal is to generate query-conditioned compositional agents in the form:
```json
{
"M": {"name": "Backbone LLM Name"},
"T": {"tools": ["tool_name_1", "tool_name_2"]}
}
```
Each generated sample contains the original question, retrieved evidence from Part I and Part II, relevant tool descriptions, the final prompt sent to the LLM, and the generated ranked agent configurations.
## What this pipeline does
The process has three steps.
1. **Build retrieval indexes**
- Part I questions are embedded into a Chroma database.
- Part II questions are embedded into a Chroma database.
- Tool descriptions are embedded into a Chroma database.
2. **Retrieve cross-part supervision**
- For a Part I query, the pipeline retrieves similar Part II queries and their toolkit-oriented agents.
- For a Part II query, the pipeline retrieves similar Part I queries and their backbone-LLM-oriented agents.
- The pipeline also retrieves tool descriptions using LLM-generated tool search queries.
3. **Synthesize compositional agents**
- The retrieved backbone agents, toolkit agents, and tools are merged into a structured suggestion prompt.
- An LLM generates five ranked compositional agents using only the model and tool names appearing in the suggestion.
## Expected dataset layout
By default, the scripts assume the dataset is stored at `../dataset`:
```text
../dataset/
PartI/
agents/merge.json
questions/merge.json
rankings/merge.json
PartII/
agents/merge.json
questions/merge.json
rankings/merge.json
tools/merge.json
tools/merged_tools_fill.json # optional; used first if available
PartI_vector_db/
PartII_vector_db/
Tool_vector_db/
```
The vector database folders are generated by the indexing script.
## Installation
Create a clean environment and install the dependencies:
```bash
pip install -r requirements.txt
```
The LLM synthesis step requires an OpenAI-compatible API key:
```bash
export OPENAI_API_KEY="your_api_key"
```
If you use another OpenAI-compatible endpoint, adjust `partiii_compositional_agents/llm_utils.py` accordingly.
## Usage
### 1. Build all indexes
```bash
python scripts/build_indexes.py \
--dataset-root ../dataset \
--device cuda:0 \
--recreate
```
To build only one index:
```bash
python scripts/build_indexes.py --which part_i_questions
python scripts/build_indexes.py --which part_ii_questions
python scripts/build_indexes.py --which tools
```
### 2. Generate samples from Part I queries
```bash
python scripts/synthesize_part_i.py \
--dataset-root ../dataset \
--output-root ./outputs \
--device cuda:0 \
--sample-size 5
```
Output:
```text
outputs/simulated_results_from_PartI_rebuttal/main.jsonl
```
### 3. Generate samples from Part II queries
```bash
python scripts/synthesize_part_ii.py \
--dataset-root ../dataset \
--output-root ./outputs \
--device cuda:0 \
--sample-size 200
```
Output:
```text
outputs/simulated_results_from_PartII_rebuttal/main.jsonl
```
## Output format
Each line in the output JSONL file is one synthesized training example:
```json
{
"dirname": "PartII",
"num": 0,
"key": "PartII_question_0",
"question": "user question",
"suggestion": "retrieved Part I/Part II/tool evidence",
"prompt": "final generation prompt",
"recommendation_agents": [
{"M": {"name": "..."}, "T": {"tools": ["..."]}, "C": {}}
]
}
```
## Code structure
```text
partiii_compositional_agents/
config.py # central paths and runtime configuration
embeddings.py # OpenAI, MiniLM, and BGE-M3 embedding wrappers
knowledge_base.py # document loading and Chroma index construction
search.py # similarity-search wrapper
llm_utils.py # tool-query generation and agent-generation prompts
synthesis.py # Part I -> Part III and Part II -> Part III synthesis logic
scripts/
build_indexes.py
synthesize_part_i.py
synthesize_part_ii.py
```
## Notes for reproducibility
- The default dense encoder is `BAAI/bge-m3`.
- Tool and question retrieval use Chroma similarity search with a default threshold of `0.5` and `top-k = 5`.
- The generated agents are constrained to use only backbone LLM names and tool names found in the retrieved suggestion.
- The configuration can be changed in `ProjectConfig` or through script arguments.

Xet Storage Details

Size:
4.62 kB
·
Xet hash:
611bd2509db2146a15c1fbe24799ac8ba9bab4d95a107cead68a8b8059e75bcc

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.