jaf-py 2.5.5__tar.gz → 2.5.7__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 (133) hide show
  1. {jaf_py-2.5.5/jaf_py.egg-info → jaf_py-2.5.7}/PKG-INFO +2 -2
  2. {jaf_py-2.5.5 → jaf_py-2.5.7}/README.md +1 -1
  3. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/__init__.py +1 -1
  4. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/engine.py +5 -2
  5. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/tracing.py +1 -1
  6. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/types.py +1 -0
  7. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/providers/model.py +1 -0
  8. {jaf_py-2.5.5 → jaf_py-2.5.7/jaf_py.egg-info}/PKG-INFO +2 -2
  9. {jaf_py-2.5.5 → jaf_py-2.5.7}/pyproject.toml +1 -1
  10. {jaf_py-2.5.5 → jaf_py-2.5.7}/LICENSE +0 -0
  11. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/__init__.py +0 -0
  12. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/agent.py +0 -0
  13. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/agent_card.py +0 -0
  14. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/client.py +0 -0
  15. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/examples/__init__.py +0 -0
  16. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/examples/client_example.py +0 -0
  17. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/examples/integration_example.py +0 -0
  18. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/examples/rag_demo/__init__.py +0 -0
  19. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/examples/server_demo/__init__.py +0 -0
  20. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/examples/server_example.py +0 -0
  21. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/__init__.py +0 -0
  22. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/cleanup.py +0 -0
  23. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/factory.py +0 -0
  24. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/providers/__init__.py +0 -0
  25. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/providers/composite.py +0 -0
  26. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/providers/in_memory.py +0 -0
  27. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/providers/postgres.py +0 -0
  28. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/providers/redis.py +0 -0
  29. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/serialization.py +0 -0
  30. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/tests/__init__.py +0 -0
  31. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/tests/run_comprehensive_tests.py +0 -0
  32. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/tests/test_cleanup.py +0 -0
  33. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/tests/test_serialization.py +0 -0
  34. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/tests/test_stress_concurrency.py +0 -0
  35. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/tests/test_task_lifecycle.py +0 -0
  36. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/memory/types.py +0 -0
  37. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/protocol.py +0 -0
  38. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/server.py +0 -0
  39. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/standalone_client.py +0 -0
  40. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/__init__.py +0 -0
  41. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/run_tests.py +0 -0
  42. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/test_agent.py +0 -0
  43. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/test_client.py +0 -0
  44. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/test_integration.py +0 -0
  45. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/test_protocol.py +0 -0
  46. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/tests/test_types.py +0 -0
  47. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/a2a/types.py +0 -0
  48. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/cli.py +0 -0
  49. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/__init__.py +0 -0
  50. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/agent_tool.py +0 -0
  51. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/analytics.py +0 -0
  52. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/composition.py +0 -0
  53. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/errors.py +0 -0
  54. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/guardrails.py +0 -0
  55. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/handoff.py +0 -0
  56. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/parallel_agents.py +0 -0
  57. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/performance.py +0 -0
  58. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/proxy.py +0 -0
  59. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/proxy_helpers.py +0 -0
  60. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/regeneration.py +0 -0
  61. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/state.py +0 -0
  62. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/streaming.py +0 -0
  63. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/tool_results.py +0 -0
  64. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/tools.py +0 -0
  65. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/core/workflows.py +0 -0
  66. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/exceptions.py +0 -0
  67. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/__init__.py +0 -0
  68. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/approval_storage.py +0 -0
  69. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/factory.py +0 -0
  70. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/providers/__init__.py +0 -0
  71. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/providers/in_memory.py +0 -0
  72. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/providers/postgres.py +0 -0
  73. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/providers/redis.py +0 -0
  74. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/types.py +0 -0
  75. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/memory/utils.py +0 -0
  76. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/plugins/__init__.py +0 -0
  77. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/plugins/base.py +0 -0
  78. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/policies/__init__.py +0 -0
  79. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/policies/handoff.py +0 -0
  80. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/policies/validation.py +0 -0
  81. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/providers/__init__.py +0 -0
  82. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/providers/mcp.py +0 -0
  83. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/server/__init__.py +0 -0
  84. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/server/main.py +0 -0
  85. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/server/server.py +0 -0
  86. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/server/types.py +0 -0
  87. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/utils/__init__.py +0 -0
  88. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/utils/attachments.py +0 -0
  89. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/utils/document_processor.py +0 -0
  90. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/visualization/__init__.py +0 -0
  91. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/visualization/example.py +0 -0
  92. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/visualization/functional_core.py +0 -0
  93. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/visualization/graphviz.py +0 -0
  94. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/visualization/imperative_shell.py +0 -0
  95. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf/visualization/types.py +0 -0
  96. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf_py.egg-info/SOURCES.txt +0 -0
  97. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf_py.egg-info/dependency_links.txt +0 -0
  98. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf_py.egg-info/entry_points.txt +0 -0
  99. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf_py.egg-info/requires.txt +0 -0
  100. {jaf_py-2.5.5 → jaf_py-2.5.7}/jaf_py.egg-info/top_level.txt +0 -0
  101. {jaf_py-2.5.5 → jaf_py-2.5.7}/setup.cfg +0 -0
  102. {jaf_py-2.5.5 → jaf_py-2.5.7}/setup.py +0 -0
  103. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_a2a_deep.py +0 -0
  104. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_a2a_examples.py +0 -0
  105. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_api_reference_examples.py +0 -0
  106. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_attachments.py +0 -0
  107. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_callback_system_examples.py +0 -0
  108. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_coffee_tool.py +0 -0
  109. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_conversation_id_fix.py +0 -0
  110. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_deployment_examples.py +0 -0
  111. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_docs_code_examples.py +0 -0
  112. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_engine.py +0 -0
  113. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_engine_manual.py +0 -0
  114. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_error_handling_examples.py +0 -0
  115. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_getting_started_examples.py +0 -0
  116. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_manual.py +0 -0
  117. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_math_tool.py +0 -0
  118. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_mcp_comprehensive.py +0 -0
  119. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_mcp_docs.py +0 -0
  120. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_mcp_real_functionality.py +0 -0
  121. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_mcp_transports.py +0 -0
  122. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_memory_system_examples.py +0 -0
  123. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_model_providers_examples.py +0 -0
  124. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_property_based.py +0 -0
  125. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_proxy_simple.py +0 -0
  126. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_redis_fixes.py +0 -0
  127. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_redis_memory.py +0 -0
  128. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_server_api_examples.py +0 -0
  129. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_session_continuity.py +0 -0
  130. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_streamable_http_mcp_example.py +0 -0
  131. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_timeout_functionality.py +0 -0
  132. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_tool_integration.py +0 -0
  133. {jaf_py-2.5.5 → jaf_py-2.5.7}/tests/test_validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaf-py
3
- Version: 2.5.5
3
+ Version: 2.5.7
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
@@ -82,7 +82,7 @@ Dynamic: license-file
82
82
 
83
83
  <!-- ![JAF Banner](docs/cover.png) -->
84
84
 
85
- [![Version](https://img.shields.io/badge/version-2.5.5-blue.svg)](https://github.com/xynehq/jaf-py)
85
+ [![Version](https://img.shields.io/badge/version-2.5.7-blue.svg)](https://github.com/xynehq/jaf-py)
86
86
  [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/)
87
87
  [![Docs](https://img.shields.io/badge/Docs-Live-brightgreen)](https://xynehq.github.io/jaf-py/)
88
88
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  <!-- ![JAF Banner](docs/cover.png) -->
4
4
 
5
- [![Version](https://img.shields.io/badge/version-2.5.5-blue.svg)](https://github.com/xynehq/jaf-py)
5
+ [![Version](https://img.shields.io/badge/version-2.5.7-blue.svg)](https://github.com/xynehq/jaf-py)
6
6
  [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/)
7
7
  [![Docs](https://img.shields.io/badge/Docs-Live-brightgreen)](https://xynehq.github.io/jaf-py/)
8
8
 
@@ -191,7 +191,7 @@ def generate_run_id() -> RunId:
191
191
  """Generate a new run ID."""
192
192
  return create_run_id(str(uuid.uuid4()))
193
193
 
194
- __version__ = "2.5.5"
194
+ __version__ = "2.5.7"
195
195
  __all__ = [
196
196
  # Core types and functions
197
197
  "TraceId", "RunId", "ValidationResult", "Message", "ModelConfig",
@@ -554,9 +554,12 @@ async def _run_internal(
554
554
  assistant_event_streamed = False
555
555
 
556
556
  for retry_attempt in range(config.max_empty_response_retries + 1):
557
- # Get completion from model provider, prefer streaming if available
557
+ # Get completion from model provider
558
+ # Check if streaming should be used based on configuration and availability
558
559
  get_stream = getattr(config.model_provider, "get_completion_stream", None)
559
- if callable(get_stream):
560
+ use_streaming = (config.prefer_streaming != False and callable(get_stream))
561
+
562
+ if use_streaming:
560
563
  try:
561
564
  aggregated_text = ""
562
565
  # Working array of partial tool calls
@@ -443,7 +443,7 @@ class LangfuseTraceCollector:
443
443
  public_key=public_key,
444
444
  secret_key=secret_key,
445
445
  host=host,
446
- release="jaf-py-v2.5.5",
446
+ release="jaf-py-v2.5.7",
447
447
  httpx_client=client
448
448
  )
449
449
  self._httpx_client = client
@@ -897,6 +897,7 @@ class RunConfig(Generic[Ctx]):
897
897
  max_empty_response_retries: int = 3 # Maximum retries when LLM returns empty response
898
898
  empty_response_retry_delay: float = 1.0 # Initial delay in seconds before retrying empty response (uses exponential backoff)
899
899
  log_empty_responses: bool = True # Whether to log diagnostic info for empty responses
900
+ prefer_streaming: Optional[bool] = None # Whether to prefer streaming responses. None (default) = use streaming if available, True = prefer streaming, False = disable streaming
900
901
 
901
902
 
902
903
  # Regeneration types for conversation management
@@ -219,6 +219,7 @@ def make_litellm_provider(
219
219
  request_params = {
220
220
  "model": model,
221
221
  "messages": messages,
222
+ "stream": False
222
223
  }
223
224
 
224
225
  # Add optional parameters
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaf-py
3
- Version: 2.5.5
3
+ Version: 2.5.7
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
@@ -82,7 +82,7 @@ Dynamic: license-file
82
82
 
83
83
  <!-- ![JAF Banner](docs/cover.png) -->
84
84
 
85
- [![Version](https://img.shields.io/badge/version-2.5.5-blue.svg)](https://github.com/xynehq/jaf-py)
85
+ [![Version](https://img.shields.io/badge/version-2.5.7-blue.svg)](https://github.com/xynehq/jaf-py)
86
86
  [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/)
87
87
  [![Docs](https://img.shields.io/badge/Docs-Live-brightgreen)](https://xynehq.github.io/jaf-py/)
88
88
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jaf-py"
7
- version = "2.5.5"
7
+ version = "2.5.7"
8
8
  description = "A purely functional agent framework with immutable state and composable tools - Python implementation"
9
9
  readme = "README.md"
10
10
  license = "MIT"
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
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
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
File without changes
File without changes
File without changes