pycoze 0.1.162__tar.gz → 0.1.164__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {pycoze-0.1.162 → pycoze-0.1.164}/PKG-INFO +1 -1
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent_chat.py +18 -3
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/bot.py +16 -4
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze.egg-info/PKG-INFO +1 -1
- {pycoze-0.1.162 → pycoze-0.1.164}/setup.py +1 -1
- {pycoze-0.1.162 → pycoze-0.1.164}/LICENSE +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/README.md +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ai/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ai/vram_reserve.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/agent.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/agent_types/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/agent_types/const.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/agent_types/openai_func_call_agent.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/assistant.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/bot/agent/chat.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/reference/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/reference/bot.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/reference/lib.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/reference/tool.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ui/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ui/base.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ui/color.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ui/typ.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/ui/ui_def.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/utils/__init__.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/utils/arg.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze/utils/text_or_file.py +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze.egg-info/SOURCES.txt +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze.egg-info/dependency_links.txt +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/pycoze.egg-info/top_level.txt +0 -0
- {pycoze-0.1.162 → pycoze-0.1.164}/setup.cfg +0 -0
@@ -32,7 +32,7 @@ def load_abilities(bot_setting_file: str):
|
|
32
32
|
return abilities
|
33
33
|
|
34
34
|
|
35
|
-
def agent_chat(bot_setting_file, history):
|
35
|
+
async def agent_chat(bot_setting_file, history, should_exit):
|
36
36
|
role_setting = load_role_setting(bot_setting_file)
|
37
37
|
abilities = load_abilities(bot_setting_file)
|
38
38
|
|
@@ -75,5 +75,20 @@ def agent_chat(bot_setting_file, history):
|
|
75
75
|
assistant_message=prompt,
|
76
76
|
tool_compatibility_mode=cfg["toolCompatibilityMode"],
|
77
77
|
)
|
78
|
-
|
79
|
-
|
78
|
+
|
79
|
+
async def run_agent_with_exit_check():
|
80
|
+
result = await run_agent(agent, history, cfg["toolCompatibilityMode"])
|
81
|
+
if not should_exit.is_set():
|
82
|
+
output("assistant", result)
|
83
|
+
|
84
|
+
task = asyncio.create_task(run_agent_with_exit_check())
|
85
|
+
|
86
|
+
while not task.done():
|
87
|
+
if should_exit.is_set():
|
88
|
+
task.cancel()
|
89
|
+
try:
|
90
|
+
await task
|
91
|
+
except asyncio.CancelledError:
|
92
|
+
pass
|
93
|
+
break
|
94
|
+
await asyncio.sleep(0.1)
|
@@ -5,6 +5,7 @@ import json
|
|
5
5
|
import threading
|
6
6
|
import queue
|
7
7
|
import time
|
8
|
+
import asyncio
|
8
9
|
|
9
10
|
|
10
11
|
class PeekableQueue(queue.Queue):
|
@@ -36,18 +37,23 @@ def chat(bot_setting_file: str):
|
|
36
37
|
if not input_queue.empty():
|
37
38
|
input_text = input_queue.get()
|
38
39
|
if input_text == INTERRUPT_MESSAGE:
|
39
|
-
|
40
|
+
continue
|
40
41
|
try:
|
41
42
|
message = json.loads(input_text[len(INPUT_MESSAGE):])
|
42
43
|
history.append(HumanMessage(message["content"]))
|
43
44
|
clear_chat_data()
|
44
|
-
|
45
|
+
|
46
|
+
# 为每个线程创建一个独立的退出标志
|
47
|
+
should_exit = threading.Event()
|
48
|
+
agent_chat_thread = threading.Thread(target=asyncio.run, args=(agent_chat(bot_setting_file, history, should_exit),))
|
45
49
|
agent_chat_thread.start()
|
50
|
+
|
46
51
|
next_input_text = ""
|
47
52
|
while agent_chat_thread.is_alive():
|
48
53
|
if not input_queue.empty():
|
49
54
|
next_input_text = input_queue.peek()
|
50
55
|
if next_input_text == INTERRUPT_MESSAGE:
|
56
|
+
should_exit.set() # 设置退出标志
|
51
57
|
history.append(AIMessage(content=CHAT_DATA["info"]))
|
52
58
|
break
|
53
59
|
time.sleep(0.1) # 每隔 0.1 秒检查一次
|
@@ -67,5 +73,11 @@ def chat(bot_setting_file: str):
|
|
67
73
|
def get_chat_response(bot_setting_file: str, input_text: str):
|
68
74
|
history = [HumanMessage(input_text)]
|
69
75
|
clear_chat_data()
|
70
|
-
|
71
|
-
|
76
|
+
|
77
|
+
# 为每个线程创建一个独立的退出标志
|
78
|
+
should_exit = threading.Event()
|
79
|
+
|
80
|
+
# 使用 asyncio.run 来运行异步函数,并等待其完成
|
81
|
+
asyncio.run(agent_chat(bot_setting_file, history, should_exit))
|
82
|
+
|
83
|
+
return CHAT_DATA["output"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|