pycoze 0.1.100__py3-none-any.whl → 0.1.101__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/access/bot_for_bot.py +46 -0
- pycoze/access/lib.py +3 -1
- pycoze/bot/bot.py +13 -8
- {pycoze-0.1.100.dist-info → pycoze-0.1.101.dist-info}/METADATA +1 -1
- {pycoze-0.1.100.dist-info → pycoze-0.1.101.dist-info}/RECORD +8 -7
- {pycoze-0.1.100.dist-info → pycoze-0.1.101.dist-info}/LICENSE +0 -0
- {pycoze-0.1.100.dist-info → pycoze-0.1.101.dist-info}/WHEEL +0 -0
- {pycoze-0.1.100.dist-info → pycoze-0.1.101.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
import sys
|
2
|
+
import os
|
3
|
+
import importlib
|
4
|
+
from langchain.agents import tool as to_agent_tool
|
5
|
+
import types
|
6
|
+
import langchain_core
|
7
|
+
from .lib import ChangeDirectoryAndPath, ModuleManager, wrapped_func
|
8
|
+
|
9
|
+
|
10
|
+
def import_bot(bot_id):
|
11
|
+
tool_base_path = "../"
|
12
|
+
module_path = os.path.join(tool_base_path, bot_id)
|
13
|
+
module_path = os.path.normpath(os.path.abspath(module_path))
|
14
|
+
|
15
|
+
if not os.path.exists(module_path):
|
16
|
+
print(f"Bot {bot_id} not found")
|
17
|
+
return None
|
18
|
+
|
19
|
+
try:
|
20
|
+
with ModuleManager(module_path) as manager:
|
21
|
+
bot_setting = module_path + "/botSetting.json"
|
22
|
+
with open(bot_setting, "r", encoding="utf-8") as f:
|
23
|
+
bot_setting = json.load(f)
|
24
|
+
module = importlib.import_module("bot_function")
|
25
|
+
chat_func = getattr(module, "chat")
|
26
|
+
random_name = "bot_" + bot_id[-6:]
|
27
|
+
# 定义函数的内容
|
28
|
+
function_code = f"""
|
29
|
+
def {random_name}(command:str) -> str:
|
30
|
+
\"\"\"
|
31
|
+
本函数可以让你与虚拟人角色({bot_setting["name"]})进行交互。
|
32
|
+
该函数接收一个指令字符串,并返回虚拟人执行该指令后的结果。
|
33
|
+
|
34
|
+
Args:
|
35
|
+
command: 需要执行的指令字符串。
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
str: 虚拟人执行指令后的结果。
|
39
|
+
\"\"\"
|
40
|
+
return chat_func(command)
|
41
|
+
"""
|
42
|
+
|
43
|
+
return wrapped_func(to_agent_tool(eval(random_name)))
|
44
|
+
except Exception as e:
|
45
|
+
print(f"Error loading bot {bot_id}: {e}")
|
46
|
+
return tool
|
pycoze/access/lib.py
CHANGED
pycoze/bot/bot.py
CHANGED
@@ -4,6 +4,7 @@ from .agent import run_agent, Runnable, INPUT_MESSAGE, output
|
|
4
4
|
import asyncio
|
5
5
|
from langchain_core.messages import HumanMessage
|
6
6
|
from pycoze import utils
|
7
|
+
from pycoze.access.bot_for_bot import import_bot
|
7
8
|
from pycoze.access.tool_for_bot import import_tools
|
8
9
|
from langchain_core.utils.function_calling import convert_to_openai_tool
|
9
10
|
|
@@ -18,19 +19,23 @@ def load_role_setting(bot_setting_file: str):
|
|
18
19
|
return json.load(f)
|
19
20
|
|
20
21
|
|
21
|
-
def
|
22
|
+
def load_abilities(bot_setting_file: str):
|
22
23
|
with open(bot_setting_file, "r", encoding="utf-8") as f:
|
23
24
|
role_setting = json.load(f)
|
24
25
|
|
25
|
-
|
26
|
+
abilities = []
|
27
|
+
for bot_id in role_setting["bots"]:
|
28
|
+
bot = import_bot(bot_id)
|
29
|
+
if bot:
|
30
|
+
abilities.append(bot)
|
26
31
|
for tool_id in role_setting["tools"]:
|
27
|
-
|
28
|
-
return
|
32
|
+
abilities.extend(import_tools(tool_id))
|
33
|
+
return abilities
|
29
34
|
|
30
35
|
|
31
36
|
def agent_chat(bot_setting_file, history):
|
32
37
|
role_setting = load_role_setting(bot_setting_file)
|
33
|
-
|
38
|
+
abilities = load_abilities(bot_setting_file)
|
34
39
|
|
35
40
|
chat = ChatOpenAI(
|
36
41
|
api_key=cfg["apiKey"],
|
@@ -50,7 +55,7 @@ def agent_chat(bot_setting_file, history):
|
|
50
55
|
if (
|
51
56
|
cfg["model"].startswith("deepseek")
|
52
57
|
or cfg["toolCompatibilityMode"]
|
53
|
-
and len(
|
58
|
+
and len(abilities) > 0
|
54
59
|
):
|
55
60
|
prompt += """
|
56
61
|
作为一个AI,你如果不确定结果,请务必使用工具查询。
|
@@ -62,11 +67,11 @@ def agent_chat(bot_setting_file, history):
|
|
62
67
|
"""
|
63
68
|
if cfg["model"].startswith("yi-"):
|
64
69
|
prompt += "\nAvailable functions:\n"
|
65
|
-
for t in
|
70
|
+
for t in abilities:
|
66
71
|
prompt += f"\n```json\n{json.dumps(convert_to_openai_tool(t))}\n```"
|
67
72
|
agent = Runnable(
|
68
73
|
agent_execution_mode="FuncCall",
|
69
|
-
tools=
|
74
|
+
tools=abilities,
|
70
75
|
llm=chat,
|
71
76
|
assistant_message=prompt,
|
72
77
|
tool_compatibility_mode=cfg["toolCompatibilityMode"],
|
@@ -1,12 +1,13 @@
|
|
1
1
|
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
|
-
pycoze/access/
|
4
|
+
pycoze/access/bot_for_bot.py,sha256=bNFhZAAK8XZnwvkZhUdRGIM9MqBuoMEdkHX3ZQ6yU0w,1544
|
5
|
+
pycoze/access/lib.py,sha256=QGBpyHlAJgmxTvlzANi6KR0VwsXYc0ecwFRGz3cUx0c,1919
|
5
6
|
pycoze/access/tool_for_bot.py,sha256=mAx3dPbZpU_FWlK6uxoWqHbduuNM_EQU8kBmzEKkccE,1339
|
6
7
|
pycoze/ai/__init__.py,sha256=odM2lgYSnApxw4AzLV_5AyaxL5_MLfydOSB1VmLGFyA,75
|
7
8
|
pycoze/ai/vram_reserve.py,sha256=QbqaA8qv87cnEpOVDMygi0BNMxuhLYwj1UKfR_D5BD4,4340
|
8
9
|
pycoze/bot/__init__.py,sha256=6HHMxDQVOyZM9dtSjQm9tjGnhj4h7CixD0JOvEwTi48,41
|
9
|
-
pycoze/bot/bot.py,sha256=
|
10
|
+
pycoze/bot/bot.py,sha256=u56BqzZ5fbpG3ZgciusMQMXZ3g1YZRmJxZ7vEsC1rAw,3354
|
10
11
|
pycoze/bot/agent/__init__.py,sha256=YR9vpkEQn1e4937r_xFPJXUCPBEJ0SFzEQDBe2x3-YA,157
|
11
12
|
pycoze/bot/agent/agent.py,sha256=XMTO6s8OJpaOnymT8ZUuJxXx2ICZ3r7Ck0pHJqPPFIs,3346
|
12
13
|
pycoze/bot/agent/assistant.py,sha256=XI4w-rFfbk3qYE0tWcWoya8dz-3cA-QZ0Sanhl3DbKE,1112
|
@@ -21,8 +22,8 @@ pycoze/ui/ui_def.py,sha256=UhhU_yB3GV9ISbvTWT48hsHPHI250BhMILh6bu5Uioo,4206
|
|
21
22
|
pycoze/utils/__init__.py,sha256=TNJhFfY7JYdLlzuP9GvgxfNXUtbgH_NUUJSqHXCxJn4,78
|
22
23
|
pycoze/utils/arg.py,sha256=kA3KBQzXc2WlH5XbF8kfikfpqljiKaW7oY_GE4Qyffc,753
|
23
24
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
24
|
-
pycoze-0.1.
|
25
|
-
pycoze-0.1.
|
26
|
-
pycoze-0.1.
|
27
|
-
pycoze-0.1.
|
28
|
-
pycoze-0.1.
|
25
|
+
pycoze-0.1.101.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
26
|
+
pycoze-0.1.101.dist-info/METADATA,sha256=aOdIZUfpg2FxYOPdg-iQDK5mGMdfkD9rM-tW_f2FlK4,726
|
27
|
+
pycoze-0.1.101.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
28
|
+
pycoze-0.1.101.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
29
|
+
pycoze-0.1.101.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|