langchain-agentx-python 1.4.2__py3-none-any.whl → 1.5.4__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.
@@ -11,7 +11,7 @@ from langchain_agentx import create_loop_agent
11
11
  ```
12
12
  """
13
13
 
14
- __version__ = "1.4.2"
14
+ __version__ = "1.5.4"
15
15
 
16
16
  from .loop import ( # noqa: F401
17
17
  create_loop_agent,
@@ -13,6 +13,10 @@ parallel_handler.py — ParallelizationWorkflow 事件处理器
13
13
  当前裁剪范围:
14
14
  - 只处理 parallel_* 前缀的节点和 aggregate 节点
15
15
  - 不支持动态并发控制(max_concurrency 由 LangGraph 处理)
16
+
17
+ Phase 1 收敛:
18
+ - parallel item 事件 payload 必带 item_index / item_key / item_total,与 stage_total 对齐
19
+ - 失败事件统一使用 PARALLEL_ITEM_FAILED / PARALLEL_AGGREGATE_FAILED,不与 DONE 共用 + error
16
20
  """
17
21
 
18
22
  from typing import Any, Dict, List
@@ -178,16 +182,23 @@ class ParallelHandler:
178
182
  )
179
183
 
180
184
  def _handle_parallel_item(self, event: Dict[str, Any], event_type: str, node: str) -> List[WorkflowEvent]:
181
- """处理 parallel_* 并行项事件"""
185
+ """处理 parallel_* 并行项事件
186
+
187
+ Phase 1 收敛:payload top-level 必带 item_index / item_key / item_total,
188
+ 与 stage_total 对齐;item_total 缺失时(无 structure spec)置 0 以保持类型稳定。
189
+ """
182
190
  events: List[WorkflowEvent] = []
183
191
 
184
192
  # 提取并行项索引(structure 映射优先,旧数字后缀 fallback)
185
193
  item_index = resolve_item_index(self._config, node, prefix=self._prefix)
194
+ item_total_raw = resolve_item_total(self._config)
195
+ item_total = item_total_raw if isinstance(item_total_raw, int) else 0
186
196
 
187
197
  if event_type == "on_chain_start":
188
198
  data = {
189
199
  "item_index": item_index,
190
200
  "item_key": node,
201
+ "item_total": item_total,
191
202
  }
192
203
  self._attach_item_display(data, WorkflowEventType.PARALLEL_ITEM_START, node, item_index)
193
204
  events.append(WorkflowEvent(
@@ -202,6 +213,7 @@ class ParallelHandler:
202
213
  data = {
203
214
  "item_index": item_index,
204
215
  "item_key": node,
216
+ "item_total": item_total,
205
217
  }
206
218
  self._attach_item_display(data, WorkflowEventType.PARALLEL_ITEM_DONE, node, item_index)
207
219
  events.append(WorkflowEvent(
@@ -218,6 +230,7 @@ class ParallelHandler:
218
230
  data = {
219
231
  "item_index": item_index,
220
232
  "item_key": node,
233
+ "item_total": item_total,
221
234
  "error": str(error_info),
222
235
  "error_type": type(error_info).__name__ if isinstance(error_info, Exception) else "WorkflowParallelItemError",
223
236
  }
@@ -5,6 +5,7 @@ types.py — Workflow 事件适配器类型定义
5
5
  - 定义 WorkflowEvent 数据类
6
6
  - 定义 WorkflowEventType 枚举
7
7
  - 定义 WorkflowAdapterState 状态类
8
+ - 收敛结构事件 payload 字段命名与 display 必填/可选边界
8
9
 
9
10
  链路位置:
10
11
  - Layer 3: Workflow 事件适配器
@@ -13,6 +14,32 @@ types.py — Workflow 事件适配器类型定义
13
14
  当前裁剪范围:
14
15
  - 不包含 OrchestratorWorkflow 事件类型(Phase 2+)
15
16
  - 不包含 Agent 层事件类型(由 LangchainAgentEvent 处理)
17
+
18
+ 事件契约(Phase 1 收敛):
19
+ - root workflow 失败 → WORKFLOW_FAILED(仅在 depth == 0 由 adapter 主路径发出)
20
+ - 局部失败(stage/item/aggregate/branch)→ 对应 *_FAILED 事件,且必带 error / error_type
21
+ - done / failed 不复用同一事件类型 + error 字段;done 不携带 error
22
+ - parallel item 事件 payload 必带 item_index / item_key / item_total(与 stage_total 对齐)
23
+
24
+ data.display 必填字段(display 存在时):
25
+ - version: int display schema 版本
26
+ - scope: str workflow / stage / item / branch / aggregate / subworkflow
27
+ - status: str running / completed / failed / pending / ...
28
+
29
+ data.display 可选字段(按 scope 出现):
30
+ - title / description UI 显示主标题与 subtitle(description 仅做 subtitle,不挂正文 preview)
31
+ - breadcrumb 层级路径数组
32
+ - progress_current / progress_total / progress_label / progress_indeterminate
33
+ - workflow_title / workflow_description / parent_title
34
+ - item_index / item_total / decision_label
35
+ - metrics_completed / metrics_running / metrics_failed / metrics_total
36
+ - status_reason / icon
37
+ - pattern / debug_key 运行期辅助字段,非展示语义
38
+
39
+ subtitle 边界(与正文 preview 分离):
40
+ - display.description ⇒ 容器 subtitle(一行简短摘要)
41
+ - agent / tool / message 等内容事件 ⇒ 挂在容器下作为 body / preview
42
+ - SDK 不在结构事件 data 中混入 agent 内容(如 reasoning_content / messages)
16
43
  """
17
44
 
18
45
  from dataclasses import dataclass, field
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain-agentx-python
3
- Version: 1.4.2
3
+ Version: 1.5.4
4
4
  Summary: LangChain/LangGraph-based agent utilities for CodeBaseX.
5
5
  Author-email: GoodMood2008 <GoodMood2008@users.noreply.github.com>
6
6
  License: Apache License
@@ -216,15 +216,15 @@ Classifier: Operating System :: OS Independent
216
216
  Requires-Python: >=3.11
217
217
  Description-Content-Type: text/markdown
218
218
  License-File: LICENSE
219
- Requires-Dist: langgraph<1.3.0,>=1.1.1
220
- Requires-Dist: langgraph-prebuilt<1.2.0,>=1.0.8
221
- Requires-Dist: langchain<2.0.0,>=1.2.10
222
- Requires-Dist: langchain-core<2.0.0,>=1.2.10
219
+ Requires-Dist: langgraph<1.3.0,>=1.2.5
220
+ Requires-Dist: langgraph-prebuilt<1.2.0,>=1.1.0
221
+ Requires-Dist: langchain<2.0.0,>=1.3.9
222
+ Requires-Dist: langchain-core<2.0.0,>=1.4.7
223
223
  Requires-Dist: langchain-text-splitters>=1.1.0
224
- Requires-Dist: langchain-anthropic<2.0.0,>=1.3.3
224
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.6
225
225
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.0
226
- Requires-Dist: langchain-community>=0.4.1
227
- Requires-Dist: langchain-openai>=1.1.3
226
+ Requires-Dist: langchain-community>=0.4.2
227
+ Requires-Dist: langchain-openai>=1.3.2
228
228
  Requires-Dist: openai
229
229
  Requires-Dist: tree-sitter==0.21.3
230
230
  Requires-Dist: tree-sitter-languages>=1.10.2
@@ -1,4 +1,4 @@
1
- langchain_agentx/__init__.py,sha256=t-TmHbOUpqwE-NSyvTsCucQxBWcLoDD7TzuWPdWNERE,1614
1
+ langchain_agentx/__init__.py,sha256=usHZv4utHyCCpHzCj6g7iTRghMj5BFBhJE5R3BBOBFc,1614
2
2
  langchain_agentx/command/__init__.py,sha256=Ej260S5uFQcmEtGZQG_NH7BYjHoStrpBLtGUsBTxyZk,631
3
3
  langchain_agentx/command/allowed_tools.py,sha256=TVA0VM8rm98H-QbLK_GRiX5RhEAZFxKawliMi4kk96A,3359
4
4
  langchain_agentx/command/context.py,sha256=DIGOGPBw5UGDBm0WNNJlKx1h_9rCRmcdROv4DT61Qug,731
@@ -692,10 +692,10 @@ langchain_agentx/workflow/event_adapter/adapter.py,sha256=RXreqtL4jJaCkdN8iwVfGO
692
692
  langchain_agentx/workflow/event_adapter/depth_resolver.py,sha256=MLUTSoVbAtUieQjV79rR0HKFhEYbNuCYpArG2rv8E6c,5181
693
693
  langchain_agentx/workflow/event_adapter/stack.py,sha256=Y5ZfRTbSAYB78XQsVrl9kyWwLspFyh6y53HUHxbrzzQ,3916
694
694
  langchain_agentx/workflow/event_adapter/structure_utils.py,sha256=EYUKYouB44zhkppXAULlIdFZ0vz81PSnpCYCCfkJdZQ,2991
695
- langchain_agentx/workflow/event_adapter/types.py,sha256=Ued9b028WScL385DJbSkjSZvfXEYfTDAc053Sa1_9AU,6599
695
+ langchain_agentx/workflow/event_adapter/types.py,sha256=WF4pEJdqzXTAxr8aGXrS26ucMWJW7AHaPebPnkL7SUk,8259
696
696
  langchain_agentx/workflow/event_adapter/handlers/__init__.py,sha256=oiEWh29Vw1dJbKlS4RIaKxh4EnvRVDVDRsfGyI16b-E,493
697
697
  langchain_agentx/workflow/event_adapter/handlers/display_support.py,sha256=pEp3SxvXzXIvms9QM3o4G0AMgUVlY_9hTqbphvq0BwI,1843
698
- langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py,sha256=XeSH9WNfvSfVluZlXPZpmmlUCKW2W44U08mImXW6iv0,9854
698
+ langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py,sha256=jFxjlniVMTzT_yZRF2KDxLateXGVLTUp-e6tydceFr8,10552
699
699
  langchain_agentx/workflow/event_adapter/handlers/route_handler.py,sha256=OA7jKvFghHyyDpCNLCXCe1tY_Z0cMu1OQqShhzi5tBc,6189
700
700
  langchain_agentx/workflow/event_adapter/handlers/stage_handler.py,sha256=7B8ZY-x9O7gVv1-xlZM2OtAnsnKXbUFTsuHxrBnkTCU,6437
701
701
  langchain_agentx/workflow/patterns/__init__.py,sha256=JB021EXUCNO7ZdReqlc_QVCzr5BlIOY-UDjIBj1UzKA,930
@@ -722,8 +722,8 @@ langchain_agentx/workspace/root_grant_manager.py,sha256=W3gy8HTevbERbXqIgRcjzOXO
722
722
  langchain_agentx/workspace/tool_boundary.py,sha256=UDwX6swpSLsx9HNkYuuRRiV5o7ZZG_Bru2Yn0c5kNX8,5724
723
723
  langchain_agentx/workspace/validators.py,sha256=tQt-6TOcL8Fw7Ig5ebA9S7vGWh1rby920eFW6x8Tk9E,1439
724
724
  langchain_agentx/workspace/view.py,sha256=Ip02CZNI-ZjF5k0OYT3q7RUR_auMEw83VJ6rQsaBcYU,4588
725
- langchain_agentx_python-1.4.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
726
- langchain_agentx_python-1.4.2.dist-info/METADATA,sha256=EQ1IvSK5HzVtcVqGil_nxIapXV2cKnfnuwlrofy3iBY,24252
727
- langchain_agentx_python-1.4.2.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
728
- langchain_agentx_python-1.4.2.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
729
- langchain_agentx_python-1.4.2.dist-info/RECORD,,
725
+ langchain_agentx_python-1.5.4.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
726
+ langchain_agentx_python-1.5.4.dist-info/METADATA,sha256=i-8TFeLuqFuuACvejSDk5q7EBnoHcYwDo0ovNTBVykM,24250
727
+ langchain_agentx_python-1.5.4.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
728
+ langchain_agentx_python-1.5.4.dist-info/top_level.txt,sha256=Ge284pniNt8xea0OLk2o9o32GqVpDhOYk20fwE-0xxA,17
729
+ langchain_agentx_python-1.5.4.dist-info/RECORD,,