jaf-py 2.5.5__py3-none-any.whl → 2.5.7__py3-none-any.whl

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/__init__.py CHANGED
@@ -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",
jaf/core/engine.py CHANGED
@@ -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
jaf/core/tracing.py CHANGED
@@ -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
jaf/core/types.py CHANGED
@@ -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
jaf/providers/model.py CHANGED
@@ -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
 
@@ -1,4 +1,4 @@
1
- jaf/__init__.py,sha256=jzou4ny01tsRBZAb-ojUf4pjyu5LA32FRDt_QiHjSPs,8260
1
+ jaf/__init__.py,sha256=ZwZkJFpYcvCXUPt5JwqrCZrE44rd_OkD7VuZNzCWHiI,8260
2
2
  jaf/cli.py,sha256=Af4di_NZ7rZ4wFl0R4EZh611NgJ--TL03vNyZ2M1_FY,8477
3
3
  jaf/exceptions.py,sha256=nl8JY355u7oTXB3PmC_LhnUaL8fzk2K4EaWM4fVpMPE,9196
4
4
  jaf/a2a/__init__.py,sha256=p4YVthZH0ow1ZECqWTQ0aQl8JWySYZb25jlzZJ09na4,7662
@@ -42,7 +42,7 @@ jaf/core/__init__.py,sha256=1VHV2-a1oJXIWcg8n5G5g2cmjw2QXv7OezncNB59KLw,1988
42
42
  jaf/core/agent_tool.py,sha256=tfLNaTIcOZ0dR9GBP1AHLPkLExm_dLbURnVIN4R84FQ,11806
43
43
  jaf/core/analytics.py,sha256=zFHIWqWal0bbEFCmJDc4DKeM0Ja7b_D19PqVaBI12pA,23338
44
44
  jaf/core/composition.py,sha256=IVxRO1Q9nK7JRH32qQ4p8WMIUu66BhqPNrlTNMGFVwE,26317
45
- jaf/core/engine.py,sha256=gv2nnkiWbqD54ru7NE3-c__DjOgp4OtPSoY9ApaBZIc,61009
45
+ jaf/core/engine.py,sha256=FUX3rSY0PLzsERRmVYLtEtMaEkTIkm4TMZaeg3fmnt8,61140
46
46
  jaf/core/errors.py,sha256=5fwTNhkojKRQ4wZj3lZlgDnAsrYyjYOwXJkIr5EGNUc,5539
47
47
  jaf/core/guardrails.py,sha256=nv7pQuCx7-9DDZrecWO1DsDqFoujL81FBDrafOsXgcI,26179
48
48
  jaf/core/handoff.py,sha256=ttjOQ6CSl34J4T_1ejdmq78gZ-ve07_IQE_DAbz2bmo,6002
@@ -55,8 +55,8 @@ jaf/core/state.py,sha256=oNCVXPWLkqnBQObdQX10TcmZ0eOF3wKG6DtL3kF6ohw,9649
55
55
  jaf/core/streaming.py,sha256=h_lYHQA9ee_D5QsDO9-Vhevgi7rFXPslPzd9605AJGo,17034
56
56
  jaf/core/tool_results.py,sha256=-bTOqOX02lMyslp5Z4Dmuhx0cLd5o7kgR88qK2HO_sw,11323
57
57
  jaf/core/tools.py,sha256=84N9A7QQ3xxcOs2eUUot3nmCnt5i7iZT9VwkuzuFBxQ,16274
58
- jaf/core/tracing.py,sha256=GNOJ8cJ-1kIsrvx_WUEhihy6T-hYk6i5MFB_UVGAcwU,53367
59
- jaf/core/types.py,sha256=xXkSV2ZE9oQea3JrU9XfWFvIHWUbZHHftJaZV-UAwHg,32860
58
+ jaf/core/tracing.py,sha256=3FcJ1vr5Nm-dAhQCpVrT_VR_e-gQG74PuuhNAcfzQhU,53367
59
+ jaf/core/types.py,sha256=RLfFS5TpJiog5-mAVMH_7oM7ZEJqGsZBbrOQiUpGUM4,33042
60
60
  jaf/core/workflows.py,sha256=Ul-82gzjIXtkhnSMSPv-8igikjkMtW1EBo9yrfodtvI,26294
61
61
  jaf/memory/__init__.py,sha256=-L98xlvihurGAzF0DnXtkueDVvO_wV2XxxEwAWdAj50,1400
62
62
  jaf/memory/approval_storage.py,sha256=HHZ_b57kIthdR53QE5XNSII9xy1Cg-1cFUCSAZ8A4Rk,11083
@@ -74,7 +74,7 @@ jaf/policies/handoff.py,sha256=KJYYuL9T6v6DECRhnsS2Je6q4Aj9_zC5d_KBnvEnZNE,8318
74
74
  jaf/policies/validation.py,sha256=wn-7ynH10E5nk-_r1_kHIYHrBGmLX0EFr-FUTHrsxvc,10903
75
75
  jaf/providers/__init__.py,sha256=lIbl1JvGrDhI9CzEk79N8yJNhf7ww_aWD-F40MnG3vY,2174
76
76
  jaf/providers/mcp.py,sha256=WxcC8gUFpDBBYyhorMcc1jHq3xMDMBtnwyRPthfL0S0,13074
77
- jaf/providers/model.py,sha256=bN2Hhr0N3soZzMrCdJ1pJa4rvo80oedCphDPcNgrVMY,39336
77
+ jaf/providers/model.py,sha256=477Ly6D9OaZsUGsAoJtpSvdY_rLZ07ZjhlhapRzSxTI,39368
78
78
  jaf/server/__init__.py,sha256=fMPnLZBRm6t3yQrr7-PnoHAQ8qj9o6Z1AJLM1M6bIS0,392
79
79
  jaf/server/main.py,sha256=CTb0ywbPIq9ELfay5MKChVR7BpIQOoEbPjPfpzo2aBQ,2152
80
80
  jaf/server/server.py,sha256=cbdhVTPoWa7rVIX3DDLoXjppeGTKQWNFj3NA1jrZN88,46830
@@ -88,9 +88,9 @@ jaf/visualization/functional_core.py,sha256=zedMDZbvjuOugWwnh6SJ2stvRNQX1Hlkb9Ab
88
88
  jaf/visualization/graphviz.py,sha256=WTOM6UP72-lVKwI4_SAr5-GCC3ouckxHv88ypCDQWJ0,12056
89
89
  jaf/visualization/imperative_shell.py,sha256=GpMrAlMnLo2IQgyB2nardCz09vMvAzaYI46MyrvJ0i4,2593
90
90
  jaf/visualization/types.py,sha256=QQcbVeQJLuAOXk8ynd08DXIS-PVCnv3R-XVE9iAcglw,1389
91
- jaf_py-2.5.5.dist-info/licenses/LICENSE,sha256=LXUQBJxdyr-7C4bk9cQBwvsF_xwA-UVstDTKabpcjlI,1063
92
- jaf_py-2.5.5.dist-info/METADATA,sha256=QavZuyRtYw55yL1NQOmYfLIMxLhTu_V5yZaHOKOY4gY,27743
93
- jaf_py-2.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
- jaf_py-2.5.5.dist-info/entry_points.txt,sha256=OtIJeNJpb24kgGrqRx9szGgDx1vL9ayq8uHErmu7U5w,41
95
- jaf_py-2.5.5.dist-info/top_level.txt,sha256=Xu1RZbGaM4_yQX7bpalo881hg7N_dybaOW282F15ruE,4
96
- jaf_py-2.5.5.dist-info/RECORD,,
91
+ jaf_py-2.5.7.dist-info/licenses/LICENSE,sha256=LXUQBJxdyr-7C4bk9cQBwvsF_xwA-UVstDTKabpcjlI,1063
92
+ jaf_py-2.5.7.dist-info/METADATA,sha256=Imc7tiZbuvXTqZaDANIAMhDmzWfaWKK0kJzu0C3La4k,27743
93
+ jaf_py-2.5.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
+ jaf_py-2.5.7.dist-info/entry_points.txt,sha256=OtIJeNJpb24kgGrqRx9szGgDx1vL9ayq8uHErmu7U5w,41
95
+ jaf_py-2.5.7.dist-info/top_level.txt,sha256=Xu1RZbGaM4_yQX7bpalo881hg7N_dybaOW282F15ruE,4
96
+ jaf_py-2.5.7.dist-info/RECORD,,
File without changes