diff --git a/app/infrastructure/seed.py b/app/infrastructure/seed.py index 571a5b0..0bdc2df 100644 --- a/app/infrastructure/seed.py +++ b/app/infrastructure/seed.py @@ -256,17 +256,16 @@ DEMO_USERS = [ async def _add_agent(session: AsyncSession, seed: dict, user_id: str, port: str | None, now: str) -> None: - """幂等播种单个智能体:按 (id,user_id,port) 已存在则跳过(修全局固定 id 多用户/端口填重)。""" - key = (seed["id"], user_id, port) - if await session.get(Agent, key) is not None: - return - session.add( - Agent(id=seed["id"], user_id=user_id, port=port, name=seed["name"], - description=seed["description"], language=seed.get("language", "zh"), - model_name=seed.get("model_name", ""), deletable=seed.get("deletable", True), - use_fixed_soul=seed.get("use_fixed_soul", False), - created_at=now, updated_at=now) - ) + """幂等播种单个智能体:SQLite INSERT OR IGNORE((id,user_id,port) 冲突跳过),杜绝 UNIQUE 抛错。""" + from sqlalchemy.dialects.sqlite import insert as sqlite_insert + port_val = port or "" # agents.port NOT NULL;无端口身份用 "" + stmt = sqlite_insert(Agent).values( + id=seed["id"], user_id=user_id, port=port_val, name=seed["name"], + description=seed["description"], language=seed.get("language", "zh"), + model_name=seed.get("model_name", ""), deletable=seed.get("deletable", True), + use_fixed_soul=seed.get("use_fixed_soul", False), created_at=now, updated_at=now, + ).on_conflict_do_nothing(index_elements=["id", "user_id", "port"]) + await session.execute(stmt) async def seed_data(session: AsyncSession) -> None: