agentengine-sdk-python 0.7.0__py3-none-any.whl → 0.8.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.
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/METADATA +36 -20
- agentengine_sdk_python-0.8.0.dist-info/RECORD +578 -0
- ksadk/a2a/__init__.py +178 -11
- ksadk/a2a/bootstrap.py +334 -0
- ksadk/a2a/card.py +120 -0
- ksadk/a2a/context_store.py +203 -0
- ksadk/a2a/control_plane.py +818 -0
- ksadk/a2a/credential.py +99 -0
- ksadk/a2a/event_adapter.py +149 -0
- ksadk/a2a/executor.py +406 -89
- ksadk/a2a/external_transport.py +516 -0
- ksadk/a2a/identity.py +304 -0
- ksadk/a2a/ids.py +22 -0
- ksadk/a2a/langgraph.py +285 -0
- ksadk/a2a/resume_store.py +201 -0
- ksadk/a2a/routes.py +105 -0
- ksadk/a2a/server.py +107 -60
- ksadk/a2a/space_client.py +1101 -0
- ksadk/a2a/task_adapter.py +423 -0
- ksadk/a2a/task_event_dispatcher.py +167 -0
- ksadk/a2a/task_event_outbox.py +326 -0
- ksadk/a2a/task_store.py +206 -0
- ksadk/a2ui/__init__.py +27 -0
- ksadk/a2ui/core.py +186 -0
- ksadk/a2ui/models.py +166 -0
- ksadk/a2ui/renderer.py +198 -0
- ksadk/agui/__init__.py +9 -0
- ksadk/agui/a2ui_projection.py +92 -0
- ksadk/agui/agent.py +857 -0
- ksadk/agui/config.py +86 -0
- ksadk/agui/routes.py +55 -0
- ksadk/api/client.py +233 -191
- ksadk/builders/__init__.py +2 -0
- ksadk/builders/base.py +16 -14
- ksadk/builders/code_builder.py +318 -236
- ksadk/builders/container_builder.py +187 -167
- ksadk/builders/framework_requirements.py +29 -11
- ksadk/builders/ks3_uploader.py +58 -27
- ksadk/builders/managed_runtime_builder.py +145 -0
- ksadk/builders/mcp_builder.py +91 -92
- ksadk/builders/requirements_utils.py +1 -5
- ksadk/cli/__init__.py +89 -171
- ksadk/cli/cmd_a2a.py +254 -70
- ksadk/cli/cmd_agent.py +19 -5
- ksadk/cli/cmd_build.py +158 -29
- ksadk/cli/cmd_completion.py +47 -35
- ksadk/cli/cmd_config.py +267 -198
- ksadk/cli/cmd_create.py +500 -720
- ksadk/cli/cmd_dashboard.py +120 -45
- ksadk/cli/cmd_deploy.py +117 -58
- ksadk/cli/cmd_destroy.py +44 -14
- ksadk/cli/cmd_files.py +63 -24
- ksadk/cli/cmd_hermes.py +168 -89
- ksadk/cli/cmd_invoke.py +184 -122
- ksadk/cli/cmd_launch.py +64 -28
- ksadk/cli/cmd_mcp.py +98 -64
- ksadk/cli/cmd_model.py +14 -5
- ksadk/cli/cmd_openclaw.py +483 -227
- ksadk/cli/cmd_replay.py +71 -0
- ksadk/cli/cmd_run.py +33 -10
- ksadk/cli/cmd_status.py +80 -31
- ksadk/cli/cmd_version.py +20 -13
- ksadk/cli/cmd_web.py +89 -13
- ksadk/cli/deploy_utils.py +20 -20
- ksadk/cli/dry_run.py +5 -3
- ksadk/cli/error_utils.py +37 -12
- ksadk/cli/global_options.py +1 -2
- ksadk/cli/local_runtime.py +1 -2
- ksadk/cli/model_catalog.py +6 -2
- ksadk/cli/network_options.py +34 -14
- ksadk/cli/resource_common.py +6 -2
- ksadk/cli/storage.py +0 -1
- ksadk/cli/ui.py +5 -3
- ksadk/cli/workflow_common.py +51 -17
- ksadk/codex/__init__.py +12 -0
- ksadk/codex/client.py +408 -0
- ksadk/codex/phase.py +143 -0
- ksadk/codex/runtime.py +449 -0
- ksadk/common/aicp_env.py +0 -1
- ksadk/common/auth.py +2 -2
- ksadk/common/constants.py +1 -3
- ksadk/common/llm_utils.py +17 -13
- ksadk/compat/__init__.py +5 -0
- ksadk/compat/adk_compat.py +200 -0
- ksadk/compat/copilotkit_a2ui.py +330 -0
- ksadk/configs/__init__.py +12 -12
- ksadk/configs/env_registry.py +500 -100
- ksadk/configs/global_config.py +2 -1
- ksadk/configs/settings.py +151 -124
- ksadk/conversations/__init__.py +7 -5
- ksadk/conversations/attachment_storage.py +16 -11
- ksadk/conversations/attachments.py +44 -36
- ksadk/conversations/compaction_pipeline.py +12 -12
- ksadk/conversations/compaction_prompt.py +9 -5
- ksadk/conversations/context.py +221 -6
- ksadk/conversations/message_projection.py +438 -51
- ksadk/conversations/model_context.py +12 -6
- ksadk/conversations/model_options.py +0 -1
- ksadk/conversations/normalize.py +20 -16
- ksadk/conversations/reasoning_markup.py +1 -1
- ksadk/conversations/runtime.py +339 -5255
- ksadk/conversations/runtime_compaction.py +333 -0
- ksadk/conversations/runtime_constants.py +27 -0
- ksadk/conversations/runtime_governance.py +185 -0
- ksadk/conversations/runtime_input.py +652 -0
- ksadk/conversations/runtime_invocation.py +395 -0
- ksadk/conversations/runtime_metadata.py +475 -0
- ksadk/conversations/runtime_observability.py +355 -0
- ksadk/conversations/runtime_payloads.py +272 -0
- ksadk/conversations/runtime_persistence.py +440 -0
- ksadk/conversations/runtime_preparation.py +418 -0
- ksadk/conversations/runtime_resume.py +816 -0
- ksadk/conversations/runtime_stream_events.py +902 -0
- ksadk/conversations/runtime_streaming.py +547 -0
- ksadk/conversations/semantic_summary.py +17 -5
- ksadk/conversations/session_title.py +6 -3
- ksadk/deployment/__init__.py +15 -16
- ksadk/deployment/agent_access.py +12 -23
- ksadk/deployment/base.py +51 -38
- ksadk/deployment/manager.py +63 -65
- ksadk/deployment/providers/serverless.py +309 -202
- ksadk/deployment/registry.py +38 -32
- ksadk/deployment/state.py +11 -11
- ksadk/deployment/ui_config.py +1 -1
- ksadk/detection/__init__.py +1 -1
- ksadk/detection/detector.py +146 -83
- ksadk/detection/mcp_detector.py +9 -6
- ksadk/events/__init__.py +25 -0
- ksadk/events/parser.py +191 -0
- ksadk/events/replay.py +37 -0
- ksadk/events/runtime_event.py +264 -0
- ksadk/events/store.py +317 -0
- ksadk/harness/__init__.py +34 -0
- ksadk/harness/app.py +278 -0
- ksadk/harness/config.py +181 -0
- ksadk/harness/reasoner.py +105 -0
- ksadk/harness/runner.py +211 -0
- ksadk/harness/sandbox.py +141 -0
- ksadk/harness/tools.py +222 -0
- ksadk/hermes_terminal.py +23 -12
- ksadk/identity/resolver.py +15 -9
- ksadk/ids.py +32 -0
- ksadk/knowledge_base/adk_tool.py +1 -1
- ksadk/knowledge_base/client.py +23 -29
- ksadk/managed_runtime.py +188 -0
- ksadk/markdown.py +5 -2
- ksadk/mcp_runtime/__init__.py +9 -6
- ksadk/memory/__init__.py +1 -1
- ksadk/memory/adk/__init__.py +2 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +2 -6
- ksadk/memory/adk/backends/http_ltm_backend.py +13 -21
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +7 -13
- ksadk/memory/adk/backends/sdk_ltm_backend.py +26 -33
- ksadk/memory/adk/long_term_memory.py +31 -35
- ksadk/memory/adk/resilient_session_service.py +4 -5
- ksadk/memory/adk/short_term_memory.py +12 -21
- ksadk/memory/adk_tool.py +3 -2
- ksadk/memory/backends/base.py +19 -19
- ksadk/memory/backends/memory.py +24 -25
- ksadk/memory/backends/redis.py +31 -30
- ksadk/memory/langchain_tool.py +2 -1
- ksadk/memory/manager.py +52 -47
- ksadk/memory/service.py +10 -8
- ksadk/model_policy.py +15 -7
- ksadk/model_proxy/__init__.py +51 -0
- ksadk/model_proxy/bootstrap.py +80 -0
- ksadk/model_proxy/cache.py +165 -0
- ksadk/model_proxy/config.py +45 -0
- ksadk/model_proxy/demo_webui.py +115 -0
- ksadk/model_proxy/detect.py +145 -0
- ksadk/model_proxy/gate.py +68 -0
- ksadk/model_proxy/namespace.py +173 -0
- ksadk/model_proxy/protocol_proxy.py +22 -0
- ksadk/model_proxy/server.py +300 -0
- ksadk/model_proxy/transform.py +691 -0
- ksadk/openclaw_gateway.py +29 -14
- ksadk/runners/adk_runner.py +345 -120
- ksadk/runners/base_runner.py +46 -29
- ksadk/runners/codex_runner.py +132 -0
- ksadk/runners/deepagents_runner.py +0 -1
- ksadk/runners/factory.py +17 -5
- ksadk/runners/langchain_runner.py +29 -742
- ksadk/runners/langgraph_runner.py +352 -90
- ksadk/runners/patch_langchain.py +16 -16
- ksadk/runners/remote_runner.py +134 -33
- ksadk/runners/usage_accumulator.py +1 -0
- ksadk/runners/utils/langfuse.py +3 -3
- ksadk/runners/utils/loader.py +7 -7
- ksadk/runtime/__init__.py +41 -0
- ksadk/runtime/adapter.py +345 -0
- ksadk/runtime/framework_adapters.py +124 -0
- ksadk/runtime/preprocessing.py +118 -0
- ksadk/runtime/runner_adapter.py +873 -0
- ksadk/runtime_context.py +18 -3
- ksadk/runtime_state.py +0 -1
- ksadk/sandbox/__init__.py +4 -1
- ksadk/sandbox/backends/__init__.py +4 -1
- ksadk/sandbox/backends/e2b.py +13 -5
- ksadk/sandbox/backends/local_process.py +11 -3
- ksadk/sandbox/base.py +10 -15
- ksadk/sandbox/factory.py +14 -4
- ksadk/sandbox/registry.py +57 -6
- ksadk/server/api_models.py +15 -5
- ksadk/server/app.py +455 -3885
- ksadk/server/composition.py +21 -0
- ksadk/server/factory.py +624 -0
- ksadk/server/routes/__init__.py +1 -0
- ksadk/server/routes/checkpoint_resolution.py +116 -0
- ksadk/server/routes/common.py +713 -0
- ksadk/server/routes/control.py +327 -0
- ksadk/server/routes/dependencies.py +98 -0
- ksadk/server/routes/misc.py +448 -0
- ksadk/server/routes/models.py +443 -0
- ksadk/server/routes/openai_compat.py +207 -0
- ksadk/server/routes/projection.py +795 -0
- ksadk/server/routes/routers.py +52 -0
- ksadk/server/routes/run.py +726 -0
- ksadk/server/routes/sessions.py +649 -0
- ksadk/server/routes/streaming.py +223 -0
- ksadk/server/routes/workspace.py +381 -0
- ksadk/server/static/assets/{ArtifactsPanel-D-SSn2ee.js → ArtifactsPanel-Cjnqt-8W.js} +1 -1
- ksadk/server/static/assets/CodeBlock-BqyqZfuB.js +9 -0
- ksadk/server/static/assets/MathMessageMarkdown-BpH7jiFM.js +8 -0
- ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +303 -0
- ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +1 -0
- ksadk/server/static/assets/{arc-BA13sHc9.js → arc-CFKwSk_B.js} +1 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-DzJzgVoL.js → architectureDiagram-3BPJPVTR-Dej8jX8c.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-GPEHLZMM-UTdVcZhn.js → blockDiagram-GPEHLZMM-1F64jqvy.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-AAUBKEIU-Dix0GD4m.js → c4Diagram-AAUBKEIU-9q7AUAKb.js} +1 -1
- ksadk/server/static/assets/channel-iUGv2N24.js +1 -0
- ksadk/server/static/assets/{chunk-2J33WTMH-C2JxuZ42.js → chunk-2J33WTMH-6qgwJm7Q.js} +1 -1
- ksadk/server/static/assets/{chunk-4BX2VUAB-Be57QPgD.js → chunk-4BX2VUAB-CsWIQRhc.js} +1 -1
- ksadk/server/static/assets/{chunk-55IACEB6-WjSuy4nv.js → chunk-55IACEB6-BK8paA20.js} +1 -1
- ksadk/server/static/assets/{chunk-727SXJPM-BOovP-b5.js → chunk-727SXJPM-B-JEhy7h.js} +1 -1
- ksadk/server/static/assets/{chunk-AQP2D5EJ-DOmZNmWj.js → chunk-AQP2D5EJ-DYBvMHAa.js} +1 -1
- ksadk/server/static/assets/{chunk-FMBD7UC4-DzwlodkU.js → chunk-FMBD7UC4-BGhvzDYt.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-DMqAikEU.js → chunk-ND2GUHAM-D98vPd-E.js} +1 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +1 -0
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-Zhy2GBnP.js → cose-bilkent-S5V4N54A-CX3yotHq.js} +1 -1
- ksadk/server/static/assets/{dagre-BM42HDAG-CbKrtIUz.js → dagre-BM42HDAG-C7TguAWo.js} +1 -1
- ksadk/server/static/assets/{diagram-2AECGRRQ-BRApgQRK.js → diagram-2AECGRRQ-Dd17_kws.js} +1 -1
- ksadk/server/static/assets/{diagram-5GNKFQAL-D0xbnDiK.js → diagram-5GNKFQAL-DVIClIil.js} +1 -1
- ksadk/server/static/assets/{diagram-KO2AKTUF-CVugVI9L.js → diagram-KO2AKTUF-Df_3gYQa.js} +1 -1
- ksadk/server/static/assets/{diagram-LMA3HP47-DozUGgee.js → diagram-LMA3HP47-BhLk6ZtA.js} +1 -1
- ksadk/server/static/assets/{diagram-OG6HWLK6-ZOYsKlru.js → diagram-OG6HWLK6-D4GNGvuu.js} +1 -1
- ksadk/server/static/assets/{dist-DmFaq_Iy.js → dist-6CVKuTAe.js} +1 -1
- ksadk/server/static/assets/{dist-8EEyGgDx.js → dist-BUHRxvDG.js} +1 -1
- ksadk/server/static/assets/{dist-B0NP_Z0z.js → dist-BZ9n9AjO.js} +1 -1
- ksadk/server/static/assets/{dist-DMezvBGJ.js → dist-BibcG1V9.js} +1 -1
- ksadk/server/static/assets/{dist-C3HIIaN5.js → dist-Bs-jQcRX.js} +1 -1
- ksadk/server/static/assets/{dist-BrCcQ47T.js → dist-C2xjE7cO.js} +1 -1
- ksadk/server/static/assets/{dist-Dp0k7bWI.js → dist-C7-3jInC.js} +1 -1
- ksadk/server/static/assets/{dist-D-xOD048.js → dist-C99THtIA.js} +1 -1
- ksadk/server/static/assets/{dist-CkEKJFtk.js → dist-CGcp2ex8.js} +1 -1
- ksadk/server/static/assets/{dist-DyOkZmze.js → dist-CVQRZjPu.js} +1 -1
- ksadk/server/static/assets/{dist-BssVmjIo.js → dist-Cf23NY4L.js} +1 -1
- ksadk/server/static/assets/{dist-BIJVDMuB.js → dist-CgF3fj15.js} +1 -1
- ksadk/server/static/assets/{dist-2hInLS_J.js → dist-Cwt7koer.js} +1 -1
- ksadk/server/static/assets/{dist-DyWsb78Q.js → dist-D82mtD2s.js} +1 -1
- ksadk/server/static/assets/{dist-D-JMdWPQ.js → dist-DF06ORQo.js} +1 -1
- ksadk/server/static/assets/{dist-BmlMPsCc.js → dist-DHn6nBzr.js} +1 -1
- ksadk/server/static/assets/{dist-gX6GOLKq.js → dist-Djgl2wVZ.js} +1 -1
- ksadk/server/static/assets/{dist-DpKtt4Bo.js → dist-DlzCRy0S.js} +1 -1
- ksadk/server/static/assets/{dist-8_SfK1IP.js → dist-DqNnNFrw.js} +1 -1
- ksadk/server/static/assets/{dist-D57wnGWd.js → dist-DyvYLMW9.js} +1 -1
- ksadk/server/static/assets/{dist-CPBtqRTW.js → dist-eoW6tZXA.js} +1 -1
- ksadk/server/static/assets/{dist-DL_NKc_z.js → dist-ivOya1LD.js} +1 -1
- ksadk/server/static/assets/{erDiagram-TEJ5UH35-Bk-9bgE5.js → erDiagram-TEJ5UH35-CnfRcY2M.js} +1 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +1 -0
- ksadk/server/static/assets/{flowDiagram-I6XJVG4X-Dn9kZVuZ.js → flowDiagram-I6XJVG4X-DGaJjGNJ.js} +1 -1
- ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BGxXlJqm.js → ganttDiagram-6RSMTGT7-DpCoB2g9.js} +1 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-C7Q0X-wi.js → gitGraphDiagram-PVQCEYII-9IKVFBVT.js} +1 -1
- ksadk/server/static/assets/index-QSwCHuB8.js +177 -0
- ksadk/server/static/assets/index-jOPmTOZH.css +2 -0
- ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +1 -0
- ksadk/server/static/assets/{infoDiagram-5YYISTIA-BO_CSqq5.js → infoDiagram-5YYISTIA-CYIIsb8y.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-eYLPLd46.js → ishikawaDiagram-YF4QCWOH-DLOHGvWw.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-De9geSb0.js → journeyDiagram-JHISSGLW-BIzKeejT.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-Cs80kQto.js → kanban-definition-UN3LZRKU-BWHoFSw2.js} +1 -1
- ksadk/server/static/assets/{katex-DSrCFD8n.js → katex-DATssjp1.js} +1 -1
- ksadk/server/static/assets/{linear-CN9sbKTF.js → linear-CvMBw9cA.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-DlgSBU8l.js → mermaid-parser.core-mGAcEwcq.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-9afz7Oug.js → mindmap-definition-RKZ34NQL-CSAQxEAe.js} +1 -1
- ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +1 -0
- ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +1 -0
- ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPv_VstN.js → pieDiagram-4H26LBE5-By-ra07M.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-o77wZ1XK.js → quadrantDiagram-W4KKPZXB-CxIR4JXI.js} +1 -1
- ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +1 -0
- ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-BYVw81VC.js → requirementDiagram-4Y6WPE33-DpW90iu3.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-B7nZFMKT.js → sankeyDiagram-5OEKKPKP-DpGa6EAV.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-BGRRrFw5.js → sequenceDiagram-3UESZ5HK-NTKNGGe5.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-AJRCARHV-BUfHCoPs.js → stateDiagram-AJRCARHV-DGpd9yFG.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +1 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-FbCTGrf9.js → timeline-definition-PNZ67QCA-jqoYs3jQ.js} +1 -1
- ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +1 -0
- ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +1 -0
- ksadk/server/static/assets/{vennDiagram-CIIHVFJN-DWgwtPsJ.js → vennDiagram-CIIHVFJN-l3Z7-wbP.js} +1 -1
- ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-2x8G-tTM.js → wardleyDiagram-YWT4CUSO-BR54GPmr.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-Drma3AYl.js → xychartDiagram-2RQKCTM6-SkiH8GsK.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +111 -58
- ksadk/sessions/__init__.py +69 -19
- ksadk/sessions/base.py +31 -11
- ksadk/sessions/continuity.py +2 -3
- ksadk/sessions/in_memory.py +46 -2
- ksadk/sessions/local_service.py +148 -17
- ksadk/sessions/postgres_service.py +143 -25
- ksadk/sessions/resilient.py +36 -8
- ksadk/skills/models.py +17 -5
- ksadk/skills/package_store.py +5 -2
- ksadk/skills/runtime/agent.py +20 -5
- ksadk/skills/runtime/artifacts.py +1 -5
- ksadk/skills/runtime/backends/e2b.py +10 -4
- ksadk/skills/runtime/backends/local.py +15 -3
- ksadk/skills/runtime/base.py +1 -2
- ksadk/skills/runtime/executor.py +10 -3
- ksadk/skills/runtime/factory.py +4 -2
- ksadk/skills/runtime/loader.py +1 -2
- ksadk/skills/runtime/registry.py +15 -10
- ksadk/skills/runtime/request.py +3 -1
- ksadk/skills/service_client.py +38 -17
- ksadk/skills/tool_defs.py +15 -10
- ksadk/terminal_exec_policy.py +3 -4
- ksadk/tools/gateway.py +92 -15
- ksadk/tools/result_budget.py +12 -4
- ksadk/toolsets/__init__.py +134 -36
- ksadk/toolsets/platform.py +21 -5
- ksadk/toolsets/sandbox.py +82 -16
- ksadk/toolsets/skills.py +200 -39
- ksadk/toolsets/web.py +123 -26
- ksadk/toolsets/workspace.py +212 -101
- ksadk/tracing/exporters/inmemory_exporter.py +62 -51
- ksadk/tracing/exporters/langfuse_exporter.py +91 -76
- ksadk/tracing/setup.py +69 -53
- ksadk/tracing/span_utils.py +5 -2
- ksadk/tui/loop.py +78 -30
- ksadk/tui/stream_render.py +1 -0
- ksadk/ui_config.py +5 -3
- ksadk/version.py +1 -1
- ksadk_runtime_common/schemas/runtime_event_v1.json +95 -0
- agentengine_sdk_python-0.7.0.dist-info/RECORD +0 -482
- ksadk/server/static/assets/CodeBlock-P16VOLYi.js +0 -9
- ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +0 -8
- ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +0 -1
- ksadk/server/static/assets/channel-CTuydARX.js +0 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +0 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +0 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +0 -1
- ksadk/server/static/assets/index-C00Lwg3L.js +0 -165
- ksadk/server/static/assets/index-DAURbCsP.css +0 -1
- ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +0 -1
- ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +0 -1
- ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +0 -1
- ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +0 -1
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/top_level.txt +0 -0
ksadk/runners/patch_langchain.py
CHANGED
|
@@ -5,12 +5,6 @@ Monkey patch for langchain-openai to support reasoning_content field (e.g. for D
|
|
|
5
5
|
import logging
|
|
6
6
|
from typing import Any, Mapping, cast
|
|
7
7
|
|
|
8
|
-
from ksadk.conversations.model_options import (
|
|
9
|
-
model_options_for_chat_completions,
|
|
10
|
-
model_options_for_responses,
|
|
11
|
-
)
|
|
12
|
-
from ksadk.runtime_context import get_current_invocation_context
|
|
13
|
-
|
|
14
8
|
from langchain_core.messages import (
|
|
15
9
|
AIMessageChunk,
|
|
16
10
|
BaseMessageChunk,
|
|
@@ -22,6 +16,12 @@ from langchain_core.messages import (
|
|
|
22
16
|
)
|
|
23
17
|
from langchain_core.messages.tool import tool_call_chunk
|
|
24
18
|
|
|
19
|
+
from ksadk.conversations.model_options import (
|
|
20
|
+
model_options_for_chat_completions,
|
|
21
|
+
model_options_for_responses,
|
|
22
|
+
)
|
|
23
|
+
from ksadk.runtime_context import get_current_invocation_context
|
|
24
|
+
|
|
25
25
|
logger = logging.getLogger(__name__)
|
|
26
26
|
|
|
27
27
|
# Original function reference (to avoid recursion if patched multiple times)
|
|
@@ -95,22 +95,22 @@ _original_chat_get_request_payload = None
|
|
|
95
95
|
def _patched_convert_message_to_dict(message, *args, **kwargs):
|
|
96
96
|
"""Patched version to include reasoning_content in outgoing requests."""
|
|
97
97
|
from langchain_core.messages import AIMessage
|
|
98
|
-
|
|
98
|
+
|
|
99
99
|
# Call original function first
|
|
100
100
|
result = _original_convert_message_to_dict(message, *args, **kwargs)
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
# If this is an AIMessage with tool_calls and reasoning_content in additional_kwargs
|
|
103
103
|
if isinstance(message, AIMessage):
|
|
104
|
-
additional_kwargs = getattr(message,
|
|
105
|
-
reasoning = additional_kwargs.get(
|
|
106
|
-
|
|
104
|
+
additional_kwargs = getattr(message, "additional_kwargs", {}) or {}
|
|
105
|
+
reasoning = additional_kwargs.get("reasoning_content")
|
|
106
|
+
|
|
107
107
|
# Only add if we have tool_calls (required by some thinking models)
|
|
108
108
|
if message.tool_calls and reasoning is not None:
|
|
109
|
-
result[
|
|
109
|
+
result["reasoning_content"] = reasoning
|
|
110
110
|
elif message.tool_calls and reasoning is None:
|
|
111
111
|
# Force add empty reasoning_content for thinking models
|
|
112
|
-
result[
|
|
113
|
-
|
|
112
|
+
result["reasoning_content"] = ""
|
|
113
|
+
|
|
114
114
|
return result
|
|
115
115
|
|
|
116
116
|
|
|
@@ -168,7 +168,7 @@ def apply_patch():
|
|
|
168
168
|
# Patch 1: Fix receiving responses (capture reasoning_content)
|
|
169
169
|
_original_convert_delta = base_module._convert_delta_to_message_chunk
|
|
170
170
|
base_module._convert_delta_to_message_chunk = _patched_convert_delta_to_message_chunk
|
|
171
|
-
|
|
171
|
+
|
|
172
172
|
# Patch 2: Fix sending requests (include reasoning_content for tool_call messages)
|
|
173
173
|
_original_convert_message_to_dict = base_module._convert_message_to_dict
|
|
174
174
|
base_module._convert_message_to_dict = _patched_convert_message_to_dict
|
|
@@ -177,7 +177,7 @@ def apply_patch():
|
|
|
177
177
|
base_module.BaseChatOpenAI._get_request_payload = _patched_base_get_request_payload
|
|
178
178
|
_original_chat_get_request_payload = base_module.ChatOpenAI._get_request_payload
|
|
179
179
|
base_module.ChatOpenAI._get_request_payload = _patched_chat_get_request_payload
|
|
180
|
-
|
|
180
|
+
|
|
181
181
|
base_module._ksadk_patched = True
|
|
182
182
|
|
|
183
183
|
# logger.info("Applied langchain-openai patch for reasoning_content support")
|
ksadk/runners/remote_runner.py
CHANGED
|
@@ -47,7 +47,9 @@ class RemoteRunner(BaseRunner):
|
|
|
47
47
|
self._responses_text_streamed = False
|
|
48
48
|
self._responses_reasoning_streamed = False
|
|
49
49
|
self._observed_model: str | None = None # 流式回包里观察到的真实模型名
|
|
50
|
-
self.available_models: list[dict[str, Any]] | None =
|
|
50
|
+
self.available_models: list[dict[str, Any]] | None = (
|
|
51
|
+
None # ListAgentModels 拿到的可选模型列表
|
|
52
|
+
)
|
|
51
53
|
|
|
52
54
|
@staticmethod
|
|
53
55
|
def _normalize_api_format(api_format: Optional[str]) -> str:
|
|
@@ -112,19 +114,45 @@ class RemoteRunner(BaseRunner):
|
|
|
112
114
|
return str(user_input or "")
|
|
113
115
|
|
|
114
116
|
@staticmethod
|
|
115
|
-
def _build_responses_conversation_history(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
):
|
|
117
|
+
def _build_responses_conversation_history(
|
|
118
|
+
history: Any, current_input: Any
|
|
119
|
+
) -> list[dict[str, Any]]:
|
|
120
|
+
if not isinstance(history, Sequence) or isinstance(history, (str, bytes, bytearray)):
|
|
119
121
|
return []
|
|
120
122
|
|
|
121
123
|
messages: list[dict[str, Any]] = []
|
|
124
|
+
current_output_call_ids: set[str] = set()
|
|
125
|
+
if isinstance(current_input, Mapping):
|
|
126
|
+
current_items = [current_input]
|
|
127
|
+
elif isinstance(current_input, Sequence) and not isinstance(
|
|
128
|
+
current_input, (str, bytes, bytearray)
|
|
129
|
+
):
|
|
130
|
+
current_items = [item for item in current_input if isinstance(item, Mapping)]
|
|
131
|
+
else:
|
|
132
|
+
current_items = []
|
|
133
|
+
for item in current_items:
|
|
134
|
+
if str(item.get("type") or "").strip().lower() != "function_call_output":
|
|
135
|
+
continue
|
|
136
|
+
call_id = str(item.get("call_id") or "").strip()
|
|
137
|
+
if call_id:
|
|
138
|
+
current_output_call_ids.add(call_id)
|
|
122
139
|
current_text = RemoteRunner._responses_message_text(
|
|
123
140
|
{"role": "user", "content": current_input}
|
|
124
141
|
).strip()
|
|
125
142
|
for item in history:
|
|
126
143
|
if not isinstance(item, Mapping):
|
|
127
144
|
continue
|
|
145
|
+
item_type = str(item.get("type") or "").strip().lower()
|
|
146
|
+
if item_type in {"function_call", "function_call_output"}:
|
|
147
|
+
# Responses tool items are already protocol-shaped. Do not
|
|
148
|
+
# reinterpret them as chat messages or they lose call_id.
|
|
149
|
+
if (
|
|
150
|
+
item_type == "function_call_output"
|
|
151
|
+
and str(item.get("call_id") or "").strip() in current_output_call_ids
|
|
152
|
+
):
|
|
153
|
+
continue
|
|
154
|
+
messages.append(dict(item))
|
|
155
|
+
continue
|
|
128
156
|
role = str(item.get("role") or "").strip().lower()
|
|
129
157
|
if role == "model":
|
|
130
158
|
role = "assistant"
|
|
@@ -144,7 +172,9 @@ class RemoteRunner(BaseRunner):
|
|
|
144
172
|
return messages
|
|
145
173
|
|
|
146
174
|
@staticmethod
|
|
147
|
-
def _responses_conversation_name(
|
|
175
|
+
def _responses_conversation_name(
|
|
176
|
+
input_data: Mapping[str, Any], session_id: Optional[str]
|
|
177
|
+
) -> str:
|
|
148
178
|
if not session_id:
|
|
149
179
|
return ""
|
|
150
180
|
platform_context = input_data.get("platform_context")
|
|
@@ -181,10 +211,27 @@ class RemoteRunner(BaseRunner):
|
|
|
181
211
|
"input": self._build_responses_input(user_input),
|
|
182
212
|
"stream": stream,
|
|
183
213
|
}
|
|
184
|
-
history_enabled =
|
|
214
|
+
history_enabled = (
|
|
215
|
+
bool(input_data.get("responses_conversation"))
|
|
216
|
+
or bool(input_data.get("responses_history"))
|
|
217
|
+
) and not previous_response_id
|
|
185
218
|
if history_enabled:
|
|
219
|
+
structured_history = input_data.get("responses_history")
|
|
220
|
+
history_input: Sequence[Any] | None
|
|
221
|
+
if isinstance(structured_history, Sequence) and not isinstance(
|
|
222
|
+
structured_history, (str, bytes, bytearray)
|
|
223
|
+
):
|
|
224
|
+
history_input = structured_history
|
|
225
|
+
else:
|
|
226
|
+
fallback_history = input_data.get("history")
|
|
227
|
+
history_input = (
|
|
228
|
+
fallback_history
|
|
229
|
+
if isinstance(fallback_history, Sequence)
|
|
230
|
+
and not isinstance(fallback_history, (str, bytes, bytearray))
|
|
231
|
+
else None
|
|
232
|
+
)
|
|
186
233
|
history = self._build_responses_conversation_history(
|
|
187
|
-
|
|
234
|
+
history_input,
|
|
188
235
|
user_input,
|
|
189
236
|
)
|
|
190
237
|
if history:
|
|
@@ -193,9 +240,7 @@ class RemoteRunner(BaseRunner):
|
|
|
193
240
|
if conversation and not previous_response_id:
|
|
194
241
|
payload["conversation"] = conversation
|
|
195
242
|
elif (
|
|
196
|
-
input_data.get("responses_conversation")
|
|
197
|
-
and session_id
|
|
198
|
-
and not previous_response_id
|
|
243
|
+
input_data.get("responses_conversation") and session_id and not previous_response_id
|
|
199
244
|
):
|
|
200
245
|
conversation = self._responses_conversation_name(input_data, str(session_id))
|
|
201
246
|
if conversation:
|
|
@@ -209,9 +254,15 @@ class RemoteRunner(BaseRunner):
|
|
|
209
254
|
return payload
|
|
210
255
|
|
|
211
256
|
@staticmethod
|
|
212
|
-
def _builtin_response_tool_schemas(
|
|
257
|
+
def _builtin_response_tool_schemas(
|
|
258
|
+
input_data: Mapping[str, Any] | None = None,
|
|
259
|
+
) -> list[dict[str, Any]]:
|
|
213
260
|
try:
|
|
214
|
-
from ksadk.toolsets import
|
|
261
|
+
from ksadk.toolsets import (
|
|
262
|
+
builtin_tool_descriptors_for_runtime,
|
|
263
|
+
builtin_tools_mode,
|
|
264
|
+
describe_agentengine_tools,
|
|
265
|
+
)
|
|
215
266
|
|
|
216
267
|
mode = builtin_tools_mode(default="off")
|
|
217
268
|
descriptors = builtin_tool_descriptors_for_runtime(mode=mode)
|
|
@@ -220,7 +271,9 @@ class RemoteRunner(BaseRunner):
|
|
|
220
271
|
deferred_names = RemoteRunner._deferred_tool_names(input_data)
|
|
221
272
|
if deferred_names:
|
|
222
273
|
try:
|
|
223
|
-
direct_descriptors = describe_agentengine_tools(
|
|
274
|
+
direct_descriptors = describe_agentengine_tools(
|
|
275
|
+
include=deferred_names, profile="coding"
|
|
276
|
+
)
|
|
224
277
|
except Exception:
|
|
225
278
|
direct_descriptors = []
|
|
226
279
|
direct_descriptors = [
|
|
@@ -347,7 +400,9 @@ class RemoteRunner(BaseRunner):
|
|
|
347
400
|
usage = self._response_usage_payload(data)
|
|
348
401
|
|
|
349
402
|
if self.api_format == "responses":
|
|
350
|
-
result = {
|
|
403
|
+
result: dict[str, Any] = {
|
|
404
|
+
"output": self._extract_responses_output_text(data) or str(data)
|
|
405
|
+
}
|
|
351
406
|
if usage:
|
|
352
407
|
result["usage"] = usage
|
|
353
408
|
return result
|
|
@@ -440,7 +495,9 @@ class RemoteRunner(BaseRunner):
|
|
|
440
495
|
# 兜底:api_format 标成 chat 但 runtime 实发 responses 格式
|
|
441
496
|
# 事件(event_name 或 data.type 以 response. 开头)→ 按 responses
|
|
442
497
|
# 解析,否则 response.reasoning.delta 会被 chat 路径当顶层 text 显示。
|
|
443
|
-
_ev = event_name or (
|
|
498
|
+
_ev = event_name or (
|
|
499
|
+
str(data.get("type")) if isinstance(data, Mapping) else ""
|
|
500
|
+
)
|
|
444
501
|
if _ev.startswith("response."):
|
|
445
502
|
async for item in self._iter_responses_stream_events(
|
|
446
503
|
data, event_name=event_name
|
|
@@ -592,7 +649,13 @@ class RemoteRunner(BaseRunner):
|
|
|
592
649
|
else item.get("args", item.get("input"))
|
|
593
650
|
)
|
|
594
651
|
self._remember_responses_tool(key, item, name, args)
|
|
595
|
-
yield {
|
|
652
|
+
yield {
|
|
653
|
+
"type": "tool_call",
|
|
654
|
+
"tool_name": name,
|
|
655
|
+
"tool_args": args,
|
|
656
|
+
"status": status,
|
|
657
|
+
"call_id": key,
|
|
658
|
+
}
|
|
596
659
|
return
|
|
597
660
|
|
|
598
661
|
if item_type == "function_call_output":
|
|
@@ -605,7 +668,12 @@ class RemoteRunner(BaseRunner):
|
|
|
605
668
|
output = self._stringify_responses_payload(
|
|
606
669
|
item.get("output") if "output" in item else item.get("result", item.get("content"))
|
|
607
670
|
)
|
|
608
|
-
yield {
|
|
671
|
+
yield {
|
|
672
|
+
"type": "tool_result",
|
|
673
|
+
"tool_name": name,
|
|
674
|
+
"tool_output": output,
|
|
675
|
+
"call_id": call_id or key,
|
|
676
|
+
}
|
|
609
677
|
return
|
|
610
678
|
|
|
611
679
|
if item_type == "mcp_approval_request":
|
|
@@ -687,9 +755,17 @@ class RemoteRunner(BaseRunner):
|
|
|
687
755
|
# ksadk/runtime 特有 tool 事件(对标 hosted UI responses-stream.js:176-186)
|
|
688
756
|
if event_type in {"response.tool_call", "response.ksadk.stage_tool_call"}:
|
|
689
757
|
name = str(data.get("name") or data.get("tool_name") or "tool")
|
|
690
|
-
args = self._stringify_responses_payload(
|
|
758
|
+
args = self._stringify_responses_payload(
|
|
759
|
+
data.get("args") if "args" in data else data.get("arguments")
|
|
760
|
+
)
|
|
691
761
|
cid = str(data.get("call_id") or data.get("item_id") or data.get("run_id") or "")
|
|
692
|
-
yield {
|
|
762
|
+
yield {
|
|
763
|
+
"type": "tool_call",
|
|
764
|
+
"tool_name": name,
|
|
765
|
+
"tool_args": args,
|
|
766
|
+
"status": "running",
|
|
767
|
+
"call_id": cid,
|
|
768
|
+
}
|
|
693
769
|
return
|
|
694
770
|
if event_type in {
|
|
695
771
|
"response.tool_result",
|
|
@@ -697,7 +773,9 @@ class RemoteRunner(BaseRunner):
|
|
|
697
773
|
"response.ksadk.stage_tool_result",
|
|
698
774
|
}:
|
|
699
775
|
name = str(data.get("name") or data.get("tool_name") or "tool")
|
|
700
|
-
output = self._stringify_responses_payload(
|
|
776
|
+
output = self._stringify_responses_payload(
|
|
777
|
+
data.get("output") if "output" in data else data.get("result")
|
|
778
|
+
)
|
|
701
779
|
cid = str(data.get("call_id") or data.get("item_id") or data.get("run_id") or "")
|
|
702
780
|
yield {
|
|
703
781
|
"type": "tool_result",
|
|
@@ -712,7 +790,13 @@ class RemoteRunner(BaseRunner):
|
|
|
712
790
|
args = f"{self._responses_tool_args.get(key, '')}{str(data.get('delta') or '')}"
|
|
713
791
|
if key:
|
|
714
792
|
self._responses_tool_args[key] = args
|
|
715
|
-
yield {
|
|
793
|
+
yield {
|
|
794
|
+
"type": "tool_call",
|
|
795
|
+
"tool_name": name,
|
|
796
|
+
"tool_args": args,
|
|
797
|
+
"status": "running",
|
|
798
|
+
"call_id": key,
|
|
799
|
+
}
|
|
716
800
|
return
|
|
717
801
|
if event_type == "response.function_call_arguments.done":
|
|
718
802
|
key = str(data.get("item_id") or data.get("call_id") or "")
|
|
@@ -722,16 +806,27 @@ class RemoteRunner(BaseRunner):
|
|
|
722
806
|
)
|
|
723
807
|
if key:
|
|
724
808
|
self._responses_tool_args[key] = args
|
|
725
|
-
yield {
|
|
809
|
+
yield {
|
|
810
|
+
"type": "tool_call",
|
|
811
|
+
"tool_name": name,
|
|
812
|
+
"tool_args": args,
|
|
813
|
+
"status": "running",
|
|
814
|
+
"call_id": key,
|
|
815
|
+
}
|
|
726
816
|
return
|
|
727
817
|
if event_type == "response.completed":
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
818
|
+
nested_response = data.get("response")
|
|
819
|
+
response_data: dict[str, Any] = (
|
|
820
|
+
dict(nested_response) if isinstance(nested_response, dict) else data
|
|
821
|
+
)
|
|
822
|
+
completed_output = (
|
|
823
|
+
response_data.get("output") if isinstance(response_data, dict) else None
|
|
824
|
+
)
|
|
825
|
+
if isinstance(completed_output, list):
|
|
731
826
|
replayed_item_keys = set(self._responses_streamed_item_keys)
|
|
732
827
|
replay_completed_text = not self._responses_text_streamed
|
|
733
828
|
replay_completed_reasoning = not self._responses_reasoning_streamed
|
|
734
|
-
for item in
|
|
829
|
+
for item in completed_output:
|
|
735
830
|
if isinstance(item, dict):
|
|
736
831
|
key = self._responses_item_key(item, {"item": item})
|
|
737
832
|
call_id = str(item.get("call_id") or "")
|
|
@@ -748,13 +843,13 @@ class RemoteRunner(BaseRunner):
|
|
|
748
843
|
yield projected
|
|
749
844
|
chunk = {
|
|
750
845
|
"type": "responses_output",
|
|
751
|
-
"output":
|
|
752
|
-
"response_id":
|
|
846
|
+
"output": completed_output,
|
|
847
|
+
"response_id": response_data.get("id"),
|
|
753
848
|
}
|
|
754
|
-
usage =
|
|
849
|
+
usage = response_data.get("usage")
|
|
755
850
|
if isinstance(usage, Mapping):
|
|
756
851
|
chunk["usage"] = dict(usage)
|
|
757
|
-
metadata =
|
|
852
|
+
metadata = response_data.get("metadata")
|
|
758
853
|
if isinstance(metadata, Mapping):
|
|
759
854
|
chunk["metadata"] = dict(metadata)
|
|
760
855
|
yield chunk
|
|
@@ -762,9 +857,15 @@ class RemoteRunner(BaseRunner):
|
|
|
762
857
|
# response.content_part.delta:glm 等模型把 reasoning 走这个事件,
|
|
763
858
|
# partType 含 "reasoning" → thinking(不显示),否则 text(对标 hosted UI)。
|
|
764
859
|
if event_type == "response.content_part.delta":
|
|
765
|
-
|
|
860
|
+
part_value = data.get("part")
|
|
861
|
+
part: dict[str, Any] = dict(part_value) if isinstance(part_value, dict) else {}
|
|
766
862
|
delta = data.get("delta")
|
|
767
|
-
part_type = str(
|
|
863
|
+
part_type = str(
|
|
864
|
+
part.get("type")
|
|
865
|
+
or (delta.get("type") if isinstance(delta, dict) else "")
|
|
866
|
+
or data.get("content_type")
|
|
867
|
+
or ""
|
|
868
|
+
)
|
|
768
869
|
text = ""
|
|
769
870
|
if isinstance(delta, dict):
|
|
770
871
|
text = str(delta.get("text") or delta.get("content") or "")
|
ksadk/runners/utils/langfuse.py
CHANGED
|
@@ -157,7 +157,7 @@ def get_langfuse_callbacks() -> list[Any]:
|
|
|
157
157
|
return callbacks
|
|
158
158
|
|
|
159
159
|
|
|
160
|
-
def get_langfuse_metadata(session_id: str = None) -> dict:
|
|
160
|
+
def get_langfuse_metadata(session_id: str | None = None) -> dict[str, Any]:
|
|
161
161
|
"""获取 Langfuse 的 metadata 字典
|
|
162
162
|
|
|
163
163
|
通过 metadata 字段传递 trace 属性:
|
|
@@ -171,7 +171,7 @@ def get_langfuse_metadata(session_id: str = None) -> dict:
|
|
|
171
171
|
Returns:
|
|
172
172
|
包含 Langfuse 属性的 metadata 字典
|
|
173
173
|
"""
|
|
174
|
-
metadata = {}
|
|
174
|
+
metadata: dict[str, Any] = {}
|
|
175
175
|
|
|
176
176
|
if session_id:
|
|
177
177
|
metadata["langfuse_session_id"] = session_id
|
|
@@ -201,7 +201,7 @@ def get_langfuse_metadata(session_id: str = None) -> dict:
|
|
|
201
201
|
return metadata
|
|
202
202
|
|
|
203
203
|
|
|
204
|
-
def prepare_trace_metadata(session_id: str = None) -> tuple:
|
|
204
|
+
def prepare_trace_metadata(session_id: str | None = None) -> tuple[Any, list[Any], Any, Any]:
|
|
205
205
|
"""准备 Trace 元数据
|
|
206
206
|
|
|
207
207
|
Returns:
|
ksadk/runners/utils/loader.py
CHANGED
|
@@ -18,37 +18,37 @@ def load_agent_module(
|
|
|
18
18
|
force_reload: bool = False,
|
|
19
19
|
) -> Any:
|
|
20
20
|
"""加载 Agent 模块
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
Args:
|
|
23
23
|
project_dir: 项目目录
|
|
24
24
|
entry_point: 入口文件 (e.g., "agent.py")
|
|
25
25
|
agent_variable: Agent 变量名 (e.g., "root_agent", "graph")
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
Returns:
|
|
28
28
|
加载的 Agent 对象
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
Raises:
|
|
31
31
|
ImportError: 模块导入失败
|
|
32
32
|
AttributeError: 未找到 Agent 变量
|
|
33
33
|
"""
|
|
34
34
|
project_path = Path(project_dir).resolve()
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
# 添加项目目录到 Python 路径
|
|
37
37
|
if str(project_path) not in sys.path:
|
|
38
38
|
sys.path.insert(0, str(project_path))
|
|
39
39
|
src_path = project_path / "src"
|
|
40
40
|
if src_path.is_dir() and str(src_path) not in sys.path:
|
|
41
41
|
sys.path.insert(0, str(src_path))
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
# 确定模块名
|
|
44
44
|
if entry_point.endswith(".py"):
|
|
45
45
|
module_name = entry_point[:-3]
|
|
46
46
|
else:
|
|
47
47
|
module_name = entry_point
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
# 路径转换为模块路径
|
|
50
50
|
module_name = module_name.replace("/", ".").replace("\\", ".")
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
try:
|
|
53
53
|
if force_reload and module_name in sys.modules:
|
|
54
54
|
module = importlib.reload(sys.modules[module_name])
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""RuntimeAdapter 平台接口包 (goal-03 冻结签名 + goal-07 框架实现)。"""
|
|
2
|
+
|
|
3
|
+
from ksadk.runtime.adapter import (
|
|
4
|
+
CONVERSATION_PREPROCESSING_METADATA_KEY,
|
|
5
|
+
BaseRuntime,
|
|
6
|
+
CancelResult,
|
|
7
|
+
CheckpointCapability,
|
|
8
|
+
CheckpointDescriptor,
|
|
9
|
+
ConversationPreprocessingRequest,
|
|
10
|
+
ResumePayload,
|
|
11
|
+
ResumeTarget,
|
|
12
|
+
RunHandle,
|
|
13
|
+
RuntimeAdapter,
|
|
14
|
+
RuntimeRegistry,
|
|
15
|
+
StartRequest,
|
|
16
|
+
)
|
|
17
|
+
from ksadk.runtime.framework_adapters import (
|
|
18
|
+
ADKRuntimeAdapter,
|
|
19
|
+
LangGraphRuntimeAdapter,
|
|
20
|
+
build_default_registry,
|
|
21
|
+
)
|
|
22
|
+
from ksadk.runtime.runner_adapter import RunnerRuntimeAdapter
|
|
23
|
+
|
|
24
|
+
__all__ = [
|
|
25
|
+
"ADKRuntimeAdapter",
|
|
26
|
+
"BaseRuntime",
|
|
27
|
+
"CancelResult",
|
|
28
|
+
"CheckpointCapability",
|
|
29
|
+
"CheckpointDescriptor",
|
|
30
|
+
"ConversationPreprocessingRequest",
|
|
31
|
+
"CONVERSATION_PREPROCESSING_METADATA_KEY",
|
|
32
|
+
"LangGraphRuntimeAdapter",
|
|
33
|
+
"ResumePayload",
|
|
34
|
+
"ResumeTarget",
|
|
35
|
+
"RunHandle",
|
|
36
|
+
"RunnerRuntimeAdapter",
|
|
37
|
+
"RuntimeAdapter",
|
|
38
|
+
"RuntimeRegistry",
|
|
39
|
+
"StartRequest",
|
|
40
|
+
"build_default_registry",
|
|
41
|
+
]
|