praisonaiagents 0.0.111__tar.gz → 0.0.112__tar.gz
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-0.0.111 → praisonaiagents-0.0.112}/PKG-INFO +1 -1
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/llm/llm.py +78 -84
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents.egg-info/PKG-INFO +1 -1
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/pyproject.toml +1 -1
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/README.md +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agent/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agent/agent.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agent/handoff.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agent/image_agent.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agents/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agents/agents.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/agents/autoagents.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/approval.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/guardrails/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/guardrails/guardrail_result.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/guardrails/llm_guardrail.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/knowledge/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/knowledge/chunking.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/knowledge/knowledge.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/llm/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/main.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/mcp/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/mcp/mcp.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/mcp/mcp_sse.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/memory/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/memory/memory.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/process/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/process/process.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/session.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/task/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/task/task.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/telemetry/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/telemetry/integration.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/telemetry/telemetry.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/README.md +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/__init__.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/arxiv_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/calculator_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/csv_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/duckdb_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/excel_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/file_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/json_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/newspaper_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/pandas_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/python_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/searxng_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/shell_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/spider_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/test.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/train/data/generatecot.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/wikipedia_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/xml_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/yaml_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/yfinance_tools.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents.egg-info/SOURCES.txt +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents.egg-info/dependency_links.txt +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents.egg-info/requires.txt +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents.egg-info/top_level.txt +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/setup.cfg +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/tests/test-graph-memory.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/tests/test.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/tests/test_handoff_compatibility.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/tests/test_ollama_async_fix.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/tests/test_ollama_fix.py +0 -0
- {praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/tests/test_posthog_fixed.py +0 -0
@@ -311,6 +311,58 @@ class LLM:
|
|
311
311
|
# This ensures we make a single non-streaming call rather than risk
|
312
312
|
# missing tool calls or making duplicate calls
|
313
313
|
return False
|
314
|
+
|
315
|
+
def _build_messages(self, prompt, system_prompt=None, chat_history=None, output_json=None, output_pydantic=None):
|
316
|
+
"""Build messages list for LLM completion. Works for both sync and async.
|
317
|
+
|
318
|
+
Args:
|
319
|
+
prompt: The user prompt (str or list)
|
320
|
+
system_prompt: Optional system prompt
|
321
|
+
chat_history: Optional list of previous messages
|
322
|
+
output_json: Optional Pydantic model for JSON output
|
323
|
+
output_pydantic: Optional Pydantic model for JSON output (alias)
|
324
|
+
|
325
|
+
Returns:
|
326
|
+
tuple: (messages list, original prompt)
|
327
|
+
"""
|
328
|
+
messages = []
|
329
|
+
|
330
|
+
# Handle system prompt
|
331
|
+
if system_prompt:
|
332
|
+
# Append JSON schema if needed
|
333
|
+
if output_json:
|
334
|
+
system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {json.dumps(output_json.model_json_schema())}"
|
335
|
+
elif output_pydantic:
|
336
|
+
system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {json.dumps(output_pydantic.model_json_schema())}"
|
337
|
+
|
338
|
+
# Skip system messages for legacy o1 models as they don't support them
|
339
|
+
if not self._needs_system_message_skip():
|
340
|
+
messages.append({"role": "system", "content": system_prompt})
|
341
|
+
|
342
|
+
# Add chat history if provided
|
343
|
+
if chat_history:
|
344
|
+
messages.extend(chat_history)
|
345
|
+
|
346
|
+
# Handle prompt modifications for JSON output
|
347
|
+
original_prompt = prompt
|
348
|
+
if output_json or output_pydantic:
|
349
|
+
if isinstance(prompt, str):
|
350
|
+
prompt = prompt + "\nReturn ONLY a valid JSON object. No other text or explanation."
|
351
|
+
elif isinstance(prompt, list):
|
352
|
+
# Create a copy to avoid modifying the original
|
353
|
+
prompt = prompt.copy()
|
354
|
+
for item in prompt:
|
355
|
+
if item.get("type") == "text":
|
356
|
+
item["text"] = item["text"] + "\nReturn ONLY a valid JSON object. No other text or explanation."
|
357
|
+
break
|
358
|
+
|
359
|
+
# Add prompt to messages
|
360
|
+
if isinstance(prompt, list):
|
361
|
+
messages.append({"role": "user", "content": prompt})
|
362
|
+
else:
|
363
|
+
messages.append({"role": "user", "content": prompt})
|
364
|
+
|
365
|
+
return messages, original_prompt
|
314
366
|
|
315
367
|
def get_response(
|
316
368
|
self,
|
@@ -421,36 +473,14 @@ class LLM:
|
|
421
473
|
if not formatted_tools:
|
422
474
|
formatted_tools = None
|
423
475
|
|
424
|
-
# Build messages list
|
425
|
-
messages =
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
if not self._needs_system_message_skip():
|
433
|
-
messages.append({"role": "system", "content": system_prompt})
|
434
|
-
|
435
|
-
if chat_history:
|
436
|
-
messages.extend(chat_history)
|
437
|
-
|
438
|
-
# Handle prompt modifications for JSON output
|
439
|
-
original_prompt = prompt
|
440
|
-
if output_json or output_pydantic:
|
441
|
-
if isinstance(prompt, str):
|
442
|
-
prompt += "\nReturn ONLY a valid JSON object. No other text or explanation."
|
443
|
-
elif isinstance(prompt, list):
|
444
|
-
for item in prompt:
|
445
|
-
if item["type"] == "text":
|
446
|
-
item["text"] += "\nReturn ONLY a valid JSON object. No other text or explanation."
|
447
|
-
break
|
448
|
-
|
449
|
-
# Add prompt to messages
|
450
|
-
if isinstance(prompt, list):
|
451
|
-
messages.append({"role": "user", "content": prompt})
|
452
|
-
else:
|
453
|
-
messages.append({"role": "user", "content": prompt})
|
476
|
+
# Build messages list using shared helper
|
477
|
+
messages, original_prompt = self._build_messages(
|
478
|
+
prompt=prompt,
|
479
|
+
system_prompt=system_prompt,
|
480
|
+
chat_history=chat_history,
|
481
|
+
output_json=output_json,
|
482
|
+
output_pydantic=output_pydantic
|
483
|
+
)
|
454
484
|
|
455
485
|
start_time = time.time()
|
456
486
|
reflection_count = 0
|
@@ -1160,36 +1190,14 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
|
|
1160
1190
|
reasoning_steps = kwargs.pop('reasoning_steps', self.reasoning_steps)
|
1161
1191
|
litellm.set_verbose = False
|
1162
1192
|
|
1163
|
-
# Build messages list
|
1164
|
-
messages =
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
if not self._needs_system_message_skip():
|
1172
|
-
messages.append({"role": "system", "content": system_prompt})
|
1173
|
-
|
1174
|
-
if chat_history:
|
1175
|
-
messages.extend(chat_history)
|
1176
|
-
|
1177
|
-
# Handle prompt modifications for JSON output
|
1178
|
-
original_prompt = prompt
|
1179
|
-
if output_json or output_pydantic:
|
1180
|
-
if isinstance(prompt, str):
|
1181
|
-
prompt += "\nReturn ONLY a valid JSON object. No other text or explanation."
|
1182
|
-
elif isinstance(prompt, list):
|
1183
|
-
for item in prompt:
|
1184
|
-
if item["type"] == "text":
|
1185
|
-
item["text"] += "\nReturn ONLY a valid JSON object. No other text or explanation."
|
1186
|
-
break
|
1187
|
-
|
1188
|
-
# Add prompt to messages
|
1189
|
-
if isinstance(prompt, list):
|
1190
|
-
messages.append({"role": "user", "content": prompt})
|
1191
|
-
else:
|
1192
|
-
messages.append({"role": "user", "content": prompt})
|
1193
|
+
# Build messages list using shared helper
|
1194
|
+
messages, original_prompt = self._build_messages(
|
1195
|
+
prompt=prompt,
|
1196
|
+
system_prompt=system_prompt,
|
1197
|
+
chat_history=chat_history,
|
1198
|
+
output_json=output_json,
|
1199
|
+
output_pydantic=output_pydantic
|
1200
|
+
)
|
1193
1201
|
|
1194
1202
|
start_time = time.time()
|
1195
1203
|
reflection_count = 0
|
@@ -1901,18 +1909,11 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
|
|
1901
1909
|
}
|
1902
1910
|
logger.debug(f"Response method configuration: {json.dumps(debug_info, indent=2, default=str)}")
|
1903
1911
|
|
1904
|
-
# Build messages list
|
1905
|
-
messages =
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
messages.append({"role": "system", "content": system_prompt})
|
1910
|
-
|
1911
|
-
# Add prompt to messages
|
1912
|
-
if isinstance(prompt, list):
|
1913
|
-
messages.append({"role": "user", "content": prompt})
|
1914
|
-
else:
|
1915
|
-
messages.append({"role": "user", "content": prompt})
|
1912
|
+
# Build messages list using shared helper (simplified version without JSON output)
|
1913
|
+
messages, _ = self._build_messages(
|
1914
|
+
prompt=prompt,
|
1915
|
+
system_prompt=system_prompt
|
1916
|
+
)
|
1916
1917
|
|
1917
1918
|
# Get response from LiteLLM
|
1918
1919
|
if stream:
|
@@ -2009,18 +2010,11 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
|
|
2009
2010
|
}
|
2010
2011
|
logger.debug(f"Async response method configuration: {json.dumps(debug_info, indent=2, default=str)}")
|
2011
2012
|
|
2012
|
-
# Build messages list
|
2013
|
-
messages =
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2017
|
-
messages.append({"role": "system", "content": system_prompt})
|
2018
|
-
|
2019
|
-
# Add prompt to messages
|
2020
|
-
if isinstance(prompt, list):
|
2021
|
-
messages.append({"role": "user", "content": prompt})
|
2022
|
-
else:
|
2023
|
-
messages.append({"role": "user", "content": prompt})
|
2013
|
+
# Build messages list using shared helper (simplified version without JSON output)
|
2014
|
+
messages, _ = self._build_messages(
|
2015
|
+
prompt=prompt,
|
2016
|
+
system_prompt=system_prompt
|
2017
|
+
)
|
2024
2018
|
|
2025
2019
|
# Get response from LiteLLM
|
2026
2020
|
if stream:
|
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
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/guardrails/guardrail_result.py
RENAMED
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/guardrails/llm_guardrail.py
RENAMED
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/telemetry/integration.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/calculator_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/duckduckgo_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/newspaper_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/train/data/generatecot.py
RENAMED
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents/tools/wikipedia_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.111 → praisonaiagents-0.0.112}/praisonaiagents.egg-info/dependency_links.txt
RENAMED
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
|