Skip to content

Commit 0b67e8d

Browse files
committed
Merge branch 'main' into feat/1.3.0
# Conflicts: # src/backend/bisheng/api/services/knowledge_imp.py # src/frontend/platform/src/pages/KnowledgePage/components/FileUploadStep2.tsx
2 parents b677978 + 4c3bb7f commit 0b67e8d

31 files changed

Lines changed: 211 additions & 120 deletions

File tree

docker/docker-compose-uns.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
services:
22
bisheng-unstructured:
33
container_name: bisheng-unstructured
4-
image: dataelement/bisheng-unstructured:v0.0.3.11
4+
image: dataelement/bisheng-unstructured:v0.0.3.14
55
ports:
66
- "10001:10001"
77
environment:

docker/docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ services:
5353

5454
backend:
5555
container_name: bisheng-backend
56-
image: dataelement/bisheng-backend:v1.1.1
56+
image: dataelement/bisheng-backend:v1.2.0
5757
ports:
5858
- "7860:7860"
5959
environment:
@@ -93,7 +93,7 @@ services:
9393

9494
frontend:
9595
container_name: bisheng-frontend
96-
image: dataelement/bisheng-frontend:v1.1.1
96+
image: dataelement/bisheng-frontend:v1.2.0
9797
ports:
9898
- "3001:3001"
9999
environment:

src/backend/bisheng/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
try:
88
# 通过ci去自动修改
9-
__version__ = '1.1.1'
9+
__version__ = '1.2.0'
1010
except metadata.PackageNotFoundError:
1111
# Case where package metadata is not available.
1212
__version__ = ''

src/backend/bisheng/api/services/knowledge_imp.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -448,9 +448,7 @@ def add_file_embedding(
448448
metadatas.append(val["metadata"])
449449
for index, one in enumerate(texts):
450450
if len(one) > 10000:
451-
raise ValueError(
452-
"分段结果超长,请尝试在自定义策略中使用更多切分符(例如 \n)进行切分"
453-
)
451+
raise ValueError('分段结果超长,请尝试在自定义策略中使用更多切分符(例如 \\n、。、\\.)进行切分')
454452
# 入库时 拼接文件名和文档摘要
455453
texts[index] = KnowledgeUtils.aggregate_chunk_metadata(one, metadatas[index])
456454

@@ -929,7 +927,7 @@ def qa_status_change(qa_id: int, target_status: int):
929927
qa_db.status = target_status
930928
QAKnoweldgeDao.update(qa_db)
931929
else:
932-
qa_db.status = target_status
930+
qa_db.status = QAStatus.PROCESSING.value
933931
QAKnoweldgeDao.update(qa_db)
934932
QA_save_knowledge(db_knowledge, qa_db)
935933
return qa_db

src/backend/bisheng/api/v1/schemas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class ChatMessage(BaseModel):
147147
files: Optional[list] = []
148148
user_id: Optional[int] = None
149149
message_id: Optional[int | str] = None
150-
source: int = 0
150+
source: Optional[int] = 0
151151
sender: Optional[str] = None
152152
receiver: Optional[dict] = None
153153
liked: int = 0

src/backend/bisheng/chat/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ async def stop_handle_message(self, message: Dict[any, any]):
245245
if reasoning_answer.split():
246246
res = await self.add_message('bot', answer, 'reasoning_answer', 'break_answer')
247247
await self.send_response('reasoning_answer', 'end', '', message_id=res.id if res else None)
248-
elif answer.strip():
248+
if answer.strip():
249249
res = await self.add_message('bot', answer, 'answer', 'break_answer')
250250
await self.send_response('answer', 'end', '', message_id=res.id if res else None)
251251
await self.send_response('processing', 'close', '')

src/backend/bisheng/chat/handlers.py

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from bisheng.chat.utils import judge_source, process_graph, process_source_document
1111
from bisheng.database.base import session_getter
1212
from bisheng.database.models.report import Report
13+
from bisheng.database.models.message import ChatMessage as ChatMessageDB, ChatMessageDao
1314
from bisheng.interface.importing.utils import import_by_type
1415
from bisheng.interface.initialize.loading import instantiate_llm
1516
from bisheng.settings import settings
@@ -67,6 +68,38 @@ async def process_stop(self, session: ChatManager, client_id: str, chat_id: str,
6768
else:
6869
logger.error(f'act=auto_gen act={action}')
6970
else:
71+
# 将流式输出的内容写到数据库内
72+
answer = ''
73+
reasoning_answer = ''
74+
while not self.stream_queue.empty():
75+
msg = self.stream_queue.get()
76+
if msg.get('type') == 'answer':
77+
answer += msg.get('content', '')
78+
elif msg.get('type') == 'reasoning':
79+
reasoning_answer += msg.get('content', '')
80+
if reasoning_answer.strip():
81+
chat_message = ChatMessageDB(flow_id=client_id, chat_id=chat_id,
82+
message=reasoning_answer,
83+
category='answer',
84+
type='end',
85+
user_id=user_id,
86+
remark='break_answer',
87+
is_bot=True)
88+
if chat_id:
89+
db_message = ChatMessageDao.insert_one(chat_message)
90+
await session.send_json(client_id, chat_id, ChatMessage(**db_message.model_dump(), message_id=db_message.id), add=False)
91+
92+
if answer.strip():
93+
chat_message = ChatMessageDB(flow_id=client_id, chat_id=chat_id,
94+
message=answer,
95+
category='answer',
96+
type='end',
97+
user_id=user_id,
98+
remark='break_answer',
99+
is_bot=True)
100+
if chat_id:
101+
db_message = ChatMessageDao.insert_one(chat_message)
102+
await session.send_json(client_id, chat_id, ChatMessage(**db_message.model_dump(), message_id=db_message.id), add=False)
70103
# 普通技能的stop
71104
res = thread_pool.cancel_task([key]) # 将进行中的任务进行cancel
72105
if res[0]:
@@ -75,18 +108,7 @@ async def process_stop(self, session: ChatManager, client_id: str, chat_id: str,
75108
close = ChatResponse(type='close')
76109
await session.send_json(client_id, chat_id, res, add=False)
77110
await session.send_json(client_id, chat_id, close, add=False)
78-
answer = ''
79-
# 记录中止后产生的流式输出内容
80-
while not self.stream_queue.empty():
81-
answer += self.stream_queue.get()
82-
if answer.strip():
83-
chat_message = ChatMessage(message=answer,
84-
category='answer',
85-
type='end',
86-
user_id=user_id,
87-
remark='break_answer',
88-
is_bot=True)
89-
session.chat_history.add_message(client_id, chat_id, chat_message)
111+
90112
logger.info('process_stop done')
91113

92114
async def process_report(self,

src/backend/bisheng/chat/manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def add_message(
5151
from bisheng.database.models.message import ChatMessage
5252
message.flow_id = client_id
5353
message.chat_id = chat_id
54+
db_message = None
5455
if chat_id and (message.message or message.intermediate_steps
5556
or message.files) and message.type != 'stream':
5657
msg = message.copy()
@@ -67,6 +68,7 @@ def add_message(
6768

6869
if not isinstance(message, FileResponse):
6970
self.notify()
71+
return db_message
7072

7173
def empty_history(self, client_id: str, chat_id: str):
7274
"""Empty the chat history for a client."""

src/backend/bisheng/database/models/knowledge_file.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# if TYPE_CHECKING:
77
from pydantic import field_validator
8-
from sqlalchemy import JSON, Column, DateTime, String, or_, text
8+
from sqlalchemy import JSON, Column, DateTime, String, or_, text, Text
99
from sqlmodel import Field, delete, func, select
1010

1111
from bisheng.database.base import session_getter
@@ -97,7 +97,7 @@ class KnowledgeFile(KnowledgeFileBase, table=True):
9797
class QAKnowledge(QAKnowledgeBase, table=True):
9898
id: Optional[int] = Field(default=None, primary_key=True)
9999
questions: Optional[List[str]] = Field(default=None, sa_column=Column(JSON))
100-
answers: Optional[str] = Field(default=None, sa_column=Column(String(length=2048)))
100+
answers: Optional[str] = Field(default=None, sa_column=Column(Text))
101101

102102

103103
class KnowledgeFileRead(KnowledgeFileBase):

src/backend/bisheng/worker/workflow/redis_callback.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ async def get_response_until_break(self) -> AsyncIterator[ChatResponse]:
153153
break
154154
yield chat_response
155155
break
156-
elif status_info['status'] == WorkflowStatus.WAITING.value and time.time() - status_info['time'] > 10:
156+
elif status_info['status'] in [WorkflowStatus.WAITING.value, WorkflowStatus.INPUT_OVER.value] and time.time() - status_info['time'] > 10:
157157
# 10秒内没有收到状态更新,说明workflow没有启动,可能是celery worker线程数已满
158158
self.set_workflow_status(WorkflowStatus.FAILED.value, 'workflow task execute busy')
159159
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',

0 commit comments

Comments
 (0)