- 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 первым)
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
import typing_extensions
|
|
from typing import Any, Type, Union, Literal, Optional
|
|
from datetime import date, datetime
|
|
from typing_extensions import get_args as _get_args, get_origin as _get_origin
|
|
|
|
from .._types import StrBytesIntFloat
|
|
from ._datetime_parse import parse_date as _parse_date, parse_datetime as _parse_datetime
|
|
|
|
_LITERAL_TYPES: set[object] = {Literal, typing_extensions.Literal}
|
|
|
|
|
|
def get_args(tp: type[Any]) -> tuple[Any, ...]:
|
|
return _get_args(tp)
|
|
|
|
|
|
def get_origin(tp: type[Any]) -> type[Any] | None:
|
|
return _get_origin(tp)
|
|
|
|
|
|
def is_union(tp: Optional[Type[Any]]) -> bool:
|
|
if sys.version_info < (3, 10):
|
|
return tp is Union # type: ignore[comparison-overlap]
|
|
else:
|
|
import types
|
|
|
|
return tp is Union or tp is types.UnionType # type: ignore[comparison-overlap]
|
|
|
|
|
|
def is_typeddict(tp: Type[Any]) -> bool:
|
|
return typing_extensions.is_typeddict(tp)
|
|
|
|
|
|
def is_literal_type(tp: Type[Any]) -> bool:
|
|
return get_origin(tp) in _LITERAL_TYPES
|
|
|
|
|
|
def parse_date(value: Union[date, StrBytesIntFloat]) -> date:
|
|
return _parse_date(value)
|
|
|
|
|
|
def parse_datetime(value: Union[datetime, StrBytesIntFloat]) -> datetime:
|
|
return _parse_datetime(value)
|