"""设置服务:生成偏好。 生成偏好为本地单用户单行,无则返回默认值;模型网关状态由神识承接(用户面见神识阁)。 """ from app.core.config import settings from app.core.time import utc_now from app.db.session import AsyncSessionLocal from app.models.governance import GenerationPreferences from app.repositories import preferences as preferences_repo from app.schemas.preferences import ( GenerationPreferencesResponse, UpdateGenerationPreferencesRequest, ) from app.services.serializers import generation_preferences_to_response def _default_preferences() -> GenerationPreferences: return GenerationPreferences( owner_scope=settings.default_owner_scope, default_model_hint=settings.default_model_hint, temperature=0.7, top_p=1.0, max_output_tokens=4096, streaming=True, ) async def get_generation_preferences( owner_scope: str = settings.default_owner_scope, ) -> GenerationPreferencesResponse: async with AsyncSessionLocal() as session: prefs = await preferences_repo.get_preferences(session, owner_scope) if prefs is None: prefs = _default_preferences() return generation_preferences_to_response(prefs) async def update_generation_preferences( payload: UpdateGenerationPreferencesRequest, owner_scope: str = settings.default_owner_scope, ) -> GenerationPreferencesResponse: async with AsyncSessionLocal() as session: prefs = await preferences_repo.get_preferences(session, owner_scope) if prefs is None: prefs = _default_preferences() for key, value in payload.model_dump(exclude_unset=True).items(): setattr(prefs, key, value) prefs.updated_at = utc_now() session.add(prefs) try: await session.commit() except Exception: await session.rollback() prefs = await preferences_repo.get_preferences(session, owner_scope) if prefs is None: raise for key, value in payload.model_dump(exclude_unset=True).items(): setattr(prefs, key, value) prefs.updated_at = utc_now() await session.commit() else: for key, value in payload.model_dump(exclude_unset=True).items(): setattr(prefs, key, value) prefs.updated_at = utc_now() await session.commit() await session.refresh(prefs) return generation_preferences_to_response(prefs)