Skip to content

Commit c7bbfe9

Browse files
author
yuruo
committed
发现代码时,增加两个按键;
server端完成代码提取。
1 parent 0c66c44 commit c7bbfe9

File tree

4 files changed

+61
-60
lines changed

4 files changed

+61
-60
lines changed

app/src/renderer/src/components/Chat/index.tsx

+10-20
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ export default function Chat(props: {id: number, revalidator: () => void, search
2626
<ProChat
2727
chats={chatMessages}
2828
onChatsChange={(chat)=>{
29-
console.log('chat', chat)
3029
setMessages(chat)
3130
}}
3231
chatItemRenderConfig={{
@@ -62,29 +61,20 @@ export default function Chat(props: {id: number, revalidator: () => void, search
6261
}
6362

6463
request={async (messages) => {
65-
// const response = await getResponse(messages)
66-
// if (response.isExistCode === 0) {
67-
// setTimeout(() => {
68-
// proChatRef.current?.sendMessage({
69-
// type: 'text',
70-
// content: response.content,
71-
// role: 'coder',
72-
// originData: response
73-
// });
74-
// }, 1000); // 延时1秒推送消息
75-
76-
// }
77-
78-
// return new Response(response.content)// 支持流式和非流式
79-
setTimeout(() => {
80-
proChatRef.current?.pushChat({
64+
const response = await getResponse(messages)
65+
console.log(response)
66+
if (response.isExistCode === 0) {
67+
setTimeout(() => {
68+
proChatRef.current?.pushChat({
8169
type: 'text',
82-
content: "hello",
70+
content: response.content,
8371
role: 'coder',
84-
originData: "dd"
72+
originData: response
8573
});
74+
8675
}, 1000); // 延时1秒推送消息
87-
return new Response("hello")
76+
}
77+
return new Response(response.content)
8878
}}
8979
/>
9080
)

app/src/renderer/src/hooks/useChat.ts

+16-14
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ import { localServerBaseUrl } from "@renderer/config";
33
export default () => {
44

55
const getResponse = async (chat_messages: Array<any>) => {
6+
7+
const messages = chat_messages
8+
.filter((m) => ['assistant', 'user'].includes(m.role)) // 过滤出 role 为 assistant 和 user 的消息
9+
.map((m) => {
10+
return {
11+
role: m.role,
12+
content: m.content
13+
}
14+
})
615

7-
const messages = chat_messages.map((m) => {
8-
return {
9-
role: m.role,
10-
content: m.content
11-
}
12-
})
13-
14-
const response = await fetch(localServerBaseUrl + "/llm", {
15-
method: "POST",
16-
headers: {
17-
"Content-Type": "application/json"
18-
},
19-
body: JSON.stringify({messages, isStream: false })
20-
})
16+
const response = await fetch(localServerBaseUrl + "/llm", {
17+
method: "POST",
18+
headers: {
19+
"Content-Type": "application/json"
20+
},
21+
body: JSON.stringify({messages, isStream: false })
22+
})
2123
return response.json()
2224

2325

server/route/llm.py

+20-26
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,37 @@
44
from agent.prompt import code_prompt
55
import json
66
import re
7+
8+
9+
710
home_bp = Blueprint('llm', __name__)
811

912
@home_bp.route('/llm', methods=["POST"])
1013
def llm():
1114
data = request.get_json()
1215
messages = data["messages"]
13-
isStream = data.get("isStream", False)
1416
if data.get("llm_config"):
1517
config = json.loads(data.get("llm_config"))
1618
else:
1719
config = json.loads(get_config())["llm"]
1820
messages = [{"role": "system", "content": code_prompt.substitute()}] + messages
19-
# 暂时没有strem
20-
if isStream:
21-
def generate():
22-
response = completion(messages=messages, stream=True, **config)
23-
for part in response:
24-
yield part.choices[0].delta.content or ""
25-
return Response(generate(), mimetype='text/event-stream')
26-
else:
27-
try:
28-
res = completion(messages=messages, **config).choices[0].message.content
29-
return {"content": res, "isExistCode": contains_code(res), "status": 0}
30-
except Exception as e:
31-
return {"content": str(e), "status": 1}
21+
try:
22+
res = completion(messages=messages, **config).choices[0].message.content
23+
return {"content": res, "code": extract_code_blocks(res), "status": 0}
24+
except Exception as e:
25+
return {"content": str(e), "status": 1}
3226

3327

34-
def contains_code(text):
35-
markdown_patterns = [
36-
r'```.*?```',
37-
r'```[\s\S]*?```'
38-
]
39-
for pattern in markdown_patterns:
40-
if re.search(pattern, text, re.MULTILINE):
41-
return 0
42-
return 1
43-
4428

45-
if __name__ == "__main__":
46-
print(contains_code("为了帮助你打开并读取位于桌面上的 `a.txt` 文件,以下是相应的Python代码。请确保根据你的系统环境(如Windows或Mac OS),调整文件路径。\\n\\n```python\\n# 打开并读取桌面上的 a.txt 文件\\ntry:\\n with open('/Users/your_username/Desktop/a.txt', 'r') as file: # 请根据你的系统路径修改文件路径\\n content = file.read() # 读取文件\\n print(content) # 显示文件内容\\nexcept FileNotFoundError:\\n print(\\\"文件没有找到,请确保文件路径正确。\\\")\\nexcept Exception as e:\\n print(\\\"读取文件时发生错误:\\\", e)\\n```\\n\\n请将 `/Users/your_username/Desktop/a.txt` 中的 `your_username` 替换为你的用户名称。如果你是Windows用户,路径可能类似于 `C:\\\\\\\\Users\\\\\\\\your_username\\\\\\\\Desktop\\\\\\\\a.txt`。"))
29+
def extract_code_blocks(text):
30+
pattern_match = [
31+
r'.*?```python([\s\S]*?)```.*',
32+
r'.*?```([\s\S]*?)```.*'
33+
]
34+
for pattern in pattern_match:
35+
pattern = re.compile(pattern, re.MULTILINE).findall(text)
36+
if pattern:
37+
return pattern[0]
38+
else:
39+
continue
40+
return ""

server/route/test.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import re
2+
def extract_code_blocks(text):
3+
pattern_match = [
4+
r'.*?```python([\s\S]*?)```.*',
5+
r'.*?```([\s\S]*?)```.*'
6+
]
7+
for pattern in pattern_match:
8+
pattern = re.compile(pattern, re.MULTILINE).findall(text)
9+
if pattern:
10+
return pattern[0]
11+
else:
12+
continue
13+
if __name__ == "__main__":
14+
text = "为了帮助你打开并读取位于桌面上的 `a.txt` 文件,以下是相应的Python代码。请确保根据你的系统环境(如Windows或Mac OS),调整文件路径。\\n\\n```python\\n# 打开并读取桌面上的 a.txt 文件\\ntry:\\n with open('/Users/your_username/Desktop/a.txt', 'r') as file: # 请根据你的系统路径修改文件路径\\n content = file.read() # 读取文件\\n print(content) # 显示文件内容\\nexcept FileNotFoundError:\\n print(\\\"文件没有找到,请确保文件路径正确。\\\")\\nexcept Exception as e:\\n print(\\\"读取文件时发生错误:\\\", e)\\n```\\n\\n请将 `/Users/your_username/Desktop/a.txt` 中的 `your_username` 替换为你的用户名称。如果你是Windows用户,路径可能类似于 `C:\\\\\\\\Users\\\\\\\\your_username\\\\\\\\Desktop\\\\\\\\a.txt`。"
15+
print(extract_code_blocks(text))

0 commit comments

Comments
 (0)