feat(cloud): manage LLM providers in database
Tests / Test passed: 664

This commit is contained in:
2026-07-14 00:31:47 +08:00
parent b613a315ff
commit a166ffd8a4
35 changed files with 2432 additions and 204 deletions
+52 -1
View File
@@ -5,7 +5,7 @@ from __future__ import annotations
from datetime import datetime
from typing import Any, Literal
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, SecretStr
class TaskConstraintsModel(BaseModel):
@@ -212,3 +212,54 @@ class TokenUsageEventResponse(BaseModel):
output_tokens: int | None = None
total_tokens: int
occurred_at: datetime
class LlmProviderProfileCreateRequest(BaseModel):
name: str = Field(min_length=1, max_length=120)
provider_type: Literal["anthropic", "openai-compatible"]
model: str = Field(min_length=1, max_length=200)
base_url: str | None = Field(default=None, max_length=500)
timeout_seconds: float = Field(gt=0, le=120)
api_key: SecretStr
class LlmProviderProfileUpdateRequest(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=120)
provider_type: Literal["anthropic", "openai-compatible"] | None = None
model: str | None = Field(default=None, min_length=1, max_length=200)
base_url: str | None = Field(default=None, max_length=500)
timeout_seconds: float | None = Field(default=None, gt=0, le=120)
enabled: bool | None = None
api_key: SecretStr | None = None
expected_revision: int | None = Field(default=None, ge=1)
class LlmProviderProfileActivateRequest(BaseModel):
expected_settings_revision: int | None = Field(default=None, ge=0)
class LlmProviderProfileResponse(BaseModel):
id: str
name: str
provider_type: Literal["anthropic", "openai-compatible"]
model: str
base_url: str | None = None
timeout_seconds: float
enabled: bool
revision: int
has_api_key: bool
key_last_rotated_at: datetime
created_at: datetime
updated_at: datetime
active: bool
class LlmProviderSettingsResponse(BaseModel):
active_profile_id: str | None = None
revision: int
updated_at: datetime | None = None
class LlmProviderProfileListResponse(BaseModel):
settings: LlmProviderSettingsResponse
items: list[LlmProviderProfileResponse]