46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
"""模型供应商配置数据访问层。"""
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from yuxi.storage.postgres.models_business import ModelProvider
|
|
|
|
|
|
async def list_model_providers(db: AsyncSession) -> list[ModelProvider]:
|
|
"""获取全部模型供应商配置。"""
|
|
result = await db.execute(
|
|
select(ModelProvider).order_by(ModelProvider.is_enabled.desc(), ModelProvider.provider_id.asc())
|
|
)
|
|
return list(result.scalars().all())
|
|
|
|
|
|
async def get_model_provider(db: AsyncSession, provider_id: str) -> ModelProvider | None:
|
|
"""按 provider_id 获取模型供应商配置。"""
|
|
result = await db.execute(select(ModelProvider).where(ModelProvider.provider_id == provider_id))
|
|
return result.scalar_one_or_none()
|
|
|
|
|
|
async def create_model_provider(db: AsyncSession, data: dict) -> ModelProvider:
|
|
"""创建模型供应商配置。"""
|
|
provider = ModelProvider(**data)
|
|
db.add(provider)
|
|
await db.flush()
|
|
await db.refresh(provider)
|
|
return provider
|
|
|
|
|
|
async def update_model_provider(db: AsyncSession, provider: ModelProvider, data: dict) -> ModelProvider:
|
|
"""更新模型供应商配置。"""
|
|
for key, value in data.items():
|
|
if key != "provider_id":
|
|
setattr(provider, key, value)
|
|
await db.flush()
|
|
await db.refresh(provider)
|
|
return provider
|
|
|
|
|
|
async def delete_model_provider(db: AsyncSession, provider: ModelProvider) -> None:
|
|
"""删除模型供应商配置。"""
|
|
await db.delete(provider)
|
|
await db.flush()
|