Skip to content

Commit b1c444d

Browse files
Merge remote-tracking branch 'upstream/v2' into PR/fix-problem-3
2 parents 6ca2e38 + 5f0687d commit b1c444d

File tree

3 files changed

+62
-15
lines changed

3 files changed

+62
-15
lines changed

apps/models_provider/impl/aliyun_bai_lian_model_provider/model/llm.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#!/usr/bin/env python
22
# -*- coding: UTF-8 -*-
3-
from typing import Dict
3+
from typing import Dict, Any
4+
5+
from langchain_core.language_models import LanguageModelInput
6+
from langchain_core.messages import AIMessage
47

58
from models_provider.base_model_provider import MaxKBBaseModel
69
from models_provider.impl.base_chat_open_ai import BaseChatOpenAI
@@ -23,3 +26,38 @@ def new_instance(model_type, model_name, model_credential: Dict[str, object], **
2326
streaming=True,
2427
**optional_params,
2528
)
29+
30+
def _get_request_payload(
31+
self,
32+
input_: LanguageModelInput,
33+
*,
34+
stop: list[str] | None = None,
35+
**kwargs: Any,
36+
) -> dict:
37+
# Collect reasoning_content from AIMessages with tool_calls before base conversion.
38+
# When enable_thinking=true, Bailian API requires reasoning_content on any assistant
39+
# message that contains tool_calls (defaults to "" when not present).
40+
messages = self._convert_input(input_).to_messages()
41+
reasoning_content_map = {}
42+
for i, msg in enumerate(messages):
43+
if (
44+
isinstance(msg, AIMessage)
45+
and (msg.tool_calls or msg.invalid_tool_calls)
46+
):
47+
reasoning_content_map[i] = msg.additional_kwargs.get(
48+
"reasoning_content") or ""
49+
50+
payload = super()._get_request_payload(input_, stop=stop, **kwargs)
51+
52+
# Inject reasoning_content into assistant messages with tool_calls so that
53+
# Bailian deepseek thinking mode does not reject the request with a 400 error.
54+
if "messages" in payload and reasoning_content_map:
55+
for i, message in enumerate(payload["messages"]):
56+
if (
57+
i in reasoning_content_map
58+
and message.get("role") == "assistant"
59+
and message.get("tool_calls")
60+
):
61+
message["reasoning_content"] = reasoning_content_map[i]
62+
63+
return payload

pyproject.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@ dependencies = [
2222
"beautifulsoup4==4.13.4",
2323
"jieba==0.42.1",
2424
"langchain==1.2.15",
25-
"langchain-core==1.2.29",
25+
"langchain-core==1.2.30",
2626
"langchain-openai==1.1.13",
2727
"langchain-anthropic==1.4.0",
2828
"langchain-community==0.4.1",
2929
"langchain-deepseek==1.0.1",
30-
"langchain-google-genai==4.2.1",
30+
"langchain-google-genai==4.2.2",
3131
"langchain-mcp-adapters==0.2.2",
3232
"langchain-huggingface==1.2.1",
3333
"langchain-ollama==1.1.0",
34-
"langchain-aws==1.4.3",
34+
"langchain-aws==1.4.4",
3535
"langgraph==1.1.6",
36-
"deepagents==0.5.2",
36+
"deepagents==0.5.3",
3737
"torch==2.8.0",
3838
"numpy==1.26.4",
3939
"sentence-transformers==5.0.0",
@@ -55,7 +55,7 @@ dependencies = [
5555
"xlrd==2.0.2",
5656
"xlwt==1.3.0",
5757
"pymupdf==1.26.3",
58-
"pypdf==6.10.1",
58+
"pypdf==6.10.2",
5959
"pydub==0.25.1",
6060
"pysilk==0.0.1",
6161
"gunicorn==23.0.0",

ui/src/views/paragraph/index.vue

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
{
140140
paragraph_id: item.id,
141141
new_position: setPosition(val, index),
142+
target_index: setTargetIndex(val, index),
142143
},
143144
index,
144145
)
@@ -266,15 +267,22 @@ watch(
266267
267268
function setPosition(val: string, index: number) {
268269
if (val === 'top') {
269-
return 0
270+
return 1
270271
} else if (val === 'bottom') {
271-
return paginationConfig.total - 1
272+
return paragraphDetail.value[paragraphDetail.value.length - 1]?.position ?? paginationConfig.total
272273
} else if (val === 'up') {
273-
return index - 1
274+
return paragraphDetail.value[index - 1]?.position ?? paragraphDetail.value[index].position
274275
} else if (val === 'down') {
275-
return index + 1
276+
return paragraphDetail.value[index + 1]?.position ?? paragraphDetail.value[index].position
276277
}
277278
}
279+
function setTargetIndex(val: string, index: number) {
280+
if (val === 'top') return 0
281+
if (val === 'bottom') return paragraphDetail.value.length - 1
282+
if (val === 'up') return index - 1
283+
if (val === 'down') return index + 1
284+
return index
285+
}
278286
function dialogVisibleChange(val: boolean) {
279287
dialogVisible.value = val
280288
}
@@ -450,12 +458,13 @@ function onEnd(event?: any, params?: any, index?: number) {
450458
return
451459
}
452460
const p = cloneDeep(params)
453-
if (p) {
454-
p.new_position = p.new_position + 1 // 由于拖拽时会将当前段落位置作为新位置,所以需要加1
455-
}
456461
const obj = p ?? {
457462
paragraph_id: paragraphDetail.value[event.newIndex].id, // 当前拖动的段落ID
458-
new_position: event.newIndex + 1,
463+
// 向下拖动时取前一个元素的position,向上拖动时取后一个元素的position
464+
new_position:
465+
event.newIndex > event.oldIndex
466+
? paragraphDetail.value[event.newIndex - 1]?.position ?? paragraphDetail.value.length
467+
: paragraphDetail.value[event.newIndex + 1]?.position ?? paragraphDetail.value.length,
459468
}
460469
// console.log(paragraphDetail.value[event.newIndex], obj)
461470
loadSharedApi({ type: 'paragraph', systemType: apiType.value }).putAdjustPosition(
@@ -466,7 +475,7 @@ function onEnd(event?: any, params?: any, index?: number) {
466475
)
467476
if (params) {
468477
const movedItem = paragraphDetail.value.splice(index as number, 1)[0]
469-
paragraphDetail.value.splice(params.new_position, 0, movedItem)
478+
paragraphDetail.value.splice(params.target_index, 0, movedItem)
470479
}
471480
}
472481

0 commit comments

Comments
 (0)