Fix: model-provider bugs (#15460)

### What problem does this PR solve?

Fix:
- Use @ to avoid split  by `_` in model_name.
- Verify api_key when add instance.
- Pop api_key in list intances response.
- Remove useless index.
- Sort providers, instances and models by name.
- Get `is_tools` from llm_factories.json

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
Lynn
2026-06-02 13:24:53 +08:00
committed by GitHub
parent 0e9eeb7b88
commit 3bc5ed282e
7 changed files with 242 additions and 46 deletions

View File

@@ -1372,9 +1372,6 @@ class TenantModelInstance(DataBaseModel):
class Meta:
db_table = "tenant_model_instance"
indexes = (
(("api_key", "provider_id"), True),
)
class TenantModel(DataBaseModel):
@@ -1731,6 +1728,17 @@ def migrate_db():
alter_db_column_type(migrator, "document", "size", BigIntegerField(default=0, index=True))
alter_db_column_type(migrator, "file", "size", BigIntegerField(default=0, index=True))
alter_db_add_column(migrator, "tenant", "ocr_id", CharField(max_length=128, null=True, help_text="default ocr model ID", index=True))
for table_name, index_name in [("tenant_model_instance", "idx_api_key_provider_id"), ("tenant_model", "idx_provider_model_instance")]:
try:
migrate(migrator.drop_index(table_name, index_name))
except (OperationalError, ProgrammingError) as ex:
msg = str(ex)
if "1091" in msg or "can't DROP" in msg.lower() or "does not exist" in msg.lower() or "already exists" in msg.lower():
pass
else:
logging.critical(f"Failed to drop index {index_name} on {table_name}: {ex}")
except Exception as ex:
logging.critical(f"Failed to drop index {index_name} on {table_name}: {ex}")
logging.disable(logging.NOTSET)
# this is after re-enabling logging to allow logging changed user emails
migrate_add_unique_email(migrator)

View File

@@ -116,7 +116,7 @@ def get_model_config_from_provider_instance(tenant_id, model_type: str|enum.Enum
"llm_name": model_obj.model_name,
"api_base": extra_fields.get("base_url", ""),
"model_type": model_obj.model_type,
"is_tool": extra_fields.get("is_tool", is_tool)
"is_tools": extra_fields.get("is_tools", is_tool)
}
if api_key_payload is not None:
model_config["api_key_payload"] = api_key_payload
@@ -136,7 +136,7 @@ def get_model_config_from_provider_instance(tenant_id, model_type: str|enum.Enum
"llm_name": llm_info["llm_name"],
"api_base": extra_fields.get("base_url", ""),
"model_type": llm_info["model_type"],
"is_tool": llm_info.get("is_tool", is_tool)
"is_tools": llm_info.get("is_tools", is_tool)
}
if api_key_payload is not None:
model_config["api_key_payload"] = api_key_payload