langchain-agentx-python 0.2.5__tar.gz → 0.2.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.
- {langchain-agentx-python-0.2.5/langchain_agentx_python.egg-info → langchain-agentx-python-0.2.7}/PKG-INFO +1 -1
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/graph_edges.py +14 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/model_node.py +26 -28
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/model_nodes.py +24 -26
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/retrier.py +5 -2
- langchain-agentx-python-0.2.7/langchain_agentx/loop/model/retry_bridge.py +56 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/compatible_chat_openai.py +20 -1
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7/langchain_agentx_python.egg-info}/PKG-INFO +1 -1
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/pyproject.toml +1 -1
- langchain-agentx-python-0.2.5/langchain_agentx/loop/model/retry_bridge.py +0 -58
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/LICENSE +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/README.md +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/clear.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/compact.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/memory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/builtin/reload_plugins.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/context.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/dispatcher.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/registry.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/result.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/model_profiles.yaml +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/model_profiles.yaml.example +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/agent_config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/agent_loop_config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/model_context_resolver.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/runtime_settings.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/config/token_estimator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/blocking_guard.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/compaction_service.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/message_utils.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/pipeline.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/settings.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/autocompact.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/base.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/collapse.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/microcompact.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/noop.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/snip.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/stages/tool_result_budget.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/context/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/exit/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/exit/exit_logic.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/exit/reason_codes.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/builtin_loop_control.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/graph/factory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/async_hook_runner.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/engine.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/agent.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/command.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/http.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/executors/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/graph_wiring.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/registry.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/trust.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/hook/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/injection/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/injection/dedup.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/loop_abort.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/orphan_tool_results.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/retry_events.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/retry_policy.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/schema_and_format.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/tool_and_model_binding.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/tool_call_degradation_corrector.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/model/tool_transcript_guard.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/builder.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/builtin.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/compact.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/prompt/sections.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/context.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/context_factory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/runtime/subagent_execution_paths.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/async_runner.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/context.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/fork_worktree_notice.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/graph.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/orchestrator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/progress.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/runner.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/subagent/transcript.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/resolver.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/runtime.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/sections.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/instruction/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/age.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/agent_memory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/extractor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/paths.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/recall.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/runtime.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/scan.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/memdir/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/compact_bridge.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/prompts.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/memory/session/session_memory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/base.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/compaction.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/degradation.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/exit_quality.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/session_memory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/checkers/tool_behavior.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/retention_scheduler.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/service.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/state.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/evaluation/store.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/events/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/events/langchain_agentx_event_adapter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/debug_burst.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/logging_config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/logging/logging_contract.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/cli.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/service.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/store.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/replay/ui.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/collector.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/event_emitter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/hook_event_emitter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/sqlite_store.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/trace_callback.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/observability/trace/trace_lifecycle_collector.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/builtin.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/manifest.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/registries.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/plugin/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/anthropic.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/env.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/model_profile.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/provider/openai.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/agent_session.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/conversation_factory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/conversation_recovery.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/conversation_session.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/factory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/session/protocol.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/ids.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/interfaces.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/notification_priority.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/core/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/loop_adapter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/loop_integration.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/prefetch_providers.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/provider_factory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/queued_command_provider.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/sqlite_queued_command_provider.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/integrations/tool_use_summary_provider.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/orchestrator/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/orchestrator/runtime.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/output/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/output/sink.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/policy/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/policy/withhold_visibility.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/queue/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/queue/in_memory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/attachments.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/skill_prefetch/provider.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/store/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/store/in_memory.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/store/sqlite_store.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/high_water_mark.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/lock.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/path_resolver.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasklist/store.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/base.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/evaluation.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/registry.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/ai_analysis/scheduler.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/base/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/base/contracts.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/notification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/custom/spec.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/notification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/spec.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/dream_task/state.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/notification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/in_process_teammate/spec.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/notification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/runner.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_agent/spec.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/notification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/local_bash/spec.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/notification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/remote_agent/spec.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/bootstrap.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/executor.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/task_runtime/tasks/trace_cleanup/scheduler.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/adapter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/base.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/errors.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/identical_call_cache.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/permission_context.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/pipeline.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/policy.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/registry.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/agent_session.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/background.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/base.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/conversation.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/resolvers/workflow.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/session_store.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/smoke_test_runtime.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tool_runtime/state_bridge.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/agentx_guide.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/explore.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/general.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/plan.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/statusline_setup.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/built_in/verification.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/builtin_subagent_loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/cwd_resolution.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/limits.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/registry/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/registry/config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/registry/registry.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/scope.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/agent/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/constants.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/html_preview.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ask_user_question/validators.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/ast_security.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/bash_hardening.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/bash_runtime_contract.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/cwd_reporter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/limits.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/mode_validation.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/observability.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/output_utils.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/path_security.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/read_only_validation.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/result_presenter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/sandbox_decision.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/security.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/sed_edit_parser.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/sed_validation.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/semantics.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/session_manager.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/session_runtime.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/shell_locator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/task_runtime.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/bash/windows_shell_quoting.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/batch_tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/diff_generator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/git_diff_generator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/limits.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/quote_match.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/quote_normalizer.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/settings_validator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/staleness.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/edit/validator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/pagination.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/rg_list_backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/rg_pattern.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/glob/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/rg_subprocess_controller.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/grep/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/limits.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/read/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/ripgrep_plugin_exclusions.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/argument_substitution.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/loader.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/policy.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/skill/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/hooks.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/limits.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_create/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_get/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_list/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/hooks.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/task_update/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/attachments.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/runtime_config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/user_message/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/backend.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/limits.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/models.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/prompt.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/tool.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/tools/write/validator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/cwd.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/host_platform.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/path_hierarchy.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/path_user_input.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/rg_executable.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/subprocess_text.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/temp_paths.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/unc_path.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/utils/win_reserved_paths.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/base.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/batch.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/dag.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/adapter.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/depth_resolver.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/parallel_handler.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/route_handler.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/handlers/stage_handler.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/stack.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/event_adapter/types.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/node.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/chaining.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/evaluator_optimizer.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/orchestrator.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/parallelization.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/patterns/routing.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workflow/state.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/__init__.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/capabilities.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/config.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/path_key_normalizer.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/resolver.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/workspace/validators.py +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/SOURCES.txt +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/dependency_links.txt +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/not-zip-safe +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/requires.txt +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx_python.egg-info/top_level.txt +0 -0
- {langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/setup.cfg +0 -0
|
@@ -461,6 +461,20 @@ class LoopControllerEdge:
|
|
|
461
461
|
) -> str | None:
|
|
462
462
|
if terminal_reason != TERMINAL_REASON_MAX_STEPS:
|
|
463
463
|
return None
|
|
464
|
+
|
|
465
|
+
# 防重入保护:如果已经给过机会(force_text_exit=True),直接终止
|
|
466
|
+
if state.get("force_text_exit"):
|
|
467
|
+
# 已经注入过 MAX_STEPS_PROMPT 且清空了工具,模型仍返回 tool_calls 或未正确退出
|
|
468
|
+
# 此时直接终止,避免无限循环
|
|
469
|
+
emit_loop_decision_event(
|
|
470
|
+
state=state,
|
|
471
|
+
decision="terminal",
|
|
472
|
+
selected_edge=self._task_reconcile_or_end(state),
|
|
473
|
+
reason_code="max_steps_force_text_exit_failed",
|
|
474
|
+
evidence={"step": state.get("step", 0), "reason": "model did not comply with force_text_exit"},
|
|
475
|
+
)
|
|
476
|
+
return self._task_reconcile_or_end(state)
|
|
477
|
+
|
|
464
478
|
messages = list(state.get("messages") or [])
|
|
465
479
|
messages.append(AIMessage(content=MAX_STEPS_PROMPT))
|
|
466
480
|
state["messages"] = messages
|
|
@@ -42,7 +42,7 @@ from ..exit.reason_codes import (
|
|
|
42
42
|
TRANSITION_WITHHOLD_RECOVERY_RETRY,
|
|
43
43
|
)
|
|
44
44
|
from .retrier import ModelCallRetrier, RetryContext
|
|
45
|
-
from .retry_bridge import
|
|
45
|
+
from .retry_bridge import emit_retry_events
|
|
46
46
|
from .tool_and_model_binding import get_bound_model, handle_model_output
|
|
47
47
|
from .tool_transcript_guard import repair_messages_for_llm_invoke
|
|
48
48
|
|
|
@@ -295,14 +295,13 @@ class ModelNode(Runnable):
|
|
|
295
295
|
compaction_settings=self._compaction_settings,
|
|
296
296
|
)
|
|
297
297
|
if synth is not None:
|
|
298
|
-
model_response
|
|
298
|
+
model_response = synth
|
|
299
299
|
else:
|
|
300
|
-
model_response,
|
|
300
|
+
model_response, _ = self._run_sync(request, state, config=config)
|
|
301
301
|
|
|
302
302
|
return self._build_state_update(
|
|
303
303
|
state=state,
|
|
304
304
|
model_response=model_response,
|
|
305
|
-
retry_event_commands=retry_event_commands,
|
|
306
305
|
mode="sync",
|
|
307
306
|
)
|
|
308
307
|
|
|
@@ -319,14 +318,13 @@ class ModelNode(Runnable):
|
|
|
319
318
|
compaction_settings=self._compaction_settings,
|
|
320
319
|
)
|
|
321
320
|
if synth is not None:
|
|
322
|
-
model_response
|
|
321
|
+
model_response = synth
|
|
323
322
|
else:
|
|
324
|
-
model_response,
|
|
323
|
+
model_response, _ = await self._arun_async(request, state, config=config)
|
|
325
324
|
|
|
326
325
|
return self._build_state_update(
|
|
327
326
|
state=state,
|
|
328
327
|
model_response=model_response,
|
|
329
|
-
retry_event_commands=retry_event_commands,
|
|
330
328
|
mode="async",
|
|
331
329
|
)
|
|
332
330
|
|
|
@@ -360,9 +358,12 @@ class ModelNode(Runnable):
|
|
|
360
358
|
SystemMessage(content=effective) if effective is not None else None
|
|
361
359
|
)
|
|
362
360
|
|
|
361
|
+
# force_text_exit: max_steps 达限时,清空工具列表强制模型输出文本
|
|
362
|
+
tools = [] if state.get("force_text_exit") else self._default_tools
|
|
363
|
+
|
|
363
364
|
return _ModelRequest(
|
|
364
365
|
model=self._model,
|
|
365
|
-
tools=
|
|
366
|
+
tools=tools,
|
|
366
367
|
system_message=system_message,
|
|
367
368
|
response_format=self._initial_response_format,
|
|
368
369
|
messages=state.get("messages", []),
|
|
@@ -463,10 +464,9 @@ class ModelNode(Runnable):
|
|
|
463
464
|
config: RunnableConfig | None = None,
|
|
464
465
|
) -> tuple[Any, list[Command]]:
|
|
465
466
|
"""同步重试与降级执行。"""
|
|
466
|
-
retry_event_commands: list[Command] = []
|
|
467
467
|
try:
|
|
468
468
|
if self._retrier is None:
|
|
469
|
-
return self._invoke_bound(request, config=config),
|
|
469
|
+
return self._invoke_bound(request, config=config), []
|
|
470
470
|
retry_ctx = RetryContext(
|
|
471
471
|
scope="background" if state.get("retry_scope") == "background" else "foreground"
|
|
472
472
|
)
|
|
@@ -474,11 +474,11 @@ class ModelNode(Runnable):
|
|
|
474
474
|
lambda: self._invoke_bound(request, config=config),
|
|
475
475
|
context=retry_ctx,
|
|
476
476
|
)
|
|
477
|
-
|
|
478
|
-
return retry_result.value,
|
|
477
|
+
emit_retry_events(retry_result.events)
|
|
478
|
+
return retry_result.value, []
|
|
479
479
|
except Exception as primary_exc:
|
|
480
480
|
if self._fallback_model is None:
|
|
481
|
-
return _synthetic_api_error_model_response(primary_exc, self._name),
|
|
481
|
+
return _synthetic_api_error_model_response(primary_exc, self._name), []
|
|
482
482
|
logger.warning(
|
|
483
483
|
"Primary model invoke failed; retrying once with fallback_model",
|
|
484
484
|
exc_info=True,
|
|
@@ -486,15 +486,15 @@ class ModelNode(Runnable):
|
|
|
486
486
|
req_fb = request.override(model=self._fallback_model)
|
|
487
487
|
try:
|
|
488
488
|
if self._retrier is None:
|
|
489
|
-
return self._invoke_bound(req_fb, config=config),
|
|
489
|
+
return self._invoke_bound(req_fb, config=config), []
|
|
490
490
|
fb_result = self._retrier.invoke(
|
|
491
491
|
lambda: self._invoke_bound(req_fb, config=config),
|
|
492
492
|
context=retry_ctx,
|
|
493
493
|
)
|
|
494
|
-
|
|
495
|
-
return fb_result.value,
|
|
494
|
+
emit_retry_events(fb_result.events)
|
|
495
|
+
return fb_result.value, []
|
|
496
496
|
except Exception as fb_exc:
|
|
497
|
-
return _synthetic_api_error_model_response(fb_exc, self._name),
|
|
497
|
+
return _synthetic_api_error_model_response(fb_exc, self._name), []
|
|
498
498
|
|
|
499
499
|
async def _arun_async(
|
|
500
500
|
self,
|
|
@@ -504,10 +504,9 @@ class ModelNode(Runnable):
|
|
|
504
504
|
config: RunnableConfig | None = None,
|
|
505
505
|
) -> tuple[Any, list[Command]]:
|
|
506
506
|
"""异步重试与降级执行。"""
|
|
507
|
-
retry_event_commands: list[Command] = []
|
|
508
507
|
try:
|
|
509
508
|
if self._retrier is None:
|
|
510
|
-
return await self._ainvoke_bound(request, config=config),
|
|
509
|
+
return await self._ainvoke_bound(request, config=config), []
|
|
511
510
|
retry_ctx = RetryContext(
|
|
512
511
|
scope="background" if state.get("retry_scope") == "background" else "foreground"
|
|
513
512
|
)
|
|
@@ -515,11 +514,11 @@ class ModelNode(Runnable):
|
|
|
515
514
|
lambda: self._ainvoke_bound(request, config=config),
|
|
516
515
|
context=retry_ctx,
|
|
517
516
|
)
|
|
518
|
-
|
|
519
|
-
return retry_result.value,
|
|
517
|
+
emit_retry_events(retry_result.events)
|
|
518
|
+
return retry_result.value, []
|
|
520
519
|
except Exception as primary_exc:
|
|
521
520
|
if self._fallback_model is None:
|
|
522
|
-
return _synthetic_api_error_model_response(primary_exc, self._name),
|
|
521
|
+
return _synthetic_api_error_model_response(primary_exc, self._name), []
|
|
523
522
|
logger.warning(
|
|
524
523
|
"Primary model ainvoke failed; retrying once with fallback_model",
|
|
525
524
|
exc_info=True,
|
|
@@ -527,15 +526,15 @@ class ModelNode(Runnable):
|
|
|
527
526
|
req_fb = request.override(model=self._fallback_model)
|
|
528
527
|
try:
|
|
529
528
|
if self._retrier is None:
|
|
530
|
-
return await self._ainvoke_bound(req_fb, config=config),
|
|
529
|
+
return await self._ainvoke_bound(req_fb, config=config), []
|
|
531
530
|
fb_result = await self._retrier.ainvoke(
|
|
532
531
|
lambda: self._ainvoke_bound(req_fb, config=config),
|
|
533
532
|
context=retry_ctx,
|
|
534
533
|
)
|
|
535
|
-
|
|
536
|
-
return fb_result.value,
|
|
534
|
+
emit_retry_events(fb_result.events)
|
|
535
|
+
return fb_result.value, []
|
|
537
536
|
except Exception as fb_exc:
|
|
538
|
-
return _synthetic_api_error_model_response(fb_exc, self._name),
|
|
537
|
+
return _synthetic_api_error_model_response(fb_exc, self._name), []
|
|
539
538
|
|
|
540
539
|
# ===== 退出逻辑与状态更新 =====
|
|
541
540
|
|
|
@@ -544,7 +543,6 @@ class ModelNode(Runnable):
|
|
|
544
543
|
*,
|
|
545
544
|
state: dict,
|
|
546
545
|
model_response: Any,
|
|
547
|
-
retry_event_commands: list[Command],
|
|
548
546
|
mode: str,
|
|
549
547
|
) -> dict:
|
|
550
548
|
"""构建状态更新 + Command 列表。"""
|
|
@@ -584,7 +582,7 @@ class ModelNode(Runnable):
|
|
|
584
582
|
base_state["structured_response"] = model_response.structured_response
|
|
585
583
|
state_update["structured_response"] = model_response.structured_response
|
|
586
584
|
|
|
587
|
-
return [
|
|
585
|
+
return [Command(update=base_state), Command(update=state_update)]
|
|
588
586
|
|
|
589
587
|
def _find_last_ai_message(self, messages: list[Any]) -> AIMessage | None:
|
|
590
588
|
for msg in reversed(messages):
|
|
@@ -37,7 +37,7 @@ from ..exit.reason_codes import (
|
|
|
37
37
|
TRANSITION_WITHHOLD_RECOVERY_EXHAUSTED,
|
|
38
38
|
TRANSITION_WITHHOLD_RECOVERY_RETRY,
|
|
39
39
|
)
|
|
40
|
-
from .retry_bridge import
|
|
40
|
+
from .retry_bridge import emit_retry_events
|
|
41
41
|
from .retrier import ModelCallRetrier, RetryContext
|
|
42
42
|
from .tool_and_model_binding import get_bound_model, handle_model_output
|
|
43
43
|
from .tool_transcript_guard import repair_messages_for_llm_invoke
|
|
@@ -200,7 +200,7 @@ class _ModelNodeBuilder:
|
|
|
200
200
|
config: RunnableConfig | None = None,
|
|
201
201
|
) -> List[Command[Any]]:
|
|
202
202
|
request = self._build_request(state, runtime)
|
|
203
|
-
model_response,
|
|
203
|
+
model_response, _ = self._run_sync_with_retries(
|
|
204
204
|
request,
|
|
205
205
|
state,
|
|
206
206
|
config=config,
|
|
@@ -208,7 +208,6 @@ class _ModelNodeBuilder:
|
|
|
208
208
|
return self._build_commands_from_response(
|
|
209
209
|
state=state,
|
|
210
210
|
model_response=model_response,
|
|
211
|
-
retry_event_commands=retry_event_commands,
|
|
212
211
|
mode="sync",
|
|
213
212
|
)
|
|
214
213
|
|
|
@@ -223,7 +222,7 @@ class _ModelNodeBuilder:
|
|
|
223
222
|
config: RunnableConfig | None = None,
|
|
224
223
|
) -> List[Command[Any]]:
|
|
225
224
|
request = self._build_request(state, runtime)
|
|
226
|
-
model_response,
|
|
225
|
+
model_response, _ = await self._run_async_with_retries(
|
|
227
226
|
request,
|
|
228
227
|
state,
|
|
229
228
|
config=config,
|
|
@@ -231,7 +230,6 @@ class _ModelNodeBuilder:
|
|
|
231
230
|
return self._build_commands_from_response(
|
|
232
231
|
state=state,
|
|
233
232
|
model_response=model_response,
|
|
234
|
-
retry_event_commands=retry_event_commands,
|
|
235
233
|
mode="async",
|
|
236
234
|
)
|
|
237
235
|
|
|
@@ -262,9 +260,12 @@ class _ModelNodeBuilder:
|
|
|
262
260
|
)
|
|
263
261
|
system_message = _SystemMessage(content=effective) if effective is not None else None
|
|
264
262
|
|
|
263
|
+
# force_text_exit: max_steps 达限时,清空工具列表强制模型输出文本
|
|
264
|
+
tools = [] if state.get("force_text_exit") else self._default_tools
|
|
265
|
+
|
|
265
266
|
return _ModelRequest(
|
|
266
267
|
model=self._model,
|
|
267
|
-
tools=
|
|
268
|
+
tools=tools,
|
|
268
269
|
system_message=system_message,
|
|
269
270
|
response_format=self._initial_response_format,
|
|
270
271
|
messages=state["messages"],
|
|
@@ -371,10 +372,9 @@ class _ModelNodeBuilder:
|
|
|
371
372
|
)
|
|
372
373
|
if synth is not None:
|
|
373
374
|
return synth, []
|
|
374
|
-
retry_event_commands: list[Command[Any]] = []
|
|
375
375
|
try:
|
|
376
376
|
if self._retrier is None:
|
|
377
|
-
return self._invoke_bound_sync(request, config=config),
|
|
377
|
+
return self._invoke_bound_sync(request, config=config), []
|
|
378
378
|
retry_ctx = RetryContext(
|
|
379
379
|
scope="background" if state.get("retry_scope") == "background" else "foreground"
|
|
380
380
|
)
|
|
@@ -382,11 +382,11 @@ class _ModelNodeBuilder:
|
|
|
382
382
|
lambda: self._invoke_bound_sync(request, config=config),
|
|
383
383
|
context=retry_ctx,
|
|
384
384
|
)
|
|
385
|
-
|
|
386
|
-
return retry_result.value,
|
|
385
|
+
emit_retry_events(retry_result.events)
|
|
386
|
+
return retry_result.value, []
|
|
387
387
|
except Exception as primary_exc:
|
|
388
388
|
if self._fallback_model is None:
|
|
389
|
-
return _synthetic_api_error_model_response(primary_exc, self._name),
|
|
389
|
+
return _synthetic_api_error_model_response(primary_exc, self._name), []
|
|
390
390
|
logger.warning(
|
|
391
391
|
"Primary model invoke failed; retrying once with fallback_model",
|
|
392
392
|
exc_info=True,
|
|
@@ -395,15 +395,15 @@ class _ModelNodeBuilder:
|
|
|
395
395
|
req_fb.model = self._fallback_model
|
|
396
396
|
try:
|
|
397
397
|
if self._retrier is None:
|
|
398
|
-
return self._invoke_bound_sync(req_fb, config=config),
|
|
398
|
+
return self._invoke_bound_sync(req_fb, config=config), []
|
|
399
399
|
fb_result = self._retrier.invoke(
|
|
400
400
|
lambda: self._invoke_bound_sync(req_fb, config=config),
|
|
401
401
|
context=retry_ctx,
|
|
402
402
|
)
|
|
403
|
-
|
|
404
|
-
return fb_result.value,
|
|
403
|
+
emit_retry_events(fb_result.events)
|
|
404
|
+
return fb_result.value, []
|
|
405
405
|
except Exception as fb_exc:
|
|
406
|
-
return _synthetic_api_error_model_response(fb_exc, self._name),
|
|
406
|
+
return _synthetic_api_error_model_response(fb_exc, self._name), []
|
|
407
407
|
|
|
408
408
|
async def _run_async_with_retries(
|
|
409
409
|
self,
|
|
@@ -421,10 +421,9 @@ class _ModelNodeBuilder:
|
|
|
421
421
|
)
|
|
422
422
|
if synth is not None:
|
|
423
423
|
return synth, []
|
|
424
|
-
retry_event_commands: list[Command[Any]] = []
|
|
425
424
|
try:
|
|
426
425
|
if self._retrier is None:
|
|
427
|
-
return await self._invoke_bound_async(request, config=config),
|
|
426
|
+
return await self._invoke_bound_async(request, config=config), []
|
|
428
427
|
retry_ctx = RetryContext(
|
|
429
428
|
scope="background" if state.get("retry_scope") == "background" else "foreground"
|
|
430
429
|
)
|
|
@@ -432,11 +431,11 @@ class _ModelNodeBuilder:
|
|
|
432
431
|
lambda: self._invoke_bound_async(request, config=config),
|
|
433
432
|
context=retry_ctx,
|
|
434
433
|
)
|
|
435
|
-
|
|
436
|
-
return retry_result.value,
|
|
434
|
+
emit_retry_events(retry_result.events)
|
|
435
|
+
return retry_result.value, []
|
|
437
436
|
except Exception as primary_exc:
|
|
438
437
|
if self._fallback_model is None:
|
|
439
|
-
return _synthetic_api_error_model_response(primary_exc, self._name),
|
|
438
|
+
return _synthetic_api_error_model_response(primary_exc, self._name), []
|
|
440
439
|
logger.warning(
|
|
441
440
|
"Primary model ainvoke failed; retrying once with fallback_model",
|
|
442
441
|
exc_info=True,
|
|
@@ -445,22 +444,21 @@ class _ModelNodeBuilder:
|
|
|
445
444
|
req_fb.model = self._fallback_model
|
|
446
445
|
try:
|
|
447
446
|
if self._retrier is None:
|
|
448
|
-
return await self._invoke_bound_async(req_fb, config=config),
|
|
447
|
+
return await self._invoke_bound_async(req_fb, config=config), []
|
|
449
448
|
fb_result = await self._retrier.ainvoke(
|
|
450
449
|
lambda: self._invoke_bound_async(req_fb, config=config),
|
|
451
450
|
context=retry_ctx,
|
|
452
451
|
)
|
|
453
|
-
|
|
454
|
-
return fb_result.value,
|
|
452
|
+
emit_retry_events(fb_result.events)
|
|
453
|
+
return fb_result.value, []
|
|
455
454
|
except Exception as fb_exc:
|
|
456
|
-
return _synthetic_api_error_model_response(fb_exc, self._name),
|
|
455
|
+
return _synthetic_api_error_model_response(fb_exc, self._name), []
|
|
457
456
|
|
|
458
457
|
def _build_commands_from_response(
|
|
459
458
|
self,
|
|
460
459
|
*,
|
|
461
460
|
state: AgentState[Any],
|
|
462
461
|
model_response: Any,
|
|
463
|
-
retry_event_commands: list[Command[Any]],
|
|
464
462
|
mode: str,
|
|
465
463
|
) -> List[Command[Any]]:
|
|
466
464
|
last_ai_message = self._find_last_ai_message(model_response.result)
|
|
@@ -498,7 +496,7 @@ class _ModelNodeBuilder:
|
|
|
498
496
|
if model_response.structured_response is not None:
|
|
499
497
|
base_state["structured_response"] = model_response.structured_response
|
|
500
498
|
state_update["structured_response"] = model_response.structured_response
|
|
501
|
-
return [
|
|
499
|
+
return [Command(update=base_state), Command(update=state_update)]
|
|
502
500
|
|
|
503
501
|
def _find_last_ai_message(self, messages: list[Any]) -> AIMessage | None:
|
|
504
502
|
for msg in reversed(messages):
|
|
@@ -92,15 +92,18 @@ class RetryClassifier:
|
|
|
92
92
|
@dataclass(slots=True)
|
|
93
93
|
class ModelRetryConfig:
|
|
94
94
|
max_retries: int = 10
|
|
95
|
-
initial_delay: float = 0
|
|
95
|
+
initial_delay: float = 2.0
|
|
96
96
|
backoff_factor: float = 2.0
|
|
97
|
-
max_delay: float =
|
|
97
|
+
max_delay: float = 60.0
|
|
98
98
|
jitter: bool = True
|
|
99
99
|
heartbeat_threshold_seconds: float = 30.0
|
|
100
100
|
heartbeat_interval_seconds: float = 30.0
|
|
101
101
|
retry_on: Callable[[Exception], bool] = default_retry_on
|
|
102
102
|
allow_background_529_retry: bool = False
|
|
103
103
|
auth_recovery_handler: AuthRecoveryHandler | None = None
|
|
104
|
+
# Fallback 机制:连续 N 次 429/529 后触发 fallback
|
|
105
|
+
max_consecutive_rate_limit: int = 3
|
|
106
|
+
fallback_model: Any | None = None
|
|
104
107
|
|
|
105
108
|
|
|
106
109
|
@dataclass(slots=True)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
模型重试事件处理。
|
|
3
|
+
|
|
4
|
+
职责:
|
|
5
|
+
- 将 retrier 产出的事件记录到日志
|
|
6
|
+
- 不再写入 messages state,避免污染 LLM 上下文
|
|
7
|
+
- 事件通过 trace/observability 通道对外暴露(由外部系统订阅)
|
|
8
|
+
|
|
9
|
+
重要变更:
|
|
10
|
+
旧版本将重试事件转为 SystemMessage 写入 state,导致:
|
|
11
|
+
- LLM 上下文被大量重试提示污染
|
|
12
|
+
- _strip_system_messages_from_state 需要额外处理这些消息
|
|
13
|
+
|
|
14
|
+
新版本仅记录日志和返回事件数据,由外部系统(如 trace 包)决定如何展示。
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import logging
|
|
20
|
+
from typing import Iterable
|
|
21
|
+
|
|
22
|
+
from .retry_events import ModelRetryEvent
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _format_retry_event_message(event: ModelRetryEvent) -> str:
|
|
28
|
+
"""格式化重试事件为可读字符串。"""
|
|
29
|
+
seconds = max(0, int(round(event.retry_in_ms / 1000)))
|
|
30
|
+
if event.event_type == "heartbeat":
|
|
31
|
+
prefix = "Retry still pending"
|
|
32
|
+
else:
|
|
33
|
+
prefix = "Retry scheduled"
|
|
34
|
+
return (
|
|
35
|
+
f"[{prefix}] in {seconds}s "
|
|
36
|
+
f"(attempt {event.attempt}/{event.max_retries}) "
|
|
37
|
+
f"{event.error_type}: {event.error_message}"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def emit_retry_events(events: Iterable[ModelRetryEvent]) -> None:
|
|
42
|
+
"""
|
|
43
|
+
发出重试事件(记录日志 + 返回原始事件数据)。
|
|
44
|
+
|
|
45
|
+
不再返回 Command,避免重试事件写入 messages state。
|
|
46
|
+
外部系统可通过 observability/trace 通道订阅这些事件。
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
events: 重试事件列表
|
|
50
|
+
"""
|
|
51
|
+
for event in events:
|
|
52
|
+
msg = _format_retry_event_message(event)
|
|
53
|
+
logger.info("[ModelRetry] %s", msg)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
__all__ = ["emit_retry_events", "_format_retry_event_message"]
|
|
@@ -29,7 +29,26 @@ from langchain_openai import ChatOpenAI
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class CompatibleChatOpenAI(ChatOpenAI):
|
|
32
|
-
"""OpenAI 兼容 ChatModel 封装(支持 reasoning_content)。
|
|
32
|
+
"""OpenAI 兼容 ChatModel 封装(支持 reasoning_content)。
|
|
33
|
+
|
|
34
|
+
重要:本类默认禁用 OpenAI SDK 内置重试(max_retries=0),由外层 ModelCallRetrier
|
|
35
|
+
统一管理重试逻辑,避免双层重试导致请求放大问题。
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
max_retries: int = 0,
|
|
41
|
+
**kwargs: Any,
|
|
42
|
+
) -> None:
|
|
43
|
+
"""
|
|
44
|
+
初始化 CompatibleChatOpenAI。
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
max_retries: OpenAI SDK 内置重试次数,默认 0(由外层 ModelCallRetrier 接管)。
|
|
48
|
+
如需启用 SDK 内置重试,显式传入 max_retries > 0。
|
|
49
|
+
**kwargs: 传递给 ChatOpenAI 的其他参数。
|
|
50
|
+
"""
|
|
51
|
+
super().__init__(max_retries=max_retries, **kwargs)
|
|
33
52
|
|
|
34
53
|
def _get_request_payload(
|
|
35
54
|
self,
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
模型重试事件到 loop message 的桥接。
|
|
3
|
-
|
|
4
|
-
职责:
|
|
5
|
-
- 将 retrier 产出的事件转为 SystemMessage
|
|
6
|
-
- 由 model_node 统一并入 Command(update={"messages": ...})
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
from __future__ import annotations
|
|
10
|
-
|
|
11
|
-
from typing import Iterable
|
|
12
|
-
|
|
13
|
-
from langchain_core.messages import SystemMessage
|
|
14
|
-
from langgraph.types import Command
|
|
15
|
-
|
|
16
|
-
from .retry_events import (
|
|
17
|
-
RETRY_EVENT_METADATA_FLAG,
|
|
18
|
-
RETRY_EVENT_SUBTYPE,
|
|
19
|
-
ModelRetryEvent,
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def _format_retry_event_message(event: ModelRetryEvent) -> str:
|
|
24
|
-
seconds = max(0, int(round(event.retry_in_ms / 1000)))
|
|
25
|
-
if event.event_type == "heartbeat":
|
|
26
|
-
prefix = "Retry still pending"
|
|
27
|
-
else:
|
|
28
|
-
prefix = "Retry scheduled"
|
|
29
|
-
return (
|
|
30
|
-
f"[{prefix}] in {seconds}s "
|
|
31
|
-
f"(attempt {event.attempt}/{event.max_retries}) "
|
|
32
|
-
f"{event.error_type}: {event.error_message}"
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def build_retry_event_commands(events: Iterable[ModelRetryEvent]) -> list[Command]:
|
|
37
|
-
commands: list[Command] = []
|
|
38
|
-
for event in events:
|
|
39
|
-
msg = SystemMessage(
|
|
40
|
-
content=_format_retry_event_message(event),
|
|
41
|
-
response_metadata={
|
|
42
|
-
RETRY_EVENT_METADATA_FLAG: True,
|
|
43
|
-
"subtype": RETRY_EVENT_SUBTYPE,
|
|
44
|
-
"event_type": event.event_type,
|
|
45
|
-
"retry_in_ms": event.retry_in_ms,
|
|
46
|
-
"attempt": event.attempt,
|
|
47
|
-
"max_retries": event.max_retries,
|
|
48
|
-
"error": {
|
|
49
|
-
"type": event.error_type,
|
|
50
|
-
"message": event.error_message,
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
)
|
|
54
|
-
commands.append(Command(update={"messages": [msg]}))
|
|
55
|
-
return commands
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
__all__ = ["build_retry_event_commands"]
|
|
File without changes
|
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/__init__.py
RENAMED
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/context.py
RENAMED
|
File without changes
|
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/registry.py
RENAMED
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/result.py
RENAMED
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/command/types.py
RENAMED
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/config/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain-agentx-python-0.2.5 → langchain-agentx-python-0.2.7}/langchain_agentx/loop/__init__.py
RENAMED
|
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
|