ommlds 0.0.0.dev465__tar.gz → 0.0.0.dev466__tar.gz

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.

Potentially problematic release.


This version of ommlds might be problematic. Click here for more details.

Files changed (383) hide show
  1. {ommlds-0.0.0.dev465/ommlds.egg-info → ommlds-0.0.0.dev466}/PKG-INFO +3 -3
  2. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/.omlish-manifests.json +2 -2
  3. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/google/protocol/types.py +4 -1
  4. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/services.py +5 -7
  5. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/__init__.py +6 -0
  6. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/anthropic/stream.py +17 -0
  7. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/google/stream.py +105 -20
  8. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/format.py +19 -14
  9. ommlds-0.0.0.dev466/ommlds/minichain/chat/stream/adapters.py +35 -0
  10. ommlds-0.0.0.dev466/ommlds/minichain/chat/stream/joining.py +96 -0
  11. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/stream/types.py +17 -4
  12. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466/ommlds.egg-info}/PKG-INFO +3 -3
  13. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds.egg-info/SOURCES.txt +1 -0
  14. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds.egg-info/requires.txt +2 -2
  15. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/pyproject.toml +3 -3
  16. ommlds-0.0.0.dev465/ommlds/minichain/chat/stream/adapters.py +0 -80
  17. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/LICENSE +0 -0
  18. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/MANIFEST.in +0 -0
  19. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/README.md +0 -0
  20. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/__about__.py +0 -0
  21. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/__init__.py +0 -0
  22. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/_hacks/__init__.py +0 -0
  23. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/_hacks/patches.py +0 -0
  24. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/__init__.py +0 -0
  25. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/__init__.py +0 -0
  26. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/__init__.py +0 -0
  27. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/_marshal.py +0 -0
  28. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/sse/__init__.py +0 -0
  29. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/sse/_marshal.py +0 -0
  30. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/sse/assemble.py +0 -0
  31. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/sse/events.py +0 -0
  32. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/anthropic/protocol/types.py +0 -0
  33. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/google/__init__.py +0 -0
  34. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/google/protocol/__init__.py +0 -0
  35. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/google/protocol/_marshal.py +0 -0
  36. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/llamacpp/__init__.py +0 -0
  37. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/llamacpp/buildwheel.py +0 -0
  38. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/llamacpp/logging.py +0 -0
  39. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/__init__.py +0 -0
  40. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/__main__.py +0 -0
  41. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/caching.py +0 -0
  42. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/cli.py +0 -0
  43. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/generation.py +0 -0
  44. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/limits.py +0 -0
  45. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/loading.py +0 -0
  46. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/LICENSE +0 -0
  47. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/__init__.py +0 -0
  48. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/detokenization/__init__.py +0 -0
  49. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/detokenization/base.py +0 -0
  50. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/detokenization/bpe.py +0 -0
  51. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/detokenization/naive.py +0 -0
  52. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/detokenization/spm.py +0 -0
  53. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/loading.py +0 -0
  54. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/tokenization.py +0 -0
  55. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/mlx/tokenization/types.py +0 -0
  56. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/__init__.py +0 -0
  57. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/__init__.py +0 -0
  58. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/_common.py +0 -0
  59. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/_marshal.py +0 -0
  60. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/__init__.py +0 -0
  61. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/chunk.py +0 -0
  62. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/contentpart.py +0 -0
  63. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/message.py +0 -0
  64. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/request.py +0 -0
  65. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/response.py +0 -0
  66. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/responseformat.py +0 -0
  67. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/chatcompletion/tokenlogprob.py +0 -0
  68. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/openai/protocol/completionusage.py +0 -0
  69. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/__init__.py +0 -0
  70. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/LICENSE +0 -0
  71. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/__init__.py +0 -0
  72. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/__init__.py +0 -0
  73. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/__main__.py +0 -0
  74. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/attention.py +0 -0
  75. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/cli.py +0 -0
  76. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/fetch.py +0 -0
  77. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/llm.py +0 -0
  78. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/loading.py +0 -0
  79. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/quantization.py +0 -0
  80. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/sampling.py +0 -0
  81. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/tokenization.py +0 -0
  82. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/llama3/transformer.py +0 -0
  83. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/sdxl/__init__.py +0 -0
  84. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/sdxl/__main__.py +0 -0
  85. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/sdxl/cli.py +0 -0
  86. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/sdxl/clip.py +0 -0
  87. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/sdxl/sdxl.py +0 -0
  88. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/models/sdxl/unet.py +0 -0
  89. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/tinygrad/tinygrad.py +0 -0
  90. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/torch/__init__.py +0 -0
  91. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/torch/backends.py +0 -0
  92. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/torch/devices.py +0 -0
  93. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/backends/torch/purge.py +0 -0
  94. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/__init__.py +0 -0
  95. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/__main__.py +0 -0
  96. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/backends/__init__.py +0 -0
  97. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/backends/inject.py +0 -0
  98. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/backends/standard.py +0 -0
  99. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/inject.py +0 -0
  100. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/main.py +0 -0
  101. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/__init__.py +0 -0
  102. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/base.py +0 -0
  103. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/__init__.py +0 -0
  104. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/backends/__init__.py +0 -0
  105. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/backends/catalog.py +0 -0
  106. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/backends/inject.py +0 -0
  107. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/backends/injection.py +0 -0
  108. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/backends/types.py +0 -0
  109. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/__init__.py +0 -0
  110. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/__init__.py +0 -0
  111. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/inject.py +0 -0
  112. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/injection.py +0 -0
  113. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/rendering.py +0 -0
  114. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/tools.py +0 -0
  115. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/ai/types.py +0 -0
  116. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/state/__init__.py +0 -0
  117. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/state/inject.py +0 -0
  118. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/state/inmemory.py +0 -0
  119. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/state/storage.py +0 -0
  120. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/state/types.py +0 -0
  121. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/user/__init__.py +0 -0
  122. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/user/inject.py +0 -0
  123. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/user/interactive.py +0 -0
  124. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/user/oneshot.py +0 -0
  125. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/chat/user/types.py +0 -0
  126. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/configs.py +0 -0
  127. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/content/__init__.py +0 -0
  128. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/content/messages.py +0 -0
  129. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/content/strings.py +0 -0
  130. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/driver.py +0 -0
  131. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/inject.py +0 -0
  132. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/phases/__init__.py +0 -0
  133. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/phases/inject.py +0 -0
  134. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/phases/injection.py +0 -0
  135. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/phases/manager.py +0 -0
  136. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/phases/types.py +0 -0
  137. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/rendering/__init__.py +0 -0
  138. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/rendering/inject.py +0 -0
  139. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/rendering/markdown.py +0 -0
  140. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/rendering/raw.py +0 -0
  141. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/rendering/types.py +0 -0
  142. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/session.py +0 -0
  143. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/__init__.py +0 -0
  144. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/confirmation.py +0 -0
  145. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/execution.py +0 -0
  146. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/inject.py +0 -0
  147. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/injection.py +0 -0
  148. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/rendering.py +0 -0
  149. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/chat/tools/weather.py +0 -0
  150. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/completion/__init__.py +0 -0
  151. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/completion/configs.py +0 -0
  152. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/completion/inject.py +0 -0
  153. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/completion/session.py +0 -0
  154. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/embedding/__init__.py +0 -0
  155. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/embedding/configs.py +0 -0
  156. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/embedding/inject.py +0 -0
  157. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/embedding/session.py +0 -0
  158. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/sessions/inject.py +0 -0
  159. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/state/__init__.py +0 -0
  160. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/state/inject.py +0 -0
  161. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/cli/state/storage.py +0 -0
  162. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/datasets/__init__.py +0 -0
  163. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/datasets/lib/__init__.py +0 -0
  164. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/datasets/lib/movies.py +0 -0
  165. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/huggingface.py +0 -0
  166. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/_marshal.py +0 -0
  167. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/_typedvalues.py +0 -0
  168. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/__init__.py +0 -0
  169. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/catalogs/__init__.py +0 -0
  170. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/catalogs/base.py +0 -0
  171. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/catalogs/simple.py +0 -0
  172. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/catalogs/strings.py +0 -0
  173. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/__init__.py +0 -0
  174. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/anthropic/__init__.py +0 -0
  175. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/anthropic/chat.py +0 -0
  176. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/anthropic/names.py +0 -0
  177. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/anthropic/protocol.py +0 -0
  178. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/duckduckgo/__init__.py +0 -0
  179. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/duckduckgo/search.py +0 -0
  180. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/google/__init__.py +0 -0
  181. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/google/chat.py +0 -0
  182. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/google/names.py +0 -0
  183. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/google/search.py +0 -0
  184. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/google/tools.py +0 -0
  185. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/huggingface/__init__.py +0 -0
  186. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/huggingface/configs.py +0 -0
  187. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/huggingface/repos.py +0 -0
  188. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/llamacpp/__init__.py +0 -0
  189. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/llamacpp/chat.py +0 -0
  190. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/llamacpp/completion.py +0 -0
  191. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/llamacpp/format.py +0 -0
  192. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/llamacpp/stream.py +0 -0
  193. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/mistral.py +0 -0
  194. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/mlx/__init__.py +0 -0
  195. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/mlx/chat.py +0 -0
  196. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/__init__.py +0 -0
  197. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/chat.py +0 -0
  198. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/completion.py +0 -0
  199. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/embedding.py +0 -0
  200. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/format2.py +0 -0
  201. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/names.py +0 -0
  202. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/openai/stream.py +0 -0
  203. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/sentencepiece/__init__.py +0 -0
  204. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/sentencepiece/tokens.py +0 -0
  205. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/sqlite.py +0 -0
  206. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/tinygrad/__init__.py +0 -0
  207. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/tinygrad/chat.py +0 -0
  208. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/tokenizers/__init__.py +0 -0
  209. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/tokenizers/tokens.py +0 -0
  210. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/transformers/__init__.py +0 -0
  211. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/transformers/sentence.py +0 -0
  212. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/transformers/tokens.py +0 -0
  213. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/impls/transformers/transformers.py +0 -0
  214. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/strings/__init__.py +0 -0
  215. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/strings/manifests.py +0 -0
  216. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/strings/parsing.py +0 -0
  217. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/backends/strings/resolving.py +0 -0
  218. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/__init__.py +0 -0
  219. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/_marshal.py +0 -0
  220. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/choices/__init__.py +0 -0
  221. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/choices/adapters.py +0 -0
  222. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/choices/services.py +0 -0
  223. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/choices/types.py +0 -0
  224. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/formats.py +0 -0
  225. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/history.py +0 -0
  226. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/messages.py +0 -0
  227. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/metadata.py +0 -0
  228. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/services.py +0 -0
  229. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/stream/__init__.py +0 -0
  230. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/stream/_marshal.py +0 -0
  231. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/stream/services.py +0 -0
  232. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/templating.py +0 -0
  233. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/tools/__init__.py +0 -0
  234. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/tools/execution.py +0 -0
  235. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/tools/ids.py +0 -0
  236. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/tools/parsing.py +0 -0
  237. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/tools/types.py +0 -0
  238. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/transforms/__init__.py +0 -0
  239. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/transforms/base.py +0 -0
  240. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/transforms/metadata.py +0 -0
  241. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/transforms/services.py +0 -0
  242. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/chat/types.py +0 -0
  243. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/completion.py +0 -0
  244. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/configs.py +0 -0
  245. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/__init__.py +0 -0
  246. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/_marshal.py +0 -0
  247. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/images.py +0 -0
  248. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/json.py +0 -0
  249. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/materialize.py +0 -0
  250. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/metadata.py +0 -0
  251. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/namespaces.py +0 -0
  252. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/placeholders.py +0 -0
  253. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/prepare.py +0 -0
  254. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/sequence.py +0 -0
  255. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/simple.py +0 -0
  256. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/text.py +0 -0
  257. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/transforms/__init__.py +0 -0
  258. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/transforms/base.py +0 -0
  259. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/transforms/interleave.py +0 -0
  260. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/transforms/squeeze.py +0 -0
  261. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/transforms/stringify.py +0 -0
  262. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/transforms/strings.py +0 -0
  263. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/content/types.py +0 -0
  264. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/docs/__init__.py +0 -0
  265. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/docs/docs.py +0 -0
  266. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/docs/dtypes.py +0 -0
  267. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/docs/filters.py +0 -0
  268. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/envs.py +0 -0
  269. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/json.py +0 -0
  270. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/__init__.py +0 -0
  271. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/bash.py +0 -0
  272. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/code/__init__.py +0 -0
  273. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/code/prompts.py +0 -0
  274. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/__init__.py +0 -0
  275. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/binfiles.py +0 -0
  276. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/context.py +0 -0
  277. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/errors.py +0 -0
  278. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/suggestions.py +0 -0
  279. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/__init__.py +0 -0
  280. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/edit.py +0 -0
  281. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/ls.py +0 -0
  282. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/read.py +0 -0
  283. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/recursivels/__init__.py +0 -0
  284. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/recursivels/execution.py +0 -0
  285. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/recursivels/rendering.py +0 -0
  286. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/fs/tools/recursivels/running.py +0 -0
  287. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/todo/__init__.py +0 -0
  288. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/todo/context.py +0 -0
  289. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/todo/tools/__init__.py +0 -0
  290. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/todo/tools/read.py +0 -0
  291. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/todo/tools/write.py +0 -0
  292. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/lib/todo/types.py +0 -0
  293. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/llms/__init__.py +0 -0
  294. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/llms/_marshal.py +0 -0
  295. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/llms/tokens.py +0 -0
  296. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/llms/types.py +0 -0
  297. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/metadata.py +0 -0
  298. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/models/__init__.py +0 -0
  299. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/models/configs.py +0 -0
  300. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/models/names.py +0 -0
  301. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/models/repos/__init__.py +0 -0
  302. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/models/repos/resolving.py +0 -0
  303. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/registries/__init__.py +0 -0
  304. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/registries/globals.py +0 -0
  305. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/registries/manifests.py +0 -0
  306. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/registries/registry.py +0 -0
  307. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/resources.py +0 -0
  308. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/search.py +0 -0
  309. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/__init__.py +0 -0
  310. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/_marshal.py +0 -0
  311. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/_origclasses.py +0 -0
  312. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/_typedvalues.py +0 -0
  313. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/facades.py +0 -0
  314. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/requests.py +0 -0
  315. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/responses.py +0 -0
  316. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/services/services.py +0 -0
  317. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/standard.py +0 -0
  318. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/stream/__init__.py +0 -0
  319. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/stream/services.py +0 -0
  320. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/stream/wrap.py +0 -0
  321. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/__init__.py +0 -0
  322. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/applypatch.py +0 -0
  323. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/__init__.py +0 -0
  324. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/base.py +0 -0
  325. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/dumb.py +0 -0
  326. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/llamacpp/LICENSE +0 -0
  327. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/llamacpp/__init__.py +0 -0
  328. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/llamacpp/hermes2.py +0 -0
  329. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/llamacpp/llama31.py +0 -0
  330. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/llamacpp/types.py +0 -0
  331. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/text/toolparsing/llamacpp/utils.py +0 -0
  332. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tokens/__init__.py +0 -0
  333. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tokens/specials.py +0 -0
  334. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tokens/tokenizers.py +0 -0
  335. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tokens/types.py +0 -0
  336. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tokens/vocabs.py +0 -0
  337. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/__init__.py +0 -0
  338. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/_marshal.py +0 -0
  339. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/execution/__init__.py +0 -0
  340. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/execution/catalog.py +0 -0
  341. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/execution/context.py +0 -0
  342. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/execution/errors.py +0 -0
  343. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/execution/executors.py +0 -0
  344. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/execution/reflect.py +0 -0
  345. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/fns.py +0 -0
  346. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/jsonschema.py +0 -0
  347. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/reflect.py +0 -0
  348. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/tools/types.py +0 -0
  349. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/types.py +0 -0
  350. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/utils.py +0 -0
  351. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/__init__.py +0 -0
  352. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/_marshal.py +0 -0
  353. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/embeddings.py +0 -0
  354. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/index.py +0 -0
  355. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/search.py +0 -0
  356. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/similarity.py +0 -0
  357. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/stores.py +0 -0
  358. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/minichain/vectors/types.py +0 -0
  359. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/server/__init__.py +0 -0
  360. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/server/__main__.py +0 -0
  361. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/server/cli.py +0 -0
  362. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/server/client.py +0 -0
  363. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/server/server.py +0 -0
  364. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/server/service.py +0 -0
  365. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/tools/__init__.py +0 -0
  366. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/tools/git.py +0 -0
  367. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/tools/ocr.py +0 -0
  368. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/__init__.py +0 -0
  369. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/analyze.py +0 -0
  370. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/convert.py +0 -0
  371. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/models.py +0 -0
  372. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/text/__init__.py +0 -0
  373. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/text/mfh.py +0 -0
  374. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/text/wtp.py +0 -0
  375. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/utils/__init__.py +0 -0
  376. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/utils/io.py +0 -0
  377. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/utils/progress.py +0 -0
  378. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/utils/xml.py +0 -0
  379. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds/wiki/xml.py +0 -0
  380. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds.egg-info/dependency_links.txt +0 -0
  381. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds.egg-info/entry_points.txt +0 -0
  382. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/ommlds.egg-info/top_level.txt +0 -0
  383. {ommlds-0.0.0.dev465 → ommlds-0.0.0.dev466}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ommlds
3
- Version: 0.0.0.dev465
3
+ Version: 0.0.0.dev466
4
4
  Summary: ommlds
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,8 +14,8 @@ 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: omdev==0.0.0.dev465
18
- Requires-Dist: omlish==0.0.0.dev465
17
+ Requires-Dist: omdev==0.0.0.dev466
18
+ Requires-Dist: omlish==0.0.0.dev466
19
19
  Provides-Extra: all
20
20
  Requires-Dist: llama-cpp-python~=0.3; extra == "all"
21
21
  Requires-Dist: mlx~=0.29; extra == "all"
@@ -63,7 +63,7 @@
63
63
  "module": ".minichain.backends.impls.anthropic.stream",
64
64
  "attr": null,
65
65
  "file": "ommlds/minichain/backends/impls/anthropic/stream.py",
66
- "line": 35,
66
+ "line": 36,
67
67
  "value": {
68
68
  "!.minichain.registries.manifests.RegistryManifest": {
69
69
  "module": "ommlds.minichain.backends.impls.anthropic.stream",
@@ -137,7 +137,7 @@
137
137
  "module": ".minichain.backends.impls.google.stream",
138
138
  "attr": null,
139
139
  "file": "ommlds/minichain/backends/impls/google/stream.py",
140
- "line": 36,
140
+ "line": 41,
141
141
  "value": {
142
142
  "!.minichain.registries.manifests.RegistryManifest": {
143
143
  "module": "ommlds.minichain.backends.impls.google.stream",
@@ -148,11 +148,14 @@ class Part(lang.Final):
148
148
  video_metadata: VideoMetadata | None = None
149
149
 
150
150
 
151
+ ContentRole: ta.TypeAlias = ta.Literal['user', 'model']
152
+
153
+
151
154
  @dc.dataclass(frozen=True, kw_only=True)
152
155
  @_set_class_marshal_options
153
156
  class Content(lang.Final):
154
157
  parts: ta.Sequence[Part] | None = None
155
- role: ta.Literal['user', 'model'] | None = None
158
+ role: ContentRole | None = None
156
159
 
157
160
 
158
161
  ##
@@ -63,19 +63,17 @@ class ChatChoicesStreamServiceStreamAiChatGenerator(StreamAiChatGenerator):
63
63
  ) -> mc.AiChat:
64
64
  opts = self._options() if self._options is not None else []
65
65
 
66
- lst: list[str] = []
67
-
68
66
  async with self._service_provider.provide_backend() as service:
67
+ joiner = mc.AiChoiceDeltaJoiner()
68
+
69
69
  async with (await service.invoke(mc.ChatChoicesStreamRequest(chat, opts))).v as st_resp:
70
70
  async for o in st_resp:
71
+ joiner.add(o.choices)
72
+
71
73
  choice = check.single(o.choices)
72
74
 
73
75
  for delta in choice.deltas:
74
76
  if delta_callback is not None:
75
77
  await delta_callback(delta)
76
78
 
77
- c = check.isinstance(delta, mc.ContentAiChoiceDelta).c # noqa
78
- if c is not None:
79
- lst.append(check.isinstance(c, str))
80
-
81
- return [mc.AiMessage(''.join(lst))]
79
+ return check.single(joiner.build())
@@ -92,6 +92,10 @@ with _lang.auto_proxy_init(
92
92
  ChatChoicesStreamServiceChatChoicesService,
93
93
  )
94
94
 
95
+ from .chat.stream.joining import ( # noqa
96
+ AiChoiceDeltaJoiner,
97
+ )
98
+
95
99
  from .chat.stream.services import ( # noqa
96
100
  ChatChoicesStreamRequest,
97
101
  ChatChoicesStreamResponse,
@@ -109,7 +113,9 @@ with _lang.auto_proxy_init(
109
113
 
110
114
  AiChoiceDelta,
111
115
  ContentAiChoiceDelta,
116
+ AnyToolUseAiChoiceDelta,
112
117
  ToolUseAiChoiceDelta,
118
+ PartialToolUseAiChoiceDelta,
113
119
 
114
120
  AiChoiceDeltas,
115
121
  AiChoicesDeltas,
@@ -17,6 +17,7 @@ from ....chat.stream.services import static_check_is_chat_choices_stream_service
17
17
  from ....chat.stream.types import AiChoiceDeltas
18
18
  from ....chat.stream.types import AiChoicesDeltas
19
19
  from ....chat.stream.types import ContentAiChoiceDelta
20
+ from ....chat.stream.types import PartialToolUseAiChoiceDelta
20
21
  from ....chat.tools.types import Tool
21
22
  from ....configs import Config
22
23
  from ....resources import UseResources
@@ -123,19 +124,35 @@ class AnthropicChatChoicesStreamService:
123
124
  check.not_none(msg_start)
124
125
  check.none(cbk_start)
125
126
  cbk_start = ae
127
+
126
128
  if isinstance(ae.content_block, AnthropicSseDecoderEvents.ContentBlockStart.Text): # noqa
127
129
  await sink.emit(AiChoicesDeltas([AiChoiceDeltas([ContentAiChoiceDelta(
128
130
  ae.content_block.text,
129
131
  )])]))
132
+
133
+ elif isinstance(ae.content_block, AnthropicSseDecoderEvents.ContentBlockStart.ToolUse): # noqa
134
+ await sink.emit(AiChoicesDeltas([AiChoiceDeltas([PartialToolUseAiChoiceDelta( # noqa
135
+ id=ae.content_block.id,
136
+ name=ae.content_block.name,
137
+ raw_args=ae.content_block.input,
138
+ )])]))
139
+
130
140
  else:
131
141
  raise TypeError(ae.content_block)
132
142
 
133
143
  case AnthropicSseDecoderEvents.ContentBlockDelta():
134
144
  check.not_none(cbk_start)
145
+
135
146
  if isinstance(ae.delta, AnthropicSseDecoderEvents.ContentBlockDelta.TextDelta):
136
147
  await sink.emit(AiChoicesDeltas([AiChoiceDeltas([ContentAiChoiceDelta(
137
148
  ae.delta.text,
138
149
  )])]))
150
+
151
+ elif isinstance(ae.delta, AnthropicSseDecoderEvents.ContentBlockDelta.InputJsonDelta): # noqa
152
+ await sink.emit(AiChoicesDeltas([AiChoiceDeltas([PartialToolUseAiChoiceDelta( # noqa
153
+ raw_args=ae.delta.partial_json,
154
+ )])]))
155
+
139
156
  else:
140
157
  raise TypeError(ae.delta)
141
158
 
@@ -15,6 +15,8 @@ from ....chat.choices.types import ChatChoicesOutputs
15
15
  from ....chat.messages import AiMessage
16
16
  from ....chat.messages import Message
17
17
  from ....chat.messages import SystemMessage
18
+ from ....chat.messages import ToolUseMessage
19
+ from ....chat.messages import ToolUseResultMessage
18
20
  from ....chat.messages import UserMessage
19
21
  from ....chat.stream.services import ChatChoicesStreamRequest
20
22
  from ....chat.stream.services import ChatChoicesStreamResponse
@@ -22,12 +24,15 @@ from ....chat.stream.services import static_check_is_chat_choices_stream_service
22
24
  from ....chat.stream.types import AiChoiceDeltas
23
25
  from ....chat.stream.types import AiChoicesDeltas
24
26
  from ....chat.stream.types import ContentAiChoiceDelta
27
+ from ....chat.stream.types import ToolUseAiChoiceDelta
28
+ from ....chat.tools.types import Tool
25
29
  from ....models.configs import ModelName
26
30
  from ....resources import UseResources
27
31
  from ....standard import ApiKey
28
32
  from ....stream.services import StreamResponseSink
29
33
  from ....stream.services import new_stream_response
30
34
  from .names import MODEL_NAMES
35
+ from .tools import build_tool_spec_schema
31
36
 
32
37
 
33
38
  ##
@@ -48,22 +53,70 @@ class GoogleChatChoicesStreamService:
48
53
  self._model_name = cc.pop(self.DEFAULT_MODEL_NAME)
49
54
  self._api_key = ApiKey.pop_secret(cc, env='GEMINI_API_KEY')
50
55
 
51
- def _get_msg_content(self, m: Message) -> str | None:
52
- if isinstance(m, AiMessage):
53
- return check.isinstance(m.c, str)
56
+ def _make_str_content(
57
+ self,
58
+ s: str | None,
59
+ *,
60
+ role: pt.ContentRole | None = None,
61
+ ) -> pt.Content | None:
62
+ if s is None:
63
+ return None
64
+
65
+ return pt.Content(
66
+ parts=[pt.Part(
67
+ text=check.not_none(s),
68
+ )],
69
+ role=role,
70
+ )
54
71
 
55
- elif isinstance(m, (SystemMessage, UserMessage)):
56
- return check.isinstance(m.c, str)
72
+ def _make_msg_content(self, m: Message) -> pt.Content:
73
+ if isinstance(m, (AiMessage, SystemMessage, UserMessage)):
74
+ return check.not_none(self._make_str_content(
75
+ check.isinstance(m.c, str),
76
+ role=self.ROLES_MAP[type(m)],
77
+ ))
78
+
79
+ elif isinstance(m, ToolUseResultMessage):
80
+ tr_resp_val: pt.Value
81
+ if m.tur.c is None:
82
+ tr_resp_val = pt.NullValue() # type: ignore[unreachable]
83
+ elif isinstance(m.tur.c, str):
84
+ tr_resp_val = pt.StringValue(m.tur.c)
85
+ else:
86
+ raise TypeError(m.tur.c)
87
+ return pt.Content(
88
+ parts=[pt.Part(
89
+ function_response=pt.FunctionResponse(
90
+ id=m.tur.id,
91
+ name=m.tur.name,
92
+ response={
93
+ 'value': tr_resp_val,
94
+ },
95
+ ),
96
+ )],
97
+ )
98
+
99
+ elif isinstance(m, ToolUseMessage):
100
+ return pt.Content(
101
+ parts=[pt.Part(
102
+ function_call=pt.FunctionCall(
103
+ id=m.tu.id,
104
+ name=m.tu.name,
105
+ args=m.tu.args,
106
+ ),
107
+ )],
108
+ role='model',
109
+ )
57
110
 
58
111
  else:
59
112
  raise TypeError(m)
60
113
 
61
114
  BASE_URL: ta.ClassVar[str] = 'https://generativelanguage.googleapis.com/v1beta/models'
62
115
 
63
- ROLES_MAP: ta.ClassVar[ta.Mapping[type[Message], str]] = {
64
- SystemMessage: 'system',
116
+ ROLES_MAP: ta.ClassVar[ta.Mapping[type[Message], pt.ContentRole | None]] = { # noqa
117
+ SystemMessage: None,
65
118
  UserMessage: 'user',
66
- AiMessage: 'assistant',
119
+ AiMessage: 'model',
67
120
  }
68
121
 
69
122
  READ_CHUNK_SIZE = 64 * 1024
@@ -74,16 +127,28 @@ class GoogleChatChoicesStreamService:
74
127
  ) -> ChatChoicesStreamResponse:
75
128
  key = check.not_none(self._api_key).reveal()
76
129
 
130
+ msgs = list(request.v)
131
+
132
+ system_inst: pt.Content | None = None
133
+ if msgs and isinstance(m0 := msgs[0], SystemMessage):
134
+ system_inst = self._make_msg_content(m0)
135
+ msgs.pop(0)
136
+
137
+ g_tools: list[pt.Tool] = []
138
+ with tv.TypedValues(*request.options).consume() as oc:
139
+ t: Tool
140
+ for t in oc.pop(Tool, []):
141
+ g_tools.append(pt.Tool(
142
+ function_declarations=[build_tool_spec_schema(t.spec)],
143
+ ))
144
+
77
145
  g_req = pt.GenerateContentRequest(
78
146
  contents=[
79
- pt.Content(
80
- parts=[pt.Part(
81
- text=check.not_none(self._get_msg_content(m)),
82
- )],
83
- role=self.ROLES_MAP[type(m)], # type: ignore[arg-type]
84
- )
85
- for m in request.v
147
+ self._make_msg_content(m)
148
+ for m in msgs
86
149
  ],
150
+ tools=g_tools or None,
151
+ system_instruction=system_inst,
87
152
  )
88
153
 
89
154
  req_dct = msh.marshal(g_req)
@@ -110,18 +175,38 @@ class GoogleChatChoicesStreamService:
110
175
  if isinstance(bl, DelimitingBuffer.Incomplete):
111
176
  # FIXME: handle
112
177
  return []
178
+
113
179
  l = bl.decode('utf-8')
114
180
  if not l:
115
181
  continue
182
+
116
183
  if l.startswith('data: '):
117
184
  gcr = msh.unmarshal(json.loads(l[6:]), pt.GenerateContentResponse) # noqa
118
185
  cnd = check.single(check.not_none(gcr.candidates))
186
+
119
187
  for p in check.not_none(cnd.content).parts or []:
120
- await sink.emit(AiChoicesDeltas([
121
- AiChoiceDeltas([
122
- ContentAiChoiceDelta(check.not_none(p.text)),
123
- ]),
124
- ]))
188
+ if (txt := p.text) is not None:
189
+ check.none(p.function_call)
190
+ await sink.emit(AiChoicesDeltas([
191
+ AiChoiceDeltas([
192
+ ContentAiChoiceDelta(check.not_none(txt)),
193
+ ]),
194
+ ]))
195
+
196
+ elif (fc := p.function_call) is not None:
197
+ check.none(p.text)
198
+ await sink.emit(AiChoicesDeltas([
199
+ AiChoiceDeltas([
200
+ ToolUseAiChoiceDelta(
201
+ id=fc.id,
202
+ name=fc.name,
203
+ args=fc.args,
204
+ ),
205
+ ]),
206
+ ]))
207
+
208
+ else:
209
+ raise ValueError(p)
125
210
 
126
211
  if not b:
127
212
  return []
@@ -18,7 +18,9 @@ from ....chat.messages import SystemMessage
18
18
  from ....chat.messages import ToolUseMessage
19
19
  from ....chat.messages import ToolUseResultMessage
20
20
  from ....chat.messages import UserMessage
21
+ from ....chat.stream.types import AiChoiceDelta
21
22
  from ....chat.stream.types import ContentAiChoiceDelta
23
+ from ....chat.stream.types import PartialToolUseAiChoiceDelta
22
24
  from ....chat.tools.types import Tool
23
25
  from ....content.json import JsonContent
24
26
  from ....content.prepare import prepare_content_str
@@ -212,17 +214,20 @@ class OpenaiChatRequestHandler:
212
214
  ),
213
215
  )
214
216
 
215
- def build_ai_choice_delta(self, delta: ta.Mapping[str, ta.Any]) -> ContentAiChoiceDelta:
216
- return ContentAiChoiceDelta(
217
- check.not_none(delta.get('content')),
218
- # FIXME:
219
- # tool_exec_requests=[
220
- # ToolUse(
221
- # id=tc['id'],
222
- # spec=self._process_options().tools_by_name[tc['function']['name']],
223
- # args=json.loads(tc['function']['arguments'] or '{}'),
224
- # raw_args=tc['function']['arguments'],
225
- # )
226
- # for tc in message_or_delta.get('tool_calls', [])
227
- # ] or None,
228
- )
217
+ def build_ai_choice_delta(self, delta: ta.Mapping[str, ta.Any]) -> AiChoiceDelta:
218
+ if (c := delta.get('content')) is not None:
219
+ check.state(not delta.get('tool_calls'))
220
+ return ContentAiChoiceDelta(c)
221
+
222
+ elif (tcs := delta.get('tool_calls')) is not None: # noqa
223
+ check.state(delta.get('content') is None)
224
+ tc = check.single(tcs)
225
+ tc_fn = tc['function']
226
+ return PartialToolUseAiChoiceDelta(
227
+ id=tc.get('id'),
228
+ name=tc_fn.get('name'),
229
+ raw_args=tc_fn.get('arguments'),
230
+ )
231
+
232
+ else:
233
+ raise ValueError(delta)
@@ -0,0 +1,35 @@
1
+ from omlish import dataclasses as dc
2
+
3
+ from ...services import Response
4
+ from ..choices.services import ChatChoicesRequest
5
+ from ..choices.services import static_check_is_chat_choices_service
6
+ from ..choices.types import AiChoice
7
+ from ..choices.types import AiChoices
8
+ from .joining import AiChoiceDeltaJoiner
9
+ from .services import ChatChoicesOutputs
10
+ from .services import ChatChoicesStreamOutputs
11
+ from .services import ChatChoicesStreamService
12
+
13
+
14
+ ##
15
+
16
+
17
+ @static_check_is_chat_choices_service
18
+ @dc.dataclass(frozen=True)
19
+ class ChatChoicesStreamServiceChatChoicesService:
20
+ service: ChatChoicesStreamService
21
+
22
+ async def invoke(self, request: ChatChoicesRequest) -> Response[
23
+ AiChoices,
24
+ ChatChoicesOutputs | ChatChoicesStreamOutputs,
25
+ ]:
26
+ joiner = AiChoiceDeltaJoiner()
27
+
28
+ async with (resp := await self.service.invoke(request)).v as it: # noqa
29
+ async for cs in it:
30
+ joiner.add(cs.choices)
31
+
32
+ # check.state(resp_v.is_done)
33
+
34
+ # FIXME: outputs lol
35
+ return Response([AiChoice(ms) for ms in joiner.build()])
@@ -0,0 +1,96 @@
1
+ import typing as ta
2
+
3
+ from omlish import check
4
+ from omlish.formats import json
5
+
6
+ from ...tools.types import ToolUse
7
+ from ..messages import AiChat
8
+ from ..messages import AiMessage
9
+ from ..messages import AnyAiMessage
10
+ from ..messages import ToolUseMessage
11
+ from .types import AiChoiceDelta
12
+ from .types import AiChoiceDeltas
13
+ from .types import ContentAiChoiceDelta
14
+ from .types import PartialToolUseAiChoiceDelta
15
+ from .types import ToolUseAiChoiceDelta
16
+
17
+
18
+ ##
19
+
20
+
21
+ class AiChoiceDeltaJoiner:
22
+ def __init__(self) -> None:
23
+ super().__init__()
24
+
25
+ self._seq = 0
26
+ self._channels: list[AiChoiceDeltaJoiner._Channel] = []
27
+
28
+ class _Channel(ta.NamedTuple):
29
+ deltas: list[AiChoiceDelta]
30
+ messages: list[AnyAiMessage]
31
+
32
+ def _build_joined(self, deltas: ta.Sequence[AiChoiceDelta]) -> AnyAiMessage:
33
+ dty = check.single(set(map(type, check.not_empty(deltas))))
34
+
35
+ if dty is ContentAiChoiceDelta:
36
+ cds = ta.cast(ta.Sequence[ContentAiChoiceDelta], deltas)
37
+ return AiMessage(''.join(check.isinstance(cd.c, str) for cd in cds))
38
+
39
+ elif dty is ToolUseAiChoiceDelta:
40
+ raise TypeError(dty)
41
+
42
+ elif dty is PartialToolUseAiChoiceDelta:
43
+ tds = ta.cast(ta.Sequence[PartialToolUseAiChoiceDelta], deltas)
44
+ for td in ta.cast(ta.Sequence[PartialToolUseAiChoiceDelta], deltas)[1:]:
45
+ check.none(td.id)
46
+ check.none(td.name)
47
+
48
+ ra = ''.join(filter(None, (td.raw_args for td in tds)))
49
+
50
+ return ToolUseMessage(ToolUse(
51
+ id=tds[0].id,
52
+ name=check.non_empty_str(tds[0].name),
53
+ args=json.loads(ra),
54
+ raw_args=ra,
55
+ ))
56
+
57
+ else:
58
+ raise TypeError(dty)
59
+
60
+ def _join_one(self, chan: _Channel) -> None:
61
+ if not chan.deltas:
62
+ return
63
+
64
+ chan.messages.append(self._build_joined(chan.deltas))
65
+ chan.deltas.clear()
66
+
67
+ def _add_to(self, chan: _Channel, d: AiChoiceDelta) -> None:
68
+ if chan.deltas and type(chan.deltas[0]) is not type(d):
69
+ self._join_one(chan)
70
+
71
+ if isinstance(d, ToolUseAiChoiceDelta):
72
+ chan.messages.append(ToolUseMessage(ToolUse(
73
+ id=d.id,
74
+ name=check.not_none(d.name),
75
+ args=d.args or {},
76
+ )))
77
+
78
+ else:
79
+ chan.deltas.append(d)
80
+
81
+ def add(self, choices: ta.Sequence[AiChoiceDeltas]) -> None:
82
+ if not self._seq:
83
+ check.empty(self._channels)
84
+ self._channels.extend(self._Channel([], []) for _ in range(len(choices)))
85
+
86
+ for chan, c in zip(self._channels, choices, strict=True):
87
+ for d in c.deltas:
88
+ self._add_to(chan, d)
89
+
90
+ self._seq += 1
91
+
92
+ def build(self) -> list[AiChat]:
93
+ for chan in self._channels:
94
+ self._join_one(chan)
95
+
96
+ return [list(chan.messages) for chan in self._channels]
@@ -6,7 +6,6 @@ from omlish import marshal as msh
6
6
 
7
7
  from ...content.types import Content
8
8
  from ...stream.services import StreamOptions
9
- from ...tools.types import ToolUse
10
9
  from ...types import Option
11
10
  from ...types import Output
12
11
  from ..choices.types import ChatChoicesOptions
@@ -48,9 +47,23 @@ class ContentAiChoiceDelta(AiChoiceDelta, lang.Final):
48
47
  c: Content
49
48
 
50
49
 
51
- @dc.dataclass(frozen=True)
52
- class ToolUseAiChoiceDelta(AiChoiceDelta, lang.Final):
53
- tu: ToolUse
50
+ #
51
+
52
+
53
+ @dc.dataclass(frozen=True, kw_only=True)
54
+ class AnyToolUseAiChoiceDelta(AiChoiceDelta, lang.Abstract):
55
+ id: str | None = None
56
+ name: str | None = None
57
+
58
+
59
+ @dc.dataclass(frozen=True, kw_only=True)
60
+ class ToolUseAiChoiceDelta(AnyToolUseAiChoiceDelta, lang.Final):
61
+ args: ta.Mapping[str, ta.Any] | None = None
62
+
63
+
64
+ @dc.dataclass(frozen=True, kw_only=True)
65
+ class PartialToolUseAiChoiceDelta(AnyToolUseAiChoiceDelta, lang.Final):
66
+ raw_args: ta.Any | None = None
54
67
 
55
68
 
56
69
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ommlds
3
- Version: 0.0.0.dev465
3
+ Version: 0.0.0.dev466
4
4
  Summary: ommlds
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,8 +14,8 @@ 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: omdev==0.0.0.dev465
18
- Requires-Dist: omlish==0.0.0.dev465
17
+ Requires-Dist: omdev==0.0.0.dev466
18
+ Requires-Dist: omlish==0.0.0.dev466
19
19
  Provides-Extra: all
20
20
  Requires-Dist: llama-cpp-python~=0.3; extra == "all"
21
21
  Requires-Dist: mlx~=0.29; extra == "all"
@@ -239,6 +239,7 @@ ommlds/minichain/chat/choices/types.py
239
239
  ommlds/minichain/chat/stream/__init__.py
240
240
  ommlds/minichain/chat/stream/_marshal.py
241
241
  ommlds/minichain/chat/stream/adapters.py
242
+ ommlds/minichain/chat/stream/joining.py
242
243
  ommlds/minichain/chat/stream/services.py
243
244
  ommlds/minichain/chat/stream/types.py
244
245
  ommlds/minichain/chat/tools/__init__.py
@@ -1,5 +1,5 @@
1
- omdev==0.0.0.dev465
2
- omlish==0.0.0.dev465
1
+ omdev==0.0.0.dev466
2
+ omlish==0.0.0.dev466
3
3
 
4
4
  [all]
5
5
  llama-cpp-python~=0.3
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.13'
16
- version = '0.0.0.dev465'
16
+ version = '0.0.0.dev466'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,8 +24,8 @@ classifiers = [
24
24
  ]
25
25
  description = 'ommlds'
26
26
  dependencies = [
27
- 'omdev == 0.0.0.dev465',
28
- 'omlish == 0.0.0.dev465',
27
+ 'omdev == 0.0.0.dev466',
28
+ 'omlish == 0.0.0.dev466',
29
29
  ]
30
30
 
31
31
  [project.optional-dependencies]