From bc54903bf6806da726f590ed7f84a122400cfc5a Mon Sep 17 00:00:00 2001 From: Lynn Date: Thu, 2 Jul 2026 20:28:27 +0800 Subject: [PATCH] Fix: display model_id in memory_list (#16567) --- api/apps/services/provider_api_service.py | 19 ---------------- api/db/joint_services/tenant_model_service.py | 2 +- api/db/services/memory_service.py | 2 ++ rag/llm/ocr_model.py | 11 +++------- .../user-setting/setting-model/hooks.tsx | 22 +++++++++++-------- 5 files changed, 19 insertions(+), 37 deletions(-) diff --git a/api/apps/services/provider_api_service.py b/api/apps/services/provider_api_service.py index 33805e1d3..795885d02 100644 --- a/api/apps/services/provider_api_service.py +++ b/api/apps/services/provider_api_service.py @@ -313,25 +313,6 @@ async def create_provider_instance(tenant_id: str, provider_id_or_name: str, ins if not success: return False, msg - # For SoMark, embed OCR config from model_info into the api_key JSON so - # SoMarkOcrModel.__init__ can read it via the existing key → api_key_payload - # path. This avoids changing the deprecated LLMBundle in tenant_llm_service.py. - if provider_name == "SoMark" and model_info: - cfg = {} - if api_key_str: - try: - cfg = json.loads(api_key_str) - except Exception: - pass - if not isinstance(cfg, dict): - cfg = {} - for model in model_info: - if model.get("extra"): - cfg.update(model["extra"]) - if base_url: - cfg["SOMARK_BASE_URL"] = base_url - api_key_str = json.dumps(cfg) - success, msg = await verify_api_key(provider_name, api_key, base_url, region, model_info) if not success: return False, msg diff --git a/api/db/joint_services/tenant_model_service.py b/api/db/joint_services/tenant_model_service.py index 44b6a4aa9..2c1fd085d 100644 --- a/api/db/joint_services/tenant_model_service.py +++ b/api/db/joint_services/tenant_model_service.py @@ -279,7 +279,7 @@ def get_model_config_from_provider_instance(tenant_id, model_type: str | enum.En if provider_name.lower() == "somark": # SoMark/OCR factories read parser config (somark_*, parse_method, ...) # from model_config["extra"]; see tenant_llm_service.LLMBundle OCR path. - model_config["extra"] = model_extra.get("ocr_config", model_extra) + model_config["extra"] = model_extra if api_key_payload is not None: model_config["api_key_payload"] = api_key_payload diff --git a/api/db/services/memory_service.py b/api/db/services/memory_service.py index a565709cf..552747e6f 100644 --- a/api/db/services/memory_service.py +++ b/api/db/services/memory_service.py @@ -84,6 +84,8 @@ class MemoryService(CommonService): User.nickname.alias("owner_name"), cls.model.memory_type, cls.model.storage_type, + cls.model.embd_id, + cls.model.llm_id, cls.model.permissions, cls.model.description, cls.model.create_time, diff --git a/rag/llm/ocr_model.py b/rag/llm/ocr_model.py index a3ddaf091..d31cd2709 100644 --- a/rag/llm/ocr_model.py +++ b/rag/llm/ocr_model.py @@ -259,19 +259,12 @@ class SoMarkOcrModel(Base, SoMarkParser): return bool(raw) return str(raw).strip().lower() in {"1", "true", "yes", "on"} - def _resolve_int(ui_key: str, env_key: str, default: int) -> int: - raw = _resolve(ui_key, env_key, default) - try: - return int(raw) - except (TypeError, ValueError): - return default - base_url = _resolve( "somark_base_url", "SOMARK_BASE_URL", kwargs.get("base_url", "https://somark.tech/api/v1"), ) - api_key = _resolve("somark_api_key", "SOMARK_API_KEY", key_as_secret) + api_key = _resolve("api_key", "SOMARK_API_KEY", key_as_secret) image_format = _resolve("somark_image_format", "SOMARK_IMAGE_FORMAT", "url") formula_format = _resolve("somark_formula_format", "SOMARK_FORMULA_FORMAT", "latex") table_format = _resolve("somark_table_format", "SOMARK_TABLE_FORMAT", "html") @@ -293,6 +286,8 @@ class SoMarkOcrModel(Base, SoMarkParser): redacted_config[k] = v logging.info(f"Parsed SoMark config (sensitive fields redacted): {redacted_config}") + self.api_key = api_key + self.base_url = base_url SoMarkParser.__init__( self, base_url=base_url, diff --git a/web/src/pages/user-setting/setting-model/hooks.tsx b/web/src/pages/user-setting/setting-model/hooks.tsx index 235f9c393..458aa310a 100644 --- a/web/src/pages/user-setting/setting-model/hooks.tsx +++ b/web/src/pages/user-setting/setting-model/hooks.tsx @@ -189,6 +189,7 @@ export const useSubmitBedrock = () => { export const useSubmitSoMark = () => { const [saveLoading, setSaveLoading] = useState(false); const submitProviderInstance = useSubmitProviderInstance(); + const verifyConnection = useVerifyConnection(); const { visible: somarkVisible, hideModal: hideSoMarkModal, @@ -204,7 +205,7 @@ export const useSubmitSoMark = () => { instance_name: payload.instance_name, llm_factory: LLMFactory.SoMark, api_key: payload.somark_api_key || '', - api_base: payload.somark_base_url, + base_url: payload.somark_base_url, max_tokens: 0, model_info: [ { @@ -232,16 +233,19 @@ export const useSubmitSoMark = () => { ], }; try { + if (isVerify) { + return verifyConnection( + LLMFactory.SoMark, + req.api_key, + req.base_url, + undefined, + req.model_info as IModelInfo[], + ); + } const ret = await submitProviderInstance( req as IAddProviderInstanceRequestBody, - isVerify, + false, ); - if (isVerify) { - return { - isValid: !!ret.data?.success, - logs: ret.data?.message, - } as VerifyResult; - } if (ret.code === 0) { hideSoMarkModal(); return true; @@ -253,7 +257,7 @@ export const useSubmitSoMark = () => { } } }, - [submitProviderInstance, hideSoMarkModal, setSaveLoading], + [submitProviderInstance, hideSoMarkModal, setSaveLoading, verifyConnection], ); return {