jaf-py 2.3.1__tar.gz → 2.4.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.
- {jaf_py-2.3.1 → jaf_py-2.4.2}/PKG-INFO +128 -120
- {jaf_py-2.3.1 → jaf_py-2.4.2}/README.md +118 -118
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/__init__.py +15 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/agent_tool.py +6 -4
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/analytics.py +4 -3
- jaf_py-2.4.2/jaf/core/engine.py +1179 -0
- jaf_py-2.4.2/jaf/core/state.py +156 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/tools.py +4 -6
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/tracing.py +114 -23
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/types.py +157 -4
- jaf_py-2.4.2/jaf/memory/approval_storage.py +306 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/types.py +1 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/utils.py +1 -1
- jaf_py-2.4.2/jaf/providers/model.py +646 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/server/__init__.py +2 -0
- jaf_py-2.4.2/jaf/server/server.py +857 -0
- jaf_py-2.4.2/jaf/server/types.py +274 -0
- jaf_py-2.4.2/jaf/utils/__init__.py +50 -0
- jaf_py-2.4.2/jaf/utils/attachments.py +401 -0
- jaf_py-2.4.2/jaf/utils/document_processor.py +561 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf_py.egg-info/PKG-INFO +128 -120
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf_py.egg-info/SOURCES.txt +6 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf_py.egg-info/requires.txt +14 -1
- {jaf_py-2.3.1 → jaf_py-2.4.2}/pyproject.toml +11 -2
- jaf_py-2.4.2/tests/test_attachments.py +361 -0
- jaf_py-2.3.1/jaf/core/engine.py +0 -706
- jaf_py-2.3.1/jaf/providers/model.py +0 -223
- jaf_py-2.3.1/jaf/server/server.py +0 -214
- jaf_py-2.3.1/jaf/server/types.py +0 -129
- {jaf_py-2.3.1 → jaf_py-2.4.2}/LICENSE +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/agent.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/agent_card.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/client.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/examples/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/examples/client_example.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/examples/integration_example.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/examples/rag_demo/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/examples/server_demo/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/examples/server_example.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/cleanup.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/factory.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/providers/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/providers/composite.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/providers/in_memory.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/providers/postgres.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/providers/redis.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/serialization.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/tests/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/tests/run_comprehensive_tests.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/tests/test_cleanup.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/tests/test_serialization.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/tests/test_stress_concurrency.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/tests/test_task_lifecycle.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/memory/types.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/protocol.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/server.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/standalone_client.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/run_tests.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/test_agent.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/test_client.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/test_integration.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/test_protocol.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/tests/test_types.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/a2a/types.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/cli.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/composition.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/errors.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/performance.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/proxy.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/proxy_helpers.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/streaming.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/tool_results.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/core/workflows.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/exceptions.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/factory.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/providers/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/providers/in_memory.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/providers/postgres.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/memory/providers/redis.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/plugins/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/plugins/base.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/policies/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/policies/handoff.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/policies/validation.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/providers/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/providers/mcp.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/server/main.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/visualization/__init__.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/visualization/example.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/visualization/functional_core.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/visualization/graphviz.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/visualization/imperative_shell.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf/visualization/types.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf_py.egg-info/dependency_links.txt +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf_py.egg-info/entry_points.txt +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/jaf_py.egg-info/top_level.txt +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/setup.cfg +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/setup.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_a2a_deep.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_a2a_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_api_reference_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_callback_system_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_coffee_tool.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_conversation_id_fix.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_deployment_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_docs_code_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_engine.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_engine_manual.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_error_handling_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_getting_started_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_math_tool.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_mcp_comprehensive.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_mcp_docs.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_mcp_real_functionality.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_mcp_transports.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_memory_system_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_model_providers_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_property_based.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_proxy_simple.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_redis_fixes.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_redis_memory.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_server_api_examples.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_session_continuity.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_streamable_http_mcp_example.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_timeout_functionality.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_tool_integration.py +0 -0
- {jaf_py-2.3.1 → jaf_py-2.4.2}/tests/test_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jaf-py
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: A purely functional agent framework with immutable state and composable tools - Python implementation
|
|
5
5
|
Author: JAF Contributors
|
|
6
6
|
Maintainer: JAF Contributors
|
|
@@ -48,6 +48,14 @@ Requires-Dist: opentelemetry-api>=1.22.0; extra == "tracing"
|
|
|
48
48
|
Requires-Dist: opentelemetry-sdk>=1.22.0; extra == "tracing"
|
|
49
49
|
Requires-Dist: opentelemetry-exporter-otlp>=1.22.0; extra == "tracing"
|
|
50
50
|
Requires-Dist: langfuse<3.0.0; extra == "tracing"
|
|
51
|
+
Provides-Extra: attachments
|
|
52
|
+
Requires-Dist: PyPDF2>=3.0.0; extra == "attachments"
|
|
53
|
+
Requires-Dist: python-docx>=1.1.0; extra == "attachments"
|
|
54
|
+
Requires-Dist: openpyxl>=3.1.0; extra == "attachments"
|
|
55
|
+
Requires-Dist: pillow>=11.0.0; extra == "attachments"
|
|
56
|
+
Requires-Dist: python-magic>=0.4.27; sys_platform != "win32" and extra == "attachments"
|
|
57
|
+
Requires-Dist: python-magic-bin>=0.4.14; sys_platform == "win32" and extra == "attachments"
|
|
58
|
+
Requires-Dist: aiofiles>=23.0.0; extra == "attachments"
|
|
51
59
|
Provides-Extra: dev
|
|
52
60
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
53
61
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
@@ -66,74 +74,74 @@ Requires-Dist: psycopg2-binary>=2.9.0; extra == "memory"
|
|
|
66
74
|
Provides-Extra: visualization
|
|
67
75
|
Requires-Dist: graphviz>=0.20.0; extra == "visualization"
|
|
68
76
|
Provides-Extra: all
|
|
69
|
-
Requires-Dist: jaf-py[dev,memory,server,tracing,visualization]; extra == "all"
|
|
77
|
+
Requires-Dist: jaf-py[attachments,dev,memory,server,tracing,visualization]; extra == "all"
|
|
70
78
|
Dynamic: license-file
|
|
71
79
|
|
|
72
80
|
# JAF (Juspay Agent Framework) - Python Implementation
|
|
73
81
|
|
|
74
82
|
<!--  -->
|
|
75
83
|
|
|
76
|
-
[](https://github.com/xynehq/jaf-py)
|
|
77
85
|
[](https://www.python.org/)
|
|
78
86
|
[](https://xynehq.github.io/jaf-py/)
|
|
79
87
|
|
|
80
88
|
A purely functional agent framework with immutable state and composable tools, professionally converted from TypeScript to Python. JAF enables building production-ready AI agent systems with built-in security, observability, and error handling.
|
|
81
89
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
##
|
|
85
|
-
|
|
86
|
-
**[
|
|
87
|
-
|
|
88
|
-
##
|
|
89
|
-
|
|
90
|
-
###
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
###
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
###
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
###
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
|
|
115
|
-
###
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
###
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
###
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
|
|
136
|
-
##
|
|
90
|
+
**Production Ready**: Complete feature parity with TypeScript version, comprehensive test suite, and production deployment support.
|
|
91
|
+
|
|
92
|
+
## **[Read the Full Documentation](https://xynehq.github.io/jaf-py/)**
|
|
93
|
+
|
|
94
|
+
**[ Get Started →](https://xynehq.github.io/jaf-py/getting-started/)** | **[ API Reference →](https://xynehq.github.io/jaf-py/api-reference/)** | **[ Examples →](https://xynehq.github.io/jaf-py/examples/)**
|
|
95
|
+
|
|
96
|
+
## Key Features
|
|
97
|
+
|
|
98
|
+
### **Complete TypeScript Conversion**
|
|
99
|
+
- **Full Feature Parity**: All TypeScript functionality converted to Python
|
|
100
|
+
- **Type Safety**: Pydantic models with runtime validation
|
|
101
|
+
- **Immutable State**: Functional programming principles preserved
|
|
102
|
+
- **Tool Integration**: Complete tool calling and execution system
|
|
103
|
+
|
|
104
|
+
### **Production Ready Server**
|
|
105
|
+
- **FastAPI Server**: High-performance async HTTP API
|
|
106
|
+
- **Auto Documentation**: Interactive API docs at `/docs`
|
|
107
|
+
- **Health Monitoring**: Built-in health checks and metrics
|
|
108
|
+
- **CORS Support**: Ready for browser integration
|
|
109
|
+
|
|
110
|
+
### **Model Context Protocol (MCP)**
|
|
111
|
+
- **MCP Client**: Full MCP specification support
|
|
112
|
+
- **Stdio & SSE**: Multiple transport protocols
|
|
113
|
+
- **Tool Integration**: Seamless MCP tool integration
|
|
114
|
+
- **Auto Discovery**: Dynamic tool loading from MCP servers
|
|
115
|
+
|
|
116
|
+
### **Enterprise Security**
|
|
117
|
+
- **Input Guardrails**: Content filtering and validation
|
|
118
|
+
- **Output Guardrails**: Response sanitization
|
|
119
|
+
- **Permission System**: Role-based access control
|
|
120
|
+
- **Audit Logging**: Complete interaction tracing
|
|
121
|
+
- **Proxy Support**: Corporate proxy integration with authentication
|
|
122
|
+
|
|
123
|
+
### **Observability & Monitoring**
|
|
124
|
+
- **Real-time Tracing**: Event-driven observability
|
|
125
|
+
- **OpenTelemetry Integration**: Distributed tracing with OTLP
|
|
126
|
+
- **Langfuse Tracing**: LLM observability and analytics
|
|
127
|
+
- **Structured Logging**: JSON-formatted logs
|
|
128
|
+
- **Error Handling**: Comprehensive error types and recovery
|
|
129
|
+
- **Performance Metrics**: Built-in timing and counters
|
|
130
|
+
|
|
131
|
+
### **Agent-as-Tool Architecture**
|
|
132
|
+
- **Hierarchical Orchestration**: Use agents as tools in other agents
|
|
133
|
+
- **Conditional Tool Enabling**: Enable/disable agent tools based on context
|
|
134
|
+
- **Session Management**: Configurable session inheritance for sub-agents
|
|
135
|
+
- **Flexible Output Extraction**: Custom extractors for agent tool outputs
|
|
136
|
+
|
|
137
|
+
### **Developer Experience**
|
|
138
|
+
- **CLI Tools**: Project initialization and management
|
|
139
|
+
- **Hot Reload**: Development server with auto-reload
|
|
140
|
+
- **Type Hints**: Full mypy compatibility
|
|
141
|
+
- **Rich Examples**: RAG, multi-agent, agent-as-tool, and server demos
|
|
142
|
+
- **Visual Architecture**: Graphviz-powered agent and tool diagrams
|
|
143
|
+
|
|
144
|
+
## Core Philosophy
|
|
137
145
|
|
|
138
146
|
- **Immutability**: All core data structures are deeply immutable
|
|
139
147
|
- **Pure Functions**: Core logic expressed as pure, predictable functions
|
|
@@ -141,7 +149,7 @@ A purely functional agent framework with immutable state and composable tools, p
|
|
|
141
149
|
- **Composition over Configuration**: Build complex behavior by composing simple functions
|
|
142
150
|
- **Type-Safe by Design**: Leverages Python's type system with Pydantic for runtime safety
|
|
143
151
|
|
|
144
|
-
##
|
|
152
|
+
## Quick Start
|
|
145
153
|
|
|
146
154
|
### Installation
|
|
147
155
|
|
|
@@ -197,37 +205,37 @@ pip install -r requirements-docs.txt
|
|
|
197
205
|
./docs.sh deploy # Deploy to GitHub Pages
|
|
198
206
|
```
|
|
199
207
|
|
|
200
|
-
##
|
|
208
|
+
## Documentation
|
|
201
209
|
|
|
202
|
-
###
|
|
210
|
+
### **[Official Documentation Website](https://xynehq.github.io/jaf-py/)**
|
|
203
211
|
|
|
204
212
|
The complete, searchable documentation is available at **[xynehq.github.io/jaf-py](https://xynehq.github.io/jaf-py/)** with:
|
|
205
213
|
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
-
|
|
211
|
-
-
|
|
214
|
+
- **Interactive navigation** with search and filtering
|
|
215
|
+
- **Dark/light mode** with automatic system preference detection
|
|
216
|
+
- **Mobile-responsive design** for documentation on any device
|
|
217
|
+
- **Live code examples** with syntax highlighting
|
|
218
|
+
- **API reference** with auto-generated documentation
|
|
219
|
+
- **Always up-to-date** with automatic deployments
|
|
212
220
|
|
|
213
|
-
###
|
|
221
|
+
### **Local Documentation**
|
|
214
222
|
|
|
215
223
|
For offline access, documentation is also available in the [`docs/`](docs/) directory:
|
|
216
224
|
|
|
217
|
-
- **[
|
|
218
|
-
- **[
|
|
219
|
-
- **[
|
|
220
|
-
- **[
|
|
221
|
-
- **[
|
|
222
|
-
- **[
|
|
223
|
-
- **[
|
|
224
|
-
- **[
|
|
225
|
-
- **[
|
|
226
|
-
- **[
|
|
227
|
-
- **[
|
|
228
|
-
- **[
|
|
229
|
-
|
|
230
|
-
##
|
|
225
|
+
- **[ Documentation Hub](docs/README.md)** - Your starting point for all documentation
|
|
226
|
+
- **[ Getting Started](docs/getting-started.md)** - Installation and first agent tutorial
|
|
227
|
+
- **[ Core Concepts](docs/core-concepts.md)** - JAF's functional architecture principles
|
|
228
|
+
- **[ API Reference](docs/api-reference.md)** - Complete Python API documentation
|
|
229
|
+
- **[ Tools Guide](docs/tools.md)** - Creating and using tools
|
|
230
|
+
- **[ Memory System](docs/memory-system.md)** - Persistence and memory providers
|
|
231
|
+
- **[ Model Providers](docs/model-providers.md)** - LiteLLM integration
|
|
232
|
+
- **[ Monitoring](docs/monitoring.md)** - Observability, metrics, and alerting
|
|
233
|
+
- **[ Server API](docs/server-api.md)** - FastAPI endpoints reference
|
|
234
|
+
- **[ Deployment](docs/deployment.md)** - Production deployment guide
|
|
235
|
+
- **[ Examples](docs/examples.md)** - Detailed example walkthroughs
|
|
236
|
+
- **[ Troubleshooting](docs/troubleshooting.md)** - Common issues and solutions
|
|
237
|
+
|
|
238
|
+
## Project Structure
|
|
231
239
|
|
|
232
240
|
```
|
|
233
241
|
jaf-py/
|
|
@@ -243,7 +251,7 @@ jaf-py/
|
|
|
243
251
|
└── tests/ # Test suite
|
|
244
252
|
```
|
|
245
253
|
|
|
246
|
-
##
|
|
254
|
+
## Architectural Visualization
|
|
247
255
|
|
|
248
256
|
JAF includes powerful visualization capabilities to help you understand and document your agent systems.
|
|
249
257
|
|
|
@@ -295,7 +303,7 @@ async def main():
|
|
|
295
303
|
)
|
|
296
304
|
|
|
297
305
|
if result.success:
|
|
298
|
-
print(f"
|
|
306
|
+
print(f" Visualization saved to: {result.output_path}")
|
|
299
307
|
else:
|
|
300
308
|
print(f"❌ Error: {result.error}")
|
|
301
309
|
|
|
@@ -304,12 +312,12 @@ asyncio.run(main())
|
|
|
304
312
|
|
|
305
313
|
### Features
|
|
306
314
|
|
|
307
|
-
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
315
|
+
- **Multiple Color Schemes**: Choose from `default`, `modern`, or `minimal` themes
|
|
316
|
+
- **Agent Architecture**: Visualize agents, tools, and handoff relationships
|
|
317
|
+
- **Tool Ecosystems**: Generate dedicated tool interaction diagrams
|
|
318
|
+
- **Runner Architecture**: Show complete system architecture with session layers
|
|
319
|
+
- **Multiple Formats**: Export as PNG, SVG, or PDF
|
|
320
|
+
- **Customizable Layouts**: Support for various Graphviz layouts (`dot`, `circo`, `neato`, etc.)
|
|
313
321
|
|
|
314
322
|
### Example Output
|
|
315
323
|
|
|
@@ -336,7 +344,7 @@ await run_visualization_examples()
|
|
|
336
344
|
# - ./examples/agent-modern.png (modern color scheme)
|
|
337
345
|
```
|
|
338
346
|
|
|
339
|
-
##
|
|
347
|
+
## Key Components
|
|
340
348
|
|
|
341
349
|
### Core Types
|
|
342
350
|
|
|
@@ -414,7 +422,7 @@ async def main():
|
|
|
414
422
|
asyncio.run(main())
|
|
415
423
|
```
|
|
416
424
|
|
|
417
|
-
##
|
|
425
|
+
## Security & Validation
|
|
418
426
|
|
|
419
427
|
### Composable Validation Policies
|
|
420
428
|
|
|
@@ -449,7 +457,7 @@ config = RunConfig(
|
|
|
449
457
|
)
|
|
450
458
|
```
|
|
451
459
|
|
|
452
|
-
##
|
|
460
|
+
## Agent-as-Tool Functionality
|
|
453
461
|
|
|
454
462
|
JAF 2.2+ introduces powerful agent-as-tool capabilities, allowing you to use agents as tools within other agents for hierarchical orchestration:
|
|
455
463
|
|
|
@@ -528,7 +536,7 @@ def create_triage_agent():
|
|
|
528
536
|
)
|
|
529
537
|
```
|
|
530
538
|
|
|
531
|
-
##
|
|
539
|
+
## Observability
|
|
532
540
|
|
|
533
541
|
### Real-time Tracing
|
|
534
542
|
|
|
@@ -605,7 +613,7 @@ if result.outcome.status == 'error':
|
|
|
605
613
|
print(f"[{severity}] {formatted_error} (retryable: {is_retryable})")
|
|
606
614
|
```
|
|
607
615
|
|
|
608
|
-
##
|
|
616
|
+
## Provider Integrations
|
|
609
617
|
|
|
610
618
|
### A2A (Agent-to-Agent) Communication
|
|
611
619
|
|
|
@@ -672,7 +680,7 @@ from jaf.providers.mcp import create_mcp_sse_client
|
|
|
672
680
|
sse_client = create_mcp_sse_client('http://localhost:8080/sse')
|
|
673
681
|
```
|
|
674
682
|
|
|
675
|
-
##
|
|
683
|
+
## Development Server
|
|
676
684
|
|
|
677
685
|
JAF includes a built-in development server for testing agents locally via HTTP endpoints:
|
|
678
686
|
|
|
@@ -706,7 +714,7 @@ Server provides RESTful endpoints:
|
|
|
706
714
|
- `POST /chat` - General chat endpoint
|
|
707
715
|
- `POST /agents/{name}/chat` - Agent-specific endpoint
|
|
708
716
|
|
|
709
|
-
##
|
|
717
|
+
## Function Composition
|
|
710
718
|
|
|
711
719
|
JAF supports functional composition patterns for building complex behaviors from simple, reusable functions:
|
|
712
720
|
|
|
@@ -742,7 +750,7 @@ enhanced_tool = create_function_tool({
|
|
|
742
750
|
- **Type Safety**: Full type checking support
|
|
743
751
|
- **Performance**: Optimize individual pieces independently
|
|
744
752
|
|
|
745
|
-
##
|
|
753
|
+
## Example Applications
|
|
746
754
|
|
|
747
755
|
Explore the example applications to see the framework in action:
|
|
748
756
|
|
|
@@ -754,12 +762,12 @@ python server_example.py
|
|
|
754
762
|
```
|
|
755
763
|
|
|
756
764
|
**Features demonstrated:**
|
|
757
|
-
-
|
|
758
|
-
-
|
|
759
|
-
-
|
|
760
|
-
-
|
|
761
|
-
-
|
|
762
|
-
-
|
|
765
|
+
- Multiple specialized agents (math, weather, general)
|
|
766
|
+
- Tool integration (calculator, weather API)
|
|
767
|
+
- Agent handoffs and routing
|
|
768
|
+
- RESTful API with auto-documentation
|
|
769
|
+
- Real-time tracing and error handling
|
|
770
|
+
- Production-ready server configuration
|
|
763
771
|
|
|
764
772
|
**Available endpoints:**
|
|
765
773
|
- `GET /health` - Server health check
|
|
@@ -778,11 +786,11 @@ python agent_as_tool_example.py --server
|
|
|
778
786
|
```
|
|
779
787
|
|
|
780
788
|
**Features demonstrated:**
|
|
781
|
-
-
|
|
782
|
-
-
|
|
783
|
-
-
|
|
784
|
-
-
|
|
785
|
-
-
|
|
789
|
+
- Hierarchical agent orchestration
|
|
790
|
+
- Conditional tool enabling based on context
|
|
791
|
+
- Custom output extraction from agent tools
|
|
792
|
+
- Session management for sub-agents
|
|
793
|
+
- Translation agents working together
|
|
786
794
|
|
|
787
795
|
### 3. Tracing Integration Demos
|
|
788
796
|
|
|
@@ -796,10 +804,10 @@ python langfuse_tracing_demo.py
|
|
|
796
804
|
```
|
|
797
805
|
|
|
798
806
|
**Features demonstrated:**
|
|
799
|
-
-
|
|
800
|
-
-
|
|
801
|
-
-
|
|
802
|
-
-
|
|
807
|
+
- OpenTelemetry distributed tracing setup
|
|
808
|
+
- Langfuse LLM observability integration
|
|
809
|
+
- Composite trace collectors
|
|
810
|
+
- Real-time monitoring and analytics
|
|
803
811
|
|
|
804
812
|
### 4. MCP Integration Demo
|
|
805
813
|
|
|
@@ -809,12 +817,12 @@ python main.py
|
|
|
809
817
|
```
|
|
810
818
|
|
|
811
819
|
**Features demonstrated:**
|
|
812
|
-
-
|
|
813
|
-
-
|
|
814
|
-
-
|
|
815
|
-
-
|
|
820
|
+
- Model Context Protocol integration
|
|
821
|
+
- Dynamic tool loading from MCP servers
|
|
822
|
+
- Secure filesystem operations
|
|
823
|
+
- MCP client configuration and management
|
|
816
824
|
|
|
817
|
-
##
|
|
825
|
+
## Testing
|
|
818
826
|
|
|
819
827
|
```bash
|
|
820
828
|
pytest # Run tests
|
|
@@ -823,7 +831,7 @@ mypy . # Type checking
|
|
|
823
831
|
black . # Format code
|
|
824
832
|
```
|
|
825
833
|
|
|
826
|
-
##
|
|
834
|
+
## Architecture Principles
|
|
827
835
|
|
|
828
836
|
### Immutable State Machine
|
|
829
837
|
- All state transformations create new state objects
|
|
@@ -859,4 +867,4 @@ MIT
|
|
|
859
867
|
|
|
860
868
|
---
|
|
861
869
|
|
|
862
|
-
**JAF (Juspay Agentic Framework) v2.2** - Building the future of functional AI agent systems
|
|
870
|
+
**JAF (Juspay Agentic Framework) v2.2** - Building the future of functional AI agent systems
|