praisonaiagents 0.0.8__py3-none-any.whl → 0.0.10__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.
- praisonaiagents/agent/agent.py +43 -12
- praisonaiagents/agents/agents.py +2 -2
- {praisonaiagents-0.0.8.dist-info → praisonaiagents-0.0.10.dist-info}/METADATA +1 -1
- {praisonaiagents-0.0.8.dist-info → praisonaiagents-0.0.10.dist-info}/RECORD +6 -6
- {praisonaiagents-0.0.8.dist-info → praisonaiagents-0.0.10.dist-info}/WHEEL +0 -0
- {praisonaiagents-0.0.8.dist-info → praisonaiagents-0.0.10.dist-info}/top_level.txt +0 -0
praisonaiagents/agent/agent.py
CHANGED
@@ -21,27 +21,49 @@ class Agent:
|
|
21
21
|
"""
|
22
22
|
Generate a tool definition from a function name by inspecting the function.
|
23
23
|
"""
|
24
|
+
logging.debug(f"Attempting to generate tool definition for: {function_name}")
|
25
|
+
|
24
26
|
# First try to get the tool definition if it exists
|
25
27
|
tool_def_name = f"{function_name}_definition"
|
26
28
|
tool_def = globals().get(tool_def_name)
|
29
|
+
logging.debug(f"Looking for {tool_def_name} in globals: {tool_def is not None}")
|
30
|
+
|
27
31
|
if not tool_def:
|
28
32
|
import __main__
|
29
33
|
tool_def = getattr(__main__, tool_def_name, None)
|
34
|
+
logging.debug(f"Looking for {tool_def_name} in __main__: {tool_def is not None}")
|
30
35
|
|
31
36
|
if tool_def:
|
37
|
+
logging.debug(f"Found tool definition: {tool_def}")
|
32
38
|
return tool_def
|
33
39
|
|
34
|
-
#
|
35
|
-
func =
|
40
|
+
# Try to find the function in the agent's tools list first
|
41
|
+
func = None
|
42
|
+
for tool in self.tools:
|
43
|
+
if callable(tool) and getattr(tool, '__name__', '') == function_name:
|
44
|
+
func = tool
|
45
|
+
break
|
46
|
+
|
47
|
+
logging.debug(f"Looking for {function_name} in agent tools: {func is not None}")
|
48
|
+
|
49
|
+
# If not found in tools, try globals and main
|
36
50
|
if not func:
|
37
|
-
|
38
|
-
func
|
51
|
+
func = globals().get(function_name)
|
52
|
+
logging.debug(f"Looking for {function_name} in globals: {func is not None}")
|
53
|
+
|
54
|
+
if not func:
|
55
|
+
import __main__
|
56
|
+
func = getattr(__main__, function_name, None)
|
57
|
+
logging.debug(f"Looking for {function_name} in __main__: {func is not None}")
|
39
58
|
|
40
59
|
if not func or not callable(func):
|
60
|
+
logging.debug(f"Function {function_name} not found or not callable")
|
41
61
|
return None
|
42
62
|
|
43
63
|
import inspect
|
44
64
|
sig = inspect.signature(func)
|
65
|
+
logging.debug(f"Function signature: {sig}")
|
66
|
+
|
45
67
|
parameters = {
|
46
68
|
"type": "object",
|
47
69
|
"properties": {},
|
@@ -50,10 +72,13 @@ class Agent:
|
|
50
72
|
|
51
73
|
# Parse docstring for parameter descriptions
|
52
74
|
docstring = inspect.getdoc(func)
|
75
|
+
logging.debug(f"Function docstring: {docstring}")
|
76
|
+
|
53
77
|
param_descriptions = {}
|
54
78
|
if docstring:
|
55
79
|
import re
|
56
80
|
param_section = re.split(r'\s*Args:\s*', docstring)
|
81
|
+
logging.debug(f"Param section split: {param_section}")
|
57
82
|
if len(param_section) > 1:
|
58
83
|
param_lines = param_section[1].split('\n')
|
59
84
|
for line in param_lines:
|
@@ -61,6 +86,8 @@ class Agent:
|
|
61
86
|
if line and ':' in line:
|
62
87
|
param_name, param_desc = line.split(':', 1)
|
63
88
|
param_descriptions[param_name.strip()] = param_desc.strip()
|
89
|
+
|
90
|
+
logging.debug(f"Parameter descriptions: {param_descriptions}")
|
64
91
|
|
65
92
|
for name, param in sig.parameters.items():
|
66
93
|
param_type = "string" # Default type
|
@@ -83,11 +110,13 @@ class Agent:
|
|
83
110
|
parameters["properties"][name] = param_info
|
84
111
|
if param.default == inspect.Parameter.empty:
|
85
112
|
parameters["required"].append(name)
|
113
|
+
|
114
|
+
logging.debug(f"Generated parameters: {parameters}")
|
86
115
|
|
87
116
|
# Extract description from docstring
|
88
117
|
description = docstring.split('\n')[0] if docstring else f"Function {function_name}"
|
89
|
-
|
90
|
-
|
118
|
+
|
119
|
+
tool_def = {
|
91
120
|
"type": "function",
|
92
121
|
"function": {
|
93
122
|
"name": function_name,
|
@@ -95,6 +124,8 @@ class Agent:
|
|
95
124
|
"parameters": parameters
|
96
125
|
}
|
97
126
|
}
|
127
|
+
logging.debug(f"Generated tool definition: {tool_def}")
|
128
|
+
return tool_def
|
98
129
|
|
99
130
|
def __init__(
|
100
131
|
self,
|
@@ -290,8 +321,8 @@ class Agent:
|
|
290
321
|
def chat(self, prompt, temperature=0.2, tools=None, output_json=None):
|
291
322
|
if self.use_system_prompt:
|
292
323
|
system_prompt = f"""{self.backstory}\n
|
293
|
-
|
294
|
-
|
324
|
+
Your Role: {self.role}\n
|
325
|
+
Your Goal: {self.goal}
|
295
326
|
"""
|
296
327
|
else:
|
297
328
|
system_prompt = None
|
@@ -364,10 +395,10 @@ class Agent:
|
|
364
395
|
return response_text
|
365
396
|
|
366
397
|
reflection_prompt = f"""
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
398
|
+
Reflect on your previous response: '{response_text}'.
|
399
|
+
Identify any flaws, improvements, or actions.
|
400
|
+
Provide a "satisfactory" status ('yes' or 'no').
|
401
|
+
Output MUST be JSON with 'reflection' and 'satisfactory'.
|
371
402
|
"""
|
372
403
|
logging.debug(f"{self.name} reflection attempt {reflection_count+1}, sending prompt: {reflection_prompt}")
|
373
404
|
messages.append({"role": "user", "content": reflection_prompt})
|
praisonaiagents/agents/agents.py
CHANGED
@@ -64,8 +64,8 @@ class PraisonAIAgents:
|
|
64
64
|
executor_agent = task.agent
|
65
65
|
|
66
66
|
task_prompt = f"""
|
67
|
-
|
68
|
-
|
67
|
+
You need to do the following task: {task.description}.
|
68
|
+
Expected Output: {task.expected_output}.
|
69
69
|
"""
|
70
70
|
if task.context:
|
71
71
|
context_results = ""
|
@@ -1,9 +1,9 @@
|
|
1
1
|
praisonaiagents/__init__.py,sha256=gI8vEabBTRPsE_E8GA5sBMi4sTtJI-YokPrH2Nor-k0,741
|
2
2
|
praisonaiagents/main.py,sha256=zDhN5KKtKbfruolDNxlyJkcFlkSt4KQkQTDRfQVAhxc,3960
|
3
3
|
praisonaiagents/agent/__init__.py,sha256=sKO8wGEXvtCrvV1e834r1Okv0XAqAxqZCqz6hKLiTvA,79
|
4
|
-
praisonaiagents/agent/agent.py,sha256=
|
4
|
+
praisonaiagents/agent/agent.py,sha256=p1E1TtI2AbZ7z0QZHwGG_ZvgGBGTvyEB4TX2tRXl87I,19602
|
5
5
|
praisonaiagents/agents/__init__.py,sha256=7RDeQNSqZg5uBjD4M_0p_F6YgfWuDuxPFydPU50kDYc,120
|
6
|
-
praisonaiagents/agents/agents.py,sha256=
|
6
|
+
praisonaiagents/agents/agents.py,sha256=CBN7OQwFbTgiKXVn7o8987mBH9TUr5s721AC-FSu8AQ,13680
|
7
7
|
praisonaiagents/build/lib/praisonaiagents/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
8
8
|
praisonaiagents/build/lib/praisonaiagents/main.py,sha256=zDhN5KKtKbfruolDNxlyJkcFlkSt4KQkQTDRfQVAhxc,3960
|
9
9
|
praisonaiagents/build/lib/praisonaiagents/agent/__init__.py,sha256=sKO8wGEXvtCrvV1e834r1Okv0XAqAxqZCqz6hKLiTvA,79
|
@@ -14,7 +14,7 @@ praisonaiagents/build/lib/praisonaiagents/task/__init__.py,sha256=VL5hXVmyGjINb3
|
|
14
14
|
praisonaiagents/build/lib/praisonaiagents/task/task.py,sha256=4Y1qX8OeEFcid2yhAiPYylvHpuDmWORsyNL16_BiVvI,1831
|
15
15
|
praisonaiagents/task/__init__.py,sha256=VL5hXVmyGjINb34AalxpBMl-YW9m5EDcRkMTKkSSl7c,80
|
16
16
|
praisonaiagents/task/task.py,sha256=4Y1qX8OeEFcid2yhAiPYylvHpuDmWORsyNL16_BiVvI,1831
|
17
|
-
praisonaiagents-0.0.
|
18
|
-
praisonaiagents-0.0.
|
19
|
-
praisonaiagents-0.0.
|
20
|
-
praisonaiagents-0.0.
|
17
|
+
praisonaiagents-0.0.10.dist-info/METADATA,sha256=YtRq0JyBXUjue9d9QuD3GpXYdCuMKRwJquyXzgGqKTo,233
|
18
|
+
praisonaiagents-0.0.10.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
19
|
+
praisonaiagents-0.0.10.dist-info/top_level.txt,sha256=_HsRddrJ23iDx5TTqVUVvXG2HeHBL5voshncAMDGjtA,16
|
20
|
+
praisonaiagents-0.0.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|