agentengine-sdk-python 0.8.1__py3-none-any.whl → 0.8.2__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.8.1.dist-info → agentengine_sdk_python-0.8.2.dist-info}/METADATA +22 -2
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.2.dist-info}/RECORD +356 -222
- ksadk/a2a/_space_client_events.py +381 -0
- ksadk/a2a/event_adapter.py +156 -64
- ksadk/a2a/executor.py +179 -63
- ksadk/a2a/space_client.py +6 -333
- ksadk/a2ui/core.py +222 -53
- ksadk/agui/_agent_helpers.py +243 -0
- ksadk/agui/a2ui_projection.py +12 -5
- ksadk/agui/agent.py +443 -259
- ksadk/api/client.py +525 -27
- ksadk/builders/code_builder.py +284 -8
- ksadk/builders/container_builder.py +8 -1
- ksadk/builders/managed_runtime_builder.py +39 -35
- ksadk/cli/__init__.py +17 -0
- ksadk/cli/cmd_dashboard.py +15 -1
- ksadk/cli/cmd_deploy.py +10 -2
- ksadk/cli/cmd_eval.py +66 -9
- ksadk/cli/cmd_evalset.py +284 -0
- ksadk/cli/cmd_files.py +5 -1
- ksadk/cli/cmd_hermes.py +1 -126
- ksadk/cli/cmd_invoke.py +28 -38
- ksadk/cli/cmd_managed_runtime.py +95 -0
- ksadk/cli/cmd_observe.py +85 -0
- ksadk/cli/cmd_openclaw.py +1 -435
- ksadk/cli/cmd_replay.py +28 -4
- ksadk/cli/cmd_studio.py +99 -8
- ksadk/cli/cmd_web.py +10 -2
- ksadk/cli/hermes_env.py +151 -0
- ksadk/cli/invoke_payload.py +49 -0
- ksadk/cli/openclaw_env.py +458 -0
- ksadk/codex/client.py +180 -30
- ksadk/codex/runtime.py +428 -326
- ksadk/configs/env_registry.py +66 -12
- ksadk/configs/env_registry_pcm.py +181 -0
- ksadk/configs/env_var_spec.py +18 -0
- ksadk/configs/global_config.py +5 -0
- ksadk/context_engine/__init__.py +98 -0
- ksadk/context_engine/assembler.py +176 -0
- ksadk/context_engine/baseline.py +419 -0
- ksadk/context_engine/cache_observability.py +228 -0
- ksadk/context_engine/capabilities.py +443 -0
- ksadk/context_engine/contributors.py +344 -0
- ksadk/context_engine/hosted_pipeline.py +417 -0
- ksadk/context_engine/models.py +117 -0
- ksadk/context_engine/planner.py +698 -0
- ksadk/context_engine/policies.py +319 -0
- ksadk/context_engine/projection.py +31 -0
- ksadk/context_engine/shadow_plan.py +266 -0
- ksadk/context_engine/tokenizer.py +164 -0
- ksadk/conversations/context.py +126 -6
- ksadk/conversations/message_projection.py +292 -28
- ksadk/conversations/model_context.py +49 -3
- ksadk/conversations/runtime_compaction.py +207 -5
- ksadk/conversations/runtime_input.py +184 -2
- ksadk/conversations/runtime_invocation.py +81 -3
- ksadk/conversations/runtime_observability.py +141 -0
- ksadk/conversations/runtime_payloads.py +42 -0
- ksadk/conversations/runtime_preparation.py +272 -2
- ksadk/conversations/runtime_resume.py +20 -1
- ksadk/conversations/runtime_stream_events.py +94 -9
- ksadk/conversations/semantic_summary.py +311 -1
- ksadk/conversations/session_lock.py +51 -0
- ksadk/deployment/env_forward.py +72 -0
- ksadk/deployment/managed_runtime.py +5 -0
- ksadk/deployment/providers/serverless.py +143 -69
- ksadk/evaluation/__init__.py +32 -0
- ksadk/evaluation/a2a_adapter.py +9 -1
- ksadk/evaluation/adapters.py +18 -5
- ksadk/evaluation/agent_eval_client.py +395 -0
- ksadk/evaluation/cloud_binding.py +80 -0
- ksadk/evaluation/cloud_converter.py +194 -0
- ksadk/evaluation/cloud_service.py +199 -0
- ksadk/evaluation/contracts.py +73 -4
- ksadk/evaluation/evaluators.py +183 -17
- ksadk/evaluation/evidence.py +258 -0
- ksadk/evaluation/executor.py +31 -6
- ksadk/evaluation/local_adapter.py +550 -0
- ksadk/evaluation/service_env.py +27 -0
- ksadk/evaluation/studio_build_adapter.py +253 -0
- ksadk/evaluation/target.py +15 -6
- ksadk/events/__init__.py +13 -13
- ksadk/events/_v1_compat/__init__.py +1 -0
- ksadk/events/_v1_compat/models.py +299 -0
- ksadk/events/_v1_compat/parser.py +247 -0
- ksadk/events/_v1_compat/projection.py +753 -0
- ksadk/events/adapters/__init__.py +34 -0
- ksadk/events/adapters/_a2a_snapshot.py +622 -0
- ksadk/events/adapters/_a2a_support.py +275 -0
- ksadk/events/adapters/_codex_interactions.py +375 -0
- ksadk/events/adapters/_codex_items.py +801 -0
- ksadk/events/adapters/_codex_validators.py +311 -0
- ksadk/events/adapters/_langgraph_support.py +785 -0
- ksadk/events/adapters/a2a.py +841 -0
- ksadk/events/adapters/adk.py +503 -0
- ksadk/events/adapters/codex.py +717 -0
- ksadk/events/adapters/langgraph.py +745 -0
- ksadk/events/canonical.py +440 -0
- ksadk/events/canonical_replay.py +497 -0
- ksadk/events/canonical_store.py +468 -0
- ksadk/events/cold_recovery.py +257 -0
- ksadk/events/content.py +89 -0
- ksadk/events/identity.py +86 -0
- ksadk/events/pipeline.py +455 -0
- ksadk/events/projections.py +66 -0
- ksadk/events/reducer.py +661 -0
- ksadk/events/replay.py +3 -36
- ksadk/events/runtime_event.py +20 -265
- ksadk/events/session_event.py +324 -0
- ksadk/events/store.py +3 -316
- ksadk/events/v1_compat.py +41 -0
- ksadk/harness/runtime.py +160 -57
- ksadk/identity/resolver.py +4 -3
- ksadk/interaction/__init__.py +28 -0
- ksadk/interaction/contracts.py +136 -0
- ksadk/interaction/ledger.py +189 -0
- ksadk/interaction/provider.py +122 -0
- ksadk/interaction/providers/__init__.py +52 -0
- ksadk/interaction/providers/adk.py +40 -0
- ksadk/interaction/providers/codex.py +94 -0
- ksadk/interaction/providers/langgraph.py +58 -0
- ksadk/kernel/__init__.py +117 -0
- ksadk/kernel/authorization.py +258 -0
- ksadk/kernel/bootstrap.py +1074 -0
- ksadk/kernel/contract_fingerprints.py +61 -0
- ksadk/kernel/contracts.py +362 -0
- ksadk/kernel/control.py +219 -0
- ksadk/kernel/errors.py +79 -0
- ksadk/kernel/ingress.py +1102 -0
- ksadk/kernel/mapping.py +111 -0
- ksadk/kernel/memory_store.py +1133 -0
- ksadk/kernel/postgres_store.py +1756 -0
- ksadk/kernel/recovery.py +452 -0
- ksadk/kernel/runtime_identity.py +103 -0
- ksadk/kernel/sql/001_agent_kernel.sql +120 -0
- ksadk/kernel/sqlite_store.py +1410 -0
- ksadk/kernel/state.py +145 -0
- ksadk/kernel/store.py +232 -0
- ksadk/kernel/worker.py +953 -0
- ksadk/knowledge_base/client.py +7 -0
- ksadk/knowledge_base/service.py +32 -5
- ksadk/memory/__init__.py +61 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +96 -1
- ksadk/memory/adk/backends/http_ltm_backend.py +14 -5
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +136 -3
- ksadk/memory/adk/backends/sdk_ltm_backend.py +384 -2
- ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
- ksadk/memory/coordinator.py +461 -0
- ksadk/memory/events.py +202 -0
- ksadk/memory/extraction.py +228 -0
- ksadk/memory/ltm_backend_factory.py +16 -3
- ksadk/memory/models.py +316 -0
- ksadk/memory/policy.py +215 -0
- ksadk/memory/provider.py +47 -0
- ksadk/memory/provider_adapter.py +159 -0
- ksadk/memory/provider_resolver.py +71 -0
- ksadk/memory/providers/__init__.py +5 -0
- ksadk/memory/providers/local_sqlite.py +490 -0
- ksadk/memory/resolved_policy.py +145 -0
- ksadk/memory/service.py +188 -6
- ksadk/model_proxy/bootstrap.py +16 -9
- ksadk/model_proxy/detect.py +202 -9
- ksadk/model_proxy/namespace.py +39 -15
- ksadk/model_proxy/server.py +24 -5
- ksadk/model_proxy/transform.py +60 -2
- ksadk/observability/__init__.py +25 -0
- ksadk/observability/session_log.py +420 -0
- ksadk/observability/trajectory.py +105 -0
- ksadk/prompts/__init__.py +71 -0
- ksadk/prompts/compiler.py +215 -0
- ksadk/prompts/models.py +82 -0
- ksadk/prompts/projection.py +89 -0
- ksadk/prompts/resolved.py +137 -0
- ksadk/prompts/sources.py +233 -0
- ksadk/runners/_langgraph_runner_streams.py +822 -0
- ksadk/runners/adk_runner.py +5 -5
- ksadk/runners/base_runner.py +16 -0
- ksadk/runners/factory.py +1 -2
- ksadk/runners/langgraph_runner.py +198 -437
- ksadk/runtime/_runner_adapter/__init__.py +1 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +788 -0
- ksadk/runtime/adapter.py +118 -2
- ksadk/runtime/conversation_execution.py +316 -182
- ksadk/runtime/executor.py +144 -3
- ksadk/runtime/factory.py +193 -7
- ksadk/runtime/hosted_finalizer.py +268 -0
- ksadk/runtime/launch.py +14 -1
- ksadk/runtime/preprocessing.py +25 -3
- ksadk/runtime/runner_adapter.py +288 -508
- ksadk/runtime/usage.py +33 -0
- ksadk/sandbox/backends/e2b.py +35 -2
- ksadk/server/composition.py +8 -0
- ksadk/server/factory.py +69 -6
- ksadk/server/routes/kernel_ingress.py +258 -0
- ksadk/server/routes/openai_compat.py +88 -8
- ksadk/server/routes/projection.py +35 -20
- ksadk/server/routes/run.py +94 -0
- ksadk/server/routes/sessions.py +2 -0
- ksadk/server/routes/streaming.py +5 -2
- ksadk/server/static/assets/{ArtifactsPanel-CakCqxEN.js → ArtifactsPanel-DSU1sWD_.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-CynLknyO.js → CodeBlock-DOH6MVcn.js} +4 -4
- ksadk/server/static/assets/{MathMessageMarkdown-3sQdOysS.js → MathMessageMarkdown-BL8my1R2.js} +4 -4
- ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
- ksadk/server/static/assets/MermaidBlock-Dz4IP-Tx.js +312 -0
- ksadk/server/static/assets/NativeTerminalPanel-DUrK0JpZ.js +1 -0
- ksadk/server/static/assets/abnfDiagram-VCTEODGH-g20pFzNV.js +1 -0
- ksadk/server/static/assets/arc-C4FzinUA.js +1 -0
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +1 -0
- ksadk/server/static/assets/architectureDiagram-5GKGNRK7-DpIqL5h4.js +36 -0
- ksadk/server/static/assets/blockDiagram-NRAW4CY4-BjkljTNz.js +129 -0
- ksadk/server/static/assets/c4Diagram-UCG6FXSJ-Dk_ieq2X.js +38 -0
- ksadk/server/static/assets/channel-4cQHKtx1.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +1 -0
- ksadk/server/static/assets/{chunk-FMBD7UC4-B_fH2YuH.js → chunk-5VM5RSS4-BVHAchFb.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-D6rFLaVV.js → chunk-F27PBJKO-C-ipQzuS.js} +1 -1
- ksadk/server/static/assets/chunk-G27WJ6UU-C2EyJbIK.js +231 -0
- ksadk/server/static/assets/{chunk-4BX2VUAB-B9drTgOW.js → chunk-JWPE2WC7-vYvVJb_M.js} +1 -1
- ksadk/server/static/assets/chunk-LCL6LL3I-BcI6ysPT.js +206 -0
- ksadk/server/static/assets/chunk-POPQ4Y6H-C030x_Z1.js +1 -0
- ksadk/server/static/assets/chunk-RHFEMEQ7-yyGpsz4n.js +168 -0
- ksadk/server/static/assets/chunk-SVP7TREG-BLTlmMU7.js +88 -0
- ksadk/server/static/assets/chunk-XXDRQBXY-C_32ArgP.js +1 -0
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-ChNs_Mdk.js → cose-bilkent-JH36ORCC-9YQYwdl0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +1 -0
- ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-ErLF5N13.js +62 -0
- ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
- ksadk/server/static/assets/dagre-3AP2YEHR-DFiQF-6f.js +4 -0
- ksadk/server/static/assets/dagre-BuhGnRI1.js +1 -0
- ksadk/server/static/assets/diagram-S7CK7UJ4-Bt1v8-GC.js +30 -0
- ksadk/server/static/assets/diagram-UQ7AKVKN-DSCxJdBK.js +41 -0
- ksadk/server/static/assets/diagram-VSXAHHWV-DHfYwp_9.js +3 -0
- ksadk/server/static/assets/diagram-VX7I27RA-DdzD-4Le.js +24 -0
- ksadk/server/static/assets/diagram-Z3DM3KII-Du-nAJ9F.js +24 -0
- ksadk/server/static/assets/{dist-Dli7qW-B.js → dist-8hqcx0sU.js} +1 -1
- ksadk/server/static/assets/dist-B7seoj3d.js +1 -0
- ksadk/server/static/assets/{dist-C1sz5Eo3.js → dist-BE7bu-DL.js} +1 -1
- ksadk/server/static/assets/{dist-fhOuWds5.js → dist-BVDffZ0U.js} +1 -1
- ksadk/server/static/assets/{dist-BjOdlDjj.js → dist-BX8z72IC.js} +1 -1
- ksadk/server/static/assets/{dist-DsHPdk3W.js → dist-Bf2M8m3N.js} +1 -1
- ksadk/server/static/assets/{dist-o2OVmKvt.js → dist-BjU6y-A2.js} +1 -1
- ksadk/server/static/assets/{dist-DWKByxWV.js → dist-BytlxIDT.js} +1 -1
- ksadk/server/static/assets/{dist-DJN_6Y39.js → dist-CSh_DE14.js} +1 -1
- ksadk/server/static/assets/{dist-DQU9EWw-.js → dist-CXYYBw3_.js} +1 -1
- ksadk/server/static/assets/{dist-4N2NMVYg.js → dist-C_wsv-Qd.js} +1 -1
- ksadk/server/static/assets/{dist-gLnrGsoU.js → dist-ClxGviKw.js} +1 -1
- ksadk/server/static/assets/{dist-j6Dxmf_j.js → dist-CttYUqzS.js} +1 -1
- ksadk/server/static/assets/{dist-D6MpCZtz.js → dist-DNp6rLRA.js} +1 -1
- ksadk/server/static/assets/{dist-BB3-OwTQ.js → dist-DUX-id_F.js} +1 -1
- ksadk/server/static/assets/{dist-_pHPTyZ-.js → dist-DmldrHd_.js} +1 -1
- ksadk/server/static/assets/{dist-CWV4lDr1.js → dist-DnfXs8Vn.js} +2 -2
- ksadk/server/static/assets/{dist-B5oS1zcj.js → dist-Dq9gLD7L.js} +1 -1
- ksadk/server/static/assets/{dist-B-jNR6Vn.js → dist-W-TIVntx.js} +1 -1
- ksadk/server/static/assets/{dist-BIlKoW0k.js → dist-dDdADKFA.js} +1 -1
- ksadk/server/static/assets/{dist-X4TnqwOK.js → dist-dydu68Fl.js} +1 -1
- ksadk/server/static/assets/{dist-CmZHzlwZ.js → dist-ngtN0DJB.js} +1 -1
- ksadk/server/static/assets/ebnfDiagram-PWID7BFC-Da9C9NO1.js +1 -0
- ksadk/server/static/assets/erDiagram-SSCWMZ5O-EAGqqR79.js +99 -0
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +1 -0
- ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-DqJsKb59.js +292 -0
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-B6g4dtDi.js +106 -0
- ksadk/server/static/assets/index-8ipRcQ-M.js +240 -0
- ksadk/server/static/assets/index-ByFCqjlh.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +1 -0
- ksadk/server/static/assets/infoDiagram-RXCK75RN-Djm_nbd5.js +2 -0
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-K0OOfVna.js → ishikawaDiagram-5VMMS53U-DWya9SG2.js} +6 -6
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-8LeOJaZp.js → journeyDiagram-EYS64GPL-DutxhSNI.js} +6 -6
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-C6uCgZrW.js → kanban-definition-3QL26DDD-DJdOF8Fm.js} +10 -10
- ksadk/server/static/assets/katex-vFWytM5c.js +257 -0
- ksadk/server/static/assets/{linear-hdBcYzM8.js → linear-BHjG8b-J.js} +1 -1
- ksadk/server/static/assets/mermaid-parser.core-KGSy4jWT.js +166 -0
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-Bjy_2v4_.js → mindmap-definition-FBJOCRG2-9-HC88D4.js} +29 -29
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +1 -0
- ksadk/server/static/assets/pegDiagram-XKGWAZYB-DrEZd4fD.js +1 -0
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +1 -0
- ksadk/server/static/assets/pieDiagram-E7YTZNPT-DpjqOFFp.js +39 -0
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-BmkRbwCg.js → quadrantDiagram-AXDQQJYC-BiNhgOXX.js} +6 -6
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +1 -0
- ksadk/server/static/assets/railroadDiagram-O6MQD6OU-_Y3Ojg6G.js +1 -0
- ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-DeCFdg9K.js +84 -0
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-l6iXmU65.js → sankeyDiagram-P5KCCOFB-CPH75rhw.js} +7 -7
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-Cq6UBeQB.js → sequenceDiagram-WJ2MYXX4-OEpQQdr4.js} +10 -10
- ksadk/server/static/assets/sizeCapture-X5ZJPWSS-heUErzhI.js +1 -0
- ksadk/server/static/assets/stateDiagram-HBIQ2CUA-DvA3jSMB.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +1 -0
- ksadk/server/static/assets/swimlanes-XN3QIQJK-CR-dfN_t.js +1 -0
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +8 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-DEz24vV0.js → timeline-definition-24CTP7MA-DAVJf1TX.js} +7 -7
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +1 -0
- ksadk/server/static/assets/vennDiagram-4TSXK5OY-DwM8eDkh.js +34 -0
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DZL-Zz2t.js +78 -0
- ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js +7 -0
- ksadk/server/static/index.html +2 -2
- ksadk/sessions/__init__.py +26 -9
- ksadk/sessions/_local_service_sync.py +688 -0
- ksadk/sessions/_local_tables.py +21 -0
- ksadk/sessions/_postgres_schema.py +305 -0
- ksadk/sessions/_postgres_tables.py +15 -0
- ksadk/sessions/base.py +80 -1
- ksadk/sessions/in_memory.py +53 -2
- ksadk/sessions/local_service.py +63 -604
- ksadk/sessions/postgres_service.py +58 -148
- ksadk/sessions/resilient.py +35 -1
- ksadk/studio/api.py +577 -25
- ksadk/studio/api_contracts.py +114 -5
- ksadk/studio/api_memory_routes.py +82 -0
- ksadk/studio/authoring.py +252 -27
- ksadk/studio/authoring_coordinator.py +799 -67
- ksadk/studio/builder.py +88 -11
- ksadk/studio/capabilities.py +17 -0
- ksadk/studio/cloud.py +1916 -95
- ksadk/studio/codex_agent_service.py +125 -14
- ksadk/studio/codex_authoring.py +469 -0
- ksadk/studio/codex_builder.py +138 -25
- ksadk/studio/codex_manifest.py +51 -22
- ksadk/studio/codex_run.py +46 -3
- ksadk/studio/compiler.py +1 -0
- ksadk/studio/contracts.py +114 -3
- ksadk/studio/event_store.py +25 -95
- ksadk/studio/framework_run.py +231 -3
- ksadk/studio/hosted_kernel.py +317 -0
- ksadk/studio/manifest_resolver.py +131 -0
- ksadk/studio/model_client.py +95 -9
- ksadk/studio/model_profile_service.py +1 -1
- ksadk/studio/operations.py +37 -5
- ksadk/studio/otel_trace.py +348 -42
- ksadk/studio/pcm_memory.py +85 -0
- ksadk/studio/repository.py +23 -2
- ksadk/studio/resource_catalog.py +43 -0
- ksadk/studio/run_service.py +563 -137
- ksadk/studio/runtime_source.py +42 -16
- ksadk/studio/service.py +1180 -72
- ksadk/studio/shared_web.py +32 -22
- ksadk/studio/static/assets/index-BLpcdrgW.css +1 -0
- ksadk/studio/static/assets/index-CYekR2Xv.js +260 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/templates.py +100 -8
- ksadk/studio/validator.py +19 -0
- ksadk/studio/workspace.py +30 -32
- ksadk/tracing/setup.py +304 -3
- ksadk/version.py +1 -1
- ksadk_runtime_common/schemas/runtime_event_v1.json +37 -0
- ksadk_runtime_common/schemas/runtime_event_v2.json +271 -0
- ksadk/events/parser.py +0 -191
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
- ksadk/server/static/assets/MermaidBlock-NERD_ef7.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-CiHWf82q.js +0 -1
- ksadk/server/static/assets/arc-DrgjcKhl.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CpZLRCcY.js +0 -1
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-BXoVRbQ6.js +0 -36
- ksadk/server/static/assets/blockDiagram-GPEHLZMM-BnaB3Ywv.js +0 -132
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-Dw4weZcp.js +0 -10
- ksadk/server/static/assets/channel-Dt3rQTFI.js +0 -1
- ksadk/server/static/assets/chunk-2J33WTMH-ChjpLK7j.js +0 -1
- ksadk/server/static/assets/chunk-55IACEB6-CK4ROATy.js +0 -1
- ksadk/server/static/assets/chunk-727SXJPM-B9KtTTgw.js +0 -206
- ksadk/server/static/assets/chunk-AQP2D5EJ-1O1mki3m.js +0 -231
- ksadk/server/static/assets/chunk-QZHKN3VN-iXEZtKQc.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-DIveV17Q.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-DIveV17Q.js +0 -1
- ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
- ksadk/server/static/assets/dagre-BM42HDAG-D0QXg_MQ.js +0 -4
- ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
- ksadk/server/static/assets/diagram-2AECGRRQ-DBDDKwBQ.js +0 -43
- ksadk/server/static/assets/diagram-5GNKFQAL-BkwDOxmO.js +0 -10
- ksadk/server/static/assets/diagram-KO2AKTUF-Bv8waYvY.js +0 -3
- ksadk/server/static/assets/diagram-LMA3HP47-e1VECDdu.js +0 -24
- ksadk/server/static/assets/diagram-OG6HWLK6-Ds9adfRl.js +0 -24
- ksadk/server/static/assets/dist-B5J2uhNk.js +0 -1
- ksadk/server/static/assets/erDiagram-TEJ5UH35-BPItFKH6.js +0 -85
- ksadk/server/static/assets/eventmodeling-FCH6USID-DYFSxbqr.js +0 -1
- ksadk/server/static/assets/flowDiagram-I6XJVG4X-BbYB9w5Y.js +0 -162
- ksadk/server/static/assets/ganttDiagram-6RSMTGT7-TQXa0KXv.js +0 -292
- ksadk/server/static/assets/gitGraph-WXDBUCRP-DyNYp6BN.js +0 -1
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-bKblCnpa.js +0 -106
- ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
- ksadk/server/static/assets/index-R52pJJvg.js +0 -177
- ksadk/server/static/assets/index-jJr3_955.css +0 -2
- ksadk/server/static/assets/info-J43DQDTF-WUx7qTde.js +0 -1
- ksadk/server/static/assets/infoDiagram-5YYISTIA-BGVT7J_i.js +0 -2
- ksadk/server/static/assets/katex-CYWseY5E.js +0 -265
- ksadk/server/static/assets/mermaid-parser.core-BWrDjSZM.js +0 -161
- ksadk/server/static/assets/packet-YPE3B663-BN13y_xl.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-ftSLXhhc.js +0 -1
- ksadk/server/static/assets/pieDiagram-4H26LBE5-GmmqNiVH.js +0 -30
- ksadk/server/static/assets/radar-GUYGQ44K-jaICkIeO.js +0 -1
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DSWFqL7c.js +0 -84
- ksadk/server/static/assets/stateDiagram-AJRCARHV-qzTQpg3Y.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-BYCoYGAN.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-Cpib_vlz.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-DQxfmVHK.js +0 -1
- ksadk/server/static/assets/vennDiagram-CIIHVFJN-CMCixki2.js +0 -34
- ksadk/server/static/assets/wardley-L42UT6IY-BQYHnnkU.js +0 -1
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-CVzB8F9K.js +0 -78
- ksadk/server/static/assets/xychartDiagram-2RQKCTM6-BFBqBLc1.js +0 -7
- ksadk/studio/evaluation.py +0 -192
- ksadk/studio/static/assets/index-CaEN0eTR.css +0 -1
- ksadk/studio/static/assets/index-DI2eY_NH.js +0 -252
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.2.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.2.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.2.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.2.dist-info}/top_level.txt +0 -0
|
@@ -6,6 +6,7 @@ Serverless Provider - 金山云 Serverless 计算引擎 (AgentEngine 托管)
|
|
|
6
6
|
- Deploy 阶段: 客户端调用 AgentEngine Server API 发起部署
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
import hashlib
|
|
9
10
|
import json
|
|
10
11
|
import logging
|
|
11
12
|
import os
|
|
@@ -25,7 +26,6 @@ from ksadk.builders.container_builder import (
|
|
|
25
26
|
resolve_registry_credentials,
|
|
26
27
|
)
|
|
27
28
|
from ksadk.builders.ks3_uploader import KS3Uploader
|
|
28
|
-
from ksadk.configs.env_registry import ENV_VAR_REGISTRY
|
|
29
29
|
from ksadk.configs.global_config import get_env_from_global_config
|
|
30
30
|
from ksadk.configs.settings import DEFAULT_RUNTIME_TIMEZONE
|
|
31
31
|
from ksadk.deployment.agent_access import get_latest_agent_access
|
|
@@ -36,55 +36,46 @@ from ksadk.deployment.base import (
|
|
|
36
36
|
DeployTarget,
|
|
37
37
|
PackageInfo,
|
|
38
38
|
)
|
|
39
|
+
from ksadk.deployment.env_forward import should_forward_process_env
|
|
39
40
|
from ksadk.deployment.registry import DeployProviderRegistry
|
|
40
41
|
from ksadk.deployment.ui_config import resolve_ui_config, ui_config_to_state_fields
|
|
41
42
|
|
|
42
43
|
logger = logging.getLogger(__name__)
|
|
43
44
|
|
|
45
|
+
# CodeBuilder archives put the runnable application below ``runtime/``. The
|
|
46
|
+
# command and checksum travel together: sending the command for an arbitrary
|
|
47
|
+
# legacy ``--ks3-path`` archive could change its launch semantics, while a
|
|
48
|
+
# fresh locally built archive can be attested and safely admitted as v1.
|
|
49
|
+
_HOSTED_CODE_COMMAND = (
|
|
50
|
+
"ksadk",
|
|
51
|
+
"web",
|
|
52
|
+
"/app/code/runtime",
|
|
53
|
+
"--port",
|
|
54
|
+
"8080",
|
|
55
|
+
"--host",
|
|
56
|
+
"0.0.0.0",
|
|
57
|
+
"--no-open",
|
|
58
|
+
)
|
|
44
59
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
) | frozenset(
|
|
60
|
+
|
|
61
|
+
# 转发规则已迁移至 ksadk.deployment.env_forward(hermes/openclaw deploy 共用);
|
|
62
|
+
# 保留私有别名以兼容既有调用与测试。
|
|
63
|
+
_should_forward_process_env = should_forward_process_env
|
|
64
|
+
|
|
65
|
+
# These values authenticate or configure the local deploy/build control plane.
|
|
66
|
+
# They must never enter an Agent runtime merely because they exist in global
|
|
67
|
+
# config, the caller's shell, or a project .env file. A caller can still opt in
|
|
68
|
+
# deliberately through explicit ``--env`` / ``--env-file`` values.
|
|
69
|
+
_CONTROL_PLANE_ONLY_ENV_KEYS = frozenset(
|
|
58
70
|
{
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"OPENAI_API_KEY",
|
|
63
|
-
"OPENAI_BASE_URL",
|
|
64
|
-
"OPENAI_MODEL_NAME",
|
|
65
|
-
"SKILL_SPACE_ID",
|
|
71
|
+
"KCR_PASSWORD",
|
|
72
|
+
"KCR_REGISTRY",
|
|
73
|
+
"KCR_USERNAME",
|
|
66
74
|
"KSYUN_ACCESS_KEY",
|
|
67
75
|
"KSYUN_ACCOUNT_ID",
|
|
68
|
-
"KSYUN_REGION",
|
|
69
76
|
"KSYUN_SECRET_KEY",
|
|
70
77
|
}
|
|
71
78
|
)
|
|
72
|
-
_DEPLOY_PROCESS_ENV_PREFIXES = ("KSADK_", "OPENAI_", "KSYUN_", "E2B_")
|
|
73
|
-
_DEPLOY_PROCESS_ENV_DENYLIST = frozenset(
|
|
74
|
-
{spec.name for spec in ENV_VAR_REGISTRY if spec.module in {"builders", "cli", "configs", "web"}}
|
|
75
|
-
) | frozenset(
|
|
76
|
-
{
|
|
77
|
-
"KSADK_GLOBAL_CONFIG_ENV_KEYS",
|
|
78
|
-
"KSADK_UPDATED_AT",
|
|
79
|
-
"KSADK_VERSION",
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def _should_forward_process_env(name: str) -> bool:
|
|
85
|
-
if name in _DEPLOY_PROCESS_ENV_DENYLIST:
|
|
86
|
-
return False
|
|
87
|
-
return name in _DEPLOY_PROCESS_ENV_ALLOWLIST or name.startswith(_DEPLOY_PROCESS_ENV_PREFIXES)
|
|
88
79
|
|
|
89
80
|
|
|
90
81
|
@DeployProviderRegistry.register("serverless")
|
|
@@ -212,11 +203,45 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
212
203
|
for key, value in sorted(os.environ.items()):
|
|
213
204
|
if value and _should_forward_process_env(key):
|
|
214
205
|
env_vars[key] = value
|
|
215
|
-
|
|
216
|
-
|
|
206
|
+
explicit = dict(explicit_env_vars or {})
|
|
207
|
+
for key in _CONTROL_PLANE_ONLY_ENV_KEYS:
|
|
208
|
+
if key not in explicit:
|
|
209
|
+
env_vars.pop(key, None)
|
|
210
|
+
# explicit --env/--env-file (显式 CLI 意图最高,可选择性注入运行时凭证)
|
|
211
|
+
env_vars.update(explicit)
|
|
217
212
|
env_vars.setdefault("TZ", DEFAULT_RUNTIME_TIMEZONE)
|
|
213
|
+
env_vars.setdefault("KSADK_DEPLOYMENT_MODE", "ksadk_managed_cloud")
|
|
218
214
|
return env_vars, env_file.exists(), project_env_count
|
|
219
215
|
|
|
216
|
+
@staticmethod
|
|
217
|
+
def _bind_managed_runtime_contract_env(
|
|
218
|
+
env_vars: Dict[str, str],
|
|
219
|
+
runtime_config: Optional[Dict[str, str]],
|
|
220
|
+
) -> Dict[str, str]:
|
|
221
|
+
"""Keep the deployed provider model aligned with the admitted manifest.
|
|
222
|
+
|
|
223
|
+
Credential env files are reusable across projects and commonly contain
|
|
224
|
+
``OPENAI_MODEL_NAME``. For a ManagedRuntime declaration, however, the
|
|
225
|
+
manifest's ``model`` is the admitted source of truth. Letting a generic
|
|
226
|
+
credential file override it makes capability probing and the actual
|
|
227
|
+
provider request select different upstream protocols.
|
|
228
|
+
"""
|
|
229
|
+
|
|
230
|
+
if not runtime_config:
|
|
231
|
+
return env_vars
|
|
232
|
+
try:
|
|
233
|
+
manifest = yaml.safe_load(str(runtime_config.get("manifest") or ""))
|
|
234
|
+
except yaml.YAMLError:
|
|
235
|
+
return env_vars
|
|
236
|
+
if not isinstance(manifest, dict):
|
|
237
|
+
return env_vars
|
|
238
|
+
model = str(manifest.get("model") or "").strip()
|
|
239
|
+
if not model:
|
|
240
|
+
return env_vars
|
|
241
|
+
bound = dict(env_vars)
|
|
242
|
+
bound["OPENAI_MODEL_NAME"] = model
|
|
243
|
+
return bound
|
|
244
|
+
|
|
220
245
|
@staticmethod
|
|
221
246
|
def _inject_ui_runtime_env(
|
|
222
247
|
env_vars: Dict[str, str],
|
|
@@ -264,6 +289,18 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
264
289
|
with open(metadata_file, "w", encoding="utf-8") as f:
|
|
265
290
|
json.dump(payload, f, indent=2, ensure_ascii=False)
|
|
266
291
|
|
|
292
|
+
@staticmethod
|
|
293
|
+
def _sha256_file(path: Path) -> str:
|
|
294
|
+
digest = hashlib.sha256()
|
|
295
|
+
with path.open("rb") as source:
|
|
296
|
+
for chunk in iter(lambda: source.read(1024 * 1024), b""):
|
|
297
|
+
digest.update(chunk)
|
|
298
|
+
return digest.hexdigest()
|
|
299
|
+
|
|
300
|
+
@staticmethod
|
|
301
|
+
def _is_sha256_digest(value: str) -> bool:
|
|
302
|
+
return len(value) == 64 and all(char in "0123456789abcdef" for char in value.lower())
|
|
303
|
+
|
|
267
304
|
@staticmethod
|
|
268
305
|
def _serialize_network_config(
|
|
269
306
|
target: DeployTarget, *, is_update: bool = False
|
|
@@ -412,9 +449,20 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
412
449
|
return package_info
|
|
413
450
|
|
|
414
451
|
# 如果没有 no_cache 且有缓存,才使用缓存
|
|
415
|
-
|
|
452
|
+
cached_checksum = str(package_info.metadata.get("code_checksum") or "").strip()
|
|
453
|
+
if (
|
|
454
|
+
not no_cache
|
|
455
|
+
and not repackage
|
|
456
|
+
and cached_ks3_path
|
|
457
|
+
and self._is_sha256_digest(cached_checksum)
|
|
458
|
+
):
|
|
416
459
|
logger.info(f"Using cached bundle: {cached_ks3_path}")
|
|
417
460
|
return package_info
|
|
461
|
+
if cached_ks3_path and not no_cache and not repackage:
|
|
462
|
+
# Older metadata had only a KS3 URI. Re-upload instead of
|
|
463
|
+
# silently creating a legacy agent that cannot be admitted to
|
|
464
|
+
# the hosted Kernel path.
|
|
465
|
+
click.echo(" 缓存代码包缺少 SHA-256,重新打包并上传以启用 Kernel 准入")
|
|
418
466
|
|
|
419
467
|
# 2. 构建 ZIP 包
|
|
420
468
|
|
|
@@ -449,6 +497,7 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
449
497
|
if zip_path is None:
|
|
450
498
|
raise RuntimeError("代码构建成功但未生成 artifact_path")
|
|
451
499
|
package_info.metadata.update(build_result.metadata)
|
|
500
|
+
package_info.metadata["code_checksum"] = self._sha256_file(zip_path)
|
|
452
501
|
if build_result.metadata.get("manifest_sha256"):
|
|
453
502
|
target.extra["manifest_sha256"] = build_result.metadata["manifest_sha256"]
|
|
454
503
|
# click.echo(f" ✅ ZIP 已生成: {zip_path}")
|
|
@@ -690,6 +739,9 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
690
739
|
"name": str(target.extra.get("runtime_name") or "").strip(),
|
|
691
740
|
"version": str(target.extra.get("runtime_version") or "").strip(),
|
|
692
741
|
"manifest_sha256": str(target.extra.get("manifest_sha256") or "").strip(),
|
|
742
|
+
"manifest": str(
|
|
743
|
+
package_info.metadata.get("managed_runtime_manifest") or ""
|
|
744
|
+
),
|
|
693
745
|
}
|
|
694
746
|
missing = [key for key, value in runtime_config.items() if not value]
|
|
695
747
|
if missing:
|
|
@@ -698,6 +750,11 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
698
750
|
+ ", ".join(f"runtime_config.{key}" for key in missing)
|
|
699
751
|
)
|
|
700
752
|
|
|
753
|
+
code_checksum = str(package_info.metadata.get("code_checksum") or "").strip()
|
|
754
|
+
if not self._is_sha256_digest(code_checksum):
|
|
755
|
+
code_checksum = ""
|
|
756
|
+
code_command = list(_HOSTED_CODE_COMMAND) if code_backed and code_checksum else None
|
|
757
|
+
|
|
701
758
|
try:
|
|
702
759
|
# 获取 dry_run 标识
|
|
703
760
|
is_dry_run = target.extra.get("dry_run", False)
|
|
@@ -769,34 +826,37 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
769
826
|
fg="green",
|
|
770
827
|
)
|
|
771
828
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
829
|
+
# ``agent_exists`` means the target has already been resolved
|
|
830
|
+
# (including an explicit ``--agent-id``). Both that path and
|
|
831
|
+
# the normal state-file lookup must enter the same hot-update
|
|
832
|
+
# branch. The explicit path must not need a second GetAgent
|
|
833
|
+
# request merely to enter that branch.
|
|
834
|
+
if existing_agent_id:
|
|
835
|
+
if not agent_exists:
|
|
836
|
+
# 有本地状态 → 先检查服务器上是否存在
|
|
837
|
+
click.echo(f" 检测到本地状态: {existing_agent_id}")
|
|
838
|
+
try:
|
|
839
|
+
existing_agent = await client.get_agent(existing_agent_id)
|
|
840
|
+
if existing_agent:
|
|
841
|
+
agent_exists = True
|
|
842
|
+
except Exception as e:
|
|
843
|
+
err_msg = str(e).lower()
|
|
844
|
+
if "not found" in err_msg or "404" in err_msg or "不存在" in err_msg:
|
|
845
|
+
click.secho(
|
|
846
|
+
" ⚠️ 服务器上未找到 Agent "
|
|
847
|
+
f"{existing_agent_id},将创建新 Agent",
|
|
848
|
+
fg="yellow",
|
|
849
|
+
)
|
|
850
|
+
agent_exists = False
|
|
851
|
+
# DryRun 异常表示真实请求被拦截,无法确认 Agent 是否存在。
|
|
852
|
+
# 为安全起见,DryRun 假设它存在并走更新路径。
|
|
853
|
+
elif "Dry Run" in str(e):
|
|
854
|
+
click.secho(
|
|
855
|
+
f" [Dry Run] 假设 Agent {existing_agent_id} 存在", fg="cyan"
|
|
856
|
+
)
|
|
857
|
+
agent_exists = True
|
|
858
|
+
else:
|
|
859
|
+
raise
|
|
800
860
|
|
|
801
861
|
if agent_exists:
|
|
802
862
|
# Agent 存在 → 执行更新
|
|
@@ -828,6 +888,9 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
828
888
|
|
|
829
889
|
if ks3_config:
|
|
830
890
|
update_data["ks3"] = ks3_config
|
|
891
|
+
if code_checksum:
|
|
892
|
+
update_data["code_checksum"] = code_checksum
|
|
893
|
+
update_data["code_command"] = code_command
|
|
831
894
|
elif artifact_type == "Container":
|
|
832
895
|
image_credential = self._image_credential_from_env(artifact_path)
|
|
833
896
|
if image_credential:
|
|
@@ -843,6 +906,10 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
843
906
|
project_dir,
|
|
844
907
|
target.extra.get("env_vars") or {},
|
|
845
908
|
)
|
|
909
|
+
env_vars = self._bind_managed_runtime_contract_env(
|
|
910
|
+
env_vars,
|
|
911
|
+
runtime_config,
|
|
912
|
+
)
|
|
846
913
|
env_vars = self._inject_ui_runtime_env(env_vars, ui_state, local_state)
|
|
847
914
|
if env_vars:
|
|
848
915
|
update_data["env_vars"] = env_vars
|
|
@@ -951,6 +1018,9 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
951
1018
|
|
|
952
1019
|
if ks3_config:
|
|
953
1020
|
request_data["ks3"] = ks3_config
|
|
1021
|
+
if code_checksum:
|
|
1022
|
+
request_data["code_checksum"] = code_checksum
|
|
1023
|
+
request_data["code_command"] = code_command
|
|
954
1024
|
|
|
955
1025
|
# Container 模式: 传递镜像凭证
|
|
956
1026
|
if artifact_type == "Container":
|
|
@@ -967,6 +1037,10 @@ class ServerlessProvider(BaseDeployProvider):
|
|
|
967
1037
|
project_dir,
|
|
968
1038
|
target.extra.get("env_vars") or {},
|
|
969
1039
|
)
|
|
1040
|
+
env_vars = self._bind_managed_runtime_contract_env(
|
|
1041
|
+
env_vars,
|
|
1042
|
+
runtime_config,
|
|
1043
|
+
)
|
|
970
1044
|
env_vars = self._inject_ui_runtime_env(env_vars, ui_state, local_state)
|
|
971
1045
|
if env_vars:
|
|
972
1046
|
if env_file_exists:
|
ksadk/evaluation/__init__.py
CHANGED
|
@@ -7,10 +7,27 @@ from .adapters import (
|
|
|
7
7
|
TargetAdapterError,
|
|
8
8
|
create_target_adapter,
|
|
9
9
|
)
|
|
10
|
+
from .cloud_binding import CloudBinding, CloudBindingError, CloudBindingStore
|
|
11
|
+
from .cloud_converter import (
|
|
12
|
+
CloudDatasetColumn,
|
|
13
|
+
CloudDatasetRow,
|
|
14
|
+
CloudDatasetSnapshot,
|
|
15
|
+
EvalSetCloudConversionError,
|
|
16
|
+
evalset_from_dataset_snapshot,
|
|
17
|
+
evalset_to_dataset_snapshot,
|
|
18
|
+
)
|
|
19
|
+
from .cloud_service import (
|
|
20
|
+
CloudEvalSetPreviewError,
|
|
21
|
+
CloudEvalSetCatalogItem,
|
|
22
|
+
CloudEvalSetPublishResult,
|
|
23
|
+
CloudEvalSetPullResult,
|
|
24
|
+
CloudEvalSetService,
|
|
25
|
+
)
|
|
10
26
|
from .contracts import (
|
|
11
27
|
AssertionSpec,
|
|
12
28
|
AssertionType,
|
|
13
29
|
CaseRun,
|
|
30
|
+
CloudDatasetRef,
|
|
14
31
|
DataPolicy,
|
|
15
32
|
EvalCase,
|
|
16
33
|
EvalRunReport,
|
|
@@ -47,6 +64,18 @@ __all__ = [
|
|
|
47
64
|
"AssertionType",
|
|
48
65
|
"A2ATargetAdapter",
|
|
49
66
|
"A2ATargetError",
|
|
67
|
+
"CloudBinding",
|
|
68
|
+
"CloudBindingError",
|
|
69
|
+
"CloudBindingStore",
|
|
70
|
+
"CloudDatasetRef",
|
|
71
|
+
"CloudDatasetColumn",
|
|
72
|
+
"CloudDatasetRow",
|
|
73
|
+
"CloudDatasetSnapshot",
|
|
74
|
+
"CloudEvalSetPreviewError",
|
|
75
|
+
"CloudEvalSetCatalogItem",
|
|
76
|
+
"CloudEvalSetPublishResult",
|
|
77
|
+
"CloudEvalSetPullResult",
|
|
78
|
+
"CloudEvalSetService",
|
|
50
79
|
"CaseRun",
|
|
51
80
|
"DataPolicy",
|
|
52
81
|
"EvalCase",
|
|
@@ -60,6 +89,7 @@ __all__ = [
|
|
|
60
89
|
"EvalTurn",
|
|
61
90
|
"EvaluationConfig",
|
|
62
91
|
"EvaluationExecutionError",
|
|
92
|
+
"EvalSetCloudConversionError",
|
|
63
93
|
"EvaluationNotImplementedError",
|
|
64
94
|
"EvaluationRequest",
|
|
65
95
|
"EvaluationStorage",
|
|
@@ -80,5 +110,7 @@ __all__ = [
|
|
|
80
110
|
"load_evalset",
|
|
81
111
|
"parse_evalset",
|
|
82
112
|
"execute_evaluation",
|
|
113
|
+
"evalset_from_dataset_snapshot",
|
|
114
|
+
"evalset_to_dataset_snapshot",
|
|
83
115
|
"create_target_adapter",
|
|
84
116
|
]
|
ksadk/evaluation/a2a_adapter.py
CHANGED
|
@@ -93,7 +93,15 @@ class _ResponseCollector:
|
|
|
93
93
|
self.context_id = update.context_id or self.context_id
|
|
94
94
|
text = _parts_text(update.artifact.parts)
|
|
95
95
|
if text:
|
|
96
|
-
|
|
96
|
+
# canonical executor 的 replace 快照带 ksadk_output_snapshot 标记,
|
|
97
|
+
# 是权威全文;命中时重置而非继续拼接,避免 delta+快照翻倍。
|
|
98
|
+
if any(
|
|
99
|
+
dict(part.metadata or {}).get("ksadk_output_snapshot")
|
|
100
|
+
for part in update.artifact.parts
|
|
101
|
+
):
|
|
102
|
+
self.artifact_chunks = [text]
|
|
103
|
+
else:
|
|
104
|
+
self.artifact_chunks.append(text)
|
|
97
105
|
|
|
98
106
|
if response.message:
|
|
99
107
|
self.task_id = response.message.task_id or self.task_id
|
ksadk/evaluation/adapters.py
CHANGED
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Protocol
|
|
5
|
+
from typing import TYPE_CHECKING, Protocol
|
|
6
6
|
|
|
7
7
|
from .contracts import EvalCase, EvalRunSpec, TargetKind, TargetRef, TargetRun, TargetSnapshot
|
|
8
8
|
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from .evidence import EvidenceStore
|
|
11
|
+
|
|
9
12
|
|
|
10
13
|
class TargetAdapterError(RuntimeError):
|
|
11
14
|
"""Classified failure raised by a protocol adapter."""
|
|
@@ -27,19 +30,29 @@ class TargetAdapter(Protocol):
|
|
|
27
30
|
async def snapshot(self, target: TargetRef) -> TargetSnapshot:
|
|
28
31
|
"""Resolve a target into an immutable snapshot."""
|
|
29
32
|
|
|
30
|
-
async def run_case(
|
|
31
|
-
self, spec: EvalRunSpec, case: EvalCase, *, attempt: int
|
|
32
|
-
) -> TargetRun:
|
|
33
|
+
async def run_case(self, spec: EvalRunSpec, case: EvalCase, *, attempt: int) -> TargetRun:
|
|
33
34
|
"""Execute one case and return its normalized result."""
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
def create_target_adapter(
|
|
37
|
+
def create_target_adapter(
|
|
38
|
+
target: TargetRef,
|
|
39
|
+
*,
|
|
40
|
+
timeout_seconds: int,
|
|
41
|
+
evidence_store: EvidenceStore | None = None,
|
|
42
|
+
) -> TargetAdapter:
|
|
37
43
|
"""Route a target reference to its protocol adapter."""
|
|
38
44
|
|
|
39
45
|
if target.kind is TargetKind.A2A:
|
|
40
46
|
from .a2a_adapter import A2ATargetAdapter
|
|
41
47
|
|
|
42
48
|
return A2ATargetAdapter(timeout_seconds=timeout_seconds)
|
|
49
|
+
if target.kind is TargetKind.LOCAL_SOURCE:
|
|
50
|
+
from .local_adapter import LocalSourceTargetAdapter
|
|
51
|
+
|
|
52
|
+
return LocalSourceTargetAdapter(
|
|
53
|
+
timeout_seconds=timeout_seconds,
|
|
54
|
+
evidence_store=evidence_store,
|
|
55
|
+
)
|
|
43
56
|
raise EvaluationNotImplementedError(
|
|
44
57
|
f"{target.kind.value} target 的评测执行尚未实现;"
|
|
45
58
|
"当前可使用 --validate-only 校验评测集和参数"
|