- 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 первым)
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import collections
|
|
import collections.abc
|
|
import typing
|
|
from typing import Any
|
|
|
|
from pydantic_core import PydanticOmit, core_schema
|
|
|
|
SEQUENCE_ORIGIN_MAP: dict[Any, Any] = {
|
|
typing.Deque: collections.deque, # noqa: UP006
|
|
collections.deque: collections.deque,
|
|
list: list,
|
|
typing.List: list, # noqa: UP006
|
|
tuple: tuple,
|
|
typing.Tuple: tuple, # noqa: UP006
|
|
set: set,
|
|
typing.AbstractSet: set,
|
|
typing.Set: set, # noqa: UP006
|
|
frozenset: frozenset,
|
|
typing.FrozenSet: frozenset, # noqa: UP006
|
|
typing.Sequence: list,
|
|
typing.MutableSequence: list,
|
|
typing.MutableSet: set,
|
|
# this doesn't handle subclasses of these
|
|
# parametrized typing.Set creates one of these
|
|
collections.abc.MutableSet: set,
|
|
collections.abc.Set: frozenset,
|
|
}
|
|
|
|
|
|
def serialize_sequence_via_list(
|
|
v: Any, handler: core_schema.SerializerFunctionWrapHandler, info: core_schema.SerializationInfo
|
|
) -> Any:
|
|
items: list[Any] = []
|
|
|
|
mapped_origin = SEQUENCE_ORIGIN_MAP.get(type(v), None)
|
|
if mapped_origin is None:
|
|
# we shouldn't hit this branch, should probably add a serialization error or something
|
|
return v
|
|
|
|
for index, item in enumerate(v):
|
|
try:
|
|
v = handler(item, index)
|
|
except PydanticOmit: # noqa: PERF203
|
|
pass
|
|
else:
|
|
items.append(v)
|
|
|
|
if info.mode_is_json():
|
|
return items
|
|
else:
|
|
return mapped_origin(items)
|