ommlds 0.0.0.dev498__py3-none-any.whl → 0.0.0.dev500__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ommlds/.omlish-manifests.json +2 -2
- ommlds/__about__.py +1 -1
- ommlds/backends/anthropic/protocol/sse/events.py +2 -0
- ommlds/backends/groq/clients.py +9 -0
- ommlds/cli/backends/meta.py +1 -1
- ommlds/minichain/_dataclasses.py +819 -671
- ommlds/minichain/backends/impls/groq/chat.py +2 -0
- ommlds/minichain/backends/impls/groq/stream.py +2 -0
- ommlds/minichain/wrappers/__init__.py +7 -0
- ommlds/minichain/{meta → wrappers}/firstinwins.py +49 -36
- ommlds/minichain/wrappers/retry.py +147 -0
- ommlds/minichain/wrappers/services.py +72 -0
- ommlds/minichain/wrappers/stream.py +57 -0
- {ommlds-0.0.0.dev498.dist-info → ommlds-0.0.0.dev500.dist-info}/METADATA +6 -6
- {ommlds-0.0.0.dev498.dist-info → ommlds-0.0.0.dev500.dist-info}/RECORD +19 -15
- ommlds/minichain/meta/__init__.py +0 -0
- {ommlds-0.0.0.dev498.dist-info → ommlds-0.0.0.dev500.dist-info}/WHEEL +0 -0
- {ommlds-0.0.0.dev498.dist-info → ommlds-0.0.0.dev500.dist-info}/entry_points.txt +0 -0
- {ommlds-0.0.0.dev498.dist-info → ommlds-0.0.0.dev500.dist-info}/licenses/LICENSE +0 -0
- {ommlds-0.0.0.dev498.dist-info → ommlds-0.0.0.dev500.dist-info}/top_level.txt +0 -0
|
@@ -7,6 +7,7 @@ from omlish.formats import json
|
|
|
7
7
|
from omlish.http import all as http
|
|
8
8
|
|
|
9
9
|
from .....backends.groq import protocol as pt
|
|
10
|
+
from .....backends.groq.clients import REQUIRED_HTTP_HEADERS
|
|
10
11
|
from ....chat.choices.services import ChatChoicesRequest
|
|
11
12
|
from ....chat.choices.services import ChatChoicesResponse
|
|
12
13
|
from ....chat.choices.services import static_check_is_chat_choices_service
|
|
@@ -65,6 +66,7 @@ class GroqChatChoicesService:
|
|
|
65
66
|
headers={
|
|
66
67
|
http.consts.HEADER_CONTENT_TYPE: http.consts.CONTENT_TYPE_JSON,
|
|
67
68
|
http.consts.HEADER_AUTH: http.consts.format_bearer_auth_header(check.not_none(self._api_key).reveal()),
|
|
69
|
+
**REQUIRED_HTTP_HEADERS,
|
|
68
70
|
},
|
|
69
71
|
data=json.dumps(raw_request).encode('utf-8'),
|
|
70
72
|
client=self._http_client,
|
|
@@ -9,6 +9,7 @@ from omlish.http import sse
|
|
|
9
9
|
from omlish.io.buffers import DelimitingBuffer
|
|
10
10
|
|
|
11
11
|
from .....backends.groq import protocol as pt
|
|
12
|
+
from .....backends.groq.clients import REQUIRED_HTTP_HEADERS
|
|
12
13
|
from ....chat.choices.services import ChatChoicesOutputs
|
|
13
14
|
from ....chat.choices.stream.services import ChatChoicesStreamRequest
|
|
14
15
|
from ....chat.choices.stream.services import ChatChoicesStreamResponse
|
|
@@ -72,6 +73,7 @@ class GroqChatChoicesStreamService:
|
|
|
72
73
|
headers={
|
|
73
74
|
http.consts.HEADER_CONTENT_TYPE: http.consts.CONTENT_TYPE_JSON,
|
|
74
75
|
http.consts.HEADER_AUTH: http.consts.format_bearer_auth_header(check.not_none(self._api_key).reveal()),
|
|
76
|
+
**REQUIRED_HTTP_HEADERS,
|
|
75
77
|
},
|
|
76
78
|
data=json.dumps(raw_request).encode('utf-8'),
|
|
77
79
|
)
|
|
@@ -1,25 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- stream lol
|
|
4
|
+
- take first open vs take first chunk
|
|
5
|
+
"""
|
|
1
6
|
import typing as ta
|
|
2
7
|
|
|
3
|
-
from omlish import check
|
|
4
8
|
from omlish import dataclasses as dc
|
|
5
9
|
from omlish import lang
|
|
6
10
|
|
|
7
|
-
from ..services.requests import Request
|
|
8
|
-
from ..services.responses import Response
|
|
9
11
|
from ..services.services import Service
|
|
10
|
-
from ..types import Option
|
|
11
12
|
from ..types import Output
|
|
13
|
+
from .services import MultiWrapperService
|
|
14
|
+
from .services import WrappedOptionT
|
|
15
|
+
from .services import WrappedOutputT
|
|
16
|
+
from .services import WrappedRequest
|
|
17
|
+
from .services import WrappedRequestV
|
|
18
|
+
from .services import WrappedResponse
|
|
19
|
+
from .services import WrappedResponseV
|
|
20
|
+
from .stream import WrappedStreamOutputT
|
|
21
|
+
from .stream import WrapperStreamService
|
|
12
22
|
|
|
13
23
|
|
|
14
24
|
with lang.auto_proxy_import(globals()):
|
|
15
25
|
import asyncio
|
|
16
26
|
|
|
17
27
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
OutputT = ta.TypeVar('OutputT', bound=Output)
|
|
28
|
+
AnyFirstInWinsService: ta.TypeAlias = ta.Union[
|
|
29
|
+
'FirstInWinsService',
|
|
30
|
+
'FirstInWinsStreamService',
|
|
31
|
+
]
|
|
23
32
|
|
|
24
33
|
|
|
25
34
|
##
|
|
@@ -36,36 +45,40 @@ class FirstInWinsServiceExceptionGroup(ExceptionGroup):
|
|
|
36
45
|
|
|
37
46
|
@dc.dataclass(frozen=True)
|
|
38
47
|
class FirstInWinsServiceOutput(Output):
|
|
39
|
-
first_in_wins_service:
|
|
48
|
+
first_in_wins_service: AnyFirstInWinsService
|
|
40
49
|
response_service: Service
|
|
41
50
|
service_exceptions: ta.Mapping[Service, Exception] | None = None
|
|
42
51
|
|
|
43
52
|
|
|
53
|
+
##
|
|
54
|
+
|
|
55
|
+
|
|
44
56
|
class FirstInWinsService(
|
|
57
|
+
MultiWrapperService[
|
|
58
|
+
WrappedRequestV,
|
|
59
|
+
WrappedOptionT,
|
|
60
|
+
WrappedResponseV,
|
|
61
|
+
WrappedOutputT,
|
|
62
|
+
],
|
|
45
63
|
lang.Abstract,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
64
|
+
):
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class FirstInWinsStreamService(
|
|
72
|
+
WrapperStreamService[
|
|
73
|
+
WrappedRequestV,
|
|
74
|
+
WrappedOptionT,
|
|
75
|
+
WrappedResponseV,
|
|
76
|
+
WrappedOutputT,
|
|
77
|
+
WrappedStreamOutputT,
|
|
51
78
|
],
|
|
79
|
+
lang.Abstract,
|
|
52
80
|
):
|
|
53
|
-
|
|
54
|
-
self,
|
|
55
|
-
*services: Service[
|
|
56
|
-
Request[
|
|
57
|
-
RequestV,
|
|
58
|
-
OptionT,
|
|
59
|
-
],
|
|
60
|
-
Response[
|
|
61
|
-
ResponseV,
|
|
62
|
-
OutputT,
|
|
63
|
-
],
|
|
64
|
-
],
|
|
65
|
-
) -> None:
|
|
66
|
-
super().__init__()
|
|
67
|
-
|
|
68
|
-
self._services = check.not_empty(services)
|
|
81
|
+
pass
|
|
69
82
|
|
|
70
83
|
|
|
71
84
|
##
|
|
@@ -73,13 +86,13 @@ class FirstInWinsService(
|
|
|
73
86
|
|
|
74
87
|
class AsyncioFirstInWinsService(
|
|
75
88
|
FirstInWinsService[
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
89
|
+
WrappedRequestV,
|
|
90
|
+
WrappedOptionT,
|
|
91
|
+
WrappedResponseV,
|
|
92
|
+
WrappedOutputT,
|
|
80
93
|
],
|
|
81
94
|
):
|
|
82
|
-
async def invoke(self, request:
|
|
95
|
+
async def invoke(self, request: WrappedRequest) -> WrappedResponse:
|
|
83
96
|
tasks: list = []
|
|
84
97
|
services_by_task: dict = {}
|
|
85
98
|
for svc in self._services:
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- tenacity shit
|
|
4
|
+
- exception filter
|
|
5
|
+
- sleep
|
|
6
|
+
- jitter
|
|
7
|
+
- stream retry:
|
|
8
|
+
- failed to open
|
|
9
|
+
- failed during stream
|
|
10
|
+
- buffer and replay??
|
|
11
|
+
- accept death mid-stream?
|
|
12
|
+
"""
|
|
13
|
+
import typing as ta
|
|
14
|
+
|
|
15
|
+
from omlish import dataclasses as dc
|
|
16
|
+
|
|
17
|
+
from ..types import Output
|
|
18
|
+
from .services import WrappedOptionT
|
|
19
|
+
from .services import WrappedOutputT
|
|
20
|
+
from .services import WrappedRequest
|
|
21
|
+
from .services import WrappedRequestV
|
|
22
|
+
from .services import WrappedResponse
|
|
23
|
+
from .services import WrappedResponseV
|
|
24
|
+
from .services import WrappedService
|
|
25
|
+
from .services import WrapperService
|
|
26
|
+
from .stream import WrappedStreamOutputT
|
|
27
|
+
from .stream import WrappedStreamResponse
|
|
28
|
+
from .stream import WrappedStreamService
|
|
29
|
+
from .stream import WrapperStreamService
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
AnyRetryService: ta.TypeAlias = ta.Union[
|
|
33
|
+
'RetryService',
|
|
34
|
+
'RetryStreamService',
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dc.dataclass(frozen=True)
|
|
42
|
+
class RetryServiceMaxRetriesExceededError(Exception):
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dc.dataclass(frozen=True)
|
|
47
|
+
class RetryServiceOutput(Output):
|
|
48
|
+
retry_service: AnyRetryService
|
|
49
|
+
num_retries: int
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class RetryService(
|
|
56
|
+
WrapperService[
|
|
57
|
+
WrappedRequestV,
|
|
58
|
+
WrappedOptionT,
|
|
59
|
+
WrappedResponseV,
|
|
60
|
+
WrappedOutputT,
|
|
61
|
+
],
|
|
62
|
+
):
|
|
63
|
+
DEFAULT_MAX_RETRIES: ta.ClassVar[int] = 3
|
|
64
|
+
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
service: WrappedService,
|
|
68
|
+
*,
|
|
69
|
+
max_retries: int | None = None,
|
|
70
|
+
) -> None:
|
|
71
|
+
super().__init__(service)
|
|
72
|
+
|
|
73
|
+
if max_retries is None:
|
|
74
|
+
max_retries = self.DEFAULT_MAX_RETRIES
|
|
75
|
+
self._max_retries = max_retries
|
|
76
|
+
|
|
77
|
+
async def invoke(self, request: WrappedRequest) -> WrappedResponse:
|
|
78
|
+
n = 0
|
|
79
|
+
|
|
80
|
+
while True:
|
|
81
|
+
try:
|
|
82
|
+
resp = await self._service.invoke(request)
|
|
83
|
+
|
|
84
|
+
except Exception as e: # noqa
|
|
85
|
+
if n < self._max_retries:
|
|
86
|
+
n += 1
|
|
87
|
+
continue
|
|
88
|
+
|
|
89
|
+
raise RetryServiceMaxRetriesExceededError from e
|
|
90
|
+
|
|
91
|
+
return resp.with_outputs(RetryServiceOutput(
|
|
92
|
+
retry_service=self,
|
|
93
|
+
num_retries=n,
|
|
94
|
+
))
|
|
95
|
+
|
|
96
|
+
raise RuntimeError # unreachable
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class RetryStreamService(
|
|
103
|
+
WrapperStreamService[
|
|
104
|
+
WrappedRequestV,
|
|
105
|
+
WrappedOptionT,
|
|
106
|
+
WrappedResponseV,
|
|
107
|
+
WrappedOutputT,
|
|
108
|
+
WrappedStreamOutputT,
|
|
109
|
+
],
|
|
110
|
+
):
|
|
111
|
+
DEFAULT_MAX_RETRIES: ta.ClassVar[int] = 3
|
|
112
|
+
|
|
113
|
+
def __init__(
|
|
114
|
+
self,
|
|
115
|
+
service: WrappedStreamService,
|
|
116
|
+
*,
|
|
117
|
+
max_retries: int | None = None,
|
|
118
|
+
) -> None:
|
|
119
|
+
super().__init__(service)
|
|
120
|
+
|
|
121
|
+
if max_retries is None:
|
|
122
|
+
max_retries = self.DEFAULT_MAX_RETRIES
|
|
123
|
+
self._max_retries = max_retries
|
|
124
|
+
|
|
125
|
+
async def invoke(self, request: WrappedRequest) -> WrappedStreamResponse:
|
|
126
|
+
n = 0
|
|
127
|
+
|
|
128
|
+
while True:
|
|
129
|
+
try:
|
|
130
|
+
resp = await self._service.invoke(request)
|
|
131
|
+
|
|
132
|
+
except Exception as e: # noqa
|
|
133
|
+
if n < self._max_retries:
|
|
134
|
+
n += 1
|
|
135
|
+
continue
|
|
136
|
+
|
|
137
|
+
raise RetryServiceMaxRetriesExceededError from e
|
|
138
|
+
|
|
139
|
+
# FIXME: lol no:
|
|
140
|
+
# - async def inner(sink: StreamResponseSink[...]) -> ta.Sequence[...Outputs] | None:
|
|
141
|
+
# - async with resp.v as st_resp:
|
|
142
|
+
return resp.with_outputs(RetryServiceOutput(
|
|
143
|
+
retry_service=self,
|
|
144
|
+
num_retries=n,
|
|
145
|
+
))
|
|
146
|
+
|
|
147
|
+
raise RuntimeError # unreachable
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from omlish import check
|
|
4
|
+
from omlish import lang
|
|
5
|
+
|
|
6
|
+
from ..services.requests import Request
|
|
7
|
+
from ..services.responses import Response
|
|
8
|
+
from ..services.services import Service
|
|
9
|
+
from ..types import Option
|
|
10
|
+
from ..types import Output
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
WrappedRequestV = ta.TypeVar('WrappedRequestV')
|
|
14
|
+
WrappedOptionT = ta.TypeVar('WrappedOptionT', bound=Option)
|
|
15
|
+
|
|
16
|
+
WrappedResponseV = ta.TypeVar('WrappedResponseV')
|
|
17
|
+
WrappedOutputT = ta.TypeVar('WrappedOutputT', bound=Output)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
WrappedRequest: ta.TypeAlias = Request[
|
|
21
|
+
WrappedRequestV,
|
|
22
|
+
WrappedOptionT,
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
WrappedResponse: ta.TypeAlias = Response[
|
|
26
|
+
WrappedResponseV,
|
|
27
|
+
WrappedOutputT,
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
WrappedService: ta.TypeAlias = Service[
|
|
31
|
+
WrappedRequest,
|
|
32
|
+
WrappedResponse,
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class WrapperService(
|
|
40
|
+
lang.Abstract,
|
|
41
|
+
ta.Generic[
|
|
42
|
+
WrappedRequestV,
|
|
43
|
+
WrappedOptionT,
|
|
44
|
+
WrappedResponseV,
|
|
45
|
+
WrappedOutputT,
|
|
46
|
+
],
|
|
47
|
+
):
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
service: WrappedService,
|
|
51
|
+
) -> None:
|
|
52
|
+
super().__init__()
|
|
53
|
+
|
|
54
|
+
self._service = service
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class MultiWrapperService(
|
|
58
|
+
lang.Abstract,
|
|
59
|
+
ta.Generic[
|
|
60
|
+
WrappedRequestV,
|
|
61
|
+
WrappedOptionT,
|
|
62
|
+
WrappedResponseV,
|
|
63
|
+
WrappedOutputT,
|
|
64
|
+
],
|
|
65
|
+
):
|
|
66
|
+
def __init__(
|
|
67
|
+
self,
|
|
68
|
+
*services: WrappedService,
|
|
69
|
+
) -> None:
|
|
70
|
+
super().__init__()
|
|
71
|
+
|
|
72
|
+
self._services = check.not_empty(services)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from omlish import lang
|
|
4
|
+
|
|
5
|
+
from ..services.requests import Request
|
|
6
|
+
from ..services.services import Service
|
|
7
|
+
from ..stream.services import StreamOptions
|
|
8
|
+
from ..stream.services import StreamResponse
|
|
9
|
+
from ..types import Output
|
|
10
|
+
from .services import WrappedOptionT
|
|
11
|
+
from .services import WrappedOutputT
|
|
12
|
+
from .services import WrappedRequestV
|
|
13
|
+
from .services import WrappedResponseV
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
WrappedStreamOutputT = ta.TypeVar('WrappedStreamOutputT', bound=Output)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
WrappedStreamOptions: ta.TypeAlias = WrappedOptionT | StreamOptions
|
|
20
|
+
|
|
21
|
+
WrappedStreamRequest: ta.TypeAlias = Request[
|
|
22
|
+
WrappedRequestV,
|
|
23
|
+
WrappedStreamOptions,
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
WrappedStreamResponse: ta.TypeAlias = StreamResponse[
|
|
27
|
+
WrappedResponseV,
|
|
28
|
+
WrappedOutputT,
|
|
29
|
+
WrappedStreamOutputT,
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
WrappedStreamService: ta.TypeAlias = Service[
|
|
33
|
+
WrappedStreamRequest,
|
|
34
|
+
WrappedStreamResponse,
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class WrapperStreamService(
|
|
42
|
+
lang.Abstract,
|
|
43
|
+
ta.Generic[
|
|
44
|
+
WrappedRequestV,
|
|
45
|
+
WrappedOptionT,
|
|
46
|
+
WrappedResponseV,
|
|
47
|
+
WrappedOutputT,
|
|
48
|
+
WrappedStreamOutputT,
|
|
49
|
+
],
|
|
50
|
+
):
|
|
51
|
+
def __init__(
|
|
52
|
+
self,
|
|
53
|
+
service: WrappedStreamService,
|
|
54
|
+
) -> None:
|
|
55
|
+
super().__init__()
|
|
56
|
+
|
|
57
|
+
self._service = service
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ommlds
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev500
|
|
4
4
|
Summary: ommlds
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,9 +14,9 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omlish==0.0.0.dev500
|
|
18
18
|
Provides-Extra: all
|
|
19
|
-
Requires-Dist: omdev==0.0.0.
|
|
19
|
+
Requires-Dist: omdev==0.0.0.dev500; extra == "all"
|
|
20
20
|
Requires-Dist: llama-cpp-python~=0.3; extra == "all"
|
|
21
21
|
Requires-Dist: mlx~=0.30; sys_platform == "darwin" and extra == "all"
|
|
22
22
|
Requires-Dist: mlx-lm~=0.29; sys_platform == "darwin" and extra == "all"
|
|
@@ -32,13 +32,13 @@ Requires-Dist: regex>=2025.0; extra == "all"
|
|
|
32
32
|
Requires-Dist: numpy>=1.26; extra == "all"
|
|
33
33
|
Requires-Dist: pytesseract~=0.3; extra == "all"
|
|
34
34
|
Requires-Dist: rapidocr-onnxruntime~=1.4; extra == "all"
|
|
35
|
-
Requires-Dist: pillow~=12.
|
|
35
|
+
Requires-Dist: pillow~=12.1; extra == "all"
|
|
36
36
|
Requires-Dist: ddgs~=9.10; extra == "all"
|
|
37
37
|
Requires-Dist: mwparserfromhell~=0.7; extra == "all"
|
|
38
38
|
Requires-Dist: wikitextparser~=0.56; extra == "all"
|
|
39
39
|
Requires-Dist: lxml>=5.3; python_version < "3.13" and extra == "all"
|
|
40
40
|
Provides-Extra: omdev
|
|
41
|
-
Requires-Dist: omdev==0.0.0.
|
|
41
|
+
Requires-Dist: omdev==0.0.0.dev500; extra == "omdev"
|
|
42
42
|
Provides-Extra: backends
|
|
43
43
|
Requires-Dist: llama-cpp-python~=0.3; extra == "backends"
|
|
44
44
|
Requires-Dist: mlx~=0.30; sys_platform == "darwin" and extra == "backends"
|
|
@@ -60,7 +60,7 @@ Provides-Extra: ocr
|
|
|
60
60
|
Requires-Dist: pytesseract~=0.3; extra == "ocr"
|
|
61
61
|
Requires-Dist: rapidocr-onnxruntime~=1.4; extra == "ocr"
|
|
62
62
|
Provides-Extra: pillow
|
|
63
|
-
Requires-Dist: pillow~=12.
|
|
63
|
+
Requires-Dist: pillow~=12.1; extra == "pillow"
|
|
64
64
|
Provides-Extra: search
|
|
65
65
|
Requires-Dist: ddgs~=9.10; extra == "search"
|
|
66
66
|
Provides-Extra: wiki
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
ommlds/.omlish-manifests.json,sha256=
|
|
1
|
+
ommlds/.omlish-manifests.json,sha256=kLsoDH1Pe7R1m4KgsXa-WxZapb_OyQs3mBi0XYyTn1g,27872
|
|
2
2
|
ommlds/README.md,sha256=xhbl2n19GznXrIzAGdlX8PAYJYsOo_Zu63I7G1UFRZE,398
|
|
3
|
-
ommlds/__about__.py,sha256=
|
|
3
|
+
ommlds/__about__.py,sha256=cdexoZ9J6msGQeIwveAx4JM0WlBDrWdjRkhSI9VHB9Q,1901
|
|
4
4
|
ommlds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
ommlds/_hacks/__init__.py,sha256=ajfw7dMKH8UuloeQ5MSxWwgAmdWf2v8gm-K3uLP9wtY,196
|
|
6
6
|
ommlds/_hacks/funcs.py,sha256=8XseIblP7yolDUD7WQSGn1LP90IQzByVejSzphAPDyM,2861
|
|
@@ -17,7 +17,7 @@ ommlds/backends/anthropic/protocol/types.py,sha256=f-_VXg_-KlhGIKp0R8vL50Rg_Zxqi
|
|
|
17
17
|
ommlds/backends/anthropic/protocol/sse/__init__.py,sha256=LpijqXk0ceMDcgwOvZ8iLoh0I328JSfG8V0JalcZD3I,98
|
|
18
18
|
ommlds/backends/anthropic/protocol/sse/_marshal.py,sha256=2No-qWRKV9ilOhC5NqHAA92DJF0fAcr4-OPvEP0KOjQ,627
|
|
19
19
|
ommlds/backends/anthropic/protocol/sse/assemble.py,sha256=MVpA0iSU2LNMXy4VpIVV8Oe7nj3dgmXpfLe-7nnA5QE,6552
|
|
20
|
-
ommlds/backends/anthropic/protocol/sse/events.py,sha256=
|
|
20
|
+
ommlds/backends/anthropic/protocol/sse/events.py,sha256=77xVcT6H22uRIxZcxc0_-79jpnR_ZyVXdRjILxoeS5A,2574
|
|
21
21
|
ommlds/backends/cerebras/__init__.py,sha256=-RtLrdEGN2da1KCf7YNs32jN-kJhT_kNVrcOv4x_J-w,101
|
|
22
22
|
ommlds/backends/cerebras/_dataclasses.py,sha256=Z4NZSwc1mFZqScqRWvv-LK69bsX2XFYkzw9oqk6nKgM,215150
|
|
23
23
|
ommlds/backends/cerebras/_marshal.py,sha256=KqhIymYaVUJ5-XubSHLDiEagK_jmp-738mbduazlEE8,658
|
|
@@ -30,6 +30,7 @@ ommlds/backends/google/protocol/types.py,sha256=JDft5-5sPuy8sFWTvid4JuC9a9EnuQiz
|
|
|
30
30
|
ommlds/backends/groq/__init__.py,sha256=-RtLrdEGN2da1KCf7YNs32jN-kJhT_kNVrcOv4x_J-w,101
|
|
31
31
|
ommlds/backends/groq/_dataclasses.py,sha256=4l1oBNjYYqL8Ye_ZQCF0pPszL1NkoNiAM25Any2xmUw,200765
|
|
32
32
|
ommlds/backends/groq/_marshal.py,sha256=3o4CVK9VbP_UnEbXZ4fQJuZK3Sy9xnkXTTempSDSvgE,602
|
|
33
|
+
ommlds/backends/groq/clients.py,sha256=n1zvVPvk5lJ42JMSSU3EFGYUJ9Az-YAOU6DTGNsJ8_M,152
|
|
33
34
|
ommlds/backends/groq/protocol.py,sha256=ieKrjlxcDE5RqWcugc996O5Ksy4Chse_RdigPQPbP2Y,7823
|
|
34
35
|
ommlds/backends/llamacpp/__init__.py,sha256=zXFpLXE4a2vEl0jcPDyKlPHHfZ3Z8Dz0twhEIyZ8-vg,59
|
|
35
36
|
ommlds/backends/llamacpp/buildwheel.py,sha256=q9ghCLVbm8Jm6syrZlBP-x1qNDd0wSl15B2OXBtDBQ8,3813
|
|
@@ -111,7 +112,7 @@ ommlds/cli/backends/catalog.py,sha256=snQSdUyFiNJhvzVRShBqqp1bZpZlmoKvonypNMZz3H
|
|
|
111
112
|
ommlds/cli/backends/configs.py,sha256=RvNWxsJDSsHc0eWA6hI1_3n__HU7rXAUmzS06ykMPh0,137
|
|
112
113
|
ommlds/cli/backends/inject.py,sha256=NBXfTNZiRD476FUn9TgzbaCTkm2RoOYSl97CoMLRYWE,3997
|
|
113
114
|
ommlds/cli/backends/injection.py,sha256=aCscVcq0_gobzNgLEflGInFC9b_dtnuQgLZ0wX_iTWg,325
|
|
114
|
-
ommlds/cli/backends/meta.py,sha256=
|
|
115
|
+
ommlds/cli/backends/meta.py,sha256=MXlFBq2pq7PNtJysETvr7xsTXk_6f7OHk7BEo7Albao,1001
|
|
115
116
|
ommlds/cli/backends/types.py,sha256=sut62bGJ3baDbQs3-AwnOwJrvw0VTysqQw8f3yJww8w,966
|
|
116
117
|
ommlds/cli/content/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
117
118
|
ommlds/cli/content/messages.py,sha256=4qW8ac2umJxnehNI0eS0sqVWlzjv8BDDg4WBOOx-pkM,925
|
|
@@ -237,7 +238,7 @@ ommlds/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
237
238
|
ommlds/datasets/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
238
239
|
ommlds/datasets/lib/movies.py,sha256=LmdfoXsZU9XMM_r-sxCLv_s06BFzwWO4xUj6sc9XVcI,1961
|
|
239
240
|
ommlds/minichain/__init__.py,sha256=QrVg3CYm-g2zkMYWfS-v5XqiLQLAxhNLi-Fok0RgcT8,13022
|
|
240
|
-
ommlds/minichain/_dataclasses.py,sha256=
|
|
241
|
+
ommlds/minichain/_dataclasses.py,sha256=bwUWt87unXQEtmtuB4u-QWTCrU6NWpM3sVwdXky2fY4,927389
|
|
241
242
|
ommlds/minichain/_marshal.py,sha256=n9PGWrHhvAmGIc7KDOYt3IF9Z6G0ncXskyICTp3Ji6k,1923
|
|
242
243
|
ommlds/minichain/_typedvalues.py,sha256=NEQ7YCD7YtYJoEKHRwBksHFv-CULvyXniju_IeVfD5s,2349
|
|
243
244
|
ommlds/minichain/completion.py,sha256=lQ0LfCIYZsvDqteHhhDIv16D2_gn_xMfEL0ouywE5Yo,1033
|
|
@@ -280,10 +281,10 @@ ommlds/minichain/backends/impls/google/search.py,sha256=y5_6seSRU8CFnLA_Ja8XEMbI
|
|
|
280
281
|
ommlds/minichain/backends/impls/google/stream.py,sha256=AT8qbP0EqJUnf-D45aTbEQ0h5lvgtIK6XKki0t8RkZE,8029
|
|
281
282
|
ommlds/minichain/backends/impls/google/tools.py,sha256=bP4bqHt1oZTvrcObkjQCNAUJEXrR9fFIRuvjsVFM910,5109
|
|
282
283
|
ommlds/minichain/backends/impls/groq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
283
|
-
ommlds/minichain/backends/impls/groq/chat.py,sha256=
|
|
284
|
+
ommlds/minichain/backends/impls/groq/chat.py,sha256=75Zst0j1VNSUYzP2eArKEOSvRI9TrRqtoTNwVMqO-1s,2845
|
|
284
285
|
ommlds/minichain/backends/impls/groq/names.py,sha256=RnvBSytxPF1a9Bj_OPVELuD1nAKJnJrG3ZwJfYo6Szs,1075
|
|
285
286
|
ommlds/minichain/backends/impls/groq/protocol.py,sha256=QNvqcfR9FbAIJv1fVerayws5gYU1am3oLFXmYMnQdX4,5261
|
|
286
|
-
ommlds/minichain/backends/impls/groq/stream.py,sha256=
|
|
287
|
+
ommlds/minichain/backends/impls/groq/stream.py,sha256=nyY3r6yu8T7oo7XkCg9-x2n1oPfDz4GDf6Rxxg328uw,5226
|
|
287
288
|
ommlds/minichain/backends/impls/huggingface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
288
289
|
ommlds/minichain/backends/impls/huggingface/configs.py,sha256=6jsBtPNXOP57PcpxNTVLGWLc-18Iwn_lDbGouwCJTIQ,258
|
|
289
290
|
ommlds/minichain/backends/impls/huggingface/repos.py,sha256=NDanA_rFwT-K2gKghkHMxqejbYy6uctz10S6yREfbg0,807
|
|
@@ -417,8 +418,6 @@ ommlds/minichain/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
417
418
|
ommlds/minichain/llms/_marshal.py,sha256=YR7n2GVhS9I2rDvKe-VqzS-u1WbLcJT9DgFBO6oZ9fo,1518
|
|
418
419
|
ommlds/minichain/llms/tokens.py,sha256=RPrAzf4Qx9xNPGj7_EkzcVOR9qIGkhQg8AM6qhr7gfw,292
|
|
419
420
|
ommlds/minichain/llms/types.py,sha256=STXV-zAhJ2yytbVn6JSNxCLDIqmKpsg0q4vq8ueRvJA,1130
|
|
420
|
-
ommlds/minichain/meta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
421
|
-
ommlds/minichain/meta/firstinwins.py,sha256=gEOT4pc7wjLqlRNS6cAWwk6NY25DYqyhiIL0-KZiF18,3333
|
|
422
421
|
ommlds/minichain/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
423
422
|
ommlds/minichain/models/configs.py,sha256=5iyz_yDk3nlfQouRTvy__8I_ohn7bh67LTbFn30t5UU,825
|
|
424
423
|
ommlds/minichain/models/names.py,sha256=SqXrOkSFTI2VkfA5puGGb0EFg2TvvNZpJgTF7eS60CY,1158
|
|
@@ -476,6 +475,11 @@ ommlds/minichain/vectors/search.py,sha256=27MTUiVT2xmSnmgJTAR09oQaiNRh1ixj0mGZVu
|
|
|
476
475
|
ommlds/minichain/vectors/similarity.py,sha256=etqSswPH7ERThueqnCUHULsM3rpsVslRFua0m_ps_F4,1308
|
|
477
476
|
ommlds/minichain/vectors/stores.py,sha256=etbLCS0RXAEmqcCdqiys8twa8R7Y_DcjQ_VqnEnRF4s,530
|
|
478
477
|
ommlds/minichain/vectors/types.py,sha256=xSAK1Xfkubqf95QgJhSHrwBu_C5quuye3wZAASmxJkM,3473
|
|
478
|
+
ommlds/minichain/wrappers/__init__.py,sha256=kXyc5BHVI35GXGmIf0zkKfCVIqD8q9PFENblye5qCqc,110
|
|
479
|
+
ommlds/minichain/wrappers/firstinwins.py,sha256=fqTq7siw28IsjGar8tXlxBsMJuCbogiv7nBCPcxhHe4,3464
|
|
480
|
+
ommlds/minichain/wrappers/retry.py,sha256=1A4TTD8RXUpCDjo7a0T1qeB5n8i7bsw473bmPCOS00c,3444
|
|
481
|
+
ommlds/minichain/wrappers/services.py,sha256=cALV1wTh5RiIjkU23_KbuCtuNWlv4xDAiE5SpMgOk7Y,1387
|
|
482
|
+
ommlds/minichain/wrappers/stream.py,sha256=-H0O_Eyzsabk--mtIzobWdMdj3WnqonEZ9-k9_XdWiI,1223
|
|
479
483
|
ommlds/nanochat/LICENSE,sha256=QrsJ8zmor4uQ07SWm29uS6Sv87XGFBA7Ax_M33HI93I,1072
|
|
480
484
|
ommlds/nanochat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
481
485
|
ommlds/nanochat/tokenizers.py,sha256=DuDLJAawl_BuwTO1Jj8ANDkqwMFh6jkV9IPjj9DMhfA,17575
|
|
@@ -507,9 +511,9 @@ ommlds/wiki/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
|
507
511
|
ommlds/wiki/utils/io.py,sha256=UKgDJGtmpnWvIqVd2mJc2QNPOqlToEY1GEveNp6_pMo,7088
|
|
508
512
|
ommlds/wiki/utils/progress.py,sha256=EhvKcMFYtsarCQhIahlO6f0SboyAKP3UwUyrnVnP-Vk,3222
|
|
509
513
|
ommlds/wiki/utils/xml.py,sha256=sNJNkZ9rT8B-kJMO6bRz8J1USy4fyPx0m2PwTX7vxYY,3846
|
|
510
|
-
ommlds-0.0.0.
|
|
511
|
-
ommlds-0.0.0.
|
|
512
|
-
ommlds-0.0.0.
|
|
513
|
-
ommlds-0.0.0.
|
|
514
|
-
ommlds-0.0.0.
|
|
515
|
-
ommlds-0.0.0.
|
|
514
|
+
ommlds-0.0.0.dev500.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
515
|
+
ommlds-0.0.0.dev500.dist-info/METADATA,sha256=5JjoGJXAdwa8XdFscqAxcIGgWi-lsZo3KQ_tb_l8fI4,3495
|
|
516
|
+
ommlds-0.0.0.dev500.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
517
|
+
ommlds-0.0.0.dev500.dist-info/entry_points.txt,sha256=Z5YWtX7ClfiCKdW-dd_CSVvM0h4yQpJPi-2G3q6gNFo,35
|
|
518
|
+
ommlds-0.0.0.dev500.dist-info/top_level.txt,sha256=Rbnk5d5wi58vnAXx13WFZqdQ4VX8hBCS2hEL3WeXOhY,7
|
|
519
|
+
ommlds-0.0.0.dev500.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|