|
|
--- |
|
|
{} |
|
|
--- |
|
|
# EPIC Router Family |
|
|
|
|
|
This repository hosts the public checkpoints for the EPIC router models. Each |
|
|
checkpoint learns to pick the best reasoning configuration (method, aggregator, |
|
|
sample count, etc.) given a natural-language math question. |
|
|
|
|
|
|
|
|
## Available Versions |
|
|
|
|
|
| Subdirectory | File | Notes | |
|
|
|--------------|-------------------|-------------------------------------| |
|
|
| `0.25/` | `router_model.pt` | Router trained for the cost-accuracy trade-off = 0.25. | |
|
|
| `0.5/` | `router_model.pt` | Router trained for the cost-accuracy trade-off = 0.5. | |
|
|
| `0.75/` | `router_model.pt` | Router trained for the cost-accuracy trade-off = 0.75 | |
|
|
| `1.0/` | `router_model.pt` | Router trained for the cost-accuracy trade-off = 1.0 | |
|
|
|
|
|
Each checkpoint contains: |
|
|
|
|
|
- `state_dict`: PyTorch weights for `RouterScoringModel` |
|
|
- `model_name`: base encoder identifier (defaults to `sentence-transformers/all-MiniLM-L6-v2`) |
|
|
- `projection_dim`: dimension of the projection head |
|
|
- `methods`: serialized reasoning configurations; each row corresponds to one column in the router head |
|
|
|
|
|
|
|
|
## Quickstart (Python) |
|
|
|
|
|
Install the package locally: |
|
|
|
|
|
```bash |
|
|
git clone https://github.com/nguyenngocbaocmt02/epic.git |
|
|
cd EPIC |
|
|
pip install -e . |
|
|
``` |
|
|
|
|
|
Load a checkpoint and route a question: |
|
|
|
|
|
```python |
|
|
from huggingface_hub import hf_hub_download |
|
|
import torch |
|
|
from epic.router.models import RouterScoringModel, MiniLMQuestionEncoder, QuestionProjector |
|
|
from epic.data_schemas.reasoning import ReasoningConfig |
|
|
|
|
|
REPO_ID = "baonn/epic" |
|
|
VERSION = "1.0" # or 0.5 / 0.75 / 0.25 |
|
|
|
|
|
checkpoint_path = hf_hub_download( |
|
|
repo_id=REPO_ID, |
|
|
filename="router_model.pt", |
|
|
subfolder=VERSION, |
|
|
) |
|
|
checkpoint = torch.load(checkpoint_path, map_location="cpu") |
|
|
|
|
|
encoder = MiniLMQuestionEncoder( |
|
|
model_name=checkpoint.get("model_name", "sentence-transformers/all-MiniLM-L6-v2"), |
|
|
trainable=False, |
|
|
) |
|
|
projector = QuestionProjector( |
|
|
input_dim=encoder.transformer.config.hidden_size, |
|
|
projection_dim=int(checkpoint["projection_dim"]), |
|
|
) |
|
|
model = RouterScoringModel( |
|
|
question_encoder=encoder, |
|
|
projector=projector, |
|
|
num_methods=len(checkpoint["methods"]), |
|
|
) |
|
|
model.load_state_dict(checkpoint["state_dict"]) |
|
|
model.eval() |
|
|
|
|
|
reasoning_configs = [ |
|
|
ReasoningConfig.deserialize(payload) for payload in checkpoint["methods"] |
|
|
] |
|
|
|
|
|
questions = ["x + 20 = 30 then x = ?", "How many positive divisors does 3600 have?"] |
|
|
with torch.no_grad(): |
|
|
logits = model(questions) |
|
|
method_indices = torch.argmax(logits, dim=1).tolist() |
|
|
|
|
|
print("Recommended config for question 1:", reasoning_configs[method_indices[0]].serialize(include_samples=True)) |
|
|
print("Recommended config for question 2:", reasoning_configs[method_indices[1]].serialize(include_samples=True)) |
|
|
``` |