diff --git a/.gitignore b/.gitignore
index 67d07e9..0af8f52 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,5 @@ alembic/versions/
.idea
.codemoss
+
+alembic.ini
diff --git a/src/nyahome/cli/cli_aii.py b/src/nyahome/cli/cli_aii.py
index 99025ba..5ff629e 100644
--- a/src/nyahome/cli/cli_aii.py
+++ b/src/nyahome/cli/cli_aii.py
@@ -96,5 +96,5 @@ def add_model(
session.add(am)
session.commit()
session.refresh(am)
-
+
console.print(f"[cyan]已添加模型 [{am.id}][{am.model_name}]({am.aii_provider_id})[/cyan]")
diff --git a/src/nyahome/database/__init__.py b/src/nyahome/database/__init__.py
index 0a8c234..be564d2 100644
--- a/src/nyahome/database/__init__.py
+++ b/src/nyahome/database/__init__.py
@@ -18,7 +18,10 @@ from .session import async_get_session, get_session
# 创建数据库连接和数据库文件
def create_db() -> None: # noqa: RUF067
- SQLModel.metadata.create_all(engine)
+ try:
+ SQLModel.metadata.create_all(engine)
+ except Exception as e:
+ raise RuntimeError(f"连接或创建数据库失败:{e}") from e
__all__ = [
diff --git a/src/nyahome/database/model_aii.py b/src/nyahome/database/model_aii.py
index 5a486ea..0515401 100644
--- a/src/nyahome/database/model_aii.py
+++ b/src/nyahome/database/model_aii.py
@@ -1,3 +1,5 @@
+from typing import Optional
+
from pydantic import BaseModel
from sqlmodel import Field, Relationship, SQLModel
@@ -7,7 +9,7 @@ class AiiProvider(SQLModel, table=True):
模型提供商。
"""
- id: int | None = Field(default=None, primary_key=True)
+ id: Optional[int] = Field(default=None, primary_key=True)
name: str
base_url: str
api_key: str
@@ -16,7 +18,7 @@ class AiiProvider(SQLModel, table=True):
class AiiProviderPublic(BaseModel):
- id: int | None = None
+ id: Optional[int] = None
name: str
base_url: str
api_key: str
@@ -27,16 +29,18 @@ class AiiModel(SQLModel, table=True):
模型。
"""
- id: int | None = Field(default=None, primary_key=True)
+ id: Optional[int] = Field(default=None, primary_key=True)
model_name: str
max_context_length: int
aii_provider_id: int = Field(default=None, foreign_key="aiiprovider.id")
aii_provider: AiiProvider = Relationship(back_populates="aii_models")
+ chatrooms: list["Chatroom"] = Relationship(back_populates="default_model")
+
class AiiModelPublic(BaseModel):
- id: int | None = None
+ id: Optional[int] = None
model_name: str
max_context_length: int
@@ -58,3 +62,6 @@ def z_aii_provider(ap: AiiProvider) -> dict:
"name": ap.name,
"base_url": ap.base_url,
}
+
+
+from .model_story import Chatroom # noqa: E402
diff --git a/src/nyahome/database/model_story.py b/src/nyahome/database/model_story.py
index 3f17b13..02c5972 100644
--- a/src/nyahome/database/model_story.py
+++ b/src/nyahome/database/model_story.py
@@ -16,33 +16,40 @@ class Chatroom(SQLModel, table=True):
规定 creator_id 为 0 的聊天室为公共聊天室,其权限由配置文件决定。
"""
- id: int | None = Field(default=None, primary_key=True)
+ id: Optional[int] = Field(default=None, primary_key=True)
name: str
description: str
feature_image: str = Field(
default=f"{config_manager.get('site_url', 'http://localhost:9000')}/nyahome/normal-thumbnail.png"
)
- content: str
- script: str
+ content: str = Field(description="聊天室中的聊天内容。作为已序列化的 json 格式字符串存储,请参阅数据保存。")
+ script: str = Field(description="聊天室中的世界书内容。作为已序列化的 json 格式字符串存储,请参阅数据保存。")
- script_template_id: int | None = Field(
+ script_template_id: Optional[int] = Field(
default=None, sa_column=Column(ForeignKey("scripttemplate.id", name="fk_chatroom_script_template"))
)
- script_template_version: str | None
+ script_template_version: Optional[str]
script_template: "ScriptTemplate" = Relationship()
creator_id: int = Field(sa_column=Column(ForeignKey("modeluser.id", name="fk_chatroom_creator")))
- creator: Optional["ModelUser"] = Relationship(back_populates="chatrooms")
+ creator: "ModelUser" = Relationship(back_populates="chatrooms")
+
+ default_model_id: Optional[int] = Field(
+ sa_column=Column(ForeignKey("aiimodel.id", name="fk_chatroom_default_model"))
+ )
+ default_model: Optional["AiiModel"] = Relationship(back_populates="chatrooms")
class ChatroomPublic(BaseModel):
- id: int | None = None
+ id: Optional[int] = None
name: str
description: str
feature_image: str
- script_template_id: int | None = None
- script_template_version: str | None
+ script_template_id: Optional[int] = None
+ script_template_version: Optional[str] = None
+
+ default_model_id: Optional[int] = None
class ScriptTemplate(SQLModel, table=True):
@@ -104,4 +111,5 @@ class ChatroomChatDelete(BaseModel):
change: Literal["user", "aii"]
+from .model_aii import AiiModel # noqa: E402
from .model_user import ModelUser # noqa: E402
diff --git a/src/nyahome/service/chat_service.py b/src/nyahome/service/chat_service.py
index d8aad1b..377842d 100644
--- a/src/nyahome/service/chat_service.py
+++ b/src/nyahome/service/chat_service.py
@@ -126,11 +126,11 @@ async def s_start_async_streaming_chat(
td = getattr(chuck.choices[0].delta, "reasoning_content", None)
cd = chuck.choices[0].delta.content
if td:
- logger.debug(f"reasoning 流式输出:{cd}")
+ # logger.debug(f"reasoning 流式输出:{cd}")
aii_thinking += td
yield f"data: {json.dumps({'text': td, 'type': 'thinking'}, ensure_ascii=False)}\n\n"
if cd:
- logger.debug(f"content 流式输出:{cd}")
+ # logger.debug(f"content 流式输出:{cd}")
aii_message += cd
yield f"data: {json.dumps({'text': cd, 'type': 'output'}, ensure_ascii=False)}\n\n"
logger.info(f"AI 完成输出 : {aii_message}")
diff --git a/webui/src/components/chatroom/ChatroomCreatorModal.vue b/webui/src/components/chatroom/ChatroomCreatorModal.vue
index 4100f51..28cd0c2 100644
--- a/webui/src/components/chatroom/ChatroomCreatorModal.vue
+++ b/webui/src/components/chatroom/ChatroomCreatorModal.vue
@@ -65,15 +65,6 @@ function onSubmit() {
确认!
-
-
-