Skip to content

Commit ae1df1b

Browse files
authored
Update SSLR and add LLM image generator (#218)
1 parent 929ffc3 commit ae1df1b

File tree

9 files changed

+503
-124
lines changed

9 files changed

+503
-124
lines changed

llmstack/common/utils/sslr/_client.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import httpx
66
from openai import OpenAI
7+
from openai._base_client import _StreamT
78
from openai._client import SyncAPIClient
89
from openai._models import FinalRequestOptions
910
from openai._utils import is_given
@@ -29,6 +30,18 @@
2930

3031

3132
class LLMClient(SyncAPIClient):
33+
def _prepare_options(
34+
self,
35+
options: FinalRequestOptions, # noqa: ARG002
36+
) -> None:
37+
return super()._prepare_options(options)
38+
39+
def _prepare_request(
40+
self,
41+
request: httpx.Request, # noqa: ARG002
42+
) -> None:
43+
return super()._prepare_request(request)
44+
3245
@override
3346
def _build_request(
3447
self,
@@ -54,7 +67,15 @@ def _build_request(
5467

5568
return super()._build_request(options)
5669

57-
@override
70+
def _process_response_data(
71+
self,
72+
*,
73+
data: object,
74+
cast_to: type[ResponseT],
75+
response: httpx.Response,
76+
) -> ResponseT:
77+
return super()._process_response_data(data=data, cast_to=cast_to, response=response)
78+
5879
def _process_response(
5980
self,
6081
*,
@@ -166,6 +187,23 @@ def _process_response(
166187
stream_cls=stream_cls,
167188
)
168189

190+
def _request(
191+
self,
192+
*,
193+
cast_to: Type[ResponseT],
194+
options: FinalRequestOptions,
195+
remaining_retries: int | None,
196+
stream: bool,
197+
stream_cls: type[_StreamT] | None,
198+
) -> ResponseT | _StreamT:
199+
return super()._request(
200+
cast_to=cast_to,
201+
options=options,
202+
remaining_retries=remaining_retries,
203+
stream=stream,
204+
stream_cls=stream_cls,
205+
)
206+
169207

170208
class LLM(LLMClient, OpenAI):
171209
completions: Completions

llmstack/common/utils/sslr/_streaming.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -114,29 +114,6 @@ def __stream__(self) -> Iterator[_T]:
114114

115115

116116
class LLMAnthropicStream(Stream[_T]):
117-
def __init__(
118-
self,
119-
*,
120-
cast_to: type[_T],
121-
response: httpx.Response,
122-
client: Any,
123-
) -> None:
124-
self.response = response
125-
self._cast_to = cast_to
126-
self._client = client
127-
self._decoder = SSEDecoder()
128-
self._iterator = self.__stream__()
129-
130-
def __next__(self) -> _T:
131-
return self._iterator.__next__()
132-
133-
def __iter__(self) -> Iterator[_T]:
134-
for item in self._iterator:
135-
yield item
136-
137-
def _iter_events(self) -> Iterator[ServerSentEvent]:
138-
yield from self._decoder.iter(self.response.iter_lines())
139-
140117
def __stream__(self) -> Iterator[_T]:
141118
cast_to = cast(Any, self._cast_to)
142119
response = self.response

llmstack/common/utils/sslr/resources/images.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ def generate(
105105
timeout: Union[float, httpx.Timeout, None] = NOT_GIVEN,
106106
**kwargs,
107107
) -> images_response.ImagesResponse:
108+
response_format = "b64_json"
109+
108110
if self._client._llm_router_provider == PROVIDER_OPENAI:
109111
path = "/images/generations"
110112
body = maybe_transform(

llmstack/common/utils/sslr/resources/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def list(
2727
"""
2828
if self._client._llm_router_provider == PROVIDER_STABILITYAI:
2929
return self._get_api_list(
30-
"/engines/list",
30+
"v1/engines/list",
3131
page=SyncPage[Model],
3232
options=make_request_options(
3333
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout

0 commit comments

Comments
 (0)