feat: add rag backend and review access fixes

This commit is contained in:
wren
2026-05-08 10:58:24 +08:00
parent 1c84209f38
commit 9c86bf59e5
32 changed files with 3877 additions and 23 deletions
@@ -8,6 +8,11 @@ from fastapi_modules.fastapi_leaudit.models.leauditCrossReviewTask import Leaudi
from fastapi_modules.fastapi_leaudit.models.leauditCrossReviewTaskDocument import LeauditCrossReviewTaskDocument
from fastapi_modules.fastapi_leaudit.models.leauditCrossReviewTaskMember import LeauditCrossReviewTaskMember
from fastapi_modules.fastapi_leaudit.models.leauditCrossReviewVote import LeauditCrossReviewVote
from fastapi_modules.fastapi_leaudit.models.leauditRagDataset import LeauditRagDataset
from fastapi_modules.fastapi_leaudit.models.leauditRagDocument import LeauditRagDocument
from fastapi_modules.fastapi_leaudit.models.leauditRagChatApp import LeauditRagChatApp
from fastapi_modules.fastapi_leaudit.models.leauditRagConversation import LeauditRagConversation
from fastapi_modules.fastapi_leaudit.models.leauditRagMessage import LeauditRagMessage
__all__ = [
"LeauditDocument",
@@ -18,4 +23,9 @@ __all__ = [
"LeauditCrossReviewTaskDocument",
"LeauditCrossReviewProposal",
"LeauditCrossReviewVote",
"LeauditRagDataset",
"LeauditRagDocument",
"LeauditRagChatApp",
"LeauditRagConversation",
"LeauditRagMessage",
]
@@ -0,0 +1,27 @@
from __future__ import annotations
from sqlalchemy import BigInteger, Boolean, Float, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class LeauditRagChatApp(BaseModel):
__tablename__ = "rag_chat_app"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String(255))
description: Mapped[str] = mapped_column(Text, default="")
area: Mapped[str] = mapped_column(String(50), default="")
datasetId: Mapped[int | None] = mapped_column("dataset_id", BigInteger)
systemPrompt: Mapped[str] = mapped_column("system_prompt", Text, default="")
llmModel: Mapped[str] = mapped_column("llm_model", String(100), default="")
temperature: Mapped[float] = mapped_column(Float, default=0.3)
maxTokens: Mapped[int] = mapped_column("max_tokens", Integer, default=2048)
openingStatement: Mapped[str] = mapped_column("opening_statement", Text, default="")
suggestedQuestions: Mapped[str] = mapped_column("suggested_questions", Text, default="[]")
isDefault: Mapped[bool] = mapped_column("is_default", Boolean, default=False)
sortOrder: Mapped[int] = mapped_column("sort_order", Integer, default=0)
status: Mapped[int] = mapped_column(Integer, default=1)
createdBy: Mapped[int | None] = mapped_column("created_by", BigInteger)
updatedBy: Mapped[int | None] = mapped_column("updated_by", BigInteger)
@@ -0,0 +1,17 @@
from __future__ import annotations
from sqlalchemy import BigInteger, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class LeauditRagConversation(BaseModel):
__tablename__ = "rag_conversation"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
conversationId: Mapped[str] = mapped_column("conversation_id", String(100), unique=True)
userId: Mapped[int] = mapped_column("user_id", BigInteger)
appId: Mapped[int | None] = mapped_column("app_id", BigInteger)
name: Mapped[str] = mapped_column(String(500), default="新对话")
introduction: Mapped[str] = mapped_column(Text, default="")
@@ -0,0 +1,30 @@
from __future__ import annotations
from sqlalchemy import BigInteger, Boolean, Integer, String, Text
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class LeauditRagDataset(BaseModel):
__tablename__ = "rag_dataset"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String(255), comment="知识库名称")
description: Mapped[str] = mapped_column(Text, default="", comment="知识库描述")
area: Mapped[str] = mapped_column(String(50), default="", comment="地区")
isPublic: Mapped[bool] = mapped_column("is_public", Boolean, default=False)
isDefault: Mapped[bool] = mapped_column("is_default", Boolean, default=False)
collectionName: Mapped[str] = mapped_column("collection_name", String(100), unique=True)
embeddingModel: Mapped[str] = mapped_column("embedding_model", String(100), default="text-embedding-v4")
embeddingDim: Mapped[int] = mapped_column("embedding_dim", Integer, default=1024)
chunkMaxSize: Mapped[int] = mapped_column("chunk_max_size", Integer, default=800)
chunkMinSize: Mapped[int] = mapped_column("chunk_min_size", Integer, default=20)
documentCount: Mapped[int] = mapped_column("document_count", Integer, default=0)
totalChunks: Mapped[int] = mapped_column("total_chunks", Integer, default=0)
retrievalModel: Mapped[dict] = mapped_column("retrieval_model", JSONB, default=dict)
sortOrder: Mapped[int] = mapped_column("sort_order", Integer, default=0)
status: Mapped[int] = mapped_column(Integer, default=1)
createdBy: Mapped[int | None] = mapped_column("created_by", BigInteger)
updatedBy: Mapped[int | None] = mapped_column("updated_by", BigInteger)
@@ -0,0 +1,24 @@
from __future__ import annotations
from sqlalchemy import BigInteger, Boolean, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class LeauditRagDocument(BaseModel):
__tablename__ = "rag_document"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
datasetId: Mapped[int] = mapped_column("dataset_id", BigInteger)
filename: Mapped[str] = mapped_column(String(500))
originalName: Mapped[str] = mapped_column("original_name", String(500))
minioPath: Mapped[str] = mapped_column("minio_path", String(1000))
fileType: Mapped[str] = mapped_column("file_type", String(20))
fileSize: Mapped[int] = mapped_column("file_size", BigInteger, default=0)
chunkCount: Mapped[int] = mapped_column("chunk_count", Integer, default=0)
indexingStatus: Mapped[str] = mapped_column("indexing_status", String(20), default="pending")
indexingError: Mapped[str | None] = mapped_column("indexing_error", Text)
enabled: Mapped[bool] = mapped_column(Boolean, default=True)
hitCount: Mapped[int] = mapped_column("hit_count", Integer, default=0)
createdBy: Mapped[int | None] = mapped_column("created_by", BigInteger)
@@ -0,0 +1,20 @@
from __future__ import annotations
from sqlalchemy import BigInteger, String, Text
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class LeauditRagMessage(BaseModel):
__tablename__ = "rag_message"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
messageId: Mapped[str] = mapped_column("message_id", String(100), unique=True)
conversationId: Mapped[str] = mapped_column("conversation_id", String(100))
role: Mapped[str] = mapped_column(String(20))
content: Mapped[str] = mapped_column(Text, default="")
sources: Mapped[list] = mapped_column(JSONB, default=list)
metadataJson: Mapped[dict] = mapped_column("metadata", JSONB, default=dict)
feedback: Mapped[str | None] = mapped_column(String(20))