pycoze 0.1.73__py3-none-any.whl → 0.1.75__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- pycoze/{gpu → ai}/__init__.py +1 -1
- pycoze/{gpu → ai}/gpu_reserve.py +31 -20
- pycoze/bot/agent/agent_types/openai_func_call_agent.py +11 -6
- pycoze/ui/base.py +1 -6
- {pycoze-0.1.73.dist-info → pycoze-0.1.75.dist-info}/METADATA +1 -1
- {pycoze-0.1.73.dist-info → pycoze-0.1.75.dist-info}/RECORD +9 -9
- {pycoze-0.1.73.dist-info → pycoze-0.1.75.dist-info}/LICENSE +0 -0
- {pycoze-0.1.73.dist-info → pycoze-0.1.75.dist-info}/WHEEL +0 -0
- {pycoze-0.1.73.dist-info → pycoze-0.1.75.dist-info}/top_level.txt +0 -0
pycoze/{gpu → ai}/__init__.py
RENAMED
@@ -1 +1 @@
|
|
1
|
-
from .gpu_reserve import reserve_gpu_retry, release_gpu,
|
1
|
+
from .gpu_reserve import reserve_gpu_retry, release_gpu, reserve_gpu
|
pycoze/{gpu → ai}/gpu_reserve.py
RENAMED
@@ -29,7 +29,7 @@ def initialize_db():
|
|
29
29
|
f"""
|
30
30
|
CREATE TABLE IF NOT EXISTS {TABLE_NAME} (
|
31
31
|
id INTEGER PRIMARY KEY,
|
32
|
-
|
32
|
+
uid TEXT NOT NULL,
|
33
33
|
reserved_gb REAL NOT NULL
|
34
34
|
)
|
35
35
|
"""
|
@@ -48,7 +48,12 @@ def get_gpu_resources():
|
|
48
48
|
text=True,
|
49
49
|
)
|
50
50
|
free_memory = result.stdout.strip().split("\n")
|
51
|
-
total_free_memory =
|
51
|
+
total_free_memory = 0
|
52
|
+
for mem in free_memory:
|
53
|
+
try:
|
54
|
+
total_free_memory += float(mem)
|
55
|
+
except:
|
56
|
+
pass
|
52
57
|
|
53
58
|
# 获取正在使用GPU的进程信息
|
54
59
|
process_result = subprocess.run(
|
@@ -67,8 +72,12 @@ def get_gpu_resources():
|
|
67
72
|
for process in process_info:
|
68
73
|
pid, process_name, used_memory = process.split(", ")
|
69
74
|
if "python" in process_name.lower():
|
70
|
-
|
71
|
-
|
75
|
+
try:
|
76
|
+
python_memory_usage += float(used_memory)
|
77
|
+
except:
|
78
|
+
pass
|
79
|
+
print("total_free_gpu_memory: ", total_free_memory)
|
80
|
+
print("python_gpu_memory_usage: ", python_memory_usage)
|
72
81
|
# 计算排除python进程后的总空闲内存
|
73
82
|
total_free_memory -= python_memory_usage
|
74
83
|
return round(total_free_memory / 1024, 2)
|
@@ -78,8 +87,9 @@ def get_gpu_resources():
|
|
78
87
|
|
79
88
|
|
80
89
|
# 预留GPU资源
|
81
|
-
def reserve_gpu(gb):
|
82
|
-
|
90
|
+
def reserve_gpu(gb, uid=None):
|
91
|
+
if uid is None:
|
92
|
+
uid = f"pid:{os.getpid()}"
|
83
93
|
with sqlite3.connect(DATABASE_PATH) as conn:
|
84
94
|
cursor = conn.cursor()
|
85
95
|
cursor.execute(f"SELECT SUM(reserved_gb) FROM {TABLE_NAME}")
|
@@ -89,8 +99,8 @@ def reserve_gpu(gb):
|
|
89
99
|
available_gb = get_gpu_resources() - total_reserved
|
90
100
|
if available_gb >= gb:
|
91
101
|
cursor.execute(
|
92
|
-
f"INSERT INTO {TABLE_NAME} (
|
93
|
-
(
|
102
|
+
f"INSERT INTO {TABLE_NAME} (uid, reserved_gb) VALUES (?, ?)",
|
103
|
+
(uid, gb),
|
94
104
|
)
|
95
105
|
conn.commit()
|
96
106
|
print(f"预留成功,剩余GPU大小: {available_gb - gb} GB")
|
@@ -100,7 +110,7 @@ def reserve_gpu(gb):
|
|
100
110
|
return False
|
101
111
|
|
102
112
|
|
103
|
-
def reserve_gpu_retry(gb, retry=None):
|
113
|
+
def reserve_gpu_retry(gb, retry=None, uid=None):
|
104
114
|
if retry is None:
|
105
115
|
# 接近无限重试,python中允许无限大的整数,尽管sys.maxsize不是真正的无限大,但足够大
|
106
116
|
retry = sys.maxsize
|
@@ -108,17 +118,18 @@ def reserve_gpu_retry(gb, retry=None):
|
|
108
118
|
time.sleep(1)
|
109
119
|
if i % 10 == 0 or i < 10:
|
110
120
|
print(f"重试第{i}次")
|
111
|
-
if reserve_gpu(gb):
|
121
|
+
if reserve_gpu(gb, uid):
|
112
122
|
return True
|
113
123
|
return False
|
114
124
|
|
115
125
|
|
116
126
|
# 释放GPU资源
|
117
|
-
def release_gpu():
|
118
|
-
|
127
|
+
def release_gpu(uid=None):
|
128
|
+
if uid is None:
|
129
|
+
uid = f"pid:{os.getpid()}"
|
119
130
|
with sqlite3.connect(DATABASE_PATH) as conn:
|
120
131
|
cursor = conn.cursor()
|
121
|
-
cursor.execute(f"DELETE FROM {TABLE_NAME} WHERE
|
132
|
+
cursor.execute(f"DELETE FROM {TABLE_NAME} WHERE uid = ?", (uid,))
|
122
133
|
conn.commit()
|
123
134
|
# 计算释放后的剩余GPU大小
|
124
135
|
cursor.execute(f"SELECT SUM(reserved_gb) FROM {TABLE_NAME}")
|
@@ -139,19 +150,19 @@ def initialize_and_check():
|
|
139
150
|
initialize_db()
|
140
151
|
with sqlite3.connect(DATABASE_PATH) as conn:
|
141
152
|
cursor = conn.cursor()
|
142
|
-
cursor.execute(f"SELECT
|
153
|
+
cursor.execute(f"SELECT uid, reserved_gb FROM {TABLE_NAME}")
|
143
154
|
rows = cursor.fetchall()
|
144
155
|
for row in rows:
|
145
|
-
|
156
|
+
uid, reserved_gb = row
|
146
157
|
try:
|
147
158
|
# 检查进程是否存在
|
148
|
-
|
159
|
+
if uid.startswith("pid:"):
|
160
|
+
pid = int(uid.split(":")[1])
|
161
|
+
psutil.Process(pid)
|
149
162
|
except psutil.NoSuchProcess:
|
150
163
|
# 进程不存在,删除对应的记录
|
151
|
-
cursor.execute(
|
152
|
-
|
153
|
-
)
|
154
|
-
print(f"进程 {process_id} 不存在,已删除对应的预留记录")
|
164
|
+
cursor.execute(f"DELETE FROM {TABLE_NAME} WHERE uid = ?", (uid,))
|
165
|
+
print(f"进程 {uid} 不存在,已删除对应的预留记录")
|
155
166
|
conn.commit()
|
156
167
|
|
157
168
|
|
@@ -150,16 +150,21 @@ def create_openai_func_call_agent_executor(
|
|
150
150
|
# We call the tool_executor and get back a response
|
151
151
|
responses = await tool_executor.abatch(actions, **kwargs)
|
152
152
|
# We use the response to create a ToolMessage
|
153
|
-
tool_messages = [
|
154
|
-
|
153
|
+
tool_messages = []
|
154
|
+
for tool_call, response in zip(
|
155
|
+
last_message.additional_kwargs["tool_calls"], responses
|
156
|
+
):
|
157
|
+
if not isinstance(response, (str, int, float, bool, list, tuple)):
|
158
|
+
response = repr(
|
159
|
+
response
|
160
|
+
) # 不支持其他类型,包括dict也不支持,因此需要转换为字符串
|
161
|
+
|
162
|
+
message = ToolMessage(
|
155
163
|
tool_call_id=tool_call["id"],
|
156
164
|
content=response,
|
157
165
|
additional_kwargs={"name": tool_call["function"]["name"]},
|
158
166
|
)
|
159
|
-
|
160
|
-
last_message.additional_kwargs["tool_calls"], responses
|
161
|
-
)
|
162
|
-
]
|
167
|
+
tool_messages.append(message)
|
163
168
|
return tool_messages
|
164
169
|
|
165
170
|
workflow = MessageGraph()
|
pycoze/ui/base.py
CHANGED
@@ -40,12 +40,7 @@ def get_ui():
|
|
40
40
|
return json.load(f)
|
41
41
|
else:
|
42
42
|
assert by == "workflow"
|
43
|
-
|
44
|
-
node_id = params["uiData"]["nodeId"]
|
45
|
-
with open(workflow_file, "r", encoding="utf-8") as f:
|
46
|
-
cells = json.load(f)["graph"]["cells"]
|
47
|
-
node = [cell for cell in cells if cell["id"] == node_id][0]
|
48
|
-
return json.loads(node["data"]["ui"])
|
43
|
+
return params["uiData"]["uiRecord"][match_ui_file]
|
49
44
|
except Exception as e:
|
50
45
|
if i == 9:
|
51
46
|
raise e
|
@@ -2,6 +2,8 @@ pycoze/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
pycoze/module.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
pycoze/access/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
pycoze/access/tool_for_bot.py,sha256=Nv6XlxcqaLaMVQNDkpcthlqaSxyfHoOfWiTScQXO22Y,2656
|
5
|
+
pycoze/ai/__init__.py,sha256=wUiH-Oy_YbaoiqJN2f9ZvFuRCv9oEDP-oNs5Q8y9IzA,69
|
6
|
+
pycoze/ai/gpu_reserve.py,sha256=WcD3-K9TsapSXCNVUZFm0k-GHZxznWdFBcljA41dMp8,5764
|
5
7
|
pycoze/bot/__init__.py,sha256=6HHMxDQVOyZM9dtSjQm9tjGnhj4h7CixD0JOvEwTi48,41
|
6
8
|
pycoze/bot/bot.py,sha256=iJ60C5YOiiAwADQAdWlD15uAgPUuSap5O7gaiJaXQ-U,2769
|
7
9
|
pycoze/bot/agent/__init__.py,sha256=YR9vpkEQn1e4937r_xFPJXUCPBEJ0SFzEQDBe2x3-YA,157
|
@@ -9,21 +11,19 @@ pycoze/bot/agent/agent.py,sha256=7xnz4a8LDyAVU0O3tS6n7_jSnr_lukQxfNR2znCWoV4,461
|
|
9
11
|
pycoze/bot/agent/assistant.py,sha256=QLeWaPi415P9jruYOm8qcIbC94cXXAhJYmLTkyC9NTQ,1267
|
10
12
|
pycoze/bot/agent/chat.py,sha256=kc0qgcrBSXdiMy49JwThZTV-0PAvzAhiUvbI5ILiSnU,571
|
11
13
|
pycoze/bot/agent/agent_types/__init__.py,sha256=W2jTNMLqUMqgCMG0Tw0d8n7WpsbsnIonqaPR-YLegLU,210
|
12
|
-
pycoze/bot/agent/agent_types/openai_func_call_agent.py,sha256=
|
14
|
+
pycoze/bot/agent/agent_types/openai_func_call_agent.py,sha256=_nhlgmV_158fUEOtvB_R3my7Sz5FnCAhLZ1iuY1okOU,8270
|
13
15
|
pycoze/bot/agent/agent_types/react_agent.py,sha256=AnjHwHXVwLAm77ndglJGi4rQhqDGWaLuUfl46uZVSzM,6749
|
14
16
|
pycoze/bot/agent/agent_types/react_prompt.py,sha256=jyovokGaPzNIe5bvTRvn0gmsWLx5kpDIPmRwmEMCl-M,2142
|
15
|
-
pycoze/gpu/__init__.py,sha256=cuxwDdz2Oo-VcwZ50FtFtEIJXdqoz2el-n0QpSt_NMc,75
|
16
|
-
pycoze/gpu/gpu_reserve.py,sha256=JEyYh38v_RHolsqcIBoCjI8P-K-Ew3FsEyGhoISYmCQ,5415
|
17
17
|
pycoze/ui/__init__.py,sha256=7xAfL2lfG7-jllPJEZUJO89xUE9sNzvo1y0WmBswjBI,458
|
18
|
-
pycoze/ui/base.py,sha256=
|
18
|
+
pycoze/ui/base.py,sha256=SCXVDK7PpMaBv6ovvabHcfRq_d2AWM0BRyxpNhuJN5A,1285
|
19
19
|
pycoze/ui/color.py,sha256=cT9Ib8uNzkOKxyW0IwVj46o4LwdB1xgNCj1_Rou9d_4,854
|
20
20
|
pycoze/ui/typ.py,sha256=NpT0FrbHvByOszBZMFtroRp7I7pN-38tYz_zPOPejF4,1723
|
21
21
|
pycoze/ui/ui_def.py,sha256=UhhU_yB3GV9ISbvTWT48hsHPHI250BhMILh6bu5Uioo,4206
|
22
22
|
pycoze/utils/__init__.py,sha256=TNJhFfY7JYdLlzuP9GvgxfNXUtbgH_NUUJSqHXCxJn4,78
|
23
23
|
pycoze/utils/arg.py,sha256=kA3KBQzXc2WlH5XbF8kfikfpqljiKaW7oY_GE4Qyffc,753
|
24
24
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
25
|
-
pycoze-0.1.
|
26
|
-
pycoze-0.1.
|
27
|
-
pycoze-0.1.
|
28
|
-
pycoze-0.1.
|
29
|
-
pycoze-0.1.
|
25
|
+
pycoze-0.1.75.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
26
|
+
pycoze-0.1.75.dist-info/METADATA,sha256=whsTD8FRG8nXKTOU3RrlInnqBx73vvRt21FNcMJ4qOw,719
|
27
|
+
pycoze-0.1.75.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
28
|
+
pycoze-0.1.75.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
29
|
+
pycoze-0.1.75.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|