jaf-py 2.5.12__py3-none-any.whl → 2.6.0__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
@@ -201,7 +201,7 @@ def generate_run_id() -> RunId:
201
201
  return create_run_id(str(uuid.uuid4()))
202
202
 
203
203
 
204
- __version__ = "2.5.12"
204
+ __version__ = "2.6.0"
205
205
  __all__ = [
206
206
  # Core types and functions
207
207
  "TraceId",
jaf/core/agent_tool.py CHANGED
@@ -189,6 +189,8 @@ def create_agent_tool(
189
189
  initial_input_guardrails=parent_config.initial_input_guardrails,
190
190
  final_output_guardrails=parent_config.final_output_guardrails,
191
191
  on_event=parent_config.on_event,
192
+ before_llm_call=parent_config.before_llm_call,
193
+ after_llm_call=parent_config.after_llm_call,
192
194
  memory=parent_config.memory if preserve_session else None,
193
195
  conversation_id=parent_config.conversation_id if preserve_session else None,
194
196
  default_tool_timeout=parent_config.default_tool_timeout,
jaf/core/tools.py CHANGED
@@ -224,38 +224,18 @@ def create_async_function_tool_legacy(
224
224
 
225
225
 
226
226
  def _extract_docstring_info(func):
227
- """Extract description and parameter info from function docstring."""
227
+ """Extract description from function docstring.
228
+
229
+ Returns the entire docstring as the description since parameters are
230
+ extracted from the function signature, not the docstring.
231
+ """
228
232
  doc = inspect.getdoc(func)
229
233
  if not doc:
230
234
  return func.__name__.replace("_", " ").title(), {}
231
235
 
232
- lines = doc.strip().split("\n")
233
- if not lines:
234
- return func.__name__.replace("_", " ").title(), {}
235
-
236
- # First non-empty line is the description
237
- description = lines[0].strip()
238
-
239
- # Look for Args section to extract parameter descriptions
240
- param_descriptions = {}
241
- in_args_section = False
242
-
243
- for line in lines[1:]:
244
- line = line.strip()
245
- if line.lower().startswith("args:"):
246
- in_args_section = True
247
- continue
248
- elif line.lower().startswith(
249
- ("returns:", "return:", "raises:", "raise:", "examples:", "example:")
250
- ):
251
- in_args_section = False
252
- continue
253
- elif in_args_section and line and ":" in line:
254
- # Parse parameter description like "location: The location to fetch the weather for."
255
- param_name, param_desc = line.split(":", 1)
256
- param_descriptions[param_name.strip()] = param_desc.strip()
257
-
258
- return description, param_descriptions
236
+ # Return the entire docstring as description
237
+ # param_descriptions is kept for backward compatibility but is not used
238
+ return doc.strip(), {}
259
239
 
260
240
 
261
241
  def _create_parameter_schema_from_signature(func):
jaf/core/tracing.py CHANGED
@@ -467,7 +467,7 @@ class LangfuseTraceCollector:
467
467
  public_key=public_key,
468
468
  secret_key=secret_key,
469
469
  host=host,
470
- release="jaf-py-v2.5.12",
470
+ release="jaf-py-v2.6.0",
471
471
  httpx_client=client,
472
472
  )
473
473
  self._httpx_client = client
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaf-py
3
- Version: 2.5.12
3
+ Version: 2.6.0
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.12-blue.svg)](https://github.com/xynehq/jaf-py)
85
+ [![Version](https://img.shields.io/badge/version-2.6.0-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=n0B1UvL0bZ3QsTaXVQz7NUQX0MuAbb_pRN0fkEEbalQ,8653
1
+ jaf/__init__.py,sha256=x18d5MnT8t9HFbWVrUr9gL2c35eugxvx50kGNFGcU_Q,8652
2
2
  jaf/cli.py,sha256=EDMMA5uX0e3TUIedLdyP3p4Qy-aXADvpht3VgJPJagU,8299
3
3
  jaf/exceptions.py,sha256=FdLIw7bdCNtBYfqRyJBkRT4Z1vWuvkzrMqFiMAzjL8Y,9158
4
4
  jaf/a2a/__init__.py,sha256=r4W-WHZNjoxR8EQ0x41_rY3fl12OH5qcSn0KycXaKKU,7752
@@ -39,7 +39,7 @@ jaf/a2a/tests/test_integration.py,sha256=hfGAtwXOfV9OXrFgS94twMbzxMQ4Vfj0KYoNT5V
39
39
  jaf/a2a/tests/test_protocol.py,sha256=3Ov9fTqznDqJLg8PqY2oy9I2Tpvwv_N0aN-rpFpAmjM,22215
40
40
  jaf/a2a/tests/test_types.py,sha256=rSUhZmOQcFrgNiEg4hDCZwypj19h6mSamVapWkrzZWc,17329
41
41
  jaf/core/__init__.py,sha256=4IqKRspv8gvgAtbmvaMvUgYZB1fSIy3vsyCXkjF8PjU,2013
42
- jaf/core/agent_tool.py,sha256=DN3klcYF28RtQeUF4delk03oT6ppP3MvpbRV5ENDSuA,11959
42
+ jaf/core/agent_tool.py,sha256=gZje8_gZSaWCecySg2ZBK07RcD8bc2hxHsR4z87oKJE,12075
43
43
  jaf/core/analytics.py,sha256=ypdhllyOThXZB-TY_eR1t1n2qrnAVN7Ljb8PaOtJft0,23267
44
44
  jaf/core/checkpoint.py,sha256=O7mfi7gFOAUgJ3zHzgJsr11uzn-BU-Vj1iKyKjcirMk,8398
45
45
  jaf/core/composition.py,sha256=Tj0-FRTVWygmAfsBLld7pnZK4nrGMMBx2YYJW_KQPoo,25393
@@ -55,8 +55,8 @@ jaf/core/regeneration.py,sha256=TUoBs4xZtFt3xBGA0N9cMsprtRL9BdmJeX5OnyLyGiE,1916
55
55
  jaf/core/state.py,sha256=fdWDc2DQ-o_g_8E4ibg2QM0Vad_XUique3a5iYBwGZo,9516
56
56
  jaf/core/streaming.py,sha256=5ntOtJrZVCHuGsygquyCLG2J5yuSxE6DN5OM-BrQiGw,16818
57
57
  jaf/core/tool_results.py,sha256=L9U3JDQAjAH5YR7iMpSxfVky2Nxo6FYQs4WE05RATaQ,11283
58
- jaf/core/tools.py,sha256=qsnC1Deo1VXpheUuRox26PrrfUoOJ-ZvxkiXzko5lVQ,15856
59
- jaf/core/tracing.py,sha256=6YPKrkip8-3Or-dXDmNSCpFKYOnmt6NkcYeYRZ9nRpM,55604
58
+ jaf/core/tools.py,sha256=rHxzAfGVGpYk3YJKmrq3AQLW0oE3ACkiJBOwle2bLdc,15146
59
+ jaf/core/tracing.py,sha256=oXnaOjTnOC_zKuptL3t74bD7v0hn9UiKTyFmMXwMTXc,55603
60
60
  jaf/core/types.py,sha256=1QolTM3IYnQArbYAZkCIfj868j9vyEZTThqw37q7EyU,35395
61
61
  jaf/core/workflows.py,sha256=0825AoD1QwEiGAs5IRlWHmaKrjurx6xF7oDJR6POBsg,25651
62
62
  jaf/memory/__init__.py,sha256=YfANOg5vUFSPVG7gpBE4_lYkV5X3_U6Yj9v1_QexfN0,1396
@@ -89,9 +89,9 @@ jaf/visualization/functional_core.py,sha256=0Xs2R8ELADKNIgokcbjuxmWwxEyCH1yXIEdG
89
89
  jaf/visualization/graphviz.py,sha256=EwWVIRv8Z7gTiO5Spvcm-z_UUQ1oWNPRgdE33ZzFwx8,11569
90
90
  jaf/visualization/imperative_shell.py,sha256=N5lWzOLMIU_iCoy3n5WCg49eec8VxV8f7JIG6_wNtVw,2506
91
91
  jaf/visualization/types.py,sha256=90G8oClsFa_APqTuMrTW6KjD0oG9I4kVur773dXNW0E,1393
92
- jaf_py-2.5.12.dist-info/licenses/LICENSE,sha256=LXUQBJxdyr-7C4bk9cQBwvsF_xwA-UVstDTKabpcjlI,1063
93
- jaf_py-2.5.12.dist-info/METADATA,sha256=9WFqYhZO2orHGkawJL-SLb2YxYEjgzzVTSA_UA08-No,27745
94
- jaf_py-2.5.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
- jaf_py-2.5.12.dist-info/entry_points.txt,sha256=OtIJeNJpb24kgGrqRx9szGgDx1vL9ayq8uHErmu7U5w,41
96
- jaf_py-2.5.12.dist-info/top_level.txt,sha256=Xu1RZbGaM4_yQX7bpalo881hg7N_dybaOW282F15ruE,4
97
- jaf_py-2.5.12.dist-info/RECORD,,
92
+ jaf_py-2.6.0.dist-info/licenses/LICENSE,sha256=LXUQBJxdyr-7C4bk9cQBwvsF_xwA-UVstDTKabpcjlI,1063
93
+ jaf_py-2.6.0.dist-info/METADATA,sha256=jHV0X-xKL9RpV0pU0ujHYsj_a7F6Kj-EkDqqxZrX7ac,27743
94
+ jaf_py-2.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
+ jaf_py-2.6.0.dist-info/entry_points.txt,sha256=OtIJeNJpb24kgGrqRx9szGgDx1vL9ayq8uHErmu7U5w,41
96
+ jaf_py-2.6.0.dist-info/top_level.txt,sha256=Xu1RZbGaM4_yQX7bpalo881hg7N_dybaOW282F15ruE,4
97
+ jaf_py-2.6.0.dist-info/RECORD,,