pycoze 0.1.202__tar.gz → 0.1.204__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. {pycoze-0.1.202 → pycoze-0.1.204}/PKG-INFO +1 -1
  2. pycoze-0.1.204/pycoze/bot/bot.py +76 -0
  3. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze.egg-info/PKG-INFO +1 -1
  4. {pycoze-0.1.202 → pycoze-0.1.204}/setup.py +1 -1
  5. pycoze-0.1.202/pycoze/bot/bot.py +0 -89
  6. {pycoze-0.1.202 → pycoze-0.1.204}/LICENSE +0 -0
  7. {pycoze-0.1.202 → pycoze-0.1.204}/README.md +0 -0
  8. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/__init__.py +0 -0
  9. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ai/__init__.py +0 -0
  10. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ai/vram_reserve.py +0 -0
  11. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/automation/__init__.py +0 -0
  12. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/automation/browser/__init__.py +0 -0
  13. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/automation/browser/edge_driver_manager.py +0 -0
  14. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/__init__.py +0 -0
  15. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/__init__.py +0 -0
  16. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/agent.py +0 -0
  17. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/agent_types/__init__.py +0 -0
  18. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/agent_types/const.py +0 -0
  19. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/agent_types/openai_func_call_agent.py +0 -0
  20. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/assistant.py +0 -0
  21. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent/chat.py +0 -0
  22. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/bot/agent_chat.py +0 -0
  23. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/reference/__init__.py +0 -0
  24. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/reference/bot.py +0 -0
  25. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/reference/lib.py +0 -0
  26. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/reference/tool.py +0 -0
  27. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/reference/workflow.py +0 -0
  28. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ui/__init__.py +0 -0
  29. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ui/base.py +0 -0
  30. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ui/color.py +0 -0
  31. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ui/typ.py +0 -0
  32. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/ui/ui_def.py +0 -0
  33. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/utils/__init__.py +0 -0
  34. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/utils/arg.py +0 -0
  35. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/utils/env.py +0 -0
  36. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze/utils/text_or_file.py +0 -0
  37. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze.egg-info/SOURCES.txt +0 -0
  38. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze.egg-info/dependency_links.txt +0 -0
  39. {pycoze-0.1.202 → pycoze-0.1.204}/pycoze.egg-info/top_level.txt +0 -0
  40. {pycoze-0.1.202 → pycoze-0.1.204}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycoze
3
- Version: 0.1.202
3
+ Version: 0.1.204
4
4
  Summary: Package for pycoze only!
5
5
  Author: Yuan Jie Xiong
6
6
  Author-email: aiqqqqqqq@qq.com
@@ -0,0 +1,76 @@
1
+ import signal
2
+ import sys
3
+ import json
4
+ from .agent import INPUT_MESSAGE, output, CHAT_DATA, clear_chat_data
5
+ from .agent_chat import agent_chat
6
+ from multiprocessing import Process, Event
7
+ import asyncio
8
+
9
+ # 用于标记中断请求
10
+ interrupt_flag = False
11
+
12
+ # 信号处理函数
13
+ def handle_interrupt(signum, frame):
14
+ global interrupt_flag
15
+ interrupt_flag = True
16
+ print("Interrupt signal received. Waiting for the current operation to complete...")
17
+
18
+ # 设置信号处理器
19
+ signal.signal(signal.SIGINT, handle_interrupt)
20
+
21
+ def read_input():
22
+ while True:
23
+ try:
24
+ input_text = input()
25
+ if input_text.startswith(INPUT_MESSAGE):
26
+ yield input_text
27
+ else:
28
+ raise ValueError("Invalid message")
29
+ except EOFError: # 如果输入流结束,则退出循环
30
+ break
31
+
32
+ def chat(bot_setting_file: str):
33
+ history = []
34
+ for input_text in read_input():
35
+ try:
36
+ message = json.loads(input_text[len(INPUT_MESSAGE):])
37
+ history.append(HumanMessage(message["content"]))
38
+ clear_chat_data()
39
+
40
+ # 创建一个事件来控制子进程的退出
41
+ should_exit = Event()
42
+
43
+ # 使用进程来运行 agent_chat
44
+ agent_chat_process = Process(target=asyncio.run, args=(agent_chat(bot_setting_file, history, should_exit),))
45
+ agent_chat_process.start()
46
+
47
+ # 检查是否收到了中断信号
48
+ while agent_chat_process.is_alive():
49
+ if interrupt_flag:
50
+ should_exit.set() # 设置退出标志
51
+ break
52
+ time.sleep(0.1) # 每隔 0.1 秒检查一次
53
+
54
+ # 确保子进程已经退出
55
+ agent_chat_process.join()
56
+
57
+ # 如果没有收到中断信号,记录输出
58
+ if not interrupt_flag:
59
+ history.append(AIMessage(content=CHAT_DATA["output"]))
60
+
61
+ # 重置中断标志
62
+ interrupt_flag = False
63
+ except json.JSONDecodeError:
64
+ print("Invalid JSON format in input message.")
65
+ except KeyError:
66
+ print("Missing 'content' key in input message.")
67
+ except Exception as e:
68
+ print(f"An error occurred: {e}")
69
+
70
+
71
+ def get_chat_response(bot_setting_file: str, input_text: str):
72
+ history = [HumanMessage(input_text)]
73
+ clear_chat_data()
74
+ should_exit = threading.Event()
75
+ asyncio.run(agent_chat(bot_setting_file, history, should_exit))
76
+ return CHAT_DATA["output"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycoze
3
- Version: 0.1.202
3
+ Version: 0.1.204
4
4
  Summary: Package for pycoze only!
5
5
  Author: Yuan Jie Xiong
6
6
  Author-email: aiqqqqqqq@qq.com
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="pycoze",
5
- version="0.1.202",
5
+ version="0.1.204",
6
6
  packages=find_packages(),
7
7
  install_requires=[],
8
8
  author="Yuan Jie Xiong",
@@ -1,89 +0,0 @@
1
- from langchain_core.messages import HumanMessage, AIMessage
2
- from .agent import INPUT_MESSAGE, INTERRUPT_MESSAGE, output, CHAT_DATA, clear_chat_data
3
- from .agent_chat import agent_chat
4
- import json
5
- import threading
6
- import queue
7
- import time
8
- import asyncio
9
- import multiprocessing
10
- from multiprocessing import Queue, Event
11
-
12
-
13
- class PeekableQueue(queue.Queue):
14
- def peek(self):
15
- try:
16
- return self._get()
17
- except queue.Empty:
18
- return None
19
-
20
- async def handle_input_queue(input_queue, should_exit, history):
21
- while not should_exit.is_set():
22
- if not input_queue.empty():
23
- next_input_text = input_queue.get_nowait()
24
- if next_input_text == INTERRUPT_MESSAGE:
25
- history.append(AIMessage(content=CHAT_DATA["info"]))
26
- should_exit.set() # 设置退出标志
27
- break
28
- await asyncio.sleep(0.1) # 非阻塞地等待一段时间
29
-
30
- def chat(bot_setting_file: str):
31
- history = []
32
- input_queue = PeekableQueue()
33
-
34
- def input_thread(input_queue: PeekableQueue):
35
- while True:
36
- input_text = input()
37
- if input_text == INTERRUPT_MESSAGE or input_text.startswith(INPUT_MESSAGE):
38
- input_queue.put(input_text)
39
- else:
40
- raise ValueError("Invalid message")
41
-
42
- input_thread_instance = threading.Thread(target=input_thread, args=(input_queue,))
43
- input_thread_instance.start()
44
-
45
- try:
46
- while True:
47
- if not input_queue.empty():
48
- input_text = input_queue.get()
49
- if input_text == INTERRUPT_MESSAGE:
50
- continue
51
- try:
52
- message = json.loads(input_text[len(INPUT_MESSAGE):])
53
- history.append(HumanMessage(message["content"]))
54
- clear_chat_data()
55
-
56
- # 创建一个异步事件循环
57
- loop = asyncio.new_event_loop()
58
- asyncio.set_event_loop(loop)
59
-
60
- # 创建一个 Event 对象用于中断
61
- should_exit = asyncio.Event()
62
-
63
- # 并发运行 agent_chat 和 handle_input_queue
64
- agent_chat_task = loop.create_task(agent_chat(bot_setting_file, history, should_exit))
65
- input_handler_task = loop.create_task(handle_input_queue(input_queue, should_exit, history))
66
-
67
- # 运行所有任务
68
- loop.run_until_complete(asyncio.gather(agent_chat_task, input_handler_task))
69
-
70
- # 如果没有中断,则添加 AI 的响应到历史记录
71
- if not should_exit.is_set():
72
- history.append(AIMessage(content=CHAT_DATA["output"]))
73
-
74
- except json.JSONDecodeError:
75
- print("Invalid JSON format in input message.")
76
- except KeyError:
77
- print("Missing 'content' key in input message.")
78
- except Exception as e:
79
- print(f"An error occurred: {e}")
80
- finally:
81
- input_thread_instance.join()
82
-
83
-
84
- def get_chat_response(bot_setting_file: str, input_text: str):
85
- history = [HumanMessage(input_text)]
86
- clear_chat_data()
87
- should_exit = threading.Event()
88
- asyncio.run(agent_chat(bot_setting_file, history, should_exit))
89
- 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