simbiot-harness/venv/lib/python3.12/site-packages/opentelemetry/instrumentation/cidict.py
Simbiot Harness b60439152b Simbiot Harness v0.1: тактовая лестница на Strands + CQRS/ES-спина
- harness/es.py: append-only event store + проекции (образец — кооп-портал)
- harness/levels.py: уровни 1с/1м/1ч/1д, контекст ∝ масштабу
- harness/scheduler.py: уровневые потоки, идемпотентные тики, absorbed-стабы
- harness/isolated_runner.py + _llm_worker.py: LLM-тик в сабпроцессе
  (глобальный asyncio-рантайм Strands не переживает 2+ create_harness)
- cli.py: init/task/tasks/status/events + requeue (написан самим минутным агентом)
- 9router: отдельный ключ sk-simbiot, модель auto (glm-5.3 первым)
2026-09-29 15:28:50 +00:00

71 lines
2.1 KiB
Python

# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations
from collections.abc import Iterable, Iterator, Mapping, MutableMapping
from typing import (
Any,
TypeVar,
)
KT = TypeVar("KT")
VT = TypeVar("VT")
class CIDict(MutableMapping[KT, VT]):
def __init__(
self,
data: Mapping[KT, VT] | Iterable[tuple[KT, VT]] | None = None,
) -> None:
self._data: dict[KT, tuple[KT, VT]] = {}
if data is None:
data = {}
self.update(data)
@staticmethod
def _normalize_key(key: KT) -> KT:
if isinstance(key, str):
return key.lower() # type: ignore
return key
def _get_entry(self, key: KT) -> tuple[KT, VT]:
normalized_key = self._normalize_key(key)
if normalized_key in self._data:
return self._data[normalized_key]
raise KeyError(repr(key))
def original_key(self, key: KT) -> KT:
return self._get_entry(key)[0]
def normalized_items(self) -> Iterable[tuple[KT, VT]]:
return ((key, value[1]) for key, value in self._data.items())
def __setitem__(self, key: KT, value: VT, /) -> None:
self._data[self._normalize_key(key)] = (key, value)
def __delitem__(self, key: KT, /) -> None:
try:
del self._data[self._normalize_key(key)]
except KeyError:
raise KeyError(repr(key)) from None
def __getitem__(self, key: KT, /) -> VT:
return self._get_entry(key)[1]
def __len__(self) -> int:
return len(self._data)
def __iter__(self) -> Iterator[KT]:
return (key for key, _ in self._data.values())
def __repr__(self) -> str:
return f"{self.__class__.__name__}({dict(self.items())!r})"
def __eq__(self, other: object) -> bool:
if isinstance(other, CIDict):
return dict(self.normalized_items()) == dict(other.normalized_items())
if not isinstance(other, Mapping):
return False
ciother: CIDict[Any, Any] = CIDict(other)
return dict(self.normalized_items()) == dict(ciother.normalized_items())