mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-09 04:40:57 +00:00
fix(cloud): accept null model abilities (#2377)
Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
This commit is contained in:
@@ -32,6 +32,11 @@ class CloudModelCatalogItem(BaseModel):
|
|||||||
is_featured: bool = False
|
is_featured: bool = False
|
||||||
featured_order: int = 0
|
featured_order: int = 0
|
||||||
|
|
||||||
|
@field_validator('llm_abilities', mode='before')
|
||||||
|
@classmethod
|
||||||
|
def normalize_missing_abilities(cls, value: Any) -> Any:
|
||||||
|
return () if value is None else value
|
||||||
|
|
||||||
@field_validator('llm_abilities')
|
@field_validator('llm_abilities')
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate_abilities(cls, value: tuple[str, ...]) -> tuple[str, ...]:
|
def validate_abilities(cls, value: tuple[str, ...]) -> tuple[str, ...]:
|
||||||
|
|||||||
@@ -84,6 +84,15 @@ def _snapshot(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_catalog_snapshot_treats_null_model_abilities_as_empty() -> None:
|
||||||
|
payload = _snapshot().model_dump(mode='json')
|
||||||
|
payload['models'][0]['llm_abilities'] = None
|
||||||
|
|
||||||
|
snapshot = CloudModelCatalogSnapshot.model_validate(payload)
|
||||||
|
|
||||||
|
assert snapshot.models[0].llm_abilities == ()
|
||||||
|
|
||||||
|
|
||||||
async def test_catalog_reconciles_every_workspace_idempotently_and_tracks_owner_and_downlisting(tmp_path) -> None:
|
async def test_catalog_reconciles_every_workspace_idempotently_and_tracks_owner_and_downlisting(tmp_path) -> None:
|
||||||
engine = create_async_engine(f'sqlite+aiosqlite:///{tmp_path / "model-catalog.db"}')
|
engine = create_async_engine(f'sqlite+aiosqlite:///{tmp_path / "model-catalog.db"}')
|
||||||
manager = PersistenceManager(object(), mode=PersistenceMode.CLOUD_RUNTIME)
|
manager = PersistenceManager(object(), mode=PersistenceMode.CLOUD_RUNTIME)
|
||||||
|
|||||||
Reference in New Issue
Block a user