agentx-dev 3.0.1__tar.gz → 3.0.2__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.
Files changed (55) hide show
  1. {agentx_dev-3.0.1/agentx_dev.egg-info → agentx_dev-3.0.2}/PKG-INFO +1 -1
  2. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Runner/AgentRun.py +35 -0
  3. {agentx_dev-3.0.1 → agentx_dev-3.0.2/agentx_dev.egg-info}/PKG-INFO +1 -1
  4. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/pyproject.toml +1 -1
  5. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/AGENTX.md +0 -0
  6. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/LICENSE +0 -0
  7. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/MANIFEST.in +0 -0
  8. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/README.md +0 -0
  9. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Agents/Agent.py +0 -0
  10. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Agents/__init__.py +0 -0
  11. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/AsyncTools.py +0 -0
  12. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/AutoSetup.py +0 -0
  13. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Cache.py +0 -0
  14. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/ChatModel.py +0 -0
  15. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Config.py +0 -0
  16. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/DefaultTools.py +0 -0
  17. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Loader.py +0 -0
  18. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/MCP.py +0 -0
  19. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Memory.py +0 -0
  20. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Observability.py +0 -0
  21. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Planner.py +0 -0
  22. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Runner/AsyncAgentRun.py +0 -0
  23. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Runner/__init__.py +0 -0
  24. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Runner/promptTemplate.yaml +0 -0
  25. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Session.py +0 -0
  26. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Streaming.py +0 -0
  27. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Supervisor.py +0 -0
  28. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/Tools.py +0 -0
  29. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/WebTools.py +0 -0
  30. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/__init__.py +0 -0
  31. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/resources/__init__.py +0 -0
  32. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev/resources/promptTemplate.yaml +0 -0
  33. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev.egg-info/SOURCES.txt +0 -0
  34. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev.egg-info/dependency_links.txt +0 -0
  35. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev.egg-info/requires.txt +0 -0
  36. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/agentx_dev.egg-info/top_level.txt +0 -0
  37. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/README.md +0 -0
  38. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/async_example.py +0 -0
  39. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/async_quickstart.py +0 -0
  40. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/auto_features_example.py +0 -0
  41. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/caching_example.py +0 -0
  42. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/chatbot_example.py +0 -0
  43. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/complete_example.py +0 -0
  44. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/concurrent_example.py +0 -0
  45. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/concurrent_tool_example.py +0 -0
  46. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/file_agent_demo.py +0 -0
  47. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/function_calling_demo.py +0 -0
  48. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/mcp_demo.py +0 -0
  49. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/observability_example.py +0 -0
  50. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/orchestration_demo.py +0 -0
  51. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/planner_example.py +0 -0
  52. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/supervisor_codebase_analysis_demo.py +0 -0
  53. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/supervisor_example.py +0 -0
  54. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/examples/sync_quickstart.py +0 -0
  55. {agentx_dev-3.0.1 → agentx_dev-3.0.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentx-dev
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: A lightweight LLM agent framework with multi-agent orchestration (Supervisor + dynamic specialist spawning), permission-gated default tools, MCP integration, and prompt-template presets.
5
5
  Author-email: Bruce-Arhin Shadrach <brucearhin098@gmail.com>
6
6
  License: MIT License
@@ -1328,6 +1328,41 @@ class AgentRunner:
1328
1328
  yield {"type": "final", "content": final_answer}
1329
1329
  break
1330
1330
 
1331
+ # Guardrail for use_function_calling=True: the model is forced
1332
+ # to call the parser tool (React_ / FewShot / etc.) and fills
1333
+ # in `action` + `action_input`. Nothing in the parser schema
1334
+ # constrains `action` to a real tool name, so the model can
1335
+ # (and does) put its natural-language closing response there
1336
+ # — e.g. action = "Provide a response to the athlete."
1337
+ # Without this guardrail the runner would try to dispatch
1338
+ # a tool with that name, get "not found", and the turn dies.
1339
+ # Detection: action isn't Final_Answer AND isn't in the
1340
+ # registry. Treat the whole turn as an implicit Final_Answer
1341
+ # built from whatever text the model provided (thought +
1342
+ # action + action_input, whichever are present).
1343
+ known_tools = set(self.func) | set(self.args)
1344
+ if action and action != "Final_Answer" and action not in known_tools:
1345
+ parts: List[str] = []
1346
+ if thought:
1347
+ parts.append(str(thought))
1348
+ # action itself may BE the response text
1349
+ if action:
1350
+ parts.append(str(action))
1351
+ # action_input often carries the actual body
1352
+ if action_input and str(action_input).strip():
1353
+ parts.append(str(action_input))
1354
+ final_answer = "\n\n".join(parts) or (
1355
+ "(agent emitted an unrecognized action and no text)"
1356
+ )
1357
+ if self.verbose:
1358
+ print(
1359
+ f"\x1B[1;33m[loop] implicit-final: action "
1360
+ f"'{action[:60]}' is not a registered tool; "
1361
+ f"treating turn as Final_Answer\x1B[0m"
1362
+ )
1363
+ yield {"type": "final", "content": final_answer}
1364
+ break
1365
+
1331
1366
  # Loop-level spiral check — same (action, args) as the last
1332
1367
  # turn? Count it. Three in a row and we bail with a synthesized
1333
1368
  # Final_Answer built from whatever real data was gathered
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentx-dev
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: A lightweight LLM agent framework with multi-agent orchestration (Supervisor + dynamic specialist spawning), permission-gated default tools, MCP integration, and prompt-template presets.
5
5
  Author-email: Bruce-Arhin Shadrach <brucearhin098@gmail.com>
6
6
  License: MIT License
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
 
3
3
  name = "agentx-dev"
4
- version = "3.0.1"
4
+ version = "3.0.2"
5
5
  description = "A lightweight LLM agent framework with multi-agent orchestration (Supervisor + dynamic specialist spawning), permission-gated default tools, MCP integration, and prompt-template presets."
6
6
  authors = [{ name = "Bruce-Arhin Shadrach", email = "brucearhin098@gmail.com" }]
7
7
  # Best practice: link to the license file
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes