From 2e78bc217434dd468dd96ebf8c23387e00243d65 Mon Sep 17 00:00:00 2001 From: JaredforReal Date: Mon, 15 Sep 2025 19:06:35 +0800 Subject: [PATCH 1/6] docs: fix markdownlint Signed-off-by: JaredforReal --- .../docs/training/model_performance_eval.md | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 website/docs/training/model_performance_eval.md diff --git a/website/docs/training/model_performance_eval.md b/website/docs/training/model_performance_eval.md new file mode 100644 index 00000000..d19dae0f --- /dev/null +++ b/website/docs/training/model_performance_eval.md @@ -0,0 +1,217 @@ +# Model Performance Evaluation +## Why evaluate? +Evaluation makes routing data-driven. By measuring per-category accuracy on MMLU-Pro (and doing a quick sanity check with ARC), you can: + +- Select the right model for each category and rank them into categories.model_scores +- Pick a sensible default_model based on overall performance +- Decide when CoT prompting is worth the latency/cost tradeoff +- Catch regressions when models, prompts, or parameters change +- Keep changes reproducible and auditable for CI and releases + +In short, evaluation converts anecdotes into measurable signals that improve quality, cost efficiency, and reliability of the router. + +--- + +This guide documents the automated workflow to evaluate models (MMLU-Pro and ARC Challenge) via a vLLM-compatible OpenAI endpoint, generate a performance-based routing config, and update categories.model_scores in config. + +see code in [/src/training/model_eval](https://github.com/vllm-project/semantic-router/tree/main/src/training/model_eval) + +### What you'll run end-to-end +#### 1) Evaluate models: + +- per-category accuracies +- ARC Challenge: overall accuracy + +#### 2) Visualize results + +- bar/heatmap plot of per-category accuracies + +**TODO** a picture needed +#### 3) Generate an updated config.yaml: + +- Rank models per category into categories.model_scores +- Set default_model to the best average performer +- Keep or apply category-level reasioning settings + +## 1.Prerequisites + +- A running vLLM-compatible OpenAI endpoint serving your models + - Endpoint URL like http://localhost:8000/v1 + - Optional API key if your endpoint requires one +- Python packages for evaluation scripts: + - From the repo root: matplotlib + - From `/src/training/model_eval`: [requirements.txt](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/requirements.txt) + + ```bash + cd /src/training/model_eval + pip install -r requirements.txt + ``` + +**Optional tip:** + +- Ensure your `config/config.yaml` includes your deployed model names under `vllm_endpoints[].models` and any pricing/policy under `model_config` if you plan to use the generated config directly. + +## 2.Evaluate on MMLU-Pro +see script in [mmul_pro_vllm_eval.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/mmlu_pro_vllm_eval.py) + +### Example usage patterns: + +```bash +# Evaluate a few models, few samples per category, direct prompting +python mmlu_pro_vllm_eval.py \ + --endpoint http://localhost:8000/v1 \ + --models gemma3:27b phi4 mistral-small3.1 \ + --samples-per-category 10 + +# Evaluate with CoT (results saved under *_cot) +python mmlu_pro_vllm_eval.py \ + --endpoint http://localhost:8000/v1 \ + --models gemma3:27b phi4 mistral-small3.1 \ + --samples-per-category 10 + --use-cot +``` + +### Key flags: + +- **--endpoint**: vLLM OpenAI URL (default http://localhost:8000/v1) +- **--models**: space-separated list OR a single comma-separated string; if omitted, the script queries /models from the endpoint +- **--categories**: restrict evaluation to specific categories; if omitted, uses all categories in the dataset +- **--samples-per-category**: limit questions per category (useful for quick runs) +- **--use-cot**: enables Chain-of-Thought prompting variant; results are saved in a separate subfolder suffix (_cot vs _direct) +- **--concurrent-requests**: concurrency for throughput +- **--output-dir**: where results are saved (default results) +- **--max-tokens**, **--temperature**, **--seed**: generation and reproducibility knobs + +### What it outputs per model: + +- **results/_(direct|cot)/** + - **detailed_results.csv**: one row per question with is_correct and category + - **analysis.json**: overall_accuracy, category_accuracy map, avg_response_time, counts + - **summary.json**: condensed metrics +- **mmlu_pro_vllm_eval.txt**: prompts and answers log (debug/inspection) + +### Notes: + +- Model naming: slashes are replaced with underscores for folder names; e.g., gemma3:27b -> gemma3:27b_direct directory. +- Category accuracy is computed on successful queries only; failed requests are excluded. + +## 3.Evaluate on ARC Challenge (optional, overall sanity check) +see script in [arc_challenge_vllm_eval.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/arc_challenge_vllm_eval.py) + +### Example usage patterns: + +``` bash +python arc_challenge_vllm_eval.py \ + --endpoint http://localhost:8000/v1\ + --models gemma3:27b,phi4:latest +``` + +### Key flags: + +- **--samples**: total questions to sample (default 20); ARC is not categorized in our script +- Other flags mirror the MMLU-Pro script + +### What it outputs per model: + +- **results/_(direct|cot)/** + - **detailed_results.csv**: one row per question with is_correct and category + - **analysis.json**: overall_accuracy, avg_response_time + - **summary.json**: condensed metrics +- **arc_challenge_vllm_eval.txt**: prompts and answers log (debug/inspection) + +### Note: +ARC results do not feed categories[].model_scores directly, but they can help spot regressions. + +## 4.Visualize per-category performance +see script in [plot_category_accuracies.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/plot_category_accuracies.py) + +### Example usage patterns: + +```bash +# Use results/ to generate bar plot +python src/training/model_eval/plot_category_accuracies.py \ + --results-dir results \ + --plot-type bar \ + --output-file model_eval/category_accuracies.png + +# Use results/ to generate heatmap plot +python src/training/model_eval/plot_category_accuracies.py \ + --results-dir results \ + --plot-type heatmap \ + --output-file model_eval/category_accuracies.png + +# Use sample-data to generate example plot +python src/training/model_eval/plot_category_accuracies.py \ + --sample-data \ + --plot-type heatmap \ + --output-file model_eval/category_accuracies.png +``` + +### Key flags: + +- **--results-dir**: where analysis.json files are +- **--plot-type**: bar or heatmap +- **--output-file**: output image path (default model_eval/category_accuracies.png) +- **--sample-data**: if no results exist, generates fake data to preview the plot + +### What it does: + +- Finds all results/**/analysis.json, aggregates analysis["category_accuracy"] per model +- Adds an Overall column representing the average across categories +- Produces a figure to quickly compare model/category performance + +### Note: + +- It merges “direct” and “cot” as distinct model variants by appending :direct or :cot to the label; the legend hides “:direct” for brevity. + +## 5.Generate performance-based routing config +see script in [result_to_config.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/result_to_config.py) + +### Example usage patterns: + +```bash +# Use results/ to generate a new config file (not overridded) +python src/training/model_eval/result_to_config.py \ + --results-dir results \ + --output-file config/config.eval.yaml + +# Modify similarity-thredshold +python src/training/model_eval/result_to_config.py \ + --results-dir results \ + --output-file config/config.eval.yaml \ + --similarity-threshold 0.85 + +# Generate from specific folder +python src/training/model_eval/result_to_config.py \ + --results-dir results/mmlu_run_2025_09_10 \ + --output-file config/config.eval.yaml +``` + +### Key flags: + +- **--results-dir**: points to the folder where analysis.json files live +- **--output-file**: target config path (default config/config.yaml) +- **--similarity-threshold**: semantic cache threshold to set in the generated config + +### What it does: + +- Reads all analysis.json files, extracting analysis["category_accuracy"] +- Constructs a new config: + - default_model: the best average performer across categories + - categories: For each category present in results, ranks models by accuracy: + - category.model_scores = [{model: "", score: }, ...], highest first + - category reasoning settings: auto-filled from a built-in mapping (math, physics, chemistry, CS, engineering -> high reasoning; others default to low/medium; you can adjust after generation) + - Leaves out any special “auto” placeholder models if present + +### Schema alignment: + +- **categories[].name**: the MMLU-Pro category string +- **categories[].model_scores**: descending ranking by accuracy for that category +- **default_model**: a top performer across categories (approach suffix removed, e.g., gemma3:27b from gemma3:27b:direct) +- Keeps other config sections (semantic_cache, tools, classifier, prompt_guard) with reasonable defaults; you can edit them post-generation if your environment differs + +### Note: + +- Existing config.yaml can be overwritten. Consider writing to a temp file first and diffing: + - --output-file config/config.eval.yaml +- If your production config.yaml carries environment-specific settings (endpoints, pricing, policies), port the evaluated categories[].model_scores and default_model back into your canonical config. From 658e29405bd1c7326c6f6a1d6c9147edeb750635 Mon Sep 17 00:00:00 2001 From: JaredforReal Date: Mon, 15 Sep 2025 19:16:26 +0800 Subject: [PATCH 2/6] docs: add Next in training-overview.md Signed-off-by: JaredforReal --- website/docs/training/training-overview.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/website/docs/training/training-overview.md b/website/docs/training/training-overview.md index f4e0c476..daf72903 100644 --- a/website/docs/training/training-overview.md +++ b/website/docs/training/training-overview.md @@ -998,3 +998,7 @@ lora_training_infrastructure: lora_training: "$5-20 per model (reduced compute)" savings: "80-90% cost reduction" ``` + +## Next + +- See: [Model Performance Evaluation](/training/model-performance-eval) From 468fb15598c7801e6cd2b3fc37063223370e2c50 Mon Sep 17 00:00:00 2001 From: JaredforReal Date: Mon, 15 Sep 2025 19:25:57 +0800 Subject: [PATCH 3/6] fix deploy error Signed-off-by: JaredforReal --- website/docs/training/model_performance_eval.md | 6 +++--- website/sidebars.js | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/website/docs/training/model_performance_eval.md b/website/docs/training/model_performance_eval.md index d19dae0f..041e1077 100644 --- a/website/docs/training/model_performance_eval.md +++ b/website/docs/training/model_performance_eval.md @@ -84,7 +84,7 @@ python mmlu_pro_vllm_eval.py \ ### What it outputs per model: -- **results/_(direct|cot)/** +- **results/Model_Name_(direct|cot)/** - **detailed_results.csv**: one row per question with is_correct and category - **analysis.json**: overall_accuracy, category_accuracy map, avg_response_time, counts - **summary.json**: condensed metrics @@ -113,7 +113,7 @@ python arc_challenge_vllm_eval.py \ ### What it outputs per model: -- **results/_(direct|cot)/** +- **results/Model_Name_(direct|cot)/** - **detailed_results.csv**: one row per question with is_correct and category - **analysis.json**: overall_accuracy, avg_response_time - **summary.json**: condensed metrics @@ -199,7 +199,7 @@ python src/training/model_eval/result_to_config.py \ - Constructs a new config: - default_model: the best average performer across categories - categories: For each category present in results, ranks models by accuracy: - - category.model_scores = [{model: "", score: }, ...], highest first + - category.model_scores = `[{ model: "Model_Name", score: 0.87 }, ...]`, highest first - category reasoning settings: auto-filled from a built-in mapping (math, physics, chemistry, CS, engineering -> high reasoning; others default to low/medium; you can adjust after generation) - Leaves out any special “auto” placeholder models if present diff --git a/website/sidebars.js b/website/sidebars.js index 23723d15..c74b6f27 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -38,6 +38,7 @@ const sidebars = { label: 'Model Training', items: [ 'training/training-overview', + 'training/model_performance_eval', ], }, { From f4d7de1e24d05465d5efa2734344b3429c39a98e Mon Sep 17 00:00:00 2001 From: JaredforReal Date: Wed, 17 Sep 2025 15:41:26 +0800 Subject: [PATCH 4/6] docs: add pngs and examples in doc & add doc to sidebar Signed-off-by: JaredforReal --- ...ance_eval.md => model-performance-eval.md} | 194 ++++++++++++++---- website/sidebars.js | 2 +- website/static/img/bar.png | Bin 0 -> 51719 bytes website/static/img/heatmap.png | Bin 0 -> 64252 bytes 4 files changed, 151 insertions(+), 45 deletions(-) rename website/docs/training/{model_performance_eval.md => model-performance-eval.md} (56%) create mode 100644 website/static/img/bar.png create mode 100644 website/static/img/heatmap.png diff --git a/website/docs/training/model_performance_eval.md b/website/docs/training/model-performance-eval.md similarity index 56% rename from website/docs/training/model_performance_eval.md rename to website/docs/training/model-performance-eval.md index 041e1077..b014fa19 100644 --- a/website/docs/training/model_performance_eval.md +++ b/website/docs/training/model-performance-eval.md @@ -12,12 +12,12 @@ In short, evaluation converts anecdotes into measurable signals that improve qua --- -This guide documents the automated workflow to evaluate models (MMLU-Pro and ARC Challenge) via a vLLM-compatible OpenAI endpoint, generate a performance-based routing config, and update categories.model_scores in config. +This guide documents the automated workflow to evaluate models (MMLU-Pro and ARC Challenge) via a vLLM-compatible OpenAI endpoint, generate a performance-based routing config, and update `categories.model_scores` in config. see code in [/src/training/model_eval](https://github.com/vllm-project/semantic-router/tree/main/src/training/model_eval) ### What you'll run end-to-end -#### 1) Evaluate models: +#### 1) Evaluate models - per-category accuracies - ARC Challenge: overall accuracy @@ -26,8 +26,10 @@ see code in [/src/training/model_eval](https://github.com/vllm-project/semantic- - bar/heatmap plot of per-category accuracies -**TODO** a picture needed -#### 3) Generate an updated config.yaml: +![Bar](/img/bar.png) +![Heatmap](/img/heatmap.png) + +#### 3) Generate an updated config.yaml - Rank models per category into categories.model_scores - Set default_model to the best average performer @@ -38,11 +40,21 @@ see code in [/src/training/model_eval](https://github.com/vllm-project/semantic- - A running vLLM-compatible OpenAI endpoint serving your models - Endpoint URL like http://localhost:8000/v1 - Optional API key if your endpoint requires one + + ```bash + # Terminal 1 + vllm serve microsoft/phi-4 --port 11434 --served_model_name phi4 + + # Terminal 2 + vllm serve Qwen/Qwen3-0.6B --port 11435 --served_model_name qwen3-0.6B + ``` + - Python packages for evaluation scripts: - - From the repo root: matplotlib + - From the repo root: matplotlib in [requirements.txt](https://github.com/vllm-project/semantic-router/blob/main/requirements.txt) - From `/src/training/model_eval`: [requirements.txt](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/requirements.txt) ```bash + # We will work at this dir in this guide cd /src/training/model_eval pip install -r requirements.txt ``` @@ -54,24 +66,36 @@ see code in [/src/training/model_eval](https://github.com/vllm-project/semantic- ## 2.Evaluate on MMLU-Pro see script in [mmul_pro_vllm_eval.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/mmlu_pro_vllm_eval.py) -### Example usage patterns: +### Example usage patterns ```bash # Evaluate a few models, few samples per category, direct prompting python mmlu_pro_vllm_eval.py \ - --endpoint http://localhost:8000/v1 \ - --models gemma3:27b phi4 mistral-small3.1 \ + --endpoint http://localhost:11434/v1 \ + --models phi4 \ + --samples-per-category 10 + +python mmlu_pro_vllm_eval.py \ + --endpoint http://localhost:11435/v1 \ + --models qwen3-0.6B \ --samples-per-category 10 # Evaluate with CoT (results saved under *_cot) python mmlu_pro_vllm_eval.py \ - --endpoint http://localhost:8000/v1 \ - --models gemma3:27b phi4 mistral-small3.1 \ + --endpoint http://localhost:11435/v1 \ + --models qwen3-0.6B \ --samples-per-category 10 --use-cot + +# If you have set up Semantic Router properly, you can run in one go +python mmlu_pro_vllm_eval.py \ + --endpoint http://localhost:8801/v1 \ + --models qwen3-0.6B, phi4 \ + --samples-per-category + # --use-cot # Uncomment this line if use CoT ``` -### Key flags: +### Key flags - **--endpoint**: vLLM OpenAI URL (default http://localhost:8000/v1) - **--models**: space-separated list OR a single comma-separated string; if omitted, the script queries /models from the endpoint @@ -82,7 +106,7 @@ python mmlu_pro_vllm_eval.py \ - **--output-dir**: where results are saved (default results) - **--max-tokens**, **--temperature**, **--seed**: generation and reproducibility knobs -### What it outputs per model: +### What it outputs per model - **results/Model_Name_(direct|cot)/** - **detailed_results.csv**: one row per question with is_correct and category @@ -90,28 +114,29 @@ python mmlu_pro_vllm_eval.py \ - **summary.json**: condensed metrics - **mmlu_pro_vllm_eval.txt**: prompts and answers log (debug/inspection) -### Notes: +**Note** -- Model naming: slashes are replaced with underscores for folder names; e.g., gemma3:27b -> gemma3:27b_direct directory. +- **Model naming**: slashes are replaced with underscores for folder names; e.g., gemma3:27b -> gemma3:27b_direct directory. - Category accuracy is computed on successful queries only; failed requests are excluded. ## 3.Evaluate on ARC Challenge (optional, overall sanity check) see script in [arc_challenge_vllm_eval.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/arc_challenge_vllm_eval.py) -### Example usage patterns: +### Example usage patterns ``` bash python arc_challenge_vllm_eval.py \ - --endpoint http://localhost:8000/v1\ - --models gemma3:27b,phi4:latest + --endpoint http://localhost:8801/v1\ + --models qwen3-0.6B,phi4 + --output-dir arc_results ``` -### Key flags: +### Key flags - **--samples**: total questions to sample (default 20); ARC is not categorized in our script -- Other flags mirror the MMLU-Pro script +- Other flags mirror the **MMLU-Pro** script -### What it outputs per model: +### What it outputs per model - **results/Model_Name_(direct|cot)/** - **detailed_results.csv**: one row per question with is_correct and category @@ -119,8 +144,9 @@ python arc_challenge_vllm_eval.py \ - **summary.json**: condensed metrics - **arc_challenge_vllm_eval.txt**: prompts and answers log (debug/inspection) -### Note: -ARC results do not feed categories[].model_scores directly, but they can help spot regressions. +**Note** + +- ARC results do not feed `categories[].model_scores` directly, but they can help spot regressions. ## 4.Visualize per-category performance see script in [plot_category_accuracies.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/plot_category_accuracies.py) @@ -129,45 +155,45 @@ see script in [plot_category_accuracies.py](https://github.com/vllm-project/sema ```bash # Use results/ to generate bar plot -python src/training/model_eval/plot_category_accuracies.py \ +python plot_category_accuracies.py \ --results-dir results \ --plot-type bar \ - --output-file model_eval/category_accuracies.png + --output-file results/bar.png # Use results/ to generate heatmap plot -python src/training/model_eval/plot_category_accuracies.py \ +python plot_category_accuracies.py \ --results-dir results \ --plot-type heatmap \ - --output-file model_eval/category_accuracies.png + --output-file results/heatmap.png # Use sample-data to generate example plot python src/training/model_eval/plot_category_accuracies.py \ --sample-data \ --plot-type heatmap \ - --output-file model_eval/category_accuracies.png + --output-file results/category_accuracies.png ``` -### Key flags: +### Key flags - **--results-dir**: where analysis.json files are - **--plot-type**: bar or heatmap - **--output-file**: output image path (default model_eval/category_accuracies.png) - **--sample-data**: if no results exist, generates fake data to preview the plot -### What it does: +### What it does -- Finds all results/**/analysis.json, aggregates analysis["category_accuracy"] per model +- Finds all `results/**/analysis.json`, aggregates analysis["category_accuracy"] per model - Adds an Overall column representing the average across categories - Produces a figure to quickly compare model/category performance -### Note: +**Note** -- It merges “direct” and “cot” as distinct model variants by appending :direct or :cot to the label; the legend hides “:direct” for brevity. +- It merges `direct` and `cot` as distinct model variants by appending `:direct` or `:cot` to the label; the legend hides `:direct` for brevity. ## 5.Generate performance-based routing config see script in [result_to_config.py](https://github.com/vllm-project/semantic-router/blob/main/src/training/model_eval/result_to_config.py) -### Example usage patterns: +### Example usage patterns ```bash # Use results/ to generate a new config file (not overridded) @@ -187,31 +213,111 @@ python src/training/model_eval/result_to_config.py \ --output-file config/config.eval.yaml ``` -### Key flags: +### Key flags - **--results-dir**: points to the folder where analysis.json files live - **--output-file**: target config path (default config/config.yaml) - **--similarity-threshold**: semantic cache threshold to set in the generated config -### What it does: +### What it does -- Reads all analysis.json files, extracting analysis["category_accuracy"] +- Reads all `analysis.json` files, extracting analysis["category_accuracy"] - Constructs a new config: - - default_model: the best average performer across categories - - categories: For each category present in results, ranks models by accuracy: - - category.model_scores = `[{ model: "Model_Name", score: 0.87 }, ...]`, highest first - - category reasoning settings: auto-filled from a built-in mapping (math, physics, chemistry, CS, engineering -> high reasoning; others default to low/medium; you can adjust after generation) + - **categories**: For each category present in results, ranks models by accuracy: + - **category.model_scores** = `[{ model: "Model_Name", score: 0.87 }, ...]`, highest first + - **default_model**: the best average performer across categories + - **category reasoning settings**: auto-filled from a built-in mapping (you can adjust after generation) + - math, physics, chemistry, CS, engineering -> high reasoning + - others default -> low/medium - Leaves out any special “auto” placeholder models if present -### Schema alignment: +### Schema alignment - **categories[].name**: the MMLU-Pro category string - **categories[].model_scores**: descending ranking by accuracy for that category - **default_model**: a top performer across categories (approach suffix removed, e.g., gemma3:27b from gemma3:27b:direct) - Keeps other config sections (semantic_cache, tools, classifier, prompt_guard) with reasonable defaults; you can edit them post-generation if your environment differs -### Note: +**Note** +- This script only work with results from **MMLU_Pro** Evaluation. - Existing config.yaml can be overwritten. Consider writing to a temp file first and diffing: - - --output-file config/config.eval.yaml -- If your production config.yaml carries environment-specific settings (endpoints, pricing, policies), port the evaluated categories[].model_scores and default_model back into your canonical config. + - `--output-file config/config.eval.yaml` +- If your production config.yaml carries **environment-specific settings (endpoints, pricing, policies)**, port the evaluated `categories[].model_scores` and `default_model` back into your canonical config. + +### Example config.eval.yaml +see more about config at [configuration](https://vllm-semantic-router.com/docs/getting-started/configuration) + +```yaml +bert_model: + model_id: sentence-transformers/all-MiniLM-L12-v2 + threshold: 0.6 + use_cpu: true +semantic_cache: + enabled: true + similarity_threshold: 0.85 + max_entries: 1000 + ttl_seconds: 3600 +tools: + enabled: true + top_k: 3 + similarity_threshold: 0.2 + tools_db_path: config/tools_db.json + fallback_to_empty: true +prompt_guard: + enabled: true + use_modernbert: true + model_id: models/jailbreak_classifier_modernbert-base_model + threshold: 0.7 + use_cpu: true + jailbreak_mapping_path: models/jailbreak_classifier_modernbert-base_model/jailbreak_type_mapping.json + +# Lack of endpoint config and model_config right here, modify here as needed + +classifier: + category_model: + model_id: models/category_classifier_modernbert-base_model + use_modernbert: true + threshold: 0.6 + use_cpu: true + category_mapping_path: models/category_classifier_modernbert-base_model/category_mapping.json + pii_model: + model_id: models/pii_classifier_modernbert-base_presidio_token_model + use_modernbert: true + threshold: 0.7 + use_cpu: true + pii_mapping_path: models/pii_classifier_modernbert-base_presidio_token_model/pii_type_mapping.json +categories: +- name: business + use_reasoning: false + reasoning_description: Business content is typically conversational + reasoning_effort: low + model_scores: + - model: phi4 + score: 0.2 + - model: qwen3-0.6B + score: 0.0 +- name: law + use_reasoning: false + reasoning_description: Legal content is typically explanatory + reasoning_effort: medium + model_scores: + - model: phi4 + score: 0.8 + - model: qwen3-0.6B + score: 0.2 + +# Ignore some categories here + +- name: engineering + use_reasoning: true + reasoning_description: Engineering problems require systematic problem-solving + reasoning_effort: high + model_scores: + - model: phi4 + score: 0.6 + - model: qwen3-0.6B + score: 0.2 +default_reasoning_effort: medium +default_model: phi4 +``` diff --git a/website/sidebars.js b/website/sidebars.js index c74b6f27..eff61a87 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -38,7 +38,7 @@ const sidebars = { label: 'Model Training', items: [ 'training/training-overview', - 'training/model_performance_eval', + 'training/model-performance-eval', ], }, { diff --git a/website/static/img/bar.png b/website/static/img/bar.png new file mode 100644 index 0000000000000000000000000000000000000000..d369681df88bb31d331fbe0cad9cb5e5fe0d058e GIT binary patch literal 51719 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 DmGDX{ literal 0 HcmV?d00001 diff --git a/website/static/img/heatmap.png b/website/static/img/heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..06b4ea26ee858f70cf2f9b3be9c4ff6b78705f8b GIT binary patch literal 64252 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 literal 0 HcmV?d00001 From bf11d7ec9a8b0bf1fd63d2ed1a19d77236f4657a Mon Sep 17 00:00:00 2001 From: JaredforReal Date: Wed, 17 Sep 2025 15:53:45 +0800 Subject: [PATCH 5/6] Fix: docs-build error Signed-off-by: JaredforReal --- website/docs/training/training-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/training/training-overview.md b/website/docs/training/training-overview.md index daf72903..1dee0d93 100644 --- a/website/docs/training/training-overview.md +++ b/website/docs/training/training-overview.md @@ -1001,4 +1001,4 @@ lora_training_infrastructure: ## Next -- See: [Model Performance Evaluation](/training/model-performance-eval) +- See: [Model Performance Evaluation](/docs/training/model-performance-eval) From 32a78e0dee184514b6abc7d37927ff349f4e034f Mon Sep 17 00:00:00 2001 From: JaredforReal Date: Fri, 19 Sep 2025 10:20:45 +0800 Subject: [PATCH 6/6] fix: codespell in model-perf-eval Signed-off-by: JaredforReal --- website/docs/training/model-performance-eval.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/training/model-performance-eval.md b/website/docs/training/model-performance-eval.md index b014fa19..87cd0a05 100644 --- a/website/docs/training/model-performance-eval.md +++ b/website/docs/training/model-performance-eval.md @@ -196,7 +196,7 @@ see script in [result_to_config.py](https://github.com/vllm-project/semantic-rou ### Example usage patterns ```bash -# Use results/ to generate a new config file (not overridded) +# Use results/ to generate a new config file (not overridden) python src/training/model_eval/result_to_config.py \ --results-dir results \ --output-file config/config.eval.yaml