fix(backend): 累积的错误修复和细节修正

This commit is contained in:
2026-05-31 13:49:31 +08:00
parent 884cea53a1
commit 45e255856a
7 changed files with 37 additions and 26 deletions
+2
View File
@@ -22,3 +22,5 @@ alembic/versions/
.idea
.codemoss
alembic.ini
+1 -1
View File
@@ -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]")
+4 -1
View File
@@ -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__ = [
+11 -4
View File
@@ -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
+17 -9
View File
@@ -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
+2 -2
View File
@@ -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}")
@@ -65,15 +65,6 @@ function onSubmit() {
<n-button secondary type="primary" @click="onSubmit()">确认</n-button>
</n-form-item>
</n-form>
<select-file-modal
:max="1"
:extensions="['png', 'jpeg', 'jpg']"
:load-files="loadFiles"
v-model:show-modal="showSelectModal"
v-model:select-files="selectFiles"
/>
<upload-file-modal v-model:show-modal="showUploadModal" :after-leave="loadFiles" />
</n-modal>
</template>