tools/ is a Hexagonal inner layer that must never depend on LLM concerns (ADR 0002), but describe_screen_semantic.py imported semantic.enricher, which pulls in the Anthropic client by default. Relocated the wrapper to runtime/, which is where LLM-dependent code is allowed to live; updated the tool registry and all test imports accordingly. No behavior change. openspec: semantic-scene capability, archived change semantic-scene-runtime
33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from core.models import Scene
|
|
from device.manager import DeviceManager
|
|
from perception.ocr import PaddleOCREngine
|
|
from perception.provider import PerceptionProvider
|
|
from semantic.config import SemanticConfig
|
|
from semantic.enricher import SemanticLLMClient, enrich_scene
|
|
from semantic.models import SemanticScene
|
|
from tools.describe_screen import describe_screen
|
|
|
|
|
|
def describe_screen_semantic(
|
|
device_id: str | None = None,
|
|
*,
|
|
manager: DeviceManager | None = None,
|
|
ocr_engine: PaddleOCREngine | None = None,
|
|
perception_provider: PerceptionProvider | None = None,
|
|
client: SemanticLLMClient | None = None,
|
|
semantic_config: SemanticConfig | None = None,
|
|
) -> dict[str, Scene | SemanticScene | None]:
|
|
scene = describe_screen(
|
|
device_id,
|
|
manager=manager,
|
|
ocr_engine=ocr_engine,
|
|
perception_provider=perception_provider,
|
|
)
|
|
semantic_scene = enrich_scene(scene, client=client, config=semantic_config)
|
|
return {
|
|
"scene": scene,
|
|
"semantic_scene": semantic_scene,
|
|
}
|