ommlds 0.0.0.dev502__py3-none-any.whl → 0.0.0.dev504__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.
Files changed (39) hide show
  1. ommlds/.omlish-manifests.json +14 -7
  2. ommlds/backends/anthropic/protocol/_dataclasses.py +16 -16
  3. ommlds/backends/cerebras/_dataclasses.py +42 -42
  4. ommlds/backends/google/protocol/_dataclasses.py +64 -64
  5. ommlds/backends/groq/_dataclasses.py +36 -36
  6. ommlds/backends/ollama/_dataclasses.py +28 -28
  7. ommlds/backends/openai/protocol/_dataclasses.py +88 -88
  8. ommlds/backends/tavily/_dataclasses.py +16 -16
  9. ommlds/cli/_dataclasses.py +64 -114
  10. ommlds/cli/backends/inject.py +20 -0
  11. ommlds/cli/backends/meta.py +47 -0
  12. ommlds/cli/sessions/chat/drivers/ai/tools.py +3 -7
  13. ommlds/cli/sessions/chat/facades/commands/base.py +1 -1
  14. ommlds/minichain/__init__.py +38 -4
  15. ommlds/minichain/_dataclasses.py +452 -289
  16. ommlds/minichain/backends/impls/anthropic/stream.py +1 -1
  17. ommlds/minichain/backends/impls/cerebras/names.py +15 -0
  18. ommlds/minichain/backends/impls/cerebras/stream.py +39 -52
  19. ommlds/minichain/backends/impls/google/chat.py +11 -82
  20. ommlds/minichain/backends/impls/google/protocol.py +105 -0
  21. ommlds/minichain/backends/impls/google/stream.py +49 -132
  22. ommlds/minichain/backends/impls/groq/stream.py +40 -53
  23. ommlds/minichain/backends/impls/ollama/chat.py +1 -1
  24. ommlds/minichain/backends/impls/openai/format.py +1 -0
  25. ommlds/minichain/backends/impls/openai/stream.py +40 -55
  26. ommlds/minichain/http/__init__.py +0 -0
  27. ommlds/minichain/http/stream.py +195 -0
  28. ommlds/minichain/resources.py +22 -1
  29. ommlds/minichain/stream/services.py +24 -1
  30. ommlds/minichain/wrappers/firstinwins.py +1 -1
  31. ommlds/minichain/wrappers/instrument.py +1 -1
  32. ommlds/minichain/wrappers/retry.py +34 -13
  33. {ommlds-0.0.0.dev502.dist-info → ommlds-0.0.0.dev504.dist-info}/METADATA +4 -4
  34. {ommlds-0.0.0.dev502.dist-info → ommlds-0.0.0.dev504.dist-info}/RECORD +38 -36
  35. ommlds/minichain/stream/wrap.py +0 -62
  36. {ommlds-0.0.0.dev502.dist-info → ommlds-0.0.0.dev504.dist-info}/WHEEL +0 -0
  37. {ommlds-0.0.0.dev502.dist-info → ommlds-0.0.0.dev504.dist-info}/entry_points.txt +0 -0
  38. {ommlds-0.0.0.dev502.dist-info → ommlds-0.0.0.dev504.dist-info}/licenses/LICENSE +0 -0
  39. {ommlds-0.0.0.dev502.dist-info → ommlds-0.0.0.dev504.dist-info}/top_level.txt +0 -0
@@ -1,19 +1,25 @@
1
1
  """
2
2
  TODO:
3
3
  - tenacity shit
4
- - exception filter
4
+ - exception filter - retryable vs not
5
+ - explicit RetryableError wrapper?
5
6
  - sleep
6
7
  - jitter
8
+ - log, on retry / on except callbacks, blah blah
7
9
  - stream retry:
8
10
  - failed to open
9
11
  - failed during stream
10
12
  - buffer and replay??
11
13
  - accept death mid-stream?
14
+ - ** probably **: cannot sanely impose any nontrivial stream retry strat at this layer -
12
15
  """
13
16
  import typing as ta
14
17
 
15
18
  from omlish import dataclasses as dc
16
19
 
20
+ from ..resources import Resources
21
+ from ..stream.services import StreamResponseSink
22
+ from ..stream.services import new_stream_response
17
23
  from ..types import Output
18
24
  from .services import WrappedOptionT
19
25
  from .services import WrappedOutputT
@@ -38,7 +44,7 @@ AnyRetryService: ta.TypeAlias = ta.Union[
38
44
  ##
39
45
 
40
46
 
41
- @dc.dataclass(frozen=True)
47
+ @dc.dataclass()
42
48
  class RetryServiceMaxRetriesExceededError(Exception):
43
49
  pass
44
50
 
@@ -127,7 +133,32 @@ class RetryStreamService(
127
133
 
128
134
  while True:
129
135
  try:
130
- resp = await self._service.invoke(request)
136
+ async with Resources.new() as rs:
137
+ in_resp = await self._service.invoke(request)
138
+ in_vs = await rs.enter_async_context(in_resp.v)
139
+
140
+ async def inner(sink: StreamResponseSink[WrappedResponseV]) -> ta.Sequence[WrappedOutputT] | None:
141
+ async for v in in_vs:
142
+ await sink.emit(v)
143
+
144
+ return in_vs.outputs
145
+
146
+ outs = [
147
+ *in_resp.outputs,
148
+ RetryServiceOutput(
149
+ retry_service=self,
150
+ num_retries=n,
151
+ ),
152
+ ]
153
+
154
+ # FIXME: ??
155
+ # if (ur := tv.as_collection(request.options).get(UseResources)) is not None:
156
+
157
+ return await new_stream_response(
158
+ rs,
159
+ inner,
160
+ outs,
161
+ )
131
162
 
132
163
  except Exception as e: # noqa
133
164
  if n < self._max_retries:
@@ -135,13 +166,3 @@ class RetryStreamService(
135
166
  continue
136
167
 
137
168
  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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ommlds
3
- Version: 0.0.0.dev502
3
+ Version: 0.0.0.dev504
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.dev502
17
+ Requires-Dist: omlish==0.0.0.dev504
18
18
  Provides-Extra: all
19
- Requires-Dist: omdev==0.0.0.dev502; extra == "all"
19
+ Requires-Dist: omdev==0.0.0.dev504; 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"
@@ -38,7 +38,7 @@ 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.dev502; extra == "omdev"
41
+ Requires-Dist: omdev==0.0.0.dev504; 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"
@@ -1,4 +1,4 @@
1
- ommlds/.omlish-manifests.json,sha256=s6qy0XrbNb0iojn6OOLp-nuuELfpYGwX_SB9GFyShqU,28066
1
+ ommlds/.omlish-manifests.json,sha256=8fbwe2p3vu-qOXuBIKtwadocgl-rNP6H42qRRR_j9mY,28359
2
2
  ommlds/README.md,sha256=xhbl2n19GznXrIzAGdlX8PAYJYsOo_Zu63I7G1UFRZE,398
3
3
  ommlds/__about__.py,sha256=cdexoZ9J6msGQeIwveAx4JM0WlBDrWdjRkhSI9VHB9Q,1901
4
4
  ommlds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -11,7 +11,7 @@ ommlds/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  ommlds/backends/huggingface.py,sha256=JfEyfKOxU3-SY_ojtXBJFNeD-NIuKjvMe3GL3e93wNA,1175
12
12
  ommlds/backends/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  ommlds/backends/anthropic/protocol/__init__.py,sha256=g05gJKHqrySqtvMBAaZUueRxYafBTGOLw7FfEDiXi34,248
14
- ommlds/backends/anthropic/protocol/_dataclasses.py,sha256=ZErSw7rjLzRQL0P65ffipzIidCz9_3UhprmRUMPloNI,80697
14
+ ommlds/backends/anthropic/protocol/_dataclasses.py,sha256=LJGB0yaRbdwRgNlMR0nDQrYRk4uv9R7mtRZDcjR91nw,80681
15
15
  ommlds/backends/anthropic/protocol/_marshal.py,sha256=RHbwekaw21lTS_1KBX9z6dLpbmWmyYUE5j6Uyq1tn0w,539
16
16
  ommlds/backends/anthropic/protocol/types.py,sha256=f-_VXg_-KlhGIKp0R8vL50Rg_ZxqiBvQUGexQaDf8HY,2761
17
17
  ommlds/backends/anthropic/protocol/sse/__init__.py,sha256=LpijqXk0ceMDcgwOvZ8iLoh0I328JSfG8V0JalcZD3I,98
@@ -19,16 +19,16 @@ ommlds/backends/anthropic/protocol/sse/_marshal.py,sha256=2No-qWRKV9ilOhC5NqHAA9
19
19
  ommlds/backends/anthropic/protocol/sse/assemble.py,sha256=MVpA0iSU2LNMXy4VpIVV8Oe7nj3dgmXpfLe-7nnA5QE,6552
20
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
- ommlds/backends/cerebras/_dataclasses.py,sha256=Z4NZSwc1mFZqScqRWvv-LK69bsX2XFYkzw9oqk6nKgM,215150
22
+ ommlds/backends/cerebras/_dataclasses.py,sha256=VPR97XO7Qka5_R6GERCgrtNEFuYCaMM5JGfjPcbx0Xw,215108
23
23
  ommlds/backends/cerebras/_marshal.py,sha256=KqhIymYaVUJ5-XubSHLDiEagK_jmp-738mbduazlEE8,658
24
24
  ommlds/backends/cerebras/protocol.py,sha256=gfOdPgJRg0XsZIMgrZh8yppAB7iuzgSVM8qFv2Spq_I,8848
25
25
  ommlds/backends/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  ommlds/backends/google/protocol/__init__.py,sha256=5fguMBg9qGfTEvEBCgjFbDBfRzaiRdil6d1DakJGvPY,214
27
- ommlds/backends/google/protocol/_dataclasses.py,sha256=tySVfhYQuufyrsB2-kPBPVFqtu86IjhiED_O3HHcH3o,305060
27
+ ommlds/backends/google/protocol/_dataclasses.py,sha256=KECT4r6gBPVtiEvb1y0kj_HLeH-Y8Rgp_a5CTbd4Q14,304996
28
28
  ommlds/backends/google/protocol/_marshal.py,sha256=LWikcdMDrKQ0lMtclNXwK9qamijUBzK62nrEVo2OFtc,305
29
29
  ommlds/backends/google/protocol/types.py,sha256=JDft5-5sPuy8sFWTvid4JuC9a9EnuQizt9dyAV2L56s,17536
30
30
  ommlds/backends/groq/__init__.py,sha256=-RtLrdEGN2da1KCf7YNs32jN-kJhT_kNVrcOv4x_J-w,101
31
- ommlds/backends/groq/_dataclasses.py,sha256=4l1oBNjYYqL8Ye_ZQCF0pPszL1NkoNiAM25Any2xmUw,200765
31
+ ommlds/backends/groq/_dataclasses.py,sha256=8XK7IEEJNGqSFib_s3dFf2bMH1TJ1RT-NvGBSXf6sCE,200729
32
32
  ommlds/backends/groq/_marshal.py,sha256=3o4CVK9VbP_UnEbXZ4fQJuZK3Sy9xnkXTTempSDSvgE,602
33
33
  ommlds/backends/groq/clients.py,sha256=n1zvVPvk5lJ42JMSSU3EFGYUJ9Az-YAOU6DTGNsJ8_M,152
34
34
  ommlds/backends/groq/protocol.py,sha256=ieKrjlxcDE5RqWcugc996O5Ksy4Chse_RdigPQPbP2Y,7823
@@ -53,12 +53,12 @@ ommlds/backends/mlx/tokenization/detokenization/bpe.py,sha256=cIw6-r-cyXTfZdyfGR
53
53
  ommlds/backends/mlx/tokenization/detokenization/naive.py,sha256=6L-SvphzP1z16cmVB4QC9VraF7khE8ZcvKqIwwFqN6U,1779
54
54
  ommlds/backends/mlx/tokenization/detokenization/spm.py,sha256=IYSnEm-C0z_o5TKLJE_Rj6P0nNd-prT6psVPKsERWAE,1751
55
55
  ommlds/backends/ollama/__init__.py,sha256=-RtLrdEGN2da1KCf7YNs32jN-kJhT_kNVrcOv4x_J-w,101
56
- ommlds/backends/ollama/_dataclasses.py,sha256=WRJ1eKO0PDKRGkE6ZciAHbZRtDUVok3fOuat_7msPW0,188008
56
+ ommlds/backends/ollama/_dataclasses.py,sha256=D3Jz0K7BuDMO5BB3XYW7fC-wzXXCDd9hyBCY15zlazQ,187980
57
57
  ommlds/backends/ollama/protocol.py,sha256=Zq9MTvE8moUUVqtUcuhmn_DdDELPp9xb1r3dzwxm4MI,4505
58
58
  ommlds/backends/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  ommlds/backends/openai/protocol/__init__.py,sha256=S-p81JfMaS0nwdII9jyhcmj0c5fJJD5sHwphnY45WdI,1862
60
60
  ommlds/backends/openai/protocol/_common.py,sha256=r4EXmw1fBFHjU5vbWTDvlM_fsafdIVg3d3PNw4F9m-Q,313
61
- ommlds/backends/openai/protocol/_dataclasses.py,sha256=I7w3VKjkXqAp2pOCn6jyWL2OLuAj1PbpnyJhp7nICFY,375746
61
+ ommlds/backends/openai/protocol/_dataclasses.py,sha256=2vLfQyErQlOINwviL_4ZzkdmyLTXJgsbY5EAaQQjdPg,375658
62
62
  ommlds/backends/openai/protocol/_marshal.py,sha256=V9s7old4lRzabr28kKVMNfa5lkrJ_F1MqYfAEed4cMo,839
63
63
  ommlds/backends/openai/protocol/completionusage.py,sha256=hoJ68nUU3IoCl1QVT8tcprQRbAZbgksCdnYrQS8xdPs,944
64
64
  ommlds/backends/openai/protocol/chatcompletion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -70,7 +70,7 @@ ommlds/backends/openai/protocol/chatcompletion/response.py,sha256=_e-uw9fbpudTJs
70
70
  ommlds/backends/openai/protocol/chatcompletion/responseformat.py,sha256=UtkyOKlEMVv_OyeLYvL4dROV4ZdqUge7MmuBFQGTn7k,999
71
71
  ommlds/backends/openai/protocol/chatcompletion/tokenlogprob.py,sha256=VTj9aI_wqcOArzHFG8W4R8RCIJZ8izpIUosVzAnrhQ8,573
72
72
  ommlds/backends/tavily/__init__.py,sha256=-RtLrdEGN2da1KCf7YNs32jN-kJhT_kNVrcOv4x_J-w,101
73
- ommlds/backends/tavily/_dataclasses.py,sha256=aYPNb9-FegU8IjhQzoJjQwARSAY9-4fQWKorPsCPo-A,90755
73
+ ommlds/backends/tavily/_dataclasses.py,sha256=Vy3vrxYzVhaMww5GRqsWFNcRSC5mNKYLQcGmR2qBpiA,90739
74
74
  ommlds/backends/tavily/protocol.py,sha256=8ioCdovoD3dwfsK-B2YSQCh-6CyujaxzUaEUJ8yL1EA,5930
75
75
  ommlds/backends/tinygrad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  ommlds/backends/tinygrad/tinygrad.py,sha256=Va2mI11Q76IN9vLCYozMRXbEDVKxjKvRI0iQXJNJtJI,342
@@ -102,7 +102,7 @@ ommlds/backends/transformers/filecache.py,sha256=ycfswt7f4qRrPSTFRhofXZaDBuDPpyp
102
102
  ommlds/backends/transformers/streamers.py,sha256=Hu_9lp_kUilKjOfs7Ixqr2NoA5FuRn2eRh8JdvaBDYc,1688
103
103
  ommlds/cli/__init__.py,sha256=-RtLrdEGN2da1KCf7YNs32jN-kJhT_kNVrcOv4x_J-w,101
104
104
  ommlds/cli/__main__.py,sha256=1ffCb0fcUOJMzxROJmJRXQ8PSOVYv7KrcuBtT95cf0c,140
105
- ommlds/cli/_dataclasses.py,sha256=bvMEFRUiIrRvWhlvxbEYCkmwA5yu-SKgfVuDoSfYORo,166944
105
+ ommlds/cli/_dataclasses.py,sha256=qUx7WaHCYwvjZ5_jQjAr_EZ0Pouk5AjQG0HnisxZCEw,164764
106
106
  ommlds/cli/asyncs.py,sha256=NAMzzaZq7ORjlbbBB_Y9vcM9qoBpGf4VJNtl_3p_8G4,629
107
107
  ommlds/cli/inject.py,sha256=Bt-T-vQIbp8vh6q21Tt3wDztFZ9FPxNhH2ocrAfjArE,815
108
108
  ommlds/cli/main.py,sha256=n_13EimSCt2x9wkn4tULk9gNOvuCHuHeDcuEYtrcUgQ,11172
@@ -110,9 +110,9 @@ ommlds/cli/secrets.py,sha256=wwtcKjDH34wywfs5zixx3TMbWXCvlZj-PwQoLMM7Fqs,473
110
110
  ommlds/cli/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
111
  ommlds/cli/backends/catalog.py,sha256=snQSdUyFiNJhvzVRShBqqp1bZpZlmoKvonypNMZz3HI,3002
112
112
  ommlds/cli/backends/configs.py,sha256=RvNWxsJDSsHc0eWA6hI1_3n__HU7rXAUmzS06ykMPh0,137
113
- ommlds/cli/backends/inject.py,sha256=NBXfTNZiRD476FUn9TgzbaCTkm2RoOYSl97CoMLRYWE,3997
113
+ ommlds/cli/backends/inject.py,sha256=TbYdh9VsbhIobZSw1RSF1YjMOrcV-et0_U6RgwXjkUc,4946
114
114
  ommlds/cli/backends/injection.py,sha256=aCscVcq0_gobzNgLEflGInFC9b_dtnuQgLZ0wX_iTWg,325
115
- ommlds/cli/backends/meta.py,sha256=MXlFBq2pq7PNtJysETvr7xsTXk_6f7OHk7BEo7Albao,1001
115
+ ommlds/cli/backends/meta.py,sha256=4BfVDJp8jIt28LSvg4lleB9m279mx-t5Jamf5zDp4Z8,2249
116
116
  ommlds/cli/backends/types.py,sha256=sut62bGJ3baDbQs3-AwnOwJrvw0VTysqQw8f3yJww8w,966
117
117
  ommlds/cli/content/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  ommlds/cli/content/messages.py,sha256=4qW8ac2umJxnehNI0eS0sqVWlzjv8BDDg4WBOOx-pkM,925
@@ -146,7 +146,7 @@ ommlds/cli/sessions/chat/drivers/ai/inject.py,sha256=aipgnPRDwxFKkSBU__uMNc1RVzY
146
146
  ommlds/cli/sessions/chat/drivers/ai/injection.py,sha256=2O_ELMusxQsYaB2oqvzjYpZQzjshocJup7Z5unzoUIY,404
147
147
  ommlds/cli/sessions/chat/drivers/ai/rendering.py,sha256=srDRaepttzHSn8w4Cet07bDtGiSApUO4xyhiPbuMU0A,2277
148
148
  ommlds/cli/sessions/chat/drivers/ai/services.py,sha256=PUySl7Fz4ttElW-V6poEnvF-RaRmbjU3cHULHun5rdk,2508
149
- ommlds/cli/sessions/chat/drivers/ai/tools.py,sha256=XmF-HF7OiUiqXuIgT0QuePmqnHTmpjK-lLt5WocAiws,1093
149
+ ommlds/cli/sessions/chat/drivers/ai/tools.py,sha256=q8YSsYWAKa4lIlzs4yiyjA47ABDEmfnwidNkFIE4-LY,954
150
150
  ommlds/cli/sessions/chat/drivers/ai/types.py,sha256=_Ees5ia0fKMr-BvKpTeryY-KXWP0bAfWrOGg2JDFpuE,913
151
151
  ommlds/cli/sessions/chat/drivers/events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
152
  ommlds/cli/sessions/chat/drivers/events/inject.py,sha256=quPbkuhPyJ_zFpFzh5hrkqWspwk9El0a8_82r1LphIY,449
@@ -192,7 +192,7 @@ ommlds/cli/sessions/chat/facades/facade.py,sha256=3O8IdcuPquCA8fKMjmaj3p0P-OpNAg
192
192
  ommlds/cli/sessions/chat/facades/inject.py,sha256=V7vxYtG7w6BdOKU-ntQfu1BfKSpDXyK22FCdUoyCsT8,632
193
193
  ommlds/cli/sessions/chat/facades/ui.py,sha256=GVbLgydHBhc3z0WOjyCDwTw5IOq1l0u0FLDbAwe093c,618
194
194
  ommlds/cli/sessions/chat/facades/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
- ommlds/cli/sessions/chat/facades/commands/base.py,sha256=_VMSdD0L-PES7BoVUZiYJaK9pScb9_1XqZaMnLXdDkE,2033
195
+ ommlds/cli/sessions/chat/facades/commands/base.py,sha256=G4G0-xXi4xAExSrL1zDl_wR6_8m59nVhZuCFjWeIgk8,2022
196
196
  ommlds/cli/sessions/chat/facades/commands/configs.py,sha256=qMTC7zMn80iS85t06WptCx-XS6V2pt19j6TzutXGVZo,116
197
197
  ommlds/cli/sessions/chat/facades/commands/inject.py,sha256=HlwJoN_yequ6ls_7YLg0aNhbsqR-vByEfwQmOnJP54g,821
198
198
  ommlds/cli/sessions/chat/facades/commands/injection.py,sha256=qdYn791FsYH5kHOOneoHXvfPfY6ag6cw43h5-LORKQ0,319
@@ -237,8 +237,8 @@ ommlds/cli/state/storage.py,sha256=Wr8DVuEGUxfFJn0tMWNTVdint6NBDdLKstNWSjx8sKw,3
237
237
  ommlds/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
238
  ommlds/datasets/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
239
  ommlds/datasets/lib/movies.py,sha256=LmdfoXsZU9XMM_r-sxCLv_s06BFzwWO4xUj6sc9XVcI,1961
240
- ommlds/minichain/__init__.py,sha256=vJkLRL9sbR1fH5pPNUdKNWkZCtX5JbFHw98-5501zbc,13129
241
- ommlds/minichain/_dataclasses.py,sha256=OIBmfIHAmXID0BO8WAxlPleWp3Lnm0-s5rse85VjZMM,940770
240
+ ommlds/minichain/__init__.py,sha256=GryYNuSiSv7LvoIyP6rYGDnHe2Q4Rkr4majHaEd2nhs,13794
241
+ ommlds/minichain/_dataclasses.py,sha256=F-kqXtzODV1RbcjR3LpTwLWqbj4CU872AhFdXECbVos,948452
242
242
  ommlds/minichain/_marshal.py,sha256=n9PGWrHhvAmGIc7KDOYt3IF9Z6G0ncXskyICTp3Ji6k,1923
243
243
  ommlds/minichain/_typedvalues.py,sha256=NEQ7YCD7YtYJoEKHRwBksHFv-CULvyXniju_IeVfD5s,2349
244
244
  ommlds/minichain/completion.py,sha256=lQ0LfCIYZsvDqteHhhDIv16D2_gn_xMfEL0ouywE5Yo,1033
@@ -246,7 +246,7 @@ ommlds/minichain/configs.py,sha256=WwrHxfkDAfo_RtuCqUgySthj-2W26lZbpuQoghUyGNw,1
246
246
  ommlds/minichain/envs.py,sha256=vE2CSeT6KYxOpPY72VbFLzGUnBERYdhfiEUlvSRHkXE,225
247
247
  ommlds/minichain/json.py,sha256=0_5rV5Zi2qPOvXi2CLAc5DF7FN3jK3ABbjoKdjtTuVo,360
248
248
  ommlds/minichain/metadata.py,sha256=NRrcfN2l4XArHXje3vA9AmkDceXsN-ymT8fbmbW0Ka8,2228
249
- ommlds/minichain/resources.py,sha256=CcFIUrxPGuxUabG74zL0yByZsyGJISxLVK1nULSZPyo,5488
249
+ ommlds/minichain/resources.py,sha256=ERGSVNcfuvjY8lLpcIvoB1X4KVn831F4lmUn7wnYw-M,5880
250
250
  ommlds/minichain/search.py,sha256=YOMJKkTLLSfGKaxltk9bf5OdPq7MpCtLOC3NZ_4iq-E,1269
251
251
  ommlds/minichain/standard.py,sha256=l7C6EXE4FgfJOphl0vHMwCq4FvMNViloz7pPfMsRnGU,2637
252
252
  ommlds/minichain/types.py,sha256=K6RRjpUi17UEG0cqPrrvbVANU0iRVh3WLiH-y6oEWFI,414
@@ -264,27 +264,28 @@ ommlds/minichain/backends/impls/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-
264
264
  ommlds/minichain/backends/impls/anthropic/chat.py,sha256=e4Kcbjvca_yaZsNB_-h335gSCbz4ma1lMUvuR4WzEFE,4874
265
265
  ommlds/minichain/backends/impls/anthropic/names.py,sha256=t70dOuzqpSu9LE_MxfOl2mQmwfTkELT7jWduvuEVMbk,1099
266
266
  ommlds/minichain/backends/impls/anthropic/protocol.py,sha256=eMqkl7ML5btqJ27_9l6RY2zdTMsQe0k3Kn_keNq0-Mk,3337
267
- ommlds/minichain/backends/impls/anthropic/stream.py,sha256=jxKzytoYJLK9JftihGhWTcFIoXFgouQR7Yu5Q1j_ku8,8794
267
+ ommlds/minichain/backends/impls/anthropic/stream.py,sha256=86nYXeJGwz86n_PXZ-2Azli7FTtgBZPYw8eqO6d3LbQ,8803
268
268
  ommlds/minichain/backends/impls/cerebras/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
269
  ommlds/minichain/backends/impls/cerebras/chat.py,sha256=FbwXrOMbHIIzO8gLZsyI3faYJYFYWPcxZTMxcpIaB4Y,2858
270
- ommlds/minichain/backends/impls/cerebras/names.py,sha256=NcJF7Py3y8EiQUJ5gL3KV2l25rpsi4Hc3_bwHv7lncQ,574
270
+ ommlds/minichain/backends/impls/cerebras/names.py,sha256=g0Chpq80JIha4xdV7coxJblLgckKY2bNfLnn1pe_6zk,874
271
271
  ommlds/minichain/backends/impls/cerebras/protocol.py,sha256=9ldK0_XM7il0JX3jjcLL8svBiRANrgY65V1Dq4ANevw,5268
272
- ommlds/minichain/backends/impls/cerebras/stream.py,sha256=gMGlP_QNQ9h8qGZSoFwEZ-mpND7_hx86y3smrsLrUX8,5150
272
+ ommlds/minichain/backends/impls/cerebras/stream.py,sha256=o-GUC3y34HzfP0ibOndPe1eSCkgv0J9I0uZqkbR8kVo,3956
273
273
  ommlds/minichain/backends/impls/duckduckgo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
274
274
  ommlds/minichain/backends/impls/duckduckgo/search.py,sha256=HA5UriBVvNw6-6vmeYJsm83LxsFsksLtzFxj-kdzoPE,1010
275
275
  ommlds/minichain/backends/impls/dummy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
276
  ommlds/minichain/backends/impls/dummy/chat.py,sha256=FUTvNPWmb4Hm-axglvPiqbvLwE7sajHOM5H7j9Qj2-c,2283
277
277
  ommlds/minichain/backends/impls/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
278
- ommlds/minichain/backends/impls/google/chat.py,sha256=lGb5blGLlcBlt9xeDZJvbh5SlV7fgfezd5_As_SPBXo,6499
278
+ ommlds/minichain/backends/impls/google/chat.py,sha256=jT7AIevnP5jKxArp0VPppEGCNCihcIdblO3qKGpWGPo,3876
279
279
  ommlds/minichain/backends/impls/google/names.py,sha256=Yt7xL84JZEtPf7CIcBzEBrWAfEUUs2_gXk2W7m5wC3g,1051
280
+ ommlds/minichain/backends/impls/google/protocol.py,sha256=Re4iKzXwNQEeBhMe3Mu2yYfGrOOJemupy5JaL0i9MHU,2585
280
281
  ommlds/minichain/backends/impls/google/search.py,sha256=y5_6seSRU8CFnLA_Ja8XEMbIBWSgwBzE1iBf-qyz0tA,3427
281
- ommlds/minichain/backends/impls/google/stream.py,sha256=AT8qbP0EqJUnf-D45aTbEQ0h5lvgtIK6XKki0t8RkZE,8029
282
+ ommlds/minichain/backends/impls/google/stream.py,sha256=3_rUtobcF3kSeQqfhsowhYbjZ7IYRDIzwsFYKvdhxrI,4711
282
283
  ommlds/minichain/backends/impls/google/tools.py,sha256=bP4bqHt1oZTvrcObkjQCNAUJEXrR9fFIRuvjsVFM910,5109
283
284
  ommlds/minichain/backends/impls/groq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
284
285
  ommlds/minichain/backends/impls/groq/chat.py,sha256=75Zst0j1VNSUYzP2eArKEOSvRI9TrRqtoTNwVMqO-1s,2845
285
286
  ommlds/minichain/backends/impls/groq/names.py,sha256=RnvBSytxPF1a9Bj_OPVELuD1nAKJnJrG3ZwJfYo6Szs,1075
286
287
  ommlds/minichain/backends/impls/groq/protocol.py,sha256=QNvqcfR9FbAIJv1fVerayws5gYU1am3oLFXmYMnQdX4,5261
287
- ommlds/minichain/backends/impls/groq/stream.py,sha256=nyY3r6yu8T7oo7XkCg9-x2n1oPfDz4GDf6Rxxg328uw,5226
288
+ ommlds/minichain/backends/impls/groq/stream.py,sha256=CEjNQEibiQWB7znyj1GE7dG2eA7KrPA7y_6-hgrRKa4,3995
288
289
  ommlds/minichain/backends/impls/huggingface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
289
290
  ommlds/minichain/backends/impls/huggingface/configs.py,sha256=6jsBtPNXOP57PcpxNTVLGWLc-18Iwn_lDbGouwCJTIQ,258
290
291
  ommlds/minichain/backends/impls/huggingface/repos.py,sha256=NDanA_rFwT-K2gKghkHMxqejbYy6uctz10S6yREfbg0,807
@@ -296,15 +297,15 @@ ommlds/minichain/backends/impls/llamacpp/stream.py,sha256=XMKNMGzn5dFIZCqfEQdUvy
296
297
  ommlds/minichain/backends/impls/mlx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
297
298
  ommlds/minichain/backends/impls/mlx/chat.py,sha256=tmZZAmVg-XcbxZYGNHrKC0hiJbxW88pgEHqIEC5D2Xc,7536
298
299
  ommlds/minichain/backends/impls/ollama/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
299
- ommlds/minichain/backends/impls/ollama/chat.py,sha256=vCf_Pw9_4D-gNFD7OrIbWnEOqJE_Vxb_mxiZ0NgCP4c,6816
300
+ ommlds/minichain/backends/impls/ollama/chat.py,sha256=jg9qwNYiJg8xvkluSkAAR9pfV7KjpBCA6X7k0hmvTMU,6825
300
301
  ommlds/minichain/backends/impls/ollama/protocol.py,sha256=zB0Q6PChiRlskDhjvpXIb3pSeLcH1wFg5QUqfo20R-s,4796
301
302
  ommlds/minichain/backends/impls/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
302
303
  ommlds/minichain/backends/impls/openai/chat.py,sha256=G1IK94PwB16rYCkRos9JEuiAu1GgCK4CnZFOIShhpig,2856
303
304
  ommlds/minichain/backends/impls/openai/completion.py,sha256=4Mi4Zvrq5fCqUd0asL3WiCbCdmxOdo0NFkoZMfdsYXY,1939
304
305
  ommlds/minichain/backends/impls/openai/embedding.py,sha256=BNtvKYLTsnQwQR9Tv3Fr8zCYN1kr1UNdJ15lcsjz6X0,1765
305
- ommlds/minichain/backends/impls/openai/format.py,sha256=yhQNvDWN9xWhb8e6M25JLiln-C5wYmaULH4Aib-DcbM,7459
306
+ ommlds/minichain/backends/impls/openai/format.py,sha256=aWzkTy8F8glVNQaPvSw1jy3YjbzOfTL_IBLtdmfmHIk,7479
306
307
  ommlds/minichain/backends/impls/openai/names.py,sha256=M1spn4Yio6LEnKWEzPqXSrzJg3wsf2M1iZIYFAvxb80,1550
307
- ommlds/minichain/backends/impls/openai/stream.py,sha256=bsZeGUepqOl9AcN44kWk03V6q-v1ewBCfZqb_MJEfxg,5454
308
+ ommlds/minichain/backends/impls/openai/stream.py,sha256=gRQxC4C7cU1NFHDsonOH88_bXN7fx1SNuEil6NrGYSY,4173
308
309
  ommlds/minichain/backends/impls/sentencepiece/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
309
310
  ommlds/minichain/backends/impls/sentencepiece/tokens.py,sha256=S32bkN5bbAeLrRLW0VW2N4dEOKvBwt2mMS3CGbcmzQI,1679
310
311
  ommlds/minichain/backends/impls/tinygrad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -391,6 +392,8 @@ ommlds/minichain/docs/__init__.py,sha256=vNpT6sA5YDalFqsCFn0DjUvarxRtRl3w2V9liEU
391
392
  ommlds/minichain/docs/docs.py,sha256=Ex7hiqaiYDB9hQhUjuzot8MFktl3LIGG41YBFaNoC80,1340
392
393
  ommlds/minichain/docs/dtypes.py,sha256=BRZmLK9NfQwITBYmDOmRPDlFg1RP5BYWT0Xw04AinF8,499
393
394
  ommlds/minichain/docs/filters.py,sha256=rIW_x4QR7P2a2sqsEDw0xWJOKtK670i_bWfMZ52Jt_c,2277
395
+ ommlds/minichain/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
+ ommlds/minichain/http/stream.py,sha256=GmN53v4ZW_Zyxy51yW-Un7-rdBQceAtZjazi3llbRDE,5371
394
397
  ommlds/minichain/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
395
398
  ommlds/minichain/lib/bash.py,sha256=a7HUzb0KOCPRjJuWuJW6IGUxcF53Zx13q6huHO_82nw,872
396
399
  ommlds/minichain/lib/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -437,8 +440,7 @@ ommlds/minichain/services/requests.py,sha256=PznUkVISx8PEPtio7KGH0YEvktkBp9FqU_W
437
440
  ommlds/minichain/services/responses.py,sha256=jSUFUrY0DDnRyimh3pD2ee2ZnOcH8oQxxZnwiLf5p9A,3381
438
441
  ommlds/minichain/services/services.py,sha256=c2uHH5Pt0wtUDQgJQEbw6NsS5NVSXMJirWISJ5FaRNg,685
439
442
  ommlds/minichain/stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
440
- ommlds/minichain/stream/services.py,sha256=YXfEj3ZXKZ3Svkig6f3hOReHgZnLY2tDn2bgB0RIoRI,5566
441
- ommlds/minichain/stream/wrap.py,sha256=nQC0aCi49I18nF0Yx8qiiLkhIAECV6s6o4pvOy5Kx98,2041
443
+ ommlds/minichain/stream/services.py,sha256=H6osaS7bhU451llcAc71_lhjR8bts7IFyNB66N2BNEc,5674
442
444
  ommlds/minichain/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
443
445
  ommlds/minichain/text/applypatch.py,sha256=rHB6nG_2RqUAJFvrP1blrONy6ZpVP_M3aX5XQInonA0,17718
444
446
  ommlds/minichain/text/toolparsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -477,9 +479,9 @@ ommlds/minichain/vectors/similarity.py,sha256=etqSswPH7ERThueqnCUHULsM3rpsVslRFu
477
479
  ommlds/minichain/vectors/stores.py,sha256=etbLCS0RXAEmqcCdqiys8twa8R7Y_DcjQ_VqnEnRF4s,530
478
480
  ommlds/minichain/vectors/types.py,sha256=xSAK1Xfkubqf95QgJhSHrwBu_C5quuye3wZAASmxJkM,3473
479
481
  ommlds/minichain/wrappers/__init__.py,sha256=kXyc5BHVI35GXGmIf0zkKfCVIqD8q9PFENblye5qCqc,110
480
- ommlds/minichain/wrappers/firstinwins.py,sha256=fqTq7siw28IsjGar8tXlxBsMJuCbogiv7nBCPcxhHe4,3464
481
- ommlds/minichain/wrappers/instrument.py,sha256=I51u7k6oYG5PX2r3jGRHDl_IqbAEFUCZ_oWwlIiNbLY,3730
482
- ommlds/minichain/wrappers/retry.py,sha256=1A4TTD8RXUpCDjo7a0T1qeB5n8i7bsw473bmPCOS00c,3444
482
+ ommlds/minichain/wrappers/firstinwins.py,sha256=pY0qZejjDlYDiH-3sA5vr4mAOwlGN-awsTKsFY5-QFU,3453
483
+ ommlds/minichain/wrappers/instrument.py,sha256=vU_rVe3jbt9q_oXK-OBLcOPKRRjAnEpQjJTNHHNZNDc,3731
484
+ ommlds/minichain/wrappers/retry.py,sha256=rYNKZT-VuP7qbQYtbmKAYadZWSdEI_6hwT7yB4DoFxg,4342
483
485
  ommlds/minichain/wrappers/services.py,sha256=6AAwgCtzHzmJZWteKJJgdfSQtYuDBxuRFoT6NttV5RY,1912
484
486
  ommlds/minichain/wrappers/stream.py,sha256=-H0O_Eyzsabk--mtIzobWdMdj3WnqonEZ9-k9_XdWiI,1223
485
487
  ommlds/nanochat/LICENSE,sha256=QrsJ8zmor4uQ07SWm29uS6Sv87XGFBA7Ax_M33HI93I,1072
@@ -513,9 +515,9 @@ ommlds/wiki/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
513
515
  ommlds/wiki/utils/io.py,sha256=UKgDJGtmpnWvIqVd2mJc2QNPOqlToEY1GEveNp6_pMo,7088
514
516
  ommlds/wiki/utils/progress.py,sha256=EhvKcMFYtsarCQhIahlO6f0SboyAKP3UwUyrnVnP-Vk,3222
515
517
  ommlds/wiki/utils/xml.py,sha256=sNJNkZ9rT8B-kJMO6bRz8J1USy4fyPx0m2PwTX7vxYY,3846
516
- ommlds-0.0.0.dev502.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
517
- ommlds-0.0.0.dev502.dist-info/METADATA,sha256=gaDPjUyCBXbQflQQZvorRw3dRZyJ5cDtalsPcM9L-X4,3495
518
- ommlds-0.0.0.dev502.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
519
- ommlds-0.0.0.dev502.dist-info/entry_points.txt,sha256=Z5YWtX7ClfiCKdW-dd_CSVvM0h4yQpJPi-2G3q6gNFo,35
520
- ommlds-0.0.0.dev502.dist-info/top_level.txt,sha256=Rbnk5d5wi58vnAXx13WFZqdQ4VX8hBCS2hEL3WeXOhY,7
521
- ommlds-0.0.0.dev502.dist-info/RECORD,,
518
+ ommlds-0.0.0.dev504.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
519
+ ommlds-0.0.0.dev504.dist-info/METADATA,sha256=27dO2cQB4Y10EcKB2ZammM2Ctk9TuRKiZgfIEz7MbaA,3495
520
+ ommlds-0.0.0.dev504.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
521
+ ommlds-0.0.0.dev504.dist-info/entry_points.txt,sha256=Z5YWtX7ClfiCKdW-dd_CSVvM0h4yQpJPi-2G3q6gNFo,35
522
+ ommlds-0.0.0.dev504.dist-info/top_level.txt,sha256=Rbnk5d5wi58vnAXx13WFZqdQ4VX8hBCS2hEL3WeXOhY,7
523
+ ommlds-0.0.0.dev504.dist-info/RECORD,,
@@ -1,62 +0,0 @@
1
- # ruff: noqa: UP028
2
- import typing as ta
3
-
4
- from ..resources import UseResources
5
- from ..services import Request
6
- from ..services import Service
7
- from ..types import Output
8
- from .services import StreamResponse
9
- from .services import StreamResponseSink
10
- from .services import new_stream_response
11
-
12
-
13
- StreamRequestT = ta.TypeVar('StreamRequestT', bound=Request)
14
- V = ta.TypeVar('V')
15
- OutputT = ta.TypeVar('OutputT', bound=Output)
16
- StreamOutputT = ta.TypeVar('StreamOutputT', bound=Output)
17
-
18
-
19
- ##
20
-
21
-
22
- class WrappedStreamService(ta.Generic[StreamRequestT, V, OutputT, StreamOutputT]):
23
- """Only handles simple, non-type-modifying usecases."""
24
-
25
- def __init__(self, inner: Service[StreamRequestT, StreamResponse[V, OutputT, StreamOutputT]]) -> None:
26
- super().__init__()
27
-
28
- self._inner = inner
29
-
30
- #
31
-
32
- async def _process_request(self, request: StreamRequestT) -> StreamRequestT:
33
- return request
34
-
35
- async def _process_stream_outputs(self, outputs: ta.Sequence[StreamOutputT]) -> ta.Sequence[StreamOutputT]:
36
- return outputs
37
-
38
- async def _process_value(self, v: V) -> ta.Iterable[V]:
39
- return [v]
40
-
41
- async def _process_outputs(self, outputs: ta.Sequence[OutputT]) -> ta.Sequence[OutputT]:
42
- return outputs
43
-
44
- #
45
-
46
- async def invoke(self, request: StreamRequestT) -> StreamResponse[V, OutputT, StreamOutputT]:
47
- async with UseResources.or_new(request.options) as rs: # noqa
48
- in_resp = await self._inner.invoke(await self._process_request(request))
49
- in_vs = await rs.enter_async_context(in_resp.v)
50
-
51
- async def inner(sink: StreamResponseSink[V]) -> ta.Sequence[OutputT] | None:
52
- async for in_v in in_vs:
53
- for out_v in (await self._process_value(in_v)):
54
- await sink.emit(out_v)
55
-
56
- return await self._process_outputs(in_vs.outputs)
57
-
58
- return await new_stream_response(
59
- rs,
60
- inner,
61
- await self._process_stream_outputs(in_resp.outputs),
62
- )