初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,47 @@
|
||||
"""模型网关 endpoint 覆盖数据访问(api-spec §4.4)。
|
||||
|
||||
按 (logical_model_name, endpoint_name) 唯一;upsert 手动 find+update,兼容 SQLite。
|
||||
字段 None 表示不覆盖该字段(回退 yaml/env)。
|
||||
"""
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.governance import ModelEndpointOverride
|
||||
|
||||
|
||||
async def list_overrides(session: AsyncSession) -> list[ModelEndpointOverride]:
|
||||
result = await session.execute(select(ModelEndpointOverride))
|
||||
return list(result.scalars().all())
|
||||
|
||||
|
||||
async def get_override(
|
||||
session: AsyncSession,
|
||||
logical_model_name: str,
|
||||
endpoint_name: str,
|
||||
) -> ModelEndpointOverride | None:
|
||||
result = await session.execute(
|
||||
select(ModelEndpointOverride).where(
|
||||
ModelEndpointOverride.logical_model_name == logical_model_name,
|
||||
ModelEndpointOverride.endpoint_name == endpoint_name,
|
||||
)
|
||||
)
|
||||
return result.scalars().first()
|
||||
|
||||
|
||||
async def upsert_override(
|
||||
session: AsyncSession,
|
||||
override: ModelEndpointOverride,
|
||||
) -> ModelEndpointOverride:
|
||||
"""存在则更新非 None 字段,否则新建。返回最终实体(未 commit)。"""
|
||||
existing = await get_override(session, override.logical_model_name, override.endpoint_name)
|
||||
if existing is not None:
|
||||
existing.base_url = override.base_url
|
||||
existing.api_key = override.api_key
|
||||
existing.status = override.status
|
||||
existing.weight = override.weight
|
||||
existing.priority = override.priority
|
||||
return existing
|
||||
session.add(override)
|
||||
await session.flush()
|
||||
return override
|
||||
Reference in new issue
Block a user