rebuild(llm): add audited model connectivity tests

This commit is contained in:
leefer
2026-07-30 10:25:07 +08:00
parent d8f0dd930c
commit 08f69b0641
9 changed files with 197 additions and 8 deletions
+53
View File
@@ -49,6 +49,8 @@ class ModelRuntimeAccess(Protocol):
class ModelPoolAccess(Protocol):
def runtime_config(self) -> ModelRuntimeAccess: ...
def runtime_model(self, model_id: int) -> ModelRecordAccess: ...
def decrypt_api_key(self, record: ModelRecordAccess) -> str: ...
@@ -237,6 +239,57 @@ class LLMGateway:
code, message = _safe_error(last_error)
raise LLMGatewayError(code, message)
def test_model(self, principal: PrincipalAccess, model_id: int) -> dict[str, object]:
try:
record = self._model_pool.runtime_model(model_id)
except BusinessError as exc:
raise LLMGatewayError("model_not_found", "模型不存在。") from exc
now = datetime.now(SHANGHAI)
request_id = uuid.uuid4().hex
call = LLMCall(
request_id=request_id,
user_id=principal.user.id,
feature="model_connectivity",
prompt_version="system:model-connectivity:v1",
business_id=f"model:{model_id}",
started_at=now,
usage_date=now.date().isoformat(),
input_chars=15,
quota_exempt=True,
profiles=(
LLMProfile(
model_id=record.id,
role="primary",
base_url=record.base_url,
model_identifier=record.model_identifier,
api_key=self._model_pool.decrypt_api_key(record),
),
),
)
with self._database.transaction() as connection:
self._repository.reserve(
connection,
request_id=request_id,
user_id=principal.user.id,
feature=call.feature,
business_id=call.business_id,
prompt_version=call.prompt_version,
started_at=now.isoformat(timespec="seconds"),
input_chars=call.input_chars,
)
started = time.perf_counter()
for _event in self.stream(
call,
[{"role": "user", "content": "连接测试,只回复:连接成功"}],
):
pass
return {
"connected": True,
"message": "连接成功",
"duration_ms": round((time.perf_counter() - started) * 1000),
"request_id": request_id,
}
def _finish_attempt(
self,
attempt_id: int,