"""UpstreamProvider:组合 Auth + Client,对外暴露 duck-type stream() 供电 deps/adapters 用。 duck-type 接口:``async stream(prompt, model_id=None) -> AsyncIterator[IREvent]``。 app.deps._RetryingClient 与 app.orchestrator 均按此接口使用(不依赖具体上游)。 """ from __future__ import annotations from collections.abc import AsyncIterator from typing import Any from app.events import IREvent class UpstreamProvider: def __init__(self, account: Any, settings: Any, http_client: Any, auth: Any, client: Any) -> None: self.account = account self.settings = settings self.http_client = http_client self._auth = auth self._client = client async def stream(self, prompt: str, model_id: str | None = None, **kw: Any) -> AsyncIterator[IREvent]: async for ir in self._client.stream(prompt, model_id=model_id, **kw): yield ir async def upload_image(self, data: bytes, mime: str, filename: str = "") -> str: return await self._client.upload_image(data, mime, filename) async def upload_file(self, data: bytes, mime: str, filename: str = "") -> str: return await self._client.upload_file(data, mime, filename)