pycoze 0.1.200__py3-none-any.whl → 0.1.201__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/bot.py CHANGED
@@ -6,42 +6,62 @@ import threading
6
6
  import queue
7
7
  import time
8
8
  import asyncio
9
+ import multiprocessing
10
+ from multiprocessing import Queue, Event
9
11
 
10
-
11
- class PeekableQueue(queue.Queue):
12
+ # 假设 PeekableQueue 类已经定义好了,如果没有,请自行实现或使用其他方式
13
+ class PeekableQueue:
14
+ def __init__(self, maxsize=0):
15
+ self.queue = Queue(maxsize=maxsize)
16
+
17
+ def put(self, item):
18
+ self.queue.put(item)
19
+
20
+ def get(self):
21
+ return self.queue.get()
22
+
12
23
  def peek(self):
13
- try:
14
- return self._get()
15
- except queue.Empty:
16
- return None
17
-
24
+ with self.queue.mutex:
25
+ if self.queue.empty():
26
+ return None
27
+ return self.queue.queue[0]
28
+
29
+ def empty(self):
30
+ return self.queue.empty()
18
31
 
19
- async def handle_input_queue(input_queue, should_exit, history):
32
+ def input_process(input_queue: Queue, interrupt_event: Event):
33
+ while not interrupt_event.is_set():
34
+ input_text = input()
35
+ if input_text == INTERRUPT_MESSAGE or input_text.startswith(INPUT_MESSAGE):
36
+ input_queue.put(input_text)
37
+ else:
38
+ raise ValueError("Invalid message")
39
+
40
+ async def handle_input_queue(input_queue: Queue, should_exit: asyncio.Event, history):
20
41
  while not should_exit.is_set():
21
- if not input_queue.empty():
42
+ try:
22
43
  next_input_text = input_queue.get_nowait()
23
44
  if next_input_text == INTERRUPT_MESSAGE:
24
45
  history.append(AIMessage(content=CHAT_DATA["info"]))
25
46
  should_exit.set() # 设置退出标志
26
47
  break
48
+ except queue.Empty:
49
+ pass
27
50
  await asyncio.sleep(0.1) # 非阻塞地等待一段时间
28
51
 
29
52
  def chat(bot_setting_file: str):
30
53
  history = []
31
54
  input_queue = PeekableQueue()
55
+ interrupt_event = Event() # 用于中断输入进程的事件
32
56
 
33
- def input_thread(input_queue: PeekableQueue):
34
- while True:
35
- input_text = input()
36
- if input_text == INTERRUPT_MESSAGE or input_text.startswith(INPUT_MESSAGE):
37
- input_queue.put(input_text)
38
- else:
39
- raise ValueError("Invalid message")
40
-
41
- input_thread_instance = threading.Thread(target=input_thread, args=(input_queue,))
42
- input_thread_instance.start()
57
+ # 创建并启动输入进程
58
+ input_process_instance = multiprocessing.Process(target=input_process, args=(input_queue, interrupt_event))
59
+ input_process_instance.start()
43
60
 
44
61
  try:
62
+ loop = asyncio.new_event_loop()
63
+ asyncio.set_event_loop(loop)
64
+
45
65
  while True:
46
66
  if not input_queue.empty():
47
67
  input_text = input_queue.get()
@@ -51,10 +71,6 @@ def chat(bot_setting_file: str):
51
71
  message = json.loads(input_text[len(INPUT_MESSAGE):])
52
72
  history.append(HumanMessage(message["content"]))
53
73
  clear_chat_data()
54
-
55
- # 创建一个异步事件循环
56
- loop = asyncio.new_event_loop()
57
- asyncio.set_event_loop(loop)
58
74
 
59
75
  # 创建一个 Event 对象用于中断
60
76
  should_exit = asyncio.Event()
@@ -77,7 +93,9 @@ def chat(bot_setting_file: str):
77
93
  except Exception as e:
78
94
  print(f"An error occurred: {e}")
79
95
  finally:
80
- input_thread_instance.join()
96
+ # 设置中断事件以停止输入进程
97
+ interrupt_event.set()
98
+ input_process_instance.join()
81
99
 
82
100
 
83
101
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycoze
3
- Version: 0.1.200
3
+ Version: 0.1.201
4
4
  Summary: Package for pycoze only!
5
5
  Author: Yuan Jie Xiong
6
6
  Author-email: aiqqqqqqq@qq.com
@@ -6,7 +6,7 @@ pycoze/automation/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
6
6
  pycoze/automation/browser/edge_driver_manager.py,sha256=gpgseunph5owZH6EskSYthuhey2SU3UP204gY0yIcuI,3022
7
7
  pycoze/bot/__init__.py,sha256=6HHMxDQVOyZM9dtSjQm9tjGnhj4h7CixD0JOvEwTi48,41
8
8
  pycoze/bot/agent_chat.py,sha256=hr0jGTd-lvLSe4vCcvaN2rKhB7BMBcVBtI1FpVa6ngs,3016
9
- pycoze/bot/bot.py,sha256=VX6SD-D8K--IA3Y5UJ7XHQ1lOJVdtAmg7LznvRHnGvs,3419
9
+ pycoze/bot/bot.py,sha256=9WtvKt3_kgXnBXZEXINoIm_Vz1Oj2C_onWxnS7rvY2k,4041
10
10
  pycoze/bot/agent/__init__.py,sha256=3wE8_FFQS8j2BY-g9Cr-onV0POEvDRZaw_NCzpqrNus,265
11
11
  pycoze/bot/agent/agent.py,sha256=Ueste4xWvkQFk5Giklv4c-kcxiPL-D-KafzZ4DONosY,3613
12
12
  pycoze/bot/agent/assistant.py,sha256=3iLxnRvf_ia0cP-FHK5Fv4ylltlnzPq1KscRCFYqjkc,1147
@@ -28,8 +28,8 @@ pycoze/utils/__init__.py,sha256=Gi5EnrWZGMD2JRejgV4c_VLCXyvA2wwBFI_niDF5MUE,110
28
28
  pycoze/utils/arg.py,sha256=GtfGbMTMdaK75Fwh6MpUe1pCA5X6Ep4LFG7a72YrzjI,525
29
29
  pycoze/utils/env.py,sha256=W04lhvTHhAAC6EldP6kk2xrctqtu8K6kl1vDLZDNeh8,561
30
30
  pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
31
- pycoze-0.1.200.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
32
- pycoze-0.1.200.dist-info/METADATA,sha256=1hKkSBOzR7Rof3qx3IzysiIfilGXZg5iJZ6gVPl0zwA,726
33
- pycoze-0.1.200.dist-info/WHEEL,sha256=bFJAMchF8aTQGUgMZzHJyDDMPTO3ToJ7x23SLJa1SVo,92
34
- pycoze-0.1.200.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
35
- pycoze-0.1.200.dist-info/RECORD,,
31
+ pycoze-0.1.201.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
32
+ pycoze-0.1.201.dist-info/METADATA,sha256=NhdIlRwQ0ND-FWYkLsIv1xrVms2SVbF4w5hmBb15N9s,726
33
+ pycoze-0.1.201.dist-info/WHEEL,sha256=bFJAMchF8aTQGUgMZzHJyDDMPTO3ToJ7x23SLJa1SVo,92
34
+ pycoze-0.1.201.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
35
+ pycoze-0.1.201.dist-info/RECORD,,