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
@@ -22,6 +22,7 @@ if TYPE_CHECKING:
TokenUsageEvent,
UserSubmissionPolicy,
)
from cloud.llm_providers import LlmProviderProfile, LlmProviderSettings, ProviderType
AttemptStatus = Literal["assigned", "dispatched", "done", "failed", "expired"]
@@ -341,6 +342,48 @@ class CloudRepository(Protocol):
self, *, host_id: str, limit: int, offset: int,
) -> list[TokenUsageEvent]: ...
def get_llm_provider_settings(self) -> LlmProviderSettings: ...
def list_llm_provider_profiles(self) -> list[LlmProviderProfile]: ...
def get_llm_provider_profile(self, profile_id: str) -> LlmProviderProfile | None: ...
def create_llm_provider_profile(
self, profile: LlmProviderProfile
) -> LlmProviderProfile: ...
def update_llm_provider_profile(
self,
profile_id: str,
*,
name: str,
name_normalized: str,
provider_type: ProviderType,
model: str,
base_url: str | None,
timeout_seconds: float,
api_key_ciphertext: str,
key_last_rotated_at: datetime,
enabled: bool,
expected_revision: int | None,
updated_at: datetime,
) -> LlmProviderProfile: ...
def activate_llm_provider_profile(
self,
profile_id: str,
*,
expected_settings_revision: int | None,
updated_at: datetime,
) -> LlmProviderSettings: ...
def delete_llm_provider_profile(
self,
profile_id: str,
*,
expected_revision: int | None,
) -> None: ...
def list_reserved_device_ids(self, *, now: datetime) -> set[str]: ...
def assign_task(