praisonaiagents 0.0.115__tar.gz → 0.0.116__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.115 → praisonaiagents-0.0.116}/PKG-INFO +1 -1
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/llm/llm.py +51 -3
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents.egg-info/PKG-INFO +1 -1
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/pyproject.toml +1 -1
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/README.md +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agent/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agent/agent.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agent/handoff.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agent/image_agent.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agents/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agents/agents.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/agents/autoagents.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/approval.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/guardrails/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/guardrails/guardrail_result.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/guardrails/llm_guardrail.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/knowledge/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/knowledge/chunking.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/knowledge/knowledge.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/llm/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/llm/openai_client.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/main.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/mcp/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/mcp/mcp.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/mcp/mcp_sse.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/memory/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/memory/memory.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/process/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/process/process.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/session.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/task/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/task/task.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/telemetry/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/telemetry/integration.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/telemetry/telemetry.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/README.md +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/__init__.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/arxiv_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/calculator_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/csv_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/duckdb_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/excel_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/file_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/json_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/newspaper_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/pandas_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/python_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/searxng_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/shell_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/spider_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/test.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/train/data/generatecot.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/wikipedia_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/xml_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/yaml_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/yfinance_tools.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents.egg-info/SOURCES.txt +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents.egg-info/dependency_links.txt +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents.egg-info/requires.txt +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents.egg-info/top_level.txt +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/setup.cfg +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/tests/test-graph-memory.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/tests/test.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/tests/test_handoff_compatibility.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/tests/test_ollama_async_fix.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/tests/test_ollama_fix.py +0 -0
- {praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/tests/test_posthog_fixed.py +0 -0
@@ -364,6 +364,46 @@ class LLM:
|
|
364
364
|
|
365
365
|
return messages, original_prompt
|
366
366
|
|
367
|
+
def _fix_array_schemas(self, schema: Dict) -> Dict:
|
368
|
+
"""
|
369
|
+
Recursively fix array schemas by adding missing 'items' attribute.
|
370
|
+
|
371
|
+
This ensures compatibility with OpenAI's function calling format which
|
372
|
+
requires array types to specify the type of items they contain.
|
373
|
+
|
374
|
+
Args:
|
375
|
+
schema: The schema dictionary to fix
|
376
|
+
|
377
|
+
Returns:
|
378
|
+
dict: The fixed schema
|
379
|
+
"""
|
380
|
+
if not isinstance(schema, dict):
|
381
|
+
return schema
|
382
|
+
|
383
|
+
# Create a copy to avoid modifying the original
|
384
|
+
fixed_schema = schema.copy()
|
385
|
+
|
386
|
+
# Fix array types at the current level
|
387
|
+
if fixed_schema.get("type") == "array" and "items" not in fixed_schema:
|
388
|
+
# Add a default items schema for arrays without it
|
389
|
+
fixed_schema["items"] = {"type": "string"}
|
390
|
+
|
391
|
+
# Recursively fix nested schemas in properties
|
392
|
+
if "properties" in fixed_schema and isinstance(fixed_schema["properties"], dict):
|
393
|
+
fixed_properties = {}
|
394
|
+
for prop_name, prop_schema in fixed_schema["properties"].items():
|
395
|
+
if isinstance(prop_schema, dict):
|
396
|
+
fixed_properties[prop_name] = self._fix_array_schemas(prop_schema)
|
397
|
+
else:
|
398
|
+
fixed_properties[prop_name] = prop_schema
|
399
|
+
fixed_schema["properties"] = fixed_properties
|
400
|
+
|
401
|
+
# Fix items schema if it exists
|
402
|
+
if "items" in fixed_schema and isinstance(fixed_schema["items"], dict):
|
403
|
+
fixed_schema["items"] = self._fix_array_schemas(fixed_schema["items"])
|
404
|
+
|
405
|
+
return fixed_schema
|
406
|
+
|
367
407
|
def _format_tools_for_litellm(self, tools: Optional[List[Any]]) -> Optional[List[Dict]]:
|
368
408
|
"""Format tools for LiteLLM - handles all tool formats.
|
369
409
|
|
@@ -389,7 +429,11 @@ class LLM:
|
|
389
429
|
# Validate nested dictionary structure before accessing
|
390
430
|
if 'function' in tool and isinstance(tool['function'], dict) and 'name' in tool['function']:
|
391
431
|
logging.debug(f"Using pre-formatted OpenAI tool: {tool['function']['name']}")
|
392
|
-
|
432
|
+
# Fix array schemas in the tool parameters
|
433
|
+
fixed_tool = tool.copy()
|
434
|
+
if 'parameters' in fixed_tool['function']:
|
435
|
+
fixed_tool['function']['parameters'] = self._fix_array_schemas(fixed_tool['function']['parameters'])
|
436
|
+
formatted_tools.append(fixed_tool)
|
393
437
|
else:
|
394
438
|
logging.debug(f"Skipping malformed OpenAI tool: missing function or name")
|
395
439
|
# Handle lists of tools (e.g. from MCP.to_openai_tool())
|
@@ -399,7 +443,11 @@ class LLM:
|
|
399
443
|
# Validate nested dictionary structure before accessing
|
400
444
|
if 'function' in subtool and isinstance(subtool['function'], dict) and 'name' in subtool['function']:
|
401
445
|
logging.debug(f"Using pre-formatted OpenAI tool from list: {subtool['function']['name']}")
|
402
|
-
|
446
|
+
# Fix array schemas in the tool parameters
|
447
|
+
fixed_tool = subtool.copy()
|
448
|
+
if 'parameters' in fixed_tool['function']:
|
449
|
+
fixed_tool['function']['parameters'] = self._fix_array_schemas(fixed_tool['function']['parameters'])
|
450
|
+
formatted_tools.append(fixed_tool)
|
403
451
|
else:
|
404
452
|
logging.debug(f"Skipping malformed OpenAI tool in list: missing function or name")
|
405
453
|
elif callable(tool):
|
@@ -2153,7 +2201,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
|
|
2153
2201
|
"function": {
|
2154
2202
|
"name": function_name,
|
2155
2203
|
"description": docstring.split('\n\n')[0] if docstring else "No description available",
|
2156
|
-
"parameters": parameters
|
2204
|
+
"parameters": self._fix_array_schemas(parameters)
|
2157
2205
|
}
|
2158
2206
|
}
|
2159
2207
|
logging.debug(f"Generated tool definition: {tool_def}")
|
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.115 → praisonaiagents-0.0.116}/praisonaiagents/guardrails/guardrail_result.py
RENAMED
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/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
|
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/telemetry/integration.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/calculator_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/duckduckgo_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/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.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/train/data/generatecot.py
RENAMED
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/praisonaiagents/tools/wikipedia_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.115 → praisonaiagents-0.0.116}/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
|