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({}) { - + - + - - - { + updateAgentConfig({ + verification_config: { + ...(editedAgent.verification_config || DEFAULT_AGENT_VERIFICATION_CONFIG), + enabled: value, + }, + }); + }} + /> + +