defer optional telemetry dependencies in perception graph

This commit is contained in:
DCCONSTRUCTIONS
2026-08-23 20:29:14 +03:00
parent cbbaea9148
commit bcda5d001a
2 changed files with 31 additions and 7 deletions
+12 -7
View File
@@ -8,14 +8,15 @@ from contextlib import AbstractContextManager
from dataclasses import dataclass, replace from dataclasses import dataclass, replace
from queue import Empty, Full, Queue from queue import Empty, Full, Queue
from threading import Event, Lock, Thread from threading import Event, Lock, Thread
from typing import TypeVar, cast from typing import TYPE_CHECKING, TypeVar, cast
from k1link.compute.pipeline_telemetry import ( if TYPE_CHECKING:
PipelineStageOutcome, from k1link.compute.pipeline_telemetry import (
PipelineTelemetryEmitter, PipelineStageOutcome,
PipelineTelemetryIdentity, PipelineTelemetryEmitter,
PipelineTelemetrySink, PipelineTelemetryIdentity,
) PipelineTelemetrySink,
)
from .baseline import BASELINE_PROFILE_ID, BASELINE_SOURCE_ID from .baseline import BASELINE_PROFILE_ID, BASELINE_SOURCE_ID
from .contracts import ( from .contracts import (
@@ -763,6 +764,8 @@ class ReferencePerceptionGraphV1:
def _run_emitter(self) -> PipelineTelemetryEmitter | None: def _run_emitter(self) -> PipelineTelemetryEmitter | None:
if self.telemetry_identity is None or self.telemetry_sink is None: if self.telemetry_identity is None or self.telemetry_sink is None:
return None return None
from k1link.compute.pipeline_telemetry import PipelineTelemetryEmitter
return PipelineTelemetryEmitter( return PipelineTelemetryEmitter(
identity=self.telemetry_identity, identity=self.telemetry_identity,
sink=self.telemetry_sink, sink=self.telemetry_sink,
@@ -772,6 +775,8 @@ class ReferencePerceptionGraphV1:
def _frame_emitter(self, packet: SourcePacket) -> PipelineTelemetryEmitter | None: def _frame_emitter(self, packet: SourcePacket) -> PipelineTelemetryEmitter | None:
if self.telemetry_identity is None or self.telemetry_sink is None: if self.telemetry_identity is None or self.telemetry_sink is None:
return None return None
from k1link.compute.pipeline_telemetry import PipelineTelemetryEmitter
identity = replace( identity = replace(
self.telemetry_identity, self.telemetry_identity,
request_id=packet.envelope.frame_id, request_id=packet.envelope.frame_id,
+19
View File
@@ -1,6 +1,8 @@
from __future__ import annotations from __future__ import annotations
import json import json
import subprocess
import sys
import threading import threading
from collections.abc import Iterator from collections.abc import Iterator
from dataclasses import replace from dataclasses import replace
@@ -62,6 +64,23 @@ from k1link.perception.recorded_source import (
) )
def test_graph_import_does_not_initialize_legacy_compute_dependencies() -> None:
result = subprocess.run(
[
sys.executable,
"-c",
(
"import sys; import k1link.perception.graph; "
"assert 'k1link.compute' not in sys.modules"
),
],
check=False,
capture_output=True,
text=True,
)
assert result.returncode == 0, result.stderr
def _status(available: bool = True) -> ModalityStatus: def _status(available: bool = True) -> ModalityStatus:
return ModalityStatus( return ModalityStatus(
available=available, available=available,