File size: 1,232 Bytes
fa1140b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""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)