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.
@@ -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
  )
@@ -0,0 +1,7 @@
1
+ """
2
+ TODO:
3
+ - ratelimit
4
+ - option - output injection / removal
5
+ - 'switch'
6
+ - ** reflection passthrough **
7
+ """
@@ -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
- RequestV = ta.TypeVar('RequestV')
19
- OptionT = ta.TypeVar('OptionT', bound=Option)
20
-
21
- ResponseV = ta.TypeVar('ResponseV')
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: 'FirstInWinsService'
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
- ta.Generic[
47
- RequestV,
48
- OptionT,
49
- ResponseV,
50
- OutputT,
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
- def __init__(
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
- RequestV,
77
- OptionT,
78
- ResponseV,
79
- OutputT,
89
+ WrappedRequestV,
90
+ WrappedOptionT,
91
+ WrappedResponseV,
92
+ WrappedOutputT,
80
93
  ],
81
94
  ):
82
- async def invoke(self, request: Request[RequestV, OptionT]) -> Response[ResponseV, OutputT]:
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.dev498
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.dev498
17
+ Requires-Dist: omlish==0.0.0.dev500
18
18
  Provides-Extra: all
19
- Requires-Dist: omdev==0.0.0.dev498; extra == "all"
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.0; extra == "all"
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.dev498; extra == "omdev"
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.0; extra == "pillow"
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=4oWvJPTzSD23kh5mTOn9Re8mSPVsnGcbwa_K6vIytq0,27872
1
+ ommlds/.omlish-manifests.json,sha256=kLsoDH1Pe7R1m4KgsXa-WxZapb_OyQs3mBi0XYyTn1g,27872
2
2
  ommlds/README.md,sha256=xhbl2n19GznXrIzAGdlX8PAYJYsOo_Zu63I7G1UFRZE,398
3
- ommlds/__about__.py,sha256=WdimIvmwSVnOcBFSsy_exjgKdKAgkDQfg0aF5Qmd0Eo,1901
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=pLscyLFpxcrtOijNPRgivrxYBFpE270oDW1dECjGtFg,2507
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=wq10RYcUElF3Yudhky7bwte3EGk2ARk2odmRzDJQA_M,997
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=fGfDbbBfLJsQ8IpNcOgodhELktDz7pLG7Rzv2YnZoPQ,920381
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=XXJznM6h2fBBtrY8MggMUNJf8thyFTM3p1XzFImwkAk,2743
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=5PZHrs_QNyKofJClKq5R5aOsq-H26UeWH7uncbJGrmI,5124
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.dev498.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
511
- ommlds-0.0.0.dev498.dist-info/METADATA,sha256=Dd7rc54ZPGDTPefacZxN66EgdVBtKxIq3-F5A9yEIEo,3495
512
- ommlds-0.0.0.dev498.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
513
- ommlds-0.0.0.dev498.dist-info/entry_points.txt,sha256=Z5YWtX7ClfiCKdW-dd_CSVvM0h4yQpJPi-2G3q6gNFo,35
514
- ommlds-0.0.0.dev498.dist-info/top_level.txt,sha256=Rbnk5d5wi58vnAXx13WFZqdQ4VX8hBCS2hEL3WeXOhY,7
515
- ommlds-0.0.0.dev498.dist-info/RECORD,,
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