deepstrike 0.2.71__tar.gz → 0.2.72__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.
- {deepstrike-0.2.71 → deepstrike-0.2.72}/Cargo.lock +6 -6
- {deepstrike-0.2.71 → deepstrike-0.2.72}/Cargo.toml +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/PKG-INFO +1 -1
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-py/src/lib.rs +12 -12
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/__init__.py +2 -2
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/extraction.py +2 -2
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/protocols.py +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/anthropic.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/anthropic_adapter.py +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/base.py +10 -10
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/gemini.py +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/gemini_adapter.py +4 -4
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/ollama.py +2 -2
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/ollama_adapter.py +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/openai.py +7 -7
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/openai_chat_adapter.py +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/openai_responses.py +6 -6
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/protocol_adapter.py +2 -2
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/qwen.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/replay.py +4 -4
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/replay_validator.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/request_plan.py +1 -1
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/archive.py +9 -9
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/canonical_kernel_step.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/eval.py +2 -2
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/kernel_step.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/replay_fixture.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/replay_provider.py +5 -5
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/runner.py +30 -30
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/sub_agent_orchestrator.py +4 -4
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/types/content.py +3 -3
- {deepstrike-0.2.71 → deepstrike-0.2.72}/pyproject.toml +1 -1
- {deepstrike-0.2.71 → deepstrike-0.2.72}/LICENSE +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/README.md +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/Cargo.toml +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/LICENSE +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/benches/kernel_baseline.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/benches/verifiable_baseline.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/benches/wait_index_baseline.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/benchmark/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/bin/deepstrike.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/bin/support/evidence_io.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/compression.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/config.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/execution.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/fault.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/manager.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/measurement.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/partitions.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/policy.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/pressure.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/renderer.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/renewal.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/skill_catalog.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/summarizer.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/task_state.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/text.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/token_engine.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/units.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/context/utility.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/evolution.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/constraint.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/permission.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/pipeline.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/quota.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/rate_limit.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/repeat_fuse.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/governance/veto.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/harness/eval.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/harness/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/lexical.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/lib.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/memory/curator.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/memory/durable.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/memory/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/mm/handle.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/mm/memory.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/mm/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/mm/value.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/orchestration/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/orchestration/task_graph.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/orchestration/tournament.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/orchestration/workflow/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/orchestration/workflow/run.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/proc/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/projection_pairs.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/chain_validator/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/event_log.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/observation.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/binding.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/checkpoint.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/command.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/config.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/crash_point.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/continuation.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/effects.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/events.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/planning.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/projection.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/provider.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/syscall.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver/tests.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/driver.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/effect.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/envelope.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/event.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/fault.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/projection.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/record.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/restore.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/root.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/scalar.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/syscall.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/terminal.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/tests.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire/transaction.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel/wire.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/kernel.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/repair.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/replay.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/session.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/runtime/verifiable.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/budget_grant.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/cross_operation.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/entropy.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/mailbox.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/milestone.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/policy.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/rollback.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/runnable.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/cancellation.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/capability.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/eviction.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/gate.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/milestone_exec.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/process.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/signal.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/tests.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/state_machine/workflow.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/tcb.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/scheduler/wait_index.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/signals/attention.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/signals/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/signals/queue.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/signals/router.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/syscall/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/agent.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/capability.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/contract.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/durable_content.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/error.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/message.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/milestone.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/mod.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/policy.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/result.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/signal.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/skill.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-core/src/types/task.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-py/Cargo.toml +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-py/LICENSE +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-tokenizer/Cargo.toml +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-tokenizer/LICENSE +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/crates/deepstrike-tokenizer/src/lib.rs +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/agent.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/agent_ir.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/collaboration/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/collaboration/contract.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/collaboration/handoff.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/collaboration/harness.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/collaboration/modes.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/collaboration/pool.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/governance.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/harness/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/harness/harness.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/harness/judge.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/kernel/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/kernel/canonical.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/knowledge/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/knowledge/source.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/agent.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/durable.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/in_memory_store.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/ranking.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/retention.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/memory/working.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/anthropic_compatible.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/capability_router.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/credentials.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/embedding.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/factories.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/model_catalog.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/model_registry.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/prepared_request.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/provider_error.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/runtime_registry.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/stop_reason.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/stream.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/usage.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/providers/vendor_profiles.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/context.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/context_policy.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/credential_vault.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/durable_content.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/event_stream.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/evolution.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/execution_evidence.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/execution_plane.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/facade.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/filtered_plane.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/kernel_event_log.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/kernel_journal.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/loop_driver.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/mcp_proxy_plane.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/os_profile.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/os_snapshot.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/output_schema.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/payload_store.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/process_sandbox_plane.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/provider_replay.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/reaction_checkpoint.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/reactive_session.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/reducers.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/reliability.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/remote_vpc_plane.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/replay_sanitize.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/run_group.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/session_log.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/session_repair.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/turn_policy.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/verifiable_report.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/workflow_control_flow.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/workflow_store.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/runtime/worktree_plane.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/safety/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/safety/permissions.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/signals/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/signals/gateway.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/signals/scheduled.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/signals/types.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/skills/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/skills/loader.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/skills/registry.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/skills/watcher.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/tools/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/tools/builtin/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/tools/builtin/read_file.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/tools/errors.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/tools/execution.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/tools/registry.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/types/__init__.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/types/agent.py +0 -0
- {deepstrike-0.2.71 → deepstrike-0.2.72}/deepstrike/types/content_policy.py +0 -0
|
@@ -254,7 +254,7 @@ dependencies = [
|
|
|
254
254
|
|
|
255
255
|
[[package]]
|
|
256
256
|
name = "deepstrike-core"
|
|
257
|
-
version = "0.2.
|
|
257
|
+
version = "0.2.72"
|
|
258
258
|
dependencies = [
|
|
259
259
|
"compact_str",
|
|
260
260
|
"deepstrike-tokenizer",
|
|
@@ -268,7 +268,7 @@ dependencies = [
|
|
|
268
268
|
|
|
269
269
|
[[package]]
|
|
270
270
|
name = "deepstrike-node"
|
|
271
|
-
version = "0.2.
|
|
271
|
+
version = "0.2.72"
|
|
272
272
|
dependencies = [
|
|
273
273
|
"compact_str",
|
|
274
274
|
"deepstrike-core",
|
|
@@ -280,7 +280,7 @@ dependencies = [
|
|
|
280
280
|
|
|
281
281
|
[[package]]
|
|
282
282
|
name = "deepstrike-py"
|
|
283
|
-
version = "0.2.
|
|
283
|
+
version = "0.2.72"
|
|
284
284
|
dependencies = [
|
|
285
285
|
"compact_str",
|
|
286
286
|
"deepstrike-core",
|
|
@@ -291,7 +291,7 @@ dependencies = [
|
|
|
291
291
|
|
|
292
292
|
[[package]]
|
|
293
293
|
name = "deepstrike-sdk"
|
|
294
|
-
version = "0.2.
|
|
294
|
+
version = "0.2.72"
|
|
295
295
|
dependencies = [
|
|
296
296
|
"async-stream",
|
|
297
297
|
"async-trait",
|
|
@@ -327,7 +327,7 @@ dependencies = [
|
|
|
327
327
|
|
|
328
328
|
[[package]]
|
|
329
329
|
name = "deepstrike-tokenizer"
|
|
330
|
-
version = "0.2.
|
|
330
|
+
version = "0.2.72"
|
|
331
331
|
dependencies = [
|
|
332
332
|
"pretty_assertions",
|
|
333
333
|
"tiktoken-rs",
|
|
@@ -335,7 +335,7 @@ dependencies = [
|
|
|
335
335
|
|
|
336
336
|
[[package]]
|
|
337
337
|
name = "deepstrike-wasm"
|
|
338
|
-
version = "0.2.
|
|
338
|
+
version = "0.2.72"
|
|
339
339
|
dependencies = [
|
|
340
340
|
"compact_str",
|
|
341
341
|
"deepstrike-core",
|
|
@@ -3,13 +3,13 @@ resolver = "2"
|
|
|
3
3
|
members = ["crates/deepstrike-core", "crates/deepstrike-tokenizer", "crates/deepstrike-py"]
|
|
4
4
|
|
|
5
5
|
[workspace.package]
|
|
6
|
-
version = "0.2.
|
|
6
|
+
version = "0.2.72"
|
|
7
7
|
edition = "2024"
|
|
8
8
|
repository = "https://github.com/kongusen/deepstrike"
|
|
9
9
|
|
|
10
10
|
[workspace.dependencies]
|
|
11
|
-
deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.
|
|
12
|
-
deepstrike-tokenizer = { path = "crates/deepstrike-tokenizer", version = "0.2.
|
|
11
|
+
deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.72" }
|
|
12
|
+
deepstrike-tokenizer = { path = "crates/deepstrike-tokenizer", version = "0.2.72" }
|
|
13
13
|
notify = "6"
|
|
14
14
|
serde = { version = "1", features = ["derive"] }
|
|
15
15
|
serde_json = "1"
|
|
@@ -336,7 +336,7 @@ impl ContentPartObj {
|
|
|
336
336
|
|
|
337
337
|
#[pyclass]
|
|
338
338
|
#[derive(Clone)]
|
|
339
|
-
struct
|
|
339
|
+
struct ModelMessage {
|
|
340
340
|
#[pyo3(get, set)]
|
|
341
341
|
role: String,
|
|
342
342
|
#[pyo3(get, set)]
|
|
@@ -348,7 +348,7 @@ struct ProviderMessage {
|
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
#[pymethods]
|
|
351
|
-
impl
|
|
351
|
+
impl ModelMessage {
|
|
352
352
|
#[new]
|
|
353
353
|
#[pyo3(signature = (role, content, tool_calls = None, content_parts = None))]
|
|
354
354
|
fn new(
|
|
@@ -371,7 +371,7 @@ impl ProviderMessage {
|
|
|
371
371
|
None => String::new(),
|
|
372
372
|
};
|
|
373
373
|
format!(
|
|
374
|
-
"
|
|
374
|
+
"ModelMessage(role={:?}, content={:?}{})",
|
|
375
375
|
self.role, self.content, parts_info
|
|
376
376
|
)
|
|
377
377
|
}
|
|
@@ -535,7 +535,7 @@ fn content_part_from_rust(p: &ContentPart) -> ContentPartObj {
|
|
|
535
535
|
}
|
|
536
536
|
}
|
|
537
537
|
|
|
538
|
-
impl
|
|
538
|
+
impl ModelMessage {
|
|
539
539
|
fn from_rust(msg: &RustMessage) -> Self {
|
|
540
540
|
let role = match msg.role {
|
|
541
541
|
Role::System => "system",
|
|
@@ -728,7 +728,7 @@ struct LoopResult {
|
|
|
728
728
|
#[pyo3(get)]
|
|
729
729
|
termination: String,
|
|
730
730
|
#[pyo3(get)]
|
|
731
|
-
final_message: Option<
|
|
731
|
+
final_message: Option<ModelMessage>,
|
|
732
732
|
#[pyo3(get)]
|
|
733
733
|
turns_used: u32,
|
|
734
734
|
#[pyo3(get)]
|
|
@@ -841,10 +841,10 @@ struct RenderedContext {
|
|
|
841
841
|
system_knowledge: String,
|
|
842
842
|
/// History turns only — the stable, cacheable message prefix.
|
|
843
843
|
#[pyo3(get)]
|
|
844
|
-
turns: Vec<
|
|
844
|
+
turns: Vec<ModelMessage>,
|
|
845
845
|
/// Volatile State turn (task_state + signals), rendered after the cacheable history.
|
|
846
846
|
#[pyo3(get)]
|
|
847
|
-
state_turn: Option<
|
|
847
|
+
state_turn: Option<ModelMessage>,
|
|
848
848
|
/// P1-E: count of leading `turns` forming the frozen prefix (byte-stable until the next
|
|
849
849
|
/// compaction). Providers pin a deep cache breakpoint here; absent ⇒ rolling-pair fallback.
|
|
850
850
|
#[pyo3(get)]
|
|
@@ -1396,7 +1396,7 @@ struct SessionData {
|
|
|
1396
1396
|
#[pyo3(get, set)]
|
|
1397
1397
|
agent_id: String,
|
|
1398
1398
|
#[pyo3(get, set)]
|
|
1399
|
-
messages: Vec<
|
|
1399
|
+
messages: Vec<ModelMessage>,
|
|
1400
1400
|
/// JSON-encoded metadata blob.
|
|
1401
1401
|
#[pyo3(get, set)]
|
|
1402
1402
|
metadata: String,
|
|
@@ -1413,7 +1413,7 @@ impl SessionData {
|
|
|
1413
1413
|
fn new(
|
|
1414
1414
|
session_id: String,
|
|
1415
1415
|
agent_id: String,
|
|
1416
|
-
messages: Vec<
|
|
1416
|
+
messages: Vec<ModelMessage>,
|
|
1417
1417
|
metadata: String,
|
|
1418
1418
|
created_at_ms: f64,
|
|
1419
1419
|
updated_at_ms: f64,
|
|
@@ -1693,7 +1693,7 @@ fn build_eval_messages(
|
|
|
1693
1693
|
result: String,
|
|
1694
1694
|
attempt: u32,
|
|
1695
1695
|
extract_skill_on_pass: bool,
|
|
1696
|
-
) -> Vec<
|
|
1696
|
+
) -> Vec<ModelMessage> {
|
|
1697
1697
|
let rust_criteria = criteria_from_py(criteria);
|
|
1698
1698
|
rust_build_eval_messages(
|
|
1699
1699
|
&goal,
|
|
@@ -1703,7 +1703,7 @@ fn build_eval_messages(
|
|
|
1703
1703
|
extract_skill_on_pass,
|
|
1704
1704
|
)
|
|
1705
1705
|
.iter()
|
|
1706
|
-
.map(
|
|
1706
|
+
.map(ModelMessage::from_rust)
|
|
1707
1707
|
.collect()
|
|
1708
1708
|
}
|
|
1709
1709
|
|
|
@@ -1756,7 +1756,7 @@ fn _kernel(m: &Bound<'_, PyModule>) -> PyResult<()> {
|
|
|
1756
1756
|
m.add("ABI", deepstrike_core::runtime::kernel::wire::ABI)?;
|
|
1757
1757
|
// POD types
|
|
1758
1758
|
m.add_class::<ContentPartObj>()?;
|
|
1759
|
-
m.add_class::<
|
|
1759
|
+
m.add_class::<ModelMessage>()?;
|
|
1760
1760
|
m.add_class::<ToolCall>()?;
|
|
1761
1761
|
m.add_class::<ToolExecutionResult>()?;
|
|
1762
1762
|
m.add_class::<ToolSchema>()?;
|
|
@@ -6,7 +6,7 @@ except PackageNotFoundError:
|
|
|
6
6
|
__version__ = "0+unknown"
|
|
7
7
|
|
|
8
8
|
from deepstrike._kernel import (
|
|
9
|
-
|
|
9
|
+
ModelMessage, ToolCall, ToolExecutionResult, ToolSchema,
|
|
10
10
|
SkillMetadata,
|
|
11
11
|
)
|
|
12
12
|
from deepstrike.runtime import (
|
|
@@ -378,7 +378,7 @@ __all__ = [
|
|
|
378
378
|
"KnowledgeSource",
|
|
379
379
|
"RuntimeSignal", "SignalClaim", "SignalDeliveryReceipt",
|
|
380
380
|
"SignalSource", "ScheduledPrompt", "SignalGateway",
|
|
381
|
-
"
|
|
381
|
+
"ModelMessage", "ToolCall", "ToolExecutionResult", "ToolSchema",
|
|
382
382
|
"SkillMetadata",
|
|
383
383
|
# Sub-agent isolation
|
|
384
384
|
"AgentIdentity", "AgentCapabilityFilter", "AgentRunSpec",
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import json
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
-
from deepstrike._kernel import
|
|
6
|
+
from deepstrike._kernel import ModelMessage
|
|
7
7
|
from deepstrike.memory.protocols import MemoryProvenance, MemoryRecord, MemoryScope, SessionData
|
|
8
8
|
from deepstrike.providers.base import RenderedContext
|
|
9
9
|
from deepstrike.providers.stream import TextDelta
|
|
@@ -20,7 +20,7 @@ async def extract_session_memories(provider: Any, session: SessionData, scope: M
|
|
|
20
20
|
system_prompt,
|
|
21
21
|
"Extract durable, reusable facts from this completed session. Return only JSON; do not include transient progress or guesses.",
|
|
22
22
|
])),
|
|
23
|
-
turns=[
|
|
23
|
+
turns=[ModelMessage(
|
|
24
24
|
role="user",
|
|
25
25
|
content=(transcript + '\n\nReturn {"memories":[{"name":"stable-kebab-key",'
|
|
26
26
|
'"kind":"user|feedback|project|reference","content":"fact",'
|
|
@@ -3,7 +3,7 @@ from dataclasses import dataclass, field
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Literal, Protocol, runtime_checkable
|
|
4
4
|
|
|
5
5
|
if TYPE_CHECKING:
|
|
6
|
-
from deepstrike._kernel import
|
|
6
|
+
from deepstrike._kernel import ModelMessage
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
# ─── Durable-memory types ────────────────────────────────────────────────────
|
|
@@ -101,8 +101,8 @@ class MemoryStore(Protocol):
|
|
|
101
101
|
class SessionData:
|
|
102
102
|
session_id: str
|
|
103
103
|
agent_id: str
|
|
104
|
-
"""
|
|
105
|
-
messages: list["
|
|
104
|
+
"""ModelMessage objects using the kernel message contract."""
|
|
105
|
+
messages: list["ModelMessage"]
|
|
106
106
|
metadata: Any = None
|
|
107
107
|
created_at_ms: int = 0
|
|
108
108
|
updated_at_ms: int = 0
|
|
@@ -6,7 +6,7 @@ import logging
|
|
|
6
6
|
from types import SimpleNamespace
|
|
7
7
|
from typing import AsyncIterator
|
|
8
8
|
from anthropic import AsyncAnthropic
|
|
9
|
-
from deepstrike._kernel import
|
|
9
|
+
from deepstrike._kernel import ModelMessage, ToolCall, ToolSchema
|
|
10
10
|
from .stream import StreamEvent
|
|
11
11
|
from .base import RetryConfig, CircuitBreaker, ProviderDescriptor, RenderedContext, RuntimePolicy, normalize_tool_call, parse_tool_arguments, to_anthropic_content, to_anthropic_messages
|
|
12
12
|
from .anthropic_adapter import AnthropicMessagesAdapter
|
|
@@ -98,7 +98,7 @@ class AnthropicProvider:
|
|
|
98
98
|
blocks.append({"type": "text", "text": knowledge, **cc})
|
|
99
99
|
return blocks or None
|
|
100
100
|
|
|
101
|
-
def _build_messages(self, turns: list[
|
|
101
|
+
def _build_messages(self, turns: list[ModelMessage], state_turn=None, frozen_prefix_len=None, strategy: str = "default", cache_control: dict | None = None) -> list[dict]:
|
|
102
102
|
msgs = to_anthropic_messages(
|
|
103
103
|
turns,
|
|
104
104
|
native_replay=lambda message: self._native_assistant_blocks.get(
|
|
@@ -191,7 +191,7 @@ class AnthropicProvider:
|
|
|
191
191
|
confidence="exact",
|
|
192
192
|
)
|
|
193
193
|
|
|
194
|
-
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) ->
|
|
194
|
+
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) -> ModelMessage:
|
|
195
195
|
if self._circuit.is_open():
|
|
196
196
|
raise RuntimeError("Circuit breaker open")
|
|
197
197
|
|
|
@@ -238,7 +238,7 @@ class AnthropicProvider:
|
|
|
238
238
|
if finalized.replay:
|
|
239
239
|
self._remember_native_blocks(stream_state.final_text, stream_state.final_tool_calls, finalized.replay["native_blocks"])
|
|
240
240
|
|
|
241
|
-
def _assistant_replay_key(self, message:
|
|
241
|
+
def _assistant_replay_key(self, message: ModelMessage) -> str:
|
|
242
242
|
return self._assistant_replay_key_parts(message.content, message.tool_calls or [])
|
|
243
243
|
|
|
244
244
|
def _assistant_replay_key_parts(self, content: str, tool_calls: list[ToolCall]) -> str:
|
|
@@ -317,7 +317,7 @@ def _apply_message_cache_control(msgs: list[dict], frozen_prefix_len: "int | Non
|
|
|
317
317
|
body is promoted to a cache-bearing text block."""
|
|
318
318
|
if not msgs:
|
|
319
319
|
return
|
|
320
|
-
#
|
|
320
|
+
# ModelMessage-level cache_control is emitted under "default" and "frozen-prefix" only.
|
|
321
321
|
if strategy in ("tools-only", "system-only", "none"):
|
|
322
322
|
return
|
|
323
323
|
targets = {len(msgs) - 1}
|
|
@@ -6,7 +6,7 @@ import math
|
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
|
-
from deepstrike._kernel import
|
|
9
|
+
from deepstrike._kernel import ModelMessage, ToolCall, ToolSchema
|
|
10
10
|
from deepstrike.providers.base import normalize_tool_call, parse_tool_arguments, to_anthropic_messages
|
|
11
11
|
from deepstrike.providers.protocol_adapter import AdapterOutput, ProtocolResponseError
|
|
12
12
|
from deepstrike.providers.stop_reason import canonicalize_stop_reason
|
|
@@ -171,7 +171,7 @@ class AnthropicMessagesAdapter:
|
|
|
171
171
|
},
|
|
172
172
|
)
|
|
173
173
|
|
|
174
|
-
def decode_complete(self, raw: Any, input: CanonicalAdapterInput) -> tuple[
|
|
174
|
+
def decode_complete(self, raw: Any, input: CanonicalAdapterInput) -> tuple[ModelMessage, dict | None]:
|
|
175
175
|
content = ""
|
|
176
176
|
calls: list[ToolCall] = []
|
|
177
177
|
native_blocks: list[dict] = []
|
|
@@ -194,7 +194,7 @@ class AnthropicMessagesAdapter:
|
|
|
194
194
|
):
|
|
195
195
|
raise _textual_tool_call_error()
|
|
196
196
|
usage = self.normalize_usage(_get(raw, "usage"))
|
|
197
|
-
message =
|
|
197
|
+
message = ModelMessage(role="assistant", content=content, tool_calls=calls or None)
|
|
198
198
|
return message, ({"native_blocks": native_blocks} if native_blocks else None)
|
|
199
199
|
|
|
200
200
|
def create_stream_state(self, input: CanonicalAdapterInput, cache_slots: dict[str, bool] | None = None) -> AnthropicStreamState:
|
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
import time
|
|
6
6
|
from typing import Any, AsyncIterator, Callable, Protocol, TypeVar, runtime_checkable
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
|
-
from deepstrike._kernel import
|
|
8
|
+
from deepstrike._kernel import ModelMessage, ToolCall, ToolSchema
|
|
9
9
|
from .stream import StreamEvent
|
|
10
10
|
from deepstrike.types.content import (
|
|
11
11
|
normalize_canonical_adapter_input,
|
|
@@ -159,8 +159,8 @@ def _tool_result_anthropic_content(p: Any) -> "str | list[dict]":
|
|
|
159
159
|
return p.output
|
|
160
160
|
|
|
161
161
|
|
|
162
|
-
def to_anthropic_content(msg:
|
|
163
|
-
"""Convert
|
|
162
|
+
def to_anthropic_content(msg: ModelMessage) -> str | list[dict]:
|
|
163
|
+
"""Convert ModelMessage to Anthropic API content format."""
|
|
164
164
|
validate_rendered_message(msg)
|
|
165
165
|
if not getattr(msg, "content_parts", None):
|
|
166
166
|
return msg.content
|
|
@@ -201,8 +201,8 @@ def _openai_audio_format(media_type: str | None) -> str:
|
|
|
201
201
|
return sub
|
|
202
202
|
|
|
203
203
|
|
|
204
|
-
def to_openai_content(msg:
|
|
205
|
-
"""Convert
|
|
204
|
+
def to_openai_content(msg: ModelMessage) -> str | list[dict]:
|
|
205
|
+
"""Convert ModelMessage to OpenAI API content format."""
|
|
206
206
|
validate_rendered_message(msg)
|
|
207
207
|
if not getattr(msg, "content_parts", None):
|
|
208
208
|
return msg.content
|
|
@@ -231,8 +231,8 @@ def to_openai_content(msg: ProviderMessage) -> str | list[dict]:
|
|
|
231
231
|
|
|
232
232
|
|
|
233
233
|
def to_anthropic_messages(
|
|
234
|
-
turns: list[
|
|
235
|
-
native_replay: Callable[[
|
|
234
|
+
turns: list[ModelMessage],
|
|
235
|
+
native_replay: Callable[[ModelMessage], list[dict] | None] | None = None,
|
|
236
236
|
resolved=None,
|
|
237
237
|
) -> list[dict]:
|
|
238
238
|
"""Serialize provider-neutral turns into Anthropic-native messages."""
|
|
@@ -403,7 +403,7 @@ class ContextBudgetOverflow:
|
|
|
403
403
|
@dataclass
|
|
404
404
|
class RenderedContext:
|
|
405
405
|
system_text: str = ""
|
|
406
|
-
turns: list[
|
|
406
|
+
turns: list[ModelMessage] = field(default_factory=list)
|
|
407
407
|
# Identity partition (Anthropic system[0] with cache_control). Empty when the
|
|
408
408
|
# kernel did not partition the system prompt.
|
|
409
409
|
system_stable: str = ""
|
|
@@ -412,7 +412,7 @@ class RenderedContext:
|
|
|
412
412
|
# Volatile State turn (task_state + signals), rendered after the cacheable
|
|
413
413
|
# history. None when produced by an older binding — then the State turn is
|
|
414
414
|
# still inside turns[0] and providers render turns as-is.
|
|
415
|
-
state_turn: "
|
|
415
|
+
state_turn: "ModelMessage | None" = None
|
|
416
416
|
# P1-E: count of leading turns forming the frozen prefix (byte-stable until the
|
|
417
417
|
# next compaction). The Anthropic provider pins a deep cache breakpoint here and
|
|
418
418
|
# rolls the other at the tail; None ⇒ rolling-pair fallback.
|
|
@@ -450,7 +450,7 @@ class ProviderDescriptor:
|
|
|
450
450
|
|
|
451
451
|
@runtime_checkable
|
|
452
452
|
class LLMProvider(Protocol):
|
|
453
|
-
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) ->
|
|
453
|
+
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) -> ModelMessage: ...
|
|
454
454
|
def stream(
|
|
455
455
|
self,
|
|
456
456
|
context: RenderedContext,
|
|
@@ -8,7 +8,7 @@ try:
|
|
|
8
8
|
from google import genai as google_genai
|
|
9
9
|
except ImportError: # pragma: no cover - exercised only when optional provider dep is absent.
|
|
10
10
|
google_genai = None
|
|
11
|
-
from deepstrike._kernel import
|
|
11
|
+
from deepstrike._kernel import ModelMessage, ToolSchema
|
|
12
12
|
from .stream import StreamEvent
|
|
13
13
|
from .base import RetryConfig, CircuitBreaker, RenderedContext, RuntimePolicy
|
|
14
14
|
from .gemini_adapter import GeminiAdapter
|
|
@@ -63,7 +63,7 @@ class GeminiProvider:
|
|
|
63
63
|
def runtime_policy(self) -> RuntimePolicy:
|
|
64
64
|
return _GEMINI_POLICIES.get(self._model_name, RuntimePolicy())
|
|
65
65
|
|
|
66
|
-
def _build_contents(self, turns: list[
|
|
66
|
+
def _build_contents(self, turns: list[ModelMessage]) -> list[dict]:
|
|
67
67
|
return self._adapter.build_contents(turns)
|
|
68
68
|
|
|
69
69
|
def _build_tools(self, tools: list[ToolSchema]) -> list[dict] | None:
|
|
@@ -140,7 +140,7 @@ class GeminiProvider:
|
|
|
140
140
|
confidence="exact",
|
|
141
141
|
)
|
|
142
142
|
|
|
143
|
-
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) ->
|
|
143
|
+
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) -> ModelMessage:
|
|
144
144
|
if self._circuit.is_open():
|
|
145
145
|
raise RuntimeError("Circuit breaker open")
|
|
146
146
|
|
|
@@ -6,7 +6,7 @@ import math
|
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
|
-
from deepstrike._kernel import
|
|
9
|
+
from deepstrike._kernel import ModelMessage, ToolSchema
|
|
10
10
|
from deepstrike.providers.base import RenderedContext, UnsupportedModalityError
|
|
11
11
|
from deepstrike.providers.protocol_adapter import AdapterOutput, ProtocolResponseError
|
|
12
12
|
from deepstrike.providers.stop_reason import canonicalize_stop_reason
|
|
@@ -53,7 +53,7 @@ class GeminiAdapter:
|
|
|
53
53
|
def __init__(self, model: str):
|
|
54
54
|
self._model = model
|
|
55
55
|
|
|
56
|
-
def build_contents(self, turns: list[
|
|
56
|
+
def build_contents(self, turns: list[ModelMessage]) -> list[dict]:
|
|
57
57
|
contents: list[dict] = []
|
|
58
58
|
for msg in turns:
|
|
59
59
|
if msg.role == "tool":
|
|
@@ -153,7 +153,7 @@ class GeminiAdapter:
|
|
|
153
153
|
def _function_call(part: Any) -> Any:
|
|
154
154
|
return _get(part, "function_call")
|
|
155
155
|
|
|
156
|
-
def decode_complete(self, raw: Any, input: CanonicalAdapterInput) ->
|
|
156
|
+
def decode_complete(self, raw: Any, input: CanonicalAdapterInput) -> ModelMessage:
|
|
157
157
|
content = ""
|
|
158
158
|
tool_calls = []
|
|
159
159
|
for part in self._response_parts(raw):
|
|
@@ -172,7 +172,7 @@ class GeminiAdapter:
|
|
|
172
172
|
tool_calls.append(normalized)
|
|
173
173
|
usage = _get(raw, "usage_metadata")
|
|
174
174
|
total = _usage_number(usage, "total_token_count") if usage is not None else None
|
|
175
|
-
return
|
|
175
|
+
return ModelMessage(role="assistant", content=content, tool_calls=tool_calls or None)
|
|
176
176
|
|
|
177
177
|
def create_stream_state(self, input: CanonicalAdapterInput) -> GeminiStreamState:
|
|
178
178
|
return GeminiStreamState()
|
|
@@ -4,7 +4,7 @@ from .prepared_request import PreparedProviderRequest
|
|
|
4
4
|
import logging
|
|
5
5
|
from typing import AsyncIterator
|
|
6
6
|
import httpx
|
|
7
|
-
from deepstrike._kernel import
|
|
7
|
+
from deepstrike._kernel import ModelMessage, ToolSchema
|
|
8
8
|
from .stream import StreamEvent
|
|
9
9
|
from .base import RetryConfig, CircuitBreaker, RenderedContext, RuntimePolicy
|
|
10
10
|
from .ollama_adapter import OllamaAdapter
|
|
@@ -55,7 +55,7 @@ class OllamaProvider:
|
|
|
55
55
|
body["stream"] = stream
|
|
56
56
|
return body
|
|
57
57
|
|
|
58
|
-
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) ->
|
|
58
|
+
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) -> ModelMessage:
|
|
59
59
|
if self._circuit.is_open():
|
|
60
60
|
raise Exception("Circuit breaker open")
|
|
61
61
|
|
|
@@ -6,7 +6,7 @@ import math
|
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
|
-
from deepstrike._kernel import
|
|
9
|
+
from deepstrike._kernel import ModelMessage, ToolSchema
|
|
10
10
|
from deepstrike.providers.base import UnsupportedModalityError, normalize_tool_call
|
|
11
11
|
from deepstrike.providers.protocol_adapter import AdapterOutput, ProtocolResponseError
|
|
12
12
|
from deepstrike.providers.stop_reason import canonicalize_stop_reason
|
|
@@ -113,7 +113,7 @@ class OllamaAdapter:
|
|
|
113
113
|
def _model_from_context(input: CanonicalAdapterInput) -> str:
|
|
114
114
|
return str(input.extensions.get("model") or "")
|
|
115
115
|
|
|
116
|
-
def decode_complete(self, raw: dict, input: CanonicalAdapterInput) ->
|
|
116
|
+
def decode_complete(self, raw: dict, input: CanonicalAdapterInput) -> ModelMessage:
|
|
117
117
|
message = raw.get("message") or {}
|
|
118
118
|
tool_calls = []
|
|
119
119
|
for call in message.get("tool_calls") or []:
|
|
@@ -121,7 +121,7 @@ class OllamaAdapter:
|
|
|
121
121
|
normalized = normalize_tool_call(call.get("id", ""), function.get("name", ""), function.get("arguments", {}))
|
|
122
122
|
if normalized:
|
|
123
123
|
tool_calls.append(normalized)
|
|
124
|
-
return
|
|
124
|
+
return ModelMessage(role="assistant", content=message.get("content") or "", tool_calls=tool_calls or None)
|
|
125
125
|
|
|
126
126
|
def create_stream_state(self, input: CanonicalAdapterInput) -> OllamaStreamState:
|
|
127
127
|
return OllamaStreamState()
|
|
@@ -7,7 +7,7 @@ from dataclasses import dataclass, field
|
|
|
7
7
|
from typing import Any, AsyncIterator
|
|
8
8
|
import httpx
|
|
9
9
|
from openai import AsyncOpenAI
|
|
10
|
-
from deepstrike._kernel import
|
|
10
|
+
from deepstrike._kernel import ModelMessage, ToolCall, ToolSchema
|
|
11
11
|
from .stream import StreamEvent, TextDelta, ToolCallEvent, ThinkingDelta, UsageEvent
|
|
12
12
|
from .base import RetryConfig, CircuitBreaker, ProviderDescriptor, RenderedContext, RuntimePolicy, normalize_tool_call, openai_cached_prompt_tokens, stable_prompt_cache_key, to_openai_message_params, ThinkingTagStreamExtractor, wire_request_extensions
|
|
13
13
|
from .replay import ReasoningReplayMixin, assistant_replay_key
|
|
@@ -224,7 +224,7 @@ class OpenAIProvider(ReasoningReplayMixin):
|
|
|
224
224
|
return
|
|
225
225
|
if reasoning.native_tool_calls:
|
|
226
226
|
envelope["tool_calls"] = reasoning.native_tool_calls
|
|
227
|
-
self.remember_replay_fields(
|
|
227
|
+
self.remember_replay_fields(ModelMessage(role="assistant", content=content, tool_calls=tool_calls or None), envelope)
|
|
228
228
|
|
|
229
229
|
def assess_replayability(self, context: RenderedContext, extensions: dict | None = None) -> dict:
|
|
230
230
|
"""Pre-flight query: would this history validate against this provider with
|
|
@@ -382,7 +382,7 @@ class OpenAIProvider(ReasoningReplayMixin):
|
|
|
382
382
|
context: RenderedContext,
|
|
383
383
|
tools: list[ToolSchema],
|
|
384
384
|
extensions: dict | None,
|
|
385
|
-
) ->
|
|
385
|
+
) -> ModelMessage:
|
|
386
386
|
adapter_input = self._canonical_input(context, tools, extensions)
|
|
387
387
|
plan = self._adapter.build_request(adapter_input, self._wire_dialect, self._replay_for_assistant)
|
|
388
388
|
last_exc = None
|
|
@@ -413,7 +413,7 @@ class OpenAIProvider(ReasoningReplayMixin):
|
|
|
413
413
|
output = self._adapter.push_stream_chunk(chunk, stream_state)
|
|
414
414
|
if output.replay:
|
|
415
415
|
self.remember_replay_fields(
|
|
416
|
-
|
|
416
|
+
ModelMessage(role="assistant", content=stream_state.accumulated_content,
|
|
417
417
|
tool_calls=self._adapter._final_tool_calls(stream_state.tool_call_buffers) or None),
|
|
418
418
|
output.replay,
|
|
419
419
|
)
|
|
@@ -422,14 +422,14 @@ class OpenAIProvider(ReasoningReplayMixin):
|
|
|
422
422
|
output = self._adapter.finish_stream(stream_state)
|
|
423
423
|
if output.replay:
|
|
424
424
|
self.remember_replay_fields(
|
|
425
|
-
|
|
425
|
+
ModelMessage(role="assistant", content=stream_state.accumulated_content,
|
|
426
426
|
tool_calls=self._adapter._final_tool_calls(stream_state.tool_call_buffers) or None),
|
|
427
427
|
output.replay,
|
|
428
428
|
)
|
|
429
429
|
for event in output.events:
|
|
430
430
|
yield event
|
|
431
431
|
|
|
432
|
-
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) ->
|
|
432
|
+
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) -> ModelMessage:
|
|
433
433
|
if self._circuit.is_open():
|
|
434
434
|
raise RuntimeError("Circuit breaker open")
|
|
435
435
|
|
|
@@ -472,7 +472,7 @@ class OpenAIProvider(ReasoningReplayMixin):
|
|
|
472
472
|
],
|
|
473
473
|
))
|
|
474
474
|
|
|
475
|
-
return
|
|
475
|
+
return ModelMessage(
|
|
476
476
|
role="assistant",
|
|
477
477
|
content=content,
|
|
478
478
|
tool_calls=tool_calls or None,
|
|
@@ -5,7 +5,7 @@ import json
|
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
6
|
from typing import Any, Callable
|
|
7
7
|
|
|
8
|
-
from deepstrike._kernel import
|
|
8
|
+
from deepstrike._kernel import ModelMessage, ToolCall, ToolSchema
|
|
9
9
|
from deepstrike.providers.base import (
|
|
10
10
|
ThinkingTagStreamExtractor,
|
|
11
11
|
openai_cached_prompt_tokens,
|
|
@@ -35,7 +35,7 @@ class OpenAIChatRequestPlan:
|
|
|
35
35
|
|
|
36
36
|
@dataclass(frozen=True)
|
|
37
37
|
class OpenAIChatDecodeResult:
|
|
38
|
-
message:
|
|
38
|
+
message: ModelMessage
|
|
39
39
|
replay: dict[str, Any] | None = None
|
|
40
40
|
|
|
41
41
|
|
|
@@ -250,7 +250,7 @@ class OpenAIChatAdapter:
|
|
|
250
250
|
}} for call in native_calls],
|
|
251
251
|
)
|
|
252
252
|
return OpenAIChatDecodeResult(
|
|
253
|
-
message=
|
|
253
|
+
message=ModelMessage(role="assistant", content=content, tool_calls=tool_calls or None),
|
|
254
254
|
replay=replay,
|
|
255
255
|
)
|
|
256
256
|
|
|
@@ -19,7 +19,7 @@ from dataclasses import dataclass, field
|
|
|
19
19
|
from types import SimpleNamespace
|
|
20
20
|
from typing import Any, AsyncIterator
|
|
21
21
|
from openai import AsyncOpenAI
|
|
22
|
-
from deepstrike._kernel import
|
|
22
|
+
from deepstrike._kernel import ModelMessage, ToolCall, ToolSchema
|
|
23
23
|
from .stream import StreamEvent, TextDelta, ToolCallEvent, UsageEvent
|
|
24
24
|
from .base import (
|
|
25
25
|
RetryConfig,
|
|
@@ -81,7 +81,7 @@ class OpenAIResponsesStreamState:
|
|
|
81
81
|
function_calls: dict[int, dict] = field(default_factory=dict)
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
def _message_content(message:
|
|
84
|
+
def _message_content(message: ModelMessage) -> Any:
|
|
85
85
|
"""Responses-native content for a message: a plain string when it has no parts, else a list of
|
|
86
86
|
``input_text``/``input_image`` blocks (mirrors the Node adapter)."""
|
|
87
87
|
parts = getattr(message, "content_parts", None)
|
|
@@ -167,7 +167,7 @@ class OpenAIResponsesAdapter:
|
|
|
167
167
|
|
|
168
168
|
return input_items
|
|
169
169
|
|
|
170
|
-
def _append_message(self, input_items: list[dict], message:
|
|
170
|
+
def _append_message(self, input_items: list[dict], message: ModelMessage) -> None:
|
|
171
171
|
if message.role == "assistant" and getattr(message, "tool_calls", None):
|
|
172
172
|
if message.content or getattr(message, "content_parts", None):
|
|
173
173
|
input_items.append({"role": "assistant", "content": _message_content(message)})
|
|
@@ -267,7 +267,7 @@ class OpenAIResponsesAdapter:
|
|
|
267
267
|
self._number(output_details, "reasoning_tokens")
|
|
268
268
|
return normalize_usage(raw)
|
|
269
269
|
|
|
270
|
-
def decode_complete(self, raw: Any, input: CanonicalAdapterInput) ->
|
|
270
|
+
def decode_complete(self, raw: Any, input: CanonicalAdapterInput) -> ModelMessage:
|
|
271
271
|
output = self._get(raw, "output") or []
|
|
272
272
|
decoded = self.decode_output([
|
|
273
273
|
item if isinstance(item, dict) else item.model_dump() if hasattr(item, "model_dump") else item
|
|
@@ -275,7 +275,7 @@ class OpenAIResponsesAdapter:
|
|
|
275
275
|
])
|
|
276
276
|
usage = self._get(raw, "usage")
|
|
277
277
|
self.normalize_usage(usage)
|
|
278
|
-
return
|
|
278
|
+
return ModelMessage(role="assistant", content=decoded["content"], tool_calls=decoded["tool_calls"] or None)
|
|
279
279
|
|
|
280
280
|
def create_stream_state(
|
|
281
281
|
self,
|
|
@@ -415,7 +415,7 @@ class OpenAIResponsesProvider:
|
|
|
415
415
|
resolved=getattr(self, "_resolved_runtime", None),
|
|
416
416
|
)
|
|
417
417
|
|
|
418
|
-
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) ->
|
|
418
|
+
async def complete(self, context: RenderedContext, tools: list[ToolSchema], extensions: dict | None = None) -> ModelMessage:
|
|
419
419
|
if self._circuit.is_open():
|
|
420
420
|
raise RuntimeError("Circuit breaker open")
|
|
421
421
|
|
|
@@ -9,7 +9,7 @@ from __future__ import annotations
|
|
|
9
9
|
from dataclasses import dataclass, field
|
|
10
10
|
from typing import Any, Generic, Protocol, TypeVar
|
|
11
11
|
|
|
12
|
-
from deepstrike._kernel import
|
|
12
|
+
from deepstrike._kernel import ModelMessage
|
|
13
13
|
from deepstrike.providers.stream import StreamEvent
|
|
14
14
|
from deepstrike.types.content import CanonicalAdapterInput
|
|
15
15
|
|
|
@@ -56,7 +56,7 @@ class ProtocolAdapter(Protocol, Generic[RequestT, CompleteT, ChunkT, StateT, Fin
|
|
|
56
56
|
protocol: str
|
|
57
57
|
|
|
58
58
|
def build_request(self, input: CanonicalAdapterInput) -> RequestT: ...
|
|
59
|
-
def decode_complete(self, raw: CompleteT, input: CanonicalAdapterInput) ->
|
|
59
|
+
def decode_complete(self, raw: CompleteT, input: CanonicalAdapterInput) -> ModelMessage: ...
|
|
60
60
|
def create_stream_state(self, input: CanonicalAdapterInput) -> StateT: ...
|
|
61
61
|
def push_stream_chunk(self, chunk: ChunkT, state: StateT) -> AdapterOutput: ...
|
|
62
62
|
def finish_stream(self, state: StateT, final: FinalT) -> AdapterOutput: ...
|