- 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 первым)
83 lines
2.5 KiB
Python
83 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
import typing
|
|
from types import TracebackType
|
|
|
|
from .._models import Request, Response
|
|
|
|
# TODO(Marcelo): When Python 3.10 reaches EOF, we can use `typing.Self` instead of defining those two.
|
|
T = typing.TypeVar("T", bound="BaseTransport")
|
|
A = typing.TypeVar("A", bound="AsyncBaseTransport")
|
|
|
|
__all__ = ["AsyncBaseTransport", "BaseTransport"]
|
|
|
|
|
|
class BaseTransport:
|
|
def __enter__(self: T) -> T:
|
|
return self
|
|
|
|
def __exit__(
|
|
self,
|
|
exc_type: type[BaseException] | None = None,
|
|
exc_value: BaseException | None = None,
|
|
traceback: TracebackType | None = None,
|
|
) -> None:
|
|
self.close()
|
|
|
|
def handle_request(self, request: Request) -> Response:
|
|
"""
|
|
Send a single HTTP request and return a response.
|
|
|
|
Developers shouldn't typically ever need to call into this API directly,
|
|
since the Client class provides all the higher level user-facing API
|
|
niceties.
|
|
|
|
In order to properly release any network resources, the response
|
|
stream should *either* be consumed immediately, with a call to
|
|
`response.stream.read()`, or else the `handle_request` call should
|
|
be followed with a try/finally block to ensuring the stream is
|
|
always closed.
|
|
|
|
Example usage:
|
|
|
|
with httpx2.HTTPTransport() as transport:
|
|
req = httpx2.Request(
|
|
method=b"GET",
|
|
url=(b"https", b"www.example.com", 443, b"/"),
|
|
headers=[(b"Host", b"www.example.com")],
|
|
)
|
|
resp = transport.handle_request(req)
|
|
body = resp.stream.read()
|
|
print(resp.status_code, resp.headers, body)
|
|
|
|
|
|
Takes a `Request` instance as the only argument.
|
|
|
|
Returns a `Response` instance.
|
|
"""
|
|
raise NotImplementedError("The 'handle_request' method must be implemented.") # pragma: no cover
|
|
|
|
def close(self) -> None:
|
|
pass
|
|
|
|
|
|
class AsyncBaseTransport:
|
|
async def __aenter__(self: A) -> A:
|
|
return self
|
|
|
|
async def __aexit__(
|
|
self,
|
|
exc_type: type[BaseException] | None = None,
|
|
exc_value: BaseException | None = None,
|
|
traceback: TracebackType | None = None,
|
|
) -> None:
|
|
await self.aclose()
|
|
|
|
async def handle_async_request(
|
|
self,
|
|
request: Request,
|
|
) -> Response:
|
|
raise NotImplementedError("The 'handle_async_request' method must be implemented.") # pragma: no cover
|
|
|
|
async def aclose(self) -> None:
|
|
pass
|