From 39ac8808adc9f15927239ea0822c0cdddf1147bc Mon Sep 17 00:00:00 2001
From: wuyuanfr <18270469842@163.com>
Date: Mon, 29 Jun 2026 17:21:07 +0800
Subject: [PATCH 1/4] fix(model): stop sending hidden form.provider as
modelFactory on single-add
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Single-add mode has no provider dropdown — form.provider stays at its
hidden default 'modelengine', which was forwarded as modelFactory to
the backend, overriding the Pydantic default 'OpenAI-API-Compatible'.
Introduced in 4becd6992 which added modelFactory: form.provider to both
save paths but missed the isBatchImport guard already present on the
suggest-capacity path in the same commit.
STT/TTS paths are unaffected — they set modelFactory from
form.sttProvider/ttsProvider downstream. Embedding is unaffected —
backend _infer_model_factory overrides from base_url.
---
.../app/[locale]/models/components/model/ModelAddDialog.tsx | 2 --
1 file changed, 2 deletions(-)
diff --git a/frontend/app/[locale]/models/components/model/ModelAddDialog.tsx b/frontend/app/[locale]/models/components/model/ModelAddDialog.tsx
index 094ed4391..1dc6baafd 100644
--- a/frontend/app/[locale]/models/components/model/ModelAddDialog.tsx
+++ b/frontend/app/[locale]/models/components/model/ModelAddDialog.tsx
@@ -1171,7 +1171,6 @@ export const ModelAddDialog = ({
apiKey: form.apiKey.trim() === "" ? "sk-no-api-key" : form.apiKey,
maxTokens: maxTokensValue,
displayName: form.displayName || form.name,
- modelFactory: form.provider,
...(supportsCapacityFields ? buildCapacityPayload(form) : {}),
...acceptSignalKwargs,
};
@@ -1214,7 +1213,6 @@ export const ModelAddDialog = ({
apiKey: form.apiKey.trim() === "" ? "sk-no-api-key" : form.apiKey,
maxTokens: maxTokensValue,
displayName: form.displayName || form.name,
- modelFactory: form.provider,
...(supportsCapacityFields ? buildCapacityPayload(form) : {}),
...acceptSignalKwargs,
};
From a210c00056374bae2ac081f5ed72aef42ffc0ece Mon Sep 17 00:00:00 2001
From: wuyuanfr <18270469842@163.com>
Date: Mon, 29 Jun 2026 17:21:24 +0800
Subject: [PATCH 2/4] refactor: move generate_backfill_sql.py to
deploy/sql/migrations/
The script's sole purpose is generating SQL migration files that live
in deploy/sql/migrations/. Keeping the generator alongside its output
is more natural than a standalone top-level scripts/ directory.
- Updated _project_root path (three levels up instead of one)
- Updated docstring usage path and generated SQL self-reference
- Removed empty scripts/ directory
---
{scripts => deploy/sql/migrations}/generate_backfill_sql.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
rename {scripts => deploy/sql/migrations}/generate_backfill_sql.py (97%)
diff --git a/scripts/generate_backfill_sql.py b/deploy/sql/migrations/generate_backfill_sql.py
similarity index 97%
rename from scripts/generate_backfill_sql.py
rename to deploy/sql/migrations/generate_backfill_sql.py
index 586c27e3d..239a5c93a 100644
--- a/scripts/generate_backfill_sql.py
+++ b/deploy/sql/migrations/generate_backfill_sql.py
@@ -2,7 +2,7 @@
"""Generate idempotent backfill SQL from capability_profiles.CATALOG.
Usage:
- python scripts/generate_backfill_sql.py > docker/sql/v2.2.x_MMDD_backfill_from_catalog.sql
+ python deploy/sql/migrations/generate_backfill_sql.py > deploy/sql/migrations/v2.2.x_MMDD_backfill_from_catalog.sql
Run whenever capability_profiles.py changes, then commit the generated SQL.
"""
@@ -12,7 +12,7 @@
from datetime import date
from collections import namedtuple
-_project_root = os.path.join(os.path.dirname(__file__), "..")
+_project_root = os.path.join(os.path.dirname(__file__), "..", "..", "..")
sys.path.insert(0, os.path.join(_project_root, "backend"))
# Stub SDK types to avoid pulling in the full nexent SDK dependency chain
@@ -80,7 +80,7 @@ def main() -> None:
today = date.today().strftime("%Y-%m-%d")
lines: list[str] = []
- lines.append(f"-- Generated by scripts/generate_backfill_sql.py on {today}")
+ lines.append(f"-- Generated by deploy/sql/migrations/generate_backfill_sql.py on {today}")
lines.append(f"-- Catalog revision: {CATALOG_REVISION}")
lines.append(f"-- Catalog entries: {len(CATALOG)}")
lines.append("--")
From be8cef63df452024d32d1c22150cdb9fe0fec1a3 Mon Sep 17 00:00:00 2001
From: wuyuanfr <18270469842@163.com>
Date: Mon, 29 Jun 2026 17:48:53 +0800
Subject: [PATCH 3/4] fix: preserve embedding legacy inference, extend VLM only
- Embedding/multi_embedding keeps old logic (only dashscope recognized)
- VLM uses extended inference so tokenpony URLs can trigger catalog healthcheck
- Prevents unintended behavior change for embedding models
---
backend/services/model_health_service.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/backend/services/model_health_service.py b/backend/services/model_health_service.py
index 35fff2a23..5d472799d 100644
--- a/backend/services/model_health_service.py
+++ b/backend/services/model_health_service.py
@@ -38,8 +38,17 @@ def _normalize_embedding_url(base_url: str) -> str:
def _infer_model_factory(model_type: str, base_url: str, current_factory: Optional[str] = None) -> Optional[str]:
"""Infer model_factory from base_url if not already set or is generic.
- Uses the shared W11 host map so embedding and LLM/VLM inference do not drift.
+ For embedding/multi_embedding, uses legacy logic (only dashscope) to avoid
+ changing existing behavior. For other types (VLM), uses extended inference
+ so tokenpony URLs can be recognized for catalog healthcheck.
"""
+ # Embedding types: keep legacy behavior (only dashscope)
+ if model_type in EMBEDDING_TYPES:
+ if "dashscope" in base_url.lower():
+ return DASHSCOPE_MODEL_FACTORY
+ return current_factory
+
+ # Non-embedding types (VLM, etc): use extended inference
try:
from services.model_capacity_suggestion_service import pick_provider_from_base_url
From f872156f8ab5fc207859f903d3f18306dc303e6b Mon Sep 17 00:00:00 2001
From: wuyuanfr <18270469842@163.com>
Date: Mon, 29 Jun 2026 18:52:48 +0800
Subject: [PATCH 4/4] fix(ui): reorganize agent config layout -
maxSteps+provideSummary on row1, outputReserve+verification on row2
---
.../agentInfo/AgentGenerateDetail.tsx | 58 +++++++++----------
1 file changed, 29 insertions(+), 29 deletions(-)
diff --git a/frontend/app/[locale]/agents/components/agentInfo/AgentGenerateDetail.tsx b/frontend/app/[locale]/agents/components/agentInfo/AgentGenerateDetail.tsx
index c13c82c38..aa08f40f8 100644
--- a/frontend/app/[locale]/agents/components/agentInfo/AgentGenerateDetail.tsx
+++ b/frontend/app/[locale]/agents/components/agentInfo/AgentGenerateDetail.tsx
@@ -1000,7 +1000,7 @@ export default function AgentGenerateDetail({}) {