Skip to content

[Dashboard][Feat] add natural language mode to DSL builder#1687

Merged
Xunzhuo merged 3 commits intomainfrom
cb/dsl-nl-mode
Apr 2, 2026
Merged

[Dashboard][Feat] add natural language mode to DSL builder#1687
Xunzhuo merged 3 commits intomainfrom
cb/dsl-nl-mode

Conversation

@Xunzhuo
Copy link
Copy Markdown
Member

@Xunzhuo Xunzhuo commented Mar 31, 2026

Summary

  • Scope: enable the Dashboard Builder natural-language mode with default MoM routing, custom model connections, AI review feedback, and existing compile/deploy integration
  • Primary skill: dashboard-platform-change
  • Impacted surfaces: dashboard/frontend Builder page/store/types, dashboard/backend NL generation route and handlers, and minimal src/semantic-router/pkg/extproc cleanup required to satisfy repository pre-commit hooks
  • Conditional surfaces intentionally skipped: local smoke flow, feature gate, and E2E coverage
  • Behavior-visible change: yes
  • Debt entry: none

Validation

  • Environment: cpu-local
  • Fast gate: make dashboard-check
  • Feature gate: not run
  • Local smoke / E2E: not run
  • CI expectations / blockers: cd dashboard/backend && go test ./... is currently blocked by the existing TestMergeDeployPayload_RoundTripsMaintainedAMDConfig fixture path issue (../../../deploy/amd/config.yaml not found), which is unrelated to this dashboard change

Checklist

  • PR title uses the repo prefix format: [Bugfix], [CI/Build], [CLI], [Dashboard], [Doc], [Feat], [Router], or [Misc]
  • If the PR spans multiple categories, the title includes all relevant prefixes
  • Commits in this PR are signed off with git commit -s
  • Source-of-truth docs or indexed debt entries were updated when applicable
  • The validation results above reflect the actual commands or blockers for this change

@Xunzhuo Xunzhuo requested a review from rootfs as a code owner March 31, 2026 05:33
Copilot AI review requested due to automatic review settings March 31, 2026 05:33
@netlify
Copy link
Copy Markdown

netlify bot commented Mar 31, 2026

Deploy Preview for vllm-semantic-router ready!

Name Link
🔨 Latest commit 7be3d9c
🔍 Latest deploy log https://app.netlify.com/projects/vllm-semantic-router/deploys/69cd4aa79708be0008f29f25
😎 Deploy Preview https://deploy-preview-1687--vllm-semantic-router.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 31, 2026

👥 vLLM Semantic Team Notification

The following members have been identified for the changed files in this PR and have been automatically assigned:

📁 Root Directory

Owners: @rootfs, @Xunzhuo
Files changed:

  • .github/workflows/ci-changes.yml
  • .github/workflows/integration-test-k8s.yml
  • .pre-commit-config.yaml
  • docs/agent/plans/README.md
  • docs/agent/plans/pl-0024-balance-recipe-simplification-loop.md
  • paper/references.bib

📁 bench

Owners: @yuezhu1, @Xunzhuo
Files changed:

  • bench/cpu-vs-gpu/config-bench-candle.yaml
  • bench/hallucination/config-7b.yaml
  • bench/hallucination/config.yaml

📁 config

Owners: @rootfs, @Xunzhuo
Files changed:

  • config/README.md
  • config/config.yaml
  • config/plugin/content-safety/hybrid.yaml
  • config/plugin/jailbreak/guard.yaml
  • config/plugin/pii/redact.yaml
  • config/plugin/router-replay/debug.yaml

📁 dashboard

Owners: @JaredforReal, @Xunzhuo
Files changed:

  • dashboard/backend/Dockerfile
  • dashboard/backend/entrypoint.sh
  • dashboard/backend/handlers/builder_nl.go
  • dashboard/backend/handlers/builder_nl_client.go
  • dashboard/backend/handlers/builder_nl_context.go
  • dashboard/backend/handlers/builder_nl_domain_validation.go
  • dashboard/backend/handlers/builder_nl_generation.go
  • dashboard/backend/handlers/builder_nl_options.go
  • dashboard/backend/handlers/builder_nl_progress.go
  • dashboard/backend/handlers/builder_nl_runtime_test.go
  • dashboard/backend/handlers/builder_nl_service.go
  • dashboard/backend/handlers/builder_nl_service_test.go
  • dashboard/backend/handlers/builder_nl_validation.go
  • dashboard/backend/handlers/openai_chat_response_support.go
  • dashboard/backend/handlers/openclaw_room_worker_chat.go
  • dashboard/backend/handlers/openclaw_stream.go
  • dashboard/backend/handlers/runtime_config_sync_test.go
  • dashboard/backend/handlers/topology_response.go
  • dashboard/backend/handlers/topology_test.go
  • dashboard/backend/router/core_routes.go
  • dashboard/backend/router/core_routes_test.go
  • dashboard/frontend/src/App.tsx
  • dashboard/frontend/src/components/DslGuide.tsx
  • dashboard/frontend/src/components/HeaderDisplay.module.css
  • dashboard/frontend/src/components/HeaderDisplay.tsx
  • dashboard/frontend/src/components/Layout.tsx
  • dashboard/frontend/src/components/LayoutNavSupport.ts
  • dashboard/frontend/src/components/ViewModal.module.css
  • dashboard/frontend/src/components/ViewModal.tsx
  • dashboard/frontend/src/components/ViewPanel.tsx
  • dashboard/frontend/src/lib/dslLanguage.ts
  • dashboard/frontend/src/lib/dslSchemas.ts
  • dashboard/frontend/src/pages/BuilderPage.tsx
  • dashboard/frontend/src/pages/ConfigPage.tsx
  • dashboard/frontend/src/pages/ConfigPageSignalsSection.tsx
  • dashboard/frontend/src/pages/InsightsPage.module.css
  • dashboard/frontend/src/pages/InsightsPage.tsx
  • dashboard/frontend/src/pages/InsightsRecordPage.tsx
  • dashboard/frontend/src/pages/builderPageDashboardViews.tsx
  • dashboard/frontend/src/pages/builderPageNaturalLanguagePanel.module.css
  • dashboard/frontend/src/pages/builderPageNaturalLanguagePanel.tsx
  • dashboard/frontend/src/pages/builderPageNaturalLanguagePanelSupport.ts
  • dashboard/frontend/src/pages/builderPageNaturalLanguageProgress.tsx
  • dashboard/frontend/src/pages/builderPageNaturalLanguageProgressSupport.tsx
  • dashboard/frontend/src/pages/builderPageNaturalLanguageResultCard.tsx
  • dashboard/frontend/src/pages/builderPageOutputPanel.tsx
  • dashboard/frontend/src/pages/builderPageToolbar.tsx
  • dashboard/frontend/src/pages/configPageRouterDefaultsCatalog.ts
  • dashboard/frontend/src/pages/configPageRouterDefaultsSupport.ts
  • dashboard/frontend/src/pages/configPageSupport.ts
  • dashboard/frontend/src/pages/insightsPageApi.ts
  • dashboard/frontend/src/pages/insightsPageSupport.tsx
  • dashboard/frontend/src/pages/insightsPageToolTrace.tsx
  • dashboard/frontend/src/pages/insightsPageTypes.ts
  • dashboard/frontend/src/pages/topology/TopologyPageEnhanced.module.css
  • dashboard/frontend/src/pages/topology/TopologyPageEnhanced.tsx
  • dashboard/frontend/src/pages/topology/components/CustomNodes/CustomNodes.module.css
  • dashboard/frontend/src/pages/topology/components/CustomNodes/DefaultRouteNode.tsx
  • dashboard/frontend/src/pages/topology/components/CustomNodes/ModelNode.tsx
  • dashboard/frontend/src/pages/topology/components/CustomNodes/SignalGroupNode.tsx
  • dashboard/frontend/src/pages/topology/constants.ts
  • dashboard/frontend/src/pages/topology/types.ts
  • dashboard/frontend/src/pages/topology/utils/api.ts
  • dashboard/frontend/src/pages/topology/utils/layoutCalculator.ts
  • dashboard/frontend/src/pages/topology/utils/layoutGraphBuilder.ts
  • dashboard/frontend/src/pages/topology/utils/layoutGraphBuilderSupport.ts
  • dashboard/frontend/src/pages/topology/utils/layoutProjectionSupport.ts
  • dashboard/frontend/src/pages/topology/utils/topologyParser.ts
  • dashboard/frontend/src/stores/dslStore.ts
  • dashboard/frontend/src/stores/dslStoreSupport.ts
  • dashboard/frontend/src/stores/dslStoreTypes.ts
  • dashboard/frontend/src/types/config.ts
  • dashboard/frontend/src/types/dsl.ts
  • dashboard/frontend/src/utils/builderNLApi.ts

📁 deploy

Owners: @rootfs, @Xunzhuo
Files changed:

  • deploy/amd/README.md
  • deploy/helm/semantic-router/crds/vllm.ai_intelligentroutes.yaml
  • deploy/kserve/configmap-router-config-simulator.yaml
  • deploy/kserve/configmap-router-config.yaml
  • deploy/kubernetes/crds/vllm.ai_intelligentroutes.yaml
  • deploy/recipes/balance.dsl
  • deploy/recipes/balance.probes.yaml
  • deploy/recipes/balance.yaml
  • deploy/recipes/privacy/config.yaml

📁 e2e

Owners: @Xunzhuo
Files changed:

  • e2e/README.md
  • e2e/config/config.e2e.yaml
  • e2e/config/config.multi-endpoint.yaml
  • e2e/config/config.testing.yaml
  • e2e/profiles/all/imports.go
  • e2e/profiles/dynamic-config/crds/intelligentroute.yaml
  • e2e/profiles/router-replay/profile.go
  • e2e/profiles/router-replay/values.yaml
  • e2e/profiles/routing-strategies/config-with-embedding.yaml
  • e2e/testcases/router_replay_restart_recovery.go

📁 src

Owners: @rootfs, @Xunzhuo, @wangchen615
Files changed:

  • src/semantic-router/cmd/dsl/generate.go
  • src/semantic-router/cmd/dsl/main.go
  • src/semantic-router/cmd/dsl/main_test.go
  • src/semantic-router/cmd/dsl/test_runner.go
  • src/semantic-router/cmd/wasm/main_wasm.go
  • src/semantic-router/cmd/wasm/wasm_test.go
  • src/semantic-router/internal/nlgen/generate.go
  • src/semantic-router/internal/nlgen/generate_test.go
  • src/semantic-router/internal/nlgen/schema.go
  • src/semantic-router/pkg/apis/vllm.ai/v1alpha1/types_route.go
  • src/semantic-router/pkg/classification/classifier_signal_context.go
  • src/semantic-router/pkg/classification/classifier_signal_dispatch.go
  • src/semantic-router/pkg/classification/classifier_signal_eval.go
  • src/semantic-router/pkg/classification/contrastive_preference_classifier.go
  • src/semantic-router/pkg/classification/feedback_signal_gate.go
  • src/semantic-router/pkg/classification/feedback_signal_gate_test.go
  • src/semantic-router/pkg/classification/preference_classifier_test.go
  • src/semantic-router/pkg/classification/reask_classifier_test.go
  • src/semantic-router/pkg/config/canonical_defaults.go
  • src/semantic-router/pkg/config/config_test.go
  • src/semantic-router/pkg/config/docs_contract_algorithm_plugin_test.go
  • src/semantic-router/pkg/config/plugin_config_test.go
  • src/semantic-router/pkg/config/plugin_router_replay_support.go
  • src/semantic-router/pkg/config/reference_config_routing_surface_test.go
  • src/semantic-router/pkg/config/reference_config_test_helpers_test.go
  • src/semantic-router/pkg/config/routing_surface_catalog.go
  • src/semantic-router/pkg/config/runtime_config.go
  • src/semantic-router/pkg/config/vectorstore.go
  • src/semantic-router/pkg/dsl/dsl_test.go
  • src/semantic-router/pkg/dsl/maintained_asset_roundtrip_test.go
  • src/semantic-router/pkg/dsl/validator.go
  • src/semantic-router/pkg/dsl/validator_signal_guard.go
  • src/semantic-router/pkg/dsl/validator_signal_guard_semantics.go
  • src/semantic-router/pkg/extproc/memory_helpers_test.go
  • src/semantic-router/pkg/extproc/processor_req_body.go
  • src/semantic-router/pkg/extproc/processor_res_body_streaming.go
  • src/semantic-router/pkg/extproc/processor_res_body_streaming_test.go
  • src/semantic-router/pkg/extproc/recorder.go
  • src/semantic-router/pkg/extproc/recorder_test.go
  • src/semantic-router/pkg/extproc/replay_tool_trace.go
  • src/semantic-router/pkg/extproc/replay_tool_trace_test.go
  • src/semantic-router/pkg/extproc/req_filter_classification_runtime.go
  • src/semantic-router/pkg/extproc/req_filter_classification_signal.go
  • src/semantic-router/pkg/extproc/req_filter_classification_signal_test.go
  • src/semantic-router/pkg/extproc/req_filter_looper_internal.go
  • src/semantic-router/pkg/extproc/request_context.go
  • src/semantic-router/pkg/extproc/request_signal_history.go
  • src/semantic-router/pkg/extproc/request_signal_history_test.go
  • src/semantic-router/pkg/extproc/router.go
  • src/semantic-router/pkg/extproc/router_build.go
  • src/semantic-router/pkg/extproc/router_replay_api.go
  • src/semantic-router/pkg/extproc/router_replay_api_test.go
  • src/semantic-router/pkg/extproc/router_replay_enablement_test.go
  • src/semantic-router/pkg/extproc/router_replay_setup.go
  • src/semantic-router/pkg/extproc/utils_fast.go
  • src/semantic-router/pkg/extproc/utils_fast_test.go
  • src/semantic-router/pkg/k8s/testdata/README.md
  • src/semantic-router/pkg/k8s/testdata/input/10-embedding-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/input/12-keyword-embedding-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/input/13-keyword-domain-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/input/14-domain-embedding-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/input/15-keyword-embedding-domain-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/output/10-embedding-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/output/12-keyword-embedding-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/output/13-keyword-domain-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/output/14-domain-embedding-plugin.yaml
  • src/semantic-router/pkg/k8s/testdata/output/15-keyword-embedding-domain-plugin.yaml
  • src/semantic-router/pkg/modeldownload/ensure.go
  • src/semantic-router/pkg/nlgen/nlgen.go
  • src/semantic-router/pkg/routerreplay/recorder.go
  • src/semantic-router/pkg/routerreplay/recorder_test.go
  • src/semantic-router/pkg/routerreplay/store/memory.go
  • src/semantic-router/pkg/routerreplay/store/milvus.go
  • src/semantic-router/pkg/routerreplay/store/postgres.go
  • src/semantic-router/pkg/routerreplay/store/postgres_record_codec.go
  • src/semantic-router/pkg/routerreplay/store/postgres_record_row.go
  • src/semantic-router/pkg/routerreplay/store/postgres_runtime_config.go
  • src/semantic-router/pkg/routerreplay/store/redis.go
  • src/semantic-router/pkg/routerreplay/store/store.go
  • src/semantic-router/pkg/services/classification.go
  • src/semantic-router/pkg/services/classification_signal_contract.go
  • src/semantic-router/pkg/services/intent_request_messages.go
  • src/semantic-router/pkg/services/intent_request_messages_test.go
  • src/vllm-sr/Dockerfile
  • src/vllm-sr/Dockerfile.rocm
  • src/vllm-sr/README.md
  • src/vllm-sr/cli/commands/runtime.py
  • src/vllm-sr/cli/commands/runtime_support.py
  • src/vllm-sr/cli/core.py
  • src/vllm-sr/cli/docker_openclaw_support.py
  • src/vllm-sr/cli/models.py
  • src/vllm-sr/cli/service_defaults.py
  • src/vllm-sr/cli/storage_backends.py
  • src/vllm-sr/cli/validator.py
  • src/vllm-sr/tests/test_cli_main.py
  • src/vllm-sr/tests/test_core_status.py
  • src/vllm-sr/tests/test_dashboard_dockerfile_surface.py
  • src/vllm-sr/tests/test_openclaw_shared_network.py
  • src/vllm-sr/tests/test_plugin_parsing.py
  • src/vllm-sr/tests/test_runtime_support.py
  • src/vllm-sr/tests/test_runtime_upgrade_compatibility.py
  • src/vllm-sr/tests/test_split_runtime_stack.py
  • src/vllm-sr/tests/test_storage_backends.py

📁 tools

Owners: @yuluo-yx, @rootfs, @Xunzhuo
Files changed:

  • tools/agent/e2e-profile-map.yaml
  • tools/agent/repo-manifest.yaml
  • tools/agent/scripts/run_agent_precommit_lint.py
  • tools/agent/skills/routing-calibration-loop/SKILL.md
  • tools/hf-playground/app.py
  • tools/make/agent.mk
  • tools/make/linter.mk
  • tools/mock-vllm/app.py

📁 website

Owners: @Xunzhuo, @rootfs, @yuluo-yx
Files changed:

  • website/docs/api/crd-reference.md
  • website/docs/installation/configuration.md
  • website/docs/installation/installation.md
  • website/docs/installation/k8s/operator.md
  • website/docs/overview/collective-intelligence.md
  • website/docs/overview/semantic-router-overview.md
  • website/docs/proposals/unified-config-contract-v0-3.md
  • website/docs/tutorials/global/api-and-observability.md
  • website/docs/tutorials/plugin/content-safety.md
  • website/docs/tutorials/plugin/jailbreak.md
  • website/docs/tutorials/plugin/overview.md
  • website/docs/tutorials/plugin/pii.md
  • website/docs/tutorials/plugin/response-jailbreak.md
  • website/docs/tutorials/plugin/router-replay.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/api/crd-reference.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/installation/installation.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/overview/collective-intelligence.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/overview/semantic-router-overview.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/tutorials/plugin/content-safety.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/tutorials/plugin/jailbreak.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/tutorials/plugin/overview.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/tutorials/plugin/pii.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/tutorials/plugin/response-jailbreak.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v0.1/api/crd-reference.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v0.1/installation/configuration.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v0.1/overview/collective-intelligence.md
  • website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v0.1/overview/semantic-router-overview.md
  • website/sidebars.ts
  • website/src/css/shell.css
  • website/src/data/researchContent.js
  • website/versioned_docs/version-v0.1/api/crd-reference.md
  • website/versioned_docs/version-v0.1/installation/configuration.md
  • website/versioned_docs/version-v0.1/overview/collective-intelligence.md
  • website/versioned_docs/version-v0.1/overview/semantic-router-overview.md
  • website/versioned_docs/version-v0.1/troubleshooting/common-errors.md

vLLM

🎉 Thanks for your contributions!

This comment was automatically generated based on the OWNER files in the repository.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 31, 2026

✅ Supply Chain Security Report — All Clear

Scanner Status Findings
AST Codebase Scan (Py, Go, JS/TS, Rust) 29 finding(s) — MEDIUM: 22 · LOW: 7
AST PR Diff Scan No issues detected
Regex Fallback Scan No issues detected

Scanned at 2026-04-01T16:41:48.925Z · View full workflow logs

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 31, 2026

Performance Benchmark Results

Component benchmarks completed successfully.

Summary

  • Classification benchmarks: ✅
  • Decision engine benchmarks: ✅
  • Cache benchmarks: ✅

Details

See attached benchmark artifacts for detailed results and profiles.


Performance testing powered by vLLM Semantic Router

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a natural-language (“NL”) workflow for the Dashboard Config Builder, backed by a new backend generation endpoint, while also expanding the website’s algorithm documentation (including math rendering) and doing a broad logging/verbosity cleanup in the router.

Changes:

  • Add NL mode to the Dashboard Builder UI + store, calling a new backend endpoint to generate DSL + base YAML and show AI review feedback.
  • Add KaTeX/remark-math/rehype-katex support and substantially expand algorithm tutorial pages (including a new MLP page and sample config).
  • Refactor router logging toward lower verbosity + structured “component” events, plus add a startup summary event.

Reviewed changes

Copilot reviewed 57 out of 58 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
website/src/css/custom.css Import KaTeX stylesheet for math rendering.
website/package.json Add remark-math + rehype-katex dependencies.
website/package-lock.json Lockfile updates for the new markdown/math toolchain.
website/docusaurus.config.ts Enable math plugins + set markdown format to MDX.
website/docs/tutorials/algorithm/selection/svm.md Expand SVM tutorial content with math/diagrams/config details.
website/docs/tutorials/algorithm/selection/static.md Expand Static tutorial content + add diagrams.
website/docs/tutorials/algorithm/selection/router-dc.md Expand Router-DC tutorial content with math + richer config guidance.
website/docs/tutorials/algorithm/selection/rl-driven.md Expand RL-driven tutorial content with sub-modes, flows, config.
website/docs/tutorials/algorithm/selection/mlp.md New tutorial page for MLP selection algorithm.
website/docs/tutorials/algorithm/selection/latency-aware.md Expand latency-aware tutorial content with diagrams/config table.
website/docs/tutorials/algorithm/selection/knn.md Expand KNN tutorial content with math/diagrams/config.
website/docs/tutorials/algorithm/selection/kmeans.md Expand KMeans tutorial content with math/diagrams/config.
website/docs/tutorials/algorithm/selection/hybrid.md Expand Hybrid tutorial content with math/diagrams/config.
website/docs/tutorials/algorithm/selection/gmtrouter.md Expand GMTRouter tutorial content with diagrams/config/feedback section.
website/docs/tutorials/algorithm/selection/elo.md Expand Elo tutorial content with math/flows/config table.
website/docs/tutorials/algorithm/selection/automix.md Expand AutoMix tutorial content with math/flows/config table.
website/docs/tutorials/algorithm/overview.md Add algorithm comparison table + decision guide diagram + add MLP link.
website/docs/tutorials/algorithm/looper/remom.md Expand ReMoM looper tutorial content and config parameters.
website/docs/tutorials/algorithm/looper/ratings.md Expand Ratings looper tutorial content and config parameters.
website/docs/tutorials/algorithm/looper/confidence.md Expand Confidence looper tutorial content and config parameters.
src/semantic-router/pkg/observability/logging/logging.go Add WithComponent + ComponentEvent; adjust timestamp layout.
src/semantic-router/pkg/extproc/utils_fast.go Reduce log verbosity for streaming mutation.
src/semantic-router/pkg/extproc/server.go Emit structured extproc startup event (component + fields).
src/semantic-router/pkg/extproc/router_resolvers.go Simplify Authz logs and consolidate identity/chain reporting.
src/semantic-router/pkg/extproc/router_memory.go Consolidate memory store connection logs and adjust warning text.
src/semantic-router/pkg/extproc/router_components.go Consolidate semantic cache logs; remove noisy “auto-selected” logs.
src/semantic-router/pkg/extproc/res_filter_hallucination.go Reduce log verbosity; consolidate hallucination detection logs.
src/semantic-router/pkg/extproc/req_filter_tools.go Reduce tools plugin log to debug.
src/semantic-router/pkg/extproc/req_filter_response_api.go Reduce Response API logs; remove some info-level lines.
src/semantic-router/pkg/extproc/req_filter_rag.go Reduce RAG plugin logs to debug; tighten messages.
src/semantic-router/pkg/extproc/req_filter_modality.go Reduce modality router logs to debug.
src/semantic-router/pkg/extproc/req_filter_looper_internal.go Reduce looper internal logs; reformat key info log lines.
src/semantic-router/pkg/extproc/processor_res_cache.go Improve cache failure log message; remove success info log.
src/semantic-router/pkg/extproc/processor_req_body_routing.go Reduce endpoint/model rewrite logging verbosity; simplify wording.
src/semantic-router/pkg/extproc/processor_req_body_prepare.go Reduce streaming/cache logs to debug; clarify cache-hit log.
src/semantic-router/pkg/extproc/processor_req_body_memory.go Reduce memory logs to debug.
src/semantic-router/pkg/extproc/processor_core.go Reduce extproc stage/stream lifecycle logs to debug.
src/semantic-router/pkg/classification/hallucination_detector.go Remove noisy NLI init info log.
src/semantic-router/pkg/classification/embedding_classifier.go Reduce soft-match logging to debug.
src/semantic-router/pkg/classification/classifier.go Simplify classifier init logs; reduce jailbreak result verbosity.
src/semantic-router/pkg/classification/classifier_model_select.go Reduce selection result logging; remove some init/info logs.
src/semantic-router/pkg/classification/classifier_init.go Tidy init log strings; reduce verbosity.
src/semantic-router/pkg/classification/classifier_category_entropy.go Reduce modality/category entropy logs to debug.
src/semantic-router/cmd/runtime_bootstrap.go Reduce startup log spam; tighten embedding-model guidance logs.
src/semantic-router/cmd/main.go Add structured startup summary event; minor Kubernetes log cleanup.
dashboard/frontend/src/types/dsl.ts Add NL builder request/response/types for UI + store.
dashboard/frontend/src/stores/dslStoreTypes.ts Add NL generation state + actions to the DSL store interface.
dashboard/frontend/src/stores/dslStore.ts Implement NL generation action + error parsing; store NL results.
dashboard/frontend/src/pages/builderPageToolbar.tsx Enable NL mode switch + re-enable Import in NL mode.
dashboard/frontend/src/pages/builderPageNaturalLanguagePanel.tsx New NL panel UI for prompts, connection config, review display.
dashboard/frontend/src/pages/builderPageNaturalLanguagePanel.module.css Styling for the new NL panel.
dashboard/frontend/src/pages/builderPageDashboardViews.tsx Update NL mode marketing copy (no longer “coming soon”).
dashboard/frontend/src/pages/BuilderPage.tsx Render NL panel; wire store state/actions to NL mode.
dashboard/backend/router/core_routes.go Register /api/router/config/nl/generate route.
dashboard/backend/handlers/builder_nl.go New HTTP handler for NL generation endpoint.
dashboard/backend/handlers/builder_nl_service.go NL generation service: base YAML merge + LLM calls + parsing + review.
dashboard/backend/handlers/builder_nl_service_test.go Basic tests for output parsing + custom connection application.
config/algorithm/selection/mlp.yaml Add sample MLP selection algorithm YAML.
Files not reviewed (1)
  • website/package-lock.json: Language not supported

Comment on lines +666 to +667
ready := boolFromPayload(payload, "ready")
if !ready && len(warnings) == 0 {
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parseBuilderNLReviewOutput will flip ready to true whenever ready is false and warnings is empty. This means an explicit {"ready":false,"warnings":[]} response is treated as ready, which can mislead the UI. Consider distinguishing “missing ready field” from “ready=false” (e.g., return (value, present) from the helper) and only default to ready when the field is absent.

Suggested change
ready := boolFromPayload(payload, "ready")
if !ready && len(warnings) == 0 {
// Determine readiness: respect an explicit "ready" value if present,
// and only default to ready when the field is absent and there are no warnings.
var ready bool
if readyValue, ok := payload["ready"]; ok {
if readyBool, ok := readyValue.(bool); ok {
ready = readyBool
}
} else if len(warnings) == 0 {

Copilot uses AI. Check for mistakes.
Comment on lines +515 to +527
httpReq, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(raw))
if err != nil {
return "", fmt.Errorf("failed to create builder ai request: %w", err)
}
httpReq.Header.Set("Content-Type", "application/json")
httpReq.Header.Set("Accept", "application/json")
if accessKey != "" {
httpReq.Header.Set("Authorization", "Bearer "+accessKey)
}

resp, err := http.DefaultClient.Do(httpReq)
if err != nil {
return "", fmt.Errorf("builder ai request failed: %w", err)
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Outbound requests to the LLM endpoint use http.DefaultClient.Do(...) without any explicit timeout. If the upstream stalls, this handler can hang until the client disconnects, tying up dashboard server resources. Use an http.Client{Timeout: ...} (and/or per-request context deadline) for both OpenAI-compatible and Anthropic calls.

Copilot uses AI. Check for mistakes.
Comment on lines +276 to +294
func normalizeBuilderNLBaseURL(raw string, providerKind builderNLProviderKind) (*url.URL, error) {
trimmed := strings.TrimSpace(strings.TrimRight(raw, "/"))
if trimmed == "" {
return nil, fmt.Errorf("custom connection baseUrl is required")
}
if !strings.Contains(trimmed, "://") {
trimmed = inferBuilderNLProtocol(trimmed, providerKind) + "://" + trimmed
}
parsed, err := url.Parse(trimmed)
if err != nil {
return nil, fmt.Errorf("invalid custom connection baseUrl: %w", err)
}
if parsed.Scheme != "http" && parsed.Scheme != "https" {
return nil, fmt.Errorf("custom connection baseUrl must use http or https")
}
if parsed.Host == "" {
return nil, fmt.Errorf("custom connection baseUrl must include a host")
}
return parsed, nil
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

baseUrl is user-supplied and is used to construct an outbound HTTP request from the dashboard backend (normalizeBuilderNLBaseURL + callBuilderNLCustomConnection). This is an SSRF risk (e.g., targeting link-local / RFC1918 / cluster metadata endpoints) if the dashboard is reachable by untrusted users. Consider restricting destinations (allowlist), rejecting private IP ranges, and/or gating this endpoint behind an explicit admin-only feature flag.

Copilot uses AI. Check for mistakes.
algorithm:
type: mlp
mlp:
device: cuda
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new MLP algorithm example hard-codes device: cuda. As a default template under config/algorithm/selection/, this will fail on CPU-only deployments (which are common for docs/tutorial users). Suggest switching the sample to device: cpu (or omitting device to rely on defaults) and documenting GPU as an optional override.

Suggested change
device: cuda
# Default to CPU; override to 'cuda' when running with a GPU.
device: cpu

Copilot uses AI. Check for mistakes.
Comment on lines 100 to +110
gmtrouter:
enable_personalization: true
history_sample_size: 50
model_path: models/gmtrouter.pt
enable_personalization: true # Enable user-specific learning
history_sample_size: 5 # Sample k interactions for inference
embedding_dimension: 768 # Node embedding dimension
num_gnn_layers: 2 # HGT layers (L in paper)
attention_heads: 8 # Attention heads per HGT layer
max_interactions_per_user: 100 # Limit stored interactions per user
min_interactions_for_personalization: 3 # Min interactions before personalization
feedback_types: [rating, ranking] # Supported feedback types
model_path: models/gmtrouter.pt # Path to pre-trained model weights
storage_path: /var/lib/vsr/gmt_graph.json # Persist interaction graph
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The configuration snippet documents fields that aren’t supported by the current config schema (e.g., embedding_dimension, num_gnn_layers, attention_heads, feedback_types). In GMTRouterSelectionConfig the supported keys are enable_personalization, history_sample_size, min_interactions_for_personalization, max_interactions_per_user, model_path, and storage_path. Please align the docs to the actual supported config keys (or update the config schema/implementation if these fields are intended).

Copilot uses AI. Check for mistakes.
Comment on lines +89 to +101
verification_threshold: 0.7 # Self-verification confidence threshold
max_escalations: 2 # Maximum escalation attempts
cost_aware_routing: true # Enable cost-quality optimization
cost_quality_tradeoff: 0.3 # Balance: 0=pure quality, 1=pure cost
discount_factor: 0.95 # POMDP discount factor (γ)
use_logprob_verification: true # Use logprobs for confidence
enable_self_verification: false # LLM-based entailment verification
verification_samples: 5 # Samples for confidence (k in paper)
use_pomdp_router: true # Full POMDP routing (vs simple threshold)
belief_particles: 100 # Number of POMDP particles
cost_lambda: 0.5 # POMDP cost-performance tradeoff
verifier_server_url: "" # AutoMix verification server URL
enable_cascade: false # Enable full cascade execution mode
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The AutoMix config example/documentation lists fields that aren’t in AutoMixSelectionConfig (e.g., enable_self_verification, verification_samples, use_pomdp_router, belief_particles, cost_lambda, verifier_server_url, enable_cascade, etc.). This makes the page misleading for users trying to configure the current release. Please align the documented parameters with the actual supported config keys.

Copilot uses AI. Check for mistakes.
Comment on lines +80 to 87
elo_weight: 0.3 # Weight for Elo rating
router_dc_weight: 0.3 # Weight for embedding similarity
automix_weight: 0.2 # Weight for POMDP value
cost_weight: 0.2 # Weight for cost consideration
quality_gap_threshold: 0.1 # Threshold for MLP escalation check
normalize_scores: true # Normalize component scores to [0,1]
use_mlp: false # Enable MLP quality gap prediction
```
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Hybrid docs reference use_mlp (and behavior around MLP-based escalation checks), but HybridSelectionConfig doesn’t currently include a use_mlp field. Please remove/clarify this parameter (or add it to the config schema + implementation) so the documented config matches what the router accepts.

Copilot uses AI. Check for mistakes.
Comment on lines +34 to +37
A[Request arrives] --> B[Decision matched]
B --> C[algorithm.type = static]
C --> D[Return modelRefs, 0,]
D --> E[SelectionResult with score=1.0]
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mermaid node label has a typo: Return modelRefs, 0, (extra comma) reads like an indexing bug. Suggest updating it to something like “Return modelRefs[0]” to match the description that the first candidate wins.

Copilot uses AI. Check for mistakes.
Comment on lines +281 to +293
<div className={styles.fullSpan}>
<label className={styles.label} htmlFor="builder-nl-key">
Access key
</label>
<input
id="builder-nl-key"
className={styles.input}
type="password"
value={accessKey}
onChange={(event) => setAccessKey(event.target.value)}
placeholder="Optional unless the endpoint requires authentication"
/>
</div>
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI copy says the access key is “Optional unless the endpoint requires authentication”, but the backend requires an access key for the Anthropic provider (anthropic custom connection requires an accessKey). Consider making this field conditionally required/validated when providerKind === "anthropic" (and updating the placeholder/help text) to avoid a confusing round-trip error.

Copilot uses AI. Check for mistakes.
Comment on lines +175 to +183
func readBuilderNLBaseConfig(configPath string) (*routerconfig.CanonicalConfig, error) {
cfg, err := readCanonicalConfigFile(configPath)
if err == nil {
return cfg, nil
}
if strings.Contains(strings.ToLower(err.Error()), "no such file") {
return &routerconfig.CanonicalConfig{}, nil
}
return nil, fmt.Errorf("failed to read builder deploy base: %w", err)
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

readBuilderNLBaseConfig detects a missing file by substring-matching the error message ("no such file"). This is brittle across OSes and wrapped errors. Prefer errors.Is(err, os.ErrNotExist) (or os.IsNotExist) based on what readCanonicalConfigFile returns.

Copilot uses AI. Check for mistakes.
@Xunzhuo Xunzhuo force-pushed the cb/dsl-nl-mode branch 2 times, most recently from 4ae0ba4 to 0a03bd0 Compare March 31, 2026 09:18
@Xunzhuo Xunzhuo changed the title [Dashboard][Feat] add natural language mode to config builder [Dashboard][Feat] add natural language mode to DSL builder Mar 31, 2026
@Xunzhuo Xunzhuo force-pushed the cb/dsl-nl-mode branch 4 times, most recently from 4cbe763 to a97e9c9 Compare April 1, 2026 10:01
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

🔍 Tessl Skill Review

tools/agent/skills/routing-calibration-loop/SKILL.md

score

Review Details

Review Details

Dimension Score Detail
conciseness ██░ 2/3 The skill is reasonably efficient for its complexity but includes some redundancy—the structured reflection in step 7 partially repeats the classification from step 3, and some gotchas restate workflow guidance. However, it largely avoids explaining concepts Claude already knows and stays domain-specific.
actionability ███ 3/3 The skill provides concrete, executable commands in the Standard Commands section, specific API endpoints (PATCH vs PUT /config/router, GET /ready, /api/v1/eval), specific file paths, and clear classification buckets. The guidance is precise enough to be directly followed.
workflow clarity ███ 3/3 The 8-step workflow is clearly sequenced with explicit validation checkpoints (step 5: local validation before deploy, step 6: wait for ready before trusting eval, re-run probes after deploy). It includes feedback loops (classify failures before changing anything, compare before/after), error recovery guidance, and stop conditions that prevent unsafe operations.
progressive disclosure ███ 3/3 The skill is well-structured with clear sections (Trigger, Workflow, Gotchas, Standard Commands, Acceptance) and references external files via one-level-deep links (Must Read section, inline file references). Required and conditional surfaces are cleanly separated, and the content appropriately stays at overview level while pointing to detailed resources.

Overall: This is a strong, well-structured skill that provides clear, actionable guidance for a complex multi-step calibration workflow. Its greatest strengths are the explicit validation checkpoints, failure classification framework, and concrete executable commands. Minor verbosity in the reflection step and some redundancy between gotchas and workflow steps prevent a perfect conciseness score, but overall the content is high quality.


To improve your score, point your agent at the Tessl optimization guide. Need help? Jump on our Discord.

Feedback

Report issues with this review at tesslio/skill-review, or send private feedback from your terminal with tessl feedback.

@Xunzhuo Xunzhuo force-pushed the cb/dsl-nl-mode branch 3 times, most recently from a3b03d3 to a8ba93a Compare April 1, 2026 15:07
Signed-off-by: xunzhuo <xunzhuo@vllm-semantic-router.ai>
Xunzhuo added 2 commits April 1, 2026 23:54
Signed-off-by: xunzhuo <xunzhuo@vllm-semantic-router.ai>
Signed-off-by: xunzhuo <xunzhuo@vllm-semantic-router.ai>
@Xunzhuo Xunzhuo merged commit 2efa7cb into main Apr 2, 2026
38 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants