pycoze 0.1.160__py3-none-any.whl → 0.1.162__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pycoze/bot/agent/__init__.py +2 -2
- pycoze/bot/agent/chat.py +4 -3
- pycoze/bot/bot.py +56 -12
- {pycoze-0.1.160.dist-info → pycoze-0.1.162.dist-info}/METADATA +1 -1
- {pycoze-0.1.160.dist-info → pycoze-0.1.162.dist-info}/RECORD +8 -8
- {pycoze-0.1.160.dist-info → pycoze-0.1.162.dist-info}/LICENSE +0 -0
- {pycoze-0.1.160.dist-info → pycoze-0.1.162.dist-info}/WHEEL +0 -0
- {pycoze-0.1.160.dist-info → pycoze-0.1.162.dist-info}/top_level.txt +0 -0
pycoze/bot/agent/__init__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
from .agent import run_agent
|
2
2
|
from .assistant import Runnable
|
3
|
-
from .chat import INPUT_MESSAGE, CHAT_DATA, clear_chat_data, output, info
|
3
|
+
from .chat import INPUT_MESSAGE, INTERRUPT_MESSAGE, CHAT_DATA, clear_chat_data, output, info
|
4
4
|
|
5
|
-
__all__ = [run_agent, Runnable, INPUT_MESSAGE, output]
|
5
|
+
__all__ = [run_agent, Runnable, INPUT_MESSAGE, INTERRUPT_MESSAGE, CHAT_DATA, clear_chat_data, output, info]
|
pycoze/bot/agent/chat.py
CHANGED
@@ -3,12 +3,13 @@ from langchain_core.messages import AIMessage
|
|
3
3
|
|
4
4
|
|
5
5
|
INPUT_MESSAGE = "INPUT_MESSAGE=>"
|
6
|
+
INTERRUPT_MESSAGE = "INTERRUPT_MESSAGE=>"
|
6
7
|
_OUTPUT_MESSAGE = "OUTPUT_MESSAGE=>"
|
7
8
|
_INFOMATION_MESSAGE = "INFOMATION_MESSAGE=>"
|
8
9
|
_LOG = "LOG=>"
|
9
10
|
|
10
11
|
|
11
|
-
CHAT_DATA = {output:"",info:""}
|
12
|
+
CHAT_DATA = {"output":"", "info":""}
|
12
13
|
|
13
14
|
|
14
15
|
def log(content, *args, end="\n", **kwargs):
|
@@ -16,13 +17,13 @@ def log(content, *args, end="\n", **kwargs):
|
|
16
17
|
|
17
18
|
|
18
19
|
def clear_chat_data():
|
19
|
-
CHAT_DATA = {output:"",info:""}
|
20
|
+
CHAT_DATA = {"output":"", "info":""}
|
20
21
|
|
21
22
|
|
22
23
|
def output(role, content):
|
23
24
|
assert role == "assistant"
|
24
|
-
print(_OUTPUT_MESSAGE + json.dumps({"role": role, "content": content}))
|
25
25
|
CHAT_DATA["output"] = content
|
26
|
+
print(_OUTPUT_MESSAGE + json.dumps({"role": role, "content": content}))
|
26
27
|
|
27
28
|
def info(role, content):
|
28
29
|
CHAT_DATA["info"] += content
|
pycoze/bot/bot.py
CHANGED
@@ -1,23 +1,67 @@
|
|
1
1
|
from langchain_core.messages import HumanMessage, AIMessage
|
2
|
-
from .agent import INPUT_MESSAGE, output, CHAT_DATA, clear_chat_data
|
2
|
+
from .agent import INPUT_MESSAGE, INTERRUPT_MESSAGE, output, CHAT_DATA, clear_chat_data
|
3
3
|
from .agent_chat import agent_chat
|
4
4
|
import json
|
5
5
|
import threading
|
6
|
+
import queue
|
7
|
+
import time
|
6
8
|
|
7
9
|
|
10
|
+
class PeekableQueue(queue.Queue):
|
11
|
+
def peek(self):
|
12
|
+
with self.mutex:
|
13
|
+
if self.empty():
|
14
|
+
return None
|
15
|
+
return self.queue[0]
|
16
|
+
|
17
|
+
|
8
18
|
def chat(bot_setting_file: str):
|
9
19
|
history = []
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
input_queue = PeekableQueue()
|
21
|
+
|
22
|
+
def input_thread(input_queue: PeekableQueue):
|
23
|
+
while True:
|
24
|
+
input_text = input()
|
25
|
+
if input_text == INTERRUPT_MESSAGE:
|
26
|
+
break
|
27
|
+
if not input_text.startswith(INPUT_MESSAGE):
|
28
|
+
raise ValueError("Invalid message")
|
29
|
+
input_queue.put(input_text)
|
30
|
+
|
31
|
+
input_thread_instance = threading.Thread(target=input_thread, args=(input_queue,))
|
32
|
+
input_thread_instance.start()
|
33
|
+
|
34
|
+
try:
|
35
|
+
while True:
|
36
|
+
if not input_queue.empty():
|
37
|
+
input_text = input_queue.get()
|
38
|
+
if input_text == INTERRUPT_MESSAGE:
|
39
|
+
break
|
40
|
+
try:
|
41
|
+
message = json.loads(input_text[len(INPUT_MESSAGE):])
|
42
|
+
history.append(HumanMessage(message["content"]))
|
43
|
+
clear_chat_data()
|
44
|
+
agent_chat_thread = threading.Thread(target=agent_chat, args=(bot_setting_file, history))
|
45
|
+
agent_chat_thread.start()
|
46
|
+
next_input_text = ""
|
47
|
+
while agent_chat_thread.is_alive():
|
48
|
+
if not input_queue.empty():
|
49
|
+
next_input_text = input_queue.peek()
|
50
|
+
if next_input_text == INTERRUPT_MESSAGE:
|
51
|
+
history.append(AIMessage(content=CHAT_DATA["info"]))
|
52
|
+
break
|
53
|
+
time.sleep(0.1) # 每隔 0.1 秒检查一次
|
54
|
+
if next_input_text != INTERRUPT_MESSAGE:
|
55
|
+
history.append(AIMessage(content=CHAT_DATA["output"]))
|
56
|
+
except json.JSONDecodeError:
|
57
|
+
print("Invalid JSON format in input message.")
|
58
|
+
except KeyError:
|
59
|
+
print("Missing 'content' key in input message.")
|
60
|
+
except Exception as e:
|
61
|
+
print(f"An error occurred: {e}")
|
62
|
+
finally:
|
63
|
+
input_thread_instance.join()
|
64
|
+
|
21
65
|
|
22
66
|
|
23
67
|
def get_chat_response(bot_setting_file: str, input_text: str):
|
@@ -3,11 +3,11 @@ pycoze/ai/__init__.py,sha256=odM2lgYSnApxw4AzLV_5AyaxL5_MLfydOSB1VmLGFyA,75
|
|
3
3
|
pycoze/ai/vram_reserve.py,sha256=QbqaA8qv87cnEpOVDMygi0BNMxuhLYwj1UKfR_D5BD4,4340
|
4
4
|
pycoze/bot/__init__.py,sha256=6HHMxDQVOyZM9dtSjQm9tjGnhj4h7CixD0JOvEwTi48,41
|
5
5
|
pycoze/bot/agent_chat.py,sha256=7duMif9tz5ewZJgbHsg8oGKY4vtiDUZ9MGtVQsY_HRw,2851
|
6
|
-
pycoze/bot/bot.py,sha256=
|
7
|
-
pycoze/bot/agent/__init__.py,sha256=
|
6
|
+
pycoze/bot/bot.py,sha256=CoMbkvf98RnazBfn3bmEhQ8nNtKHQMIm1GgH_xA6elw,2745
|
7
|
+
pycoze/bot/agent/__init__.py,sha256=3wE8_FFQS8j2BY-g9Cr-onV0POEvDRZaw_NCzpqrNus,265
|
8
8
|
pycoze/bot/agent/agent.py,sha256=Aue8nWeW_I7e1jo4o7cUjFFjrsV9NtVUiTX3EQYHmbA,3507
|
9
9
|
pycoze/bot/agent/assistant.py,sha256=3iLxnRvf_ia0cP-FHK5Fv4ylltlnzPq1KscRCFYqjkc,1147
|
10
|
-
pycoze/bot/agent/chat.py,sha256=
|
10
|
+
pycoze/bot/agent/chat.py,sha256=07WZEbre5LibRCuoFel7fWGQ9Yc7YFUrSuOWF9YkT24,746
|
11
11
|
pycoze/bot/agent/agent_types/__init__.py,sha256=zmU2Kmrv5mCdfg-QlPn2H6pWxbGeq8s7YTqLhpzJC6k,179
|
12
12
|
pycoze/bot/agent/agent_types/const.py,sha256=BfUKPrhAHREoMLHuFNG2bCIEkC1-f7K0LEqNg4RwiRE,70
|
13
13
|
pycoze/bot/agent/agent_types/openai_func_call_agent.py,sha256=SnEm5MODHn2uMsaMNqgzULM_91vqLHC0TU6ovwCOqLU,6675
|
@@ -23,8 +23,8 @@ pycoze/ui/ui_def.py,sha256=UhhU_yB3GV9ISbvTWT48hsHPHI250BhMILh6bu5Uioo,4206
|
|
23
23
|
pycoze/utils/__init__.py,sha256=ET0W5wzq4zlY3dr1wHVbbeRKlKdC_zqHt9b0jZyHohw,94
|
24
24
|
pycoze/utils/arg.py,sha256=orLVEGw3x2f3l7bZDbBPkkdDPSdqXo-_Rs-4ZhzmrEw,984
|
25
25
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
26
|
-
pycoze-0.1.
|
27
|
-
pycoze-0.1.
|
28
|
-
pycoze-0.1.
|
29
|
-
pycoze-0.1.
|
30
|
-
pycoze-0.1.
|
26
|
+
pycoze-0.1.162.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
27
|
+
pycoze-0.1.162.dist-info/METADATA,sha256=LD7IEgGbt7mB96tbV0D5zZ8eTXy5pGi18BQ_WWFALi4,726
|
28
|
+
pycoze-0.1.162.dist-info/WHEEL,sha256=bFJAMchF8aTQGUgMZzHJyDDMPTO3ToJ7x23SLJa1SVo,92
|
29
|
+
pycoze-0.1.162.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
30
|
+
pycoze-0.1.162.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|