ommlds 0.0.0.dev466__py3-none-any.whl → 0.0.0.dev512__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 (367) hide show
  1. ommlds/.omlish-manifests.json +404 -31
  2. ommlds/README.md +11 -0
  3. ommlds/__about__.py +21 -12
  4. ommlds/_hacks/__init__.py +4 -0
  5. ommlds/_hacks/funcs.py +110 -0
  6. ommlds/_hacks/names.py +158 -0
  7. ommlds/_hacks/params.py +73 -0
  8. ommlds/_hacks/patches.py +0 -3
  9. ommlds/backends/anthropic/protocol/__init__.py +13 -1
  10. ommlds/backends/anthropic/protocol/_dataclasses.py +1625 -0
  11. ommlds/backends/anthropic/protocol/sse/events.py +2 -0
  12. ommlds/backends/anthropic/protocol/types.py +5 -7
  13. ommlds/backends/cerebras/__init__.py +7 -0
  14. ommlds/backends/cerebras/_dataclasses.py +4254 -0
  15. ommlds/backends/cerebras/_marshal.py +24 -0
  16. ommlds/backends/cerebras/clients.py +9 -0
  17. ommlds/backends/cerebras/protocol.py +310 -0
  18. ommlds/backends/google/protocol/__init__.py +13 -0
  19. ommlds/backends/google/protocol/_dataclasses.py +5997 -0
  20. ommlds/backends/google/protocol/types.py +6 -8
  21. ommlds/backends/groq/__init__.py +7 -0
  22. ommlds/backends/groq/_dataclasses.py +3901 -0
  23. ommlds/backends/groq/_marshal.py +23 -0
  24. ommlds/backends/groq/clients.py +9 -0
  25. ommlds/backends/groq/protocol.py +247 -0
  26. ommlds/{huggingface.py → backends/huggingface/cache.py} +1 -6
  27. ommlds/backends/huggingface/cli.py +208 -0
  28. ommlds/backends/llamacpp/logging.py +4 -1
  29. ommlds/backends/mlx/caching.py +7 -3
  30. ommlds/backends/mlx/cli.py +10 -7
  31. ommlds/backends/mlx/generation.py +18 -16
  32. ommlds/backends/mlx/limits.py +10 -6
  33. ommlds/backends/mlx/loading.py +7 -4
  34. ommlds/backends/ollama/__init__.py +7 -0
  35. ommlds/backends/ollama/_dataclasses.py +3940 -0
  36. ommlds/backends/ollama/cli.py +36 -0
  37. ommlds/backends/ollama/protocol.py +201 -0
  38. ommlds/backends/openai/protocol/__init__.py +15 -1
  39. ommlds/backends/openai/protocol/_common.py +3 -5
  40. ommlds/backends/openai/protocol/_dataclasses.py +7708 -0
  41. ommlds/backends/tavily/__init__.py +7 -0
  42. ommlds/backends/tavily/_dataclasses.py +1734 -0
  43. ommlds/backends/tavily/protocol.py +299 -0
  44. ommlds/backends/tinygrad/models/llama3/__init__.py +22 -14
  45. ommlds/backends/torch/backends.py +1 -1
  46. ommlds/backends/transformers/__init__.py +14 -0
  47. ommlds/backends/transformers/filecache.py +109 -0
  48. ommlds/backends/transformers/streamers.py +73 -0
  49. ommlds/cli/__init__.py +7 -0
  50. ommlds/cli/_dataclasses.py +3835 -0
  51. ommlds/cli/asyncs.py +30 -0
  52. ommlds/cli/backends/catalog.py +88 -0
  53. ommlds/cli/backends/configs.py +9 -0
  54. ommlds/cli/backends/inject.py +100 -42
  55. ommlds/cli/{sessions/chat/backends → backends}/injection.py +1 -1
  56. ommlds/cli/backends/meta.py +82 -0
  57. ommlds/cli/{sessions/chat/backends → backends}/types.py +11 -1
  58. ommlds/cli/{sessions/chat/content → content}/messages.py +2 -2
  59. ommlds/cli/{sessions/chat/content → content}/strings.py +1 -1
  60. ommlds/cli/inject.py +17 -8
  61. ommlds/cli/inputs/asyncs.py +32 -0
  62. ommlds/cli/inputs/sync.py +75 -0
  63. ommlds/cli/main.py +346 -114
  64. ommlds/cli/rendering/configs.py +9 -0
  65. ommlds/cli/{sessions/chat/rendering → rendering}/inject.py +4 -5
  66. ommlds/cli/{sessions/chat/rendering → rendering}/markdown.py +1 -1
  67. ommlds/cli/{sessions/chat/rendering → rendering}/raw.py +1 -1
  68. ommlds/cli/{sessions/chat/rendering → rendering}/types.py +7 -1
  69. ommlds/cli/secrets.py +22 -0
  70. ommlds/cli/sessions/base.py +1 -10
  71. ommlds/cli/sessions/chat/configs.py +13 -30
  72. ommlds/cli/sessions/chat/drivers/ai/configs.py +13 -0
  73. ommlds/cli/sessions/chat/drivers/ai/events.py +57 -0
  74. ommlds/cli/sessions/chat/{chat → drivers}/ai/inject.py +15 -12
  75. ommlds/cli/sessions/chat/{chat → drivers}/ai/rendering.py +8 -8
  76. ommlds/cli/sessions/chat/{chat → drivers}/ai/services.py +5 -5
  77. ommlds/cli/sessions/chat/{chat → drivers}/ai/tools.py +4 -8
  78. ommlds/cli/sessions/chat/{chat → drivers}/ai/types.py +10 -1
  79. ommlds/cli/sessions/chat/drivers/configs.py +25 -0
  80. ommlds/cli/sessions/chat/drivers/events/inject.py +27 -0
  81. ommlds/cli/sessions/chat/drivers/events/injection.py +14 -0
  82. ommlds/cli/sessions/chat/drivers/events/manager.py +16 -0
  83. ommlds/cli/sessions/chat/drivers/events/types.py +44 -0
  84. ommlds/cli/sessions/chat/drivers/impl.py +50 -0
  85. ommlds/cli/sessions/chat/drivers/inject.py +70 -0
  86. ommlds/cli/sessions/chat/drivers/state/configs.py +13 -0
  87. ommlds/cli/sessions/chat/drivers/state/ids.py +25 -0
  88. ommlds/cli/sessions/chat/drivers/state/inject.py +83 -0
  89. ommlds/cli/sessions/chat/{chat → drivers}/state/inmemory.py +1 -6
  90. ommlds/cli/sessions/chat/{chat → drivers}/state/storage.py +18 -12
  91. ommlds/cli/sessions/chat/{chat → drivers}/state/types.py +11 -6
  92. ommlds/cli/sessions/chat/drivers/tools/configs.py +22 -0
  93. ommlds/cli/sessions/chat/drivers/tools/confirmation.py +44 -0
  94. ommlds/cli/sessions/chat/drivers/tools/errorhandling.py +39 -0
  95. ommlds/cli/sessions/chat/{tools → drivers/tools}/execution.py +3 -4
  96. ommlds/cli/sessions/chat/drivers/tools/fs/__init__.py +0 -0
  97. ommlds/cli/sessions/chat/drivers/tools/fs/configs.py +12 -0
  98. ommlds/cli/sessions/chat/drivers/tools/fs/inject.py +35 -0
  99. ommlds/cli/sessions/chat/drivers/tools/inject.py +83 -0
  100. ommlds/cli/sessions/chat/{tools → drivers/tools}/injection.py +20 -5
  101. ommlds/cli/sessions/chat/{tools → drivers/tools}/rendering.py +3 -3
  102. ommlds/cli/sessions/chat/drivers/tools/todo/__init__.py +0 -0
  103. ommlds/cli/sessions/chat/drivers/tools/todo/configs.py +12 -0
  104. ommlds/cli/sessions/chat/drivers/tools/todo/inject.py +31 -0
  105. ommlds/cli/sessions/chat/drivers/tools/weather/__init__.py +0 -0
  106. ommlds/cli/sessions/chat/drivers/tools/weather/configs.py +12 -0
  107. ommlds/cli/sessions/chat/drivers/tools/weather/inject.py +22 -0
  108. ommlds/cli/sessions/chat/{tools/weather.py → drivers/tools/weather/tools.py} +1 -1
  109. ommlds/cli/sessions/chat/drivers/types.py +31 -0
  110. ommlds/cli/sessions/chat/drivers/user/__init__.py +0 -0
  111. ommlds/cli/sessions/chat/drivers/user/configs.py +14 -0
  112. ommlds/cli/sessions/chat/drivers/user/inject.py +41 -0
  113. ommlds/cli/sessions/chat/facades/__init__.py +0 -0
  114. ommlds/cli/sessions/chat/facades/commands/__init__.py +0 -0
  115. ommlds/cli/sessions/chat/facades/commands/base.py +83 -0
  116. ommlds/cli/sessions/chat/facades/commands/configs.py +9 -0
  117. ommlds/cli/sessions/chat/facades/commands/inject.py +41 -0
  118. ommlds/cli/sessions/chat/facades/commands/injection.py +15 -0
  119. ommlds/cli/sessions/chat/facades/commands/manager.py +59 -0
  120. ommlds/cli/sessions/chat/facades/commands/simple.py +34 -0
  121. ommlds/cli/sessions/chat/facades/commands/types.py +13 -0
  122. ommlds/cli/sessions/chat/facades/configs.py +11 -0
  123. ommlds/cli/sessions/chat/facades/facade.py +26 -0
  124. ommlds/cli/sessions/chat/facades/inject.py +35 -0
  125. ommlds/cli/sessions/chat/facades/ui.py +34 -0
  126. ommlds/cli/sessions/chat/inject.py +10 -49
  127. ommlds/cli/sessions/chat/interfaces/__init__.py +0 -0
  128. ommlds/cli/sessions/chat/interfaces/bare/__init__.py +0 -0
  129. ommlds/cli/sessions/chat/interfaces/bare/configs.py +15 -0
  130. ommlds/cli/sessions/chat/interfaces/bare/inject.py +69 -0
  131. ommlds/cli/sessions/chat/interfaces/bare/interactive.py +49 -0
  132. ommlds/cli/sessions/chat/interfaces/bare/oneshot.py +21 -0
  133. ommlds/cli/sessions/chat/{tools/confirmation.py → interfaces/bare/tools.py} +3 -22
  134. ommlds/cli/sessions/chat/interfaces/base.py +13 -0
  135. ommlds/cli/sessions/chat/interfaces/configs.py +11 -0
  136. ommlds/cli/sessions/chat/interfaces/inject.py +29 -0
  137. ommlds/cli/sessions/chat/interfaces/textual/__init__.py +0 -0
  138. ommlds/cli/sessions/chat/interfaces/textual/app.py +429 -0
  139. ommlds/cli/sessions/chat/interfaces/textual/configs.py +11 -0
  140. ommlds/cli/sessions/chat/interfaces/textual/facades.py +19 -0
  141. ommlds/cli/sessions/chat/interfaces/textual/inject.py +111 -0
  142. ommlds/cli/sessions/chat/interfaces/textual/inputhistory.py +174 -0
  143. ommlds/cli/sessions/chat/interfaces/textual/interface.py +24 -0
  144. ommlds/cli/sessions/chat/interfaces/textual/styles/__init__.py +29 -0
  145. ommlds/cli/sessions/chat/interfaces/textual/styles/input.tcss +53 -0
  146. ommlds/cli/sessions/chat/interfaces/textual/styles/markdown.tcss +7 -0
  147. ommlds/cli/sessions/chat/interfaces/textual/styles/messages.tcss +167 -0
  148. ommlds/cli/sessions/chat/interfaces/textual/tools.py +38 -0
  149. ommlds/cli/sessions/chat/interfaces/textual/widgets/__init__.py +0 -0
  150. ommlds/cli/sessions/chat/interfaces/textual/widgets/input.py +70 -0
  151. ommlds/cli/sessions/chat/interfaces/textual/widgets/messages.py +207 -0
  152. ommlds/cli/sessions/chat/session.py +8 -13
  153. ommlds/cli/sessions/completion/configs.py +5 -6
  154. ommlds/cli/sessions/completion/inject.py +15 -2
  155. ommlds/cli/sessions/completion/session.py +10 -18
  156. ommlds/cli/sessions/configs.py +10 -0
  157. ommlds/cli/sessions/embedding/configs.py +5 -6
  158. ommlds/cli/sessions/embedding/inject.py +15 -2
  159. ommlds/cli/sessions/embedding/session.py +10 -18
  160. ommlds/cli/sessions/inject.py +15 -15
  161. ommlds/cli/state/storage.py +8 -2
  162. ommlds/minichain/__init__.py +217 -60
  163. ommlds/minichain/_dataclasses.py +20640 -0
  164. ommlds/minichain/_typedvalues.py +15 -8
  165. ommlds/minichain/backends/catalogs/base.py +20 -1
  166. ommlds/minichain/backends/catalogs/simple.py +2 -2
  167. ommlds/minichain/backends/catalogs/strings.py +13 -10
  168. ommlds/minichain/backends/impls/anthropic/chat.py +28 -5
  169. ommlds/minichain/backends/impls/anthropic/names.py +3 -3
  170. ommlds/minichain/backends/impls/anthropic/protocol.py +2 -2
  171. ommlds/minichain/backends/impls/anthropic/stream.py +23 -18
  172. ommlds/minichain/backends/impls/cerebras/__init__.py +0 -0
  173. ommlds/minichain/backends/impls/cerebras/chat.py +82 -0
  174. ommlds/minichain/backends/impls/cerebras/names.py +45 -0
  175. ommlds/minichain/backends/impls/cerebras/protocol.py +143 -0
  176. ommlds/minichain/backends/impls/cerebras/stream.py +114 -0
  177. ommlds/minichain/backends/impls/duckduckgo/search.py +5 -1
  178. ommlds/minichain/backends/impls/dummy/__init__.py +0 -0
  179. ommlds/minichain/backends/impls/dummy/chat.py +69 -0
  180. ommlds/minichain/backends/impls/google/chat.py +20 -84
  181. ommlds/minichain/backends/impls/google/names.py +6 -0
  182. ommlds/minichain/backends/impls/google/protocol.py +105 -0
  183. ommlds/minichain/backends/impls/google/search.py +10 -5
  184. ommlds/minichain/backends/impls/google/stream.py +64 -142
  185. ommlds/minichain/backends/impls/google/tools.py +2 -2
  186. ommlds/minichain/backends/impls/groq/__init__.py +0 -0
  187. ommlds/minichain/backends/impls/groq/chat.py +77 -0
  188. ommlds/minichain/backends/impls/groq/names.py +48 -0
  189. ommlds/minichain/backends/impls/groq/protocol.py +143 -0
  190. ommlds/minichain/backends/impls/groq/stream.py +114 -0
  191. ommlds/minichain/backends/impls/huggingface/repos.py +1 -5
  192. ommlds/minichain/backends/impls/llamacpp/chat.py +15 -3
  193. ommlds/minichain/backends/impls/llamacpp/completion.py +7 -3
  194. ommlds/minichain/backends/impls/llamacpp/stream.py +38 -19
  195. ommlds/minichain/backends/impls/mistral.py +9 -2
  196. ommlds/minichain/backends/impls/mlx/chat.py +100 -23
  197. ommlds/minichain/backends/impls/ollama/__init__.py +0 -0
  198. ommlds/minichain/backends/impls/ollama/chat.py +193 -0
  199. ommlds/minichain/backends/impls/ollama/protocol.py +144 -0
  200. ommlds/minichain/backends/impls/openai/chat.py +14 -7
  201. ommlds/minichain/backends/impls/openai/completion.py +9 -2
  202. ommlds/minichain/backends/impls/openai/embedding.py +9 -2
  203. ommlds/minichain/backends/impls/openai/format.py +117 -115
  204. ommlds/minichain/backends/impls/openai/names.py +33 -5
  205. ommlds/minichain/backends/impls/openai/stream.py +61 -70
  206. ommlds/minichain/backends/impls/sentencepiece/tokens.py +9 -6
  207. ommlds/minichain/backends/impls/tavily.py +66 -0
  208. ommlds/minichain/backends/impls/tinygrad/chat.py +17 -14
  209. ommlds/minichain/backends/impls/tokenizers/tokens.py +9 -6
  210. ommlds/minichain/backends/impls/transformers/sentence.py +5 -2
  211. ommlds/minichain/backends/impls/transformers/tokens.py +9 -6
  212. ommlds/minichain/backends/impls/transformers/transformers.py +139 -20
  213. ommlds/minichain/backends/strings/parsing.py +2 -2
  214. ommlds/minichain/backends/strings/resolving.py +7 -2
  215. ommlds/minichain/chat/choices/stream/__init__.py +0 -0
  216. ommlds/minichain/chat/{stream → choices/stream}/adapters.py +7 -7
  217. ommlds/minichain/chat/choices/stream/joining.py +31 -0
  218. ommlds/minichain/chat/choices/stream/services.py +45 -0
  219. ommlds/minichain/chat/choices/stream/types.py +43 -0
  220. ommlds/minichain/chat/content.py +42 -0
  221. ommlds/minichain/chat/messages.py +46 -42
  222. ommlds/minichain/chat/stream/_marshal.py +4 -4
  223. ommlds/minichain/chat/stream/joining.py +56 -43
  224. ommlds/minichain/chat/stream/services.py +15 -15
  225. ommlds/minichain/chat/stream/types.py +17 -24
  226. ommlds/minichain/chat/templating.py +3 -3
  227. ommlds/minichain/content/__init__.py +20 -3
  228. ommlds/minichain/content/_marshal.py +181 -55
  229. ommlds/minichain/content/code.py +26 -0
  230. ommlds/minichain/content/composite.py +28 -0
  231. ommlds/minichain/content/content.py +27 -0
  232. ommlds/minichain/content/dynamic.py +12 -0
  233. ommlds/minichain/content/emphasis.py +27 -0
  234. ommlds/minichain/content/images.py +2 -2
  235. ommlds/minichain/content/json.py +2 -2
  236. ommlds/minichain/content/link.py +13 -0
  237. ommlds/minichain/content/markdown.py +12 -0
  238. ommlds/minichain/content/metadata.py +10 -0
  239. ommlds/minichain/content/namespaces.py +8 -0
  240. ommlds/minichain/content/placeholders.py +10 -9
  241. ommlds/minichain/content/quote.py +26 -0
  242. ommlds/minichain/content/raw.py +49 -0
  243. ommlds/minichain/content/recursive.py +12 -0
  244. ommlds/minichain/content/resources.py +22 -0
  245. ommlds/minichain/content/section.py +26 -0
  246. ommlds/minichain/content/sequence.py +17 -3
  247. ommlds/minichain/content/standard.py +32 -0
  248. ommlds/minichain/content/tag.py +28 -0
  249. ommlds/minichain/content/templates.py +13 -0
  250. ommlds/minichain/content/text.py +2 -2
  251. ommlds/minichain/content/transform/__init__.py +0 -0
  252. ommlds/minichain/content/transform/json.py +55 -0
  253. ommlds/minichain/content/transform/markdown.py +8 -0
  254. ommlds/minichain/content/transform/materialize.py +59 -0
  255. ommlds/minichain/content/transform/metadata.py +16 -0
  256. ommlds/minichain/content/transform/namespaces.py +20 -0
  257. ommlds/minichain/content/transform/placeholders.py +60 -0
  258. ommlds/minichain/content/{prepare.py → transform/prepare.py} +10 -15
  259. ommlds/minichain/content/transform/recursive.py +54 -0
  260. ommlds/minichain/content/transform/resources.py +58 -0
  261. ommlds/minichain/content/transform/standard.py +43 -0
  262. ommlds/minichain/content/{transforms → transform}/stringify.py +1 -7
  263. ommlds/minichain/content/transform/strings.py +33 -0
  264. ommlds/minichain/content/transform/templates.py +25 -0
  265. ommlds/minichain/content/transform/types.py +18 -0
  266. ommlds/minichain/content/transform/visitors.py +38 -0
  267. ommlds/minichain/content/visitors.py +218 -0
  268. ommlds/minichain/http/__init__.py +0 -0
  269. ommlds/minichain/http/stream.py +195 -0
  270. ommlds/minichain/lib/fs/tools/read.py +1 -1
  271. ommlds/minichain/lib/fs/tools/recursivels/rendering.py +1 -1
  272. ommlds/minichain/lib/fs/tools/recursivels/running.py +1 -1
  273. ommlds/minichain/lib/todo/tools/write.py +2 -1
  274. ommlds/minichain/lib/todo/types.py +1 -1
  275. ommlds/minichain/llms/types.py +4 -0
  276. ommlds/minichain/metadata.py +56 -2
  277. ommlds/minichain/models/configs.py +2 -2
  278. ommlds/minichain/models/names.py +2 -0
  279. ommlds/minichain/registries/globals.py +18 -4
  280. ommlds/minichain/resources.py +49 -3
  281. ommlds/minichain/search.py +1 -1
  282. ommlds/minichain/services/README.md +154 -0
  283. ommlds/minichain/services/__init__.py +6 -2
  284. ommlds/minichain/services/_marshal.py +46 -10
  285. ommlds/minichain/services/_origclasses.py +11 -0
  286. ommlds/minichain/services/_typedvalues.py +8 -3
  287. ommlds/minichain/services/requests.py +73 -3
  288. ommlds/minichain/services/responses.py +73 -3
  289. ommlds/minichain/services/services.py +9 -0
  290. ommlds/minichain/standard.py +8 -0
  291. ommlds/minichain/stream/services.py +43 -17
  292. ommlds/minichain/text/applypatch.py +2 -1
  293. ommlds/minichain/text/toolparsing/llamacpp/types.py +1 -1
  294. ommlds/minichain/tokens/specials.py +1 -1
  295. ommlds/minichain/tools/execution/catalog.py +2 -2
  296. ommlds/minichain/tools/execution/errorhandling.py +36 -0
  297. ommlds/minichain/tools/execution/errors.py +2 -2
  298. ommlds/minichain/tools/execution/executors.py +1 -1
  299. ommlds/minichain/tools/fns.py +1 -1
  300. ommlds/minichain/tools/jsonschema.py +2 -2
  301. ommlds/minichain/tools/reflect.py +11 -7
  302. ommlds/minichain/tools/types.py +16 -19
  303. ommlds/minichain/vectors/_marshal.py +1 -1
  304. ommlds/minichain/vectors/embeddings.py +1 -1
  305. ommlds/minichain/wrappers/__init__.py +7 -0
  306. ommlds/minichain/wrappers/firstinwins.py +144 -0
  307. ommlds/minichain/wrappers/instrument.py +146 -0
  308. ommlds/minichain/wrappers/retry.py +168 -0
  309. ommlds/minichain/wrappers/services.py +98 -0
  310. ommlds/minichain/wrappers/stream.py +57 -0
  311. ommlds/nanochat/LICENSE +21 -0
  312. ommlds/nanochat/__init__.py +0 -0
  313. ommlds/nanochat/rustbpe/LICENSE +21 -0
  314. ommlds/nanochat/rustbpe/README.md +10 -0
  315. ommlds/nanochat/tokenizers.py +440 -0
  316. ommlds/specs/__init__.py +0 -0
  317. ommlds/specs/mcp/__init__.py +0 -0
  318. ommlds/specs/mcp/_marshal.py +23 -0
  319. ommlds/specs/mcp/clients.py +146 -0
  320. ommlds/specs/mcp/protocol.py +369 -0
  321. ommlds/tools/git.py +84 -64
  322. ommlds/tools/ocr.py +1 -1
  323. ommlds/wiki/analyze.py +2 -2
  324. ommlds/wiki/models.py +4 -4
  325. ommlds/wiki/text/mfh.py +9 -9
  326. ommlds/wiki/utils/xml.py +5 -5
  327. {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/METADATA +28 -21
  328. ommlds-0.0.0.dev512.dist-info/RECORD +534 -0
  329. {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/WHEEL +1 -1
  330. ommlds/cli/backends/standard.py +0 -20
  331. ommlds/cli/sessions/chat/backends/catalog.py +0 -56
  332. ommlds/cli/sessions/chat/backends/inject.py +0 -37
  333. ommlds/cli/sessions/chat/chat/state/inject.py +0 -40
  334. ommlds/cli/sessions/chat/chat/user/inject.py +0 -61
  335. ommlds/cli/sessions/chat/chat/user/interactive.py +0 -29
  336. ommlds/cli/sessions/chat/chat/user/oneshot.py +0 -25
  337. ommlds/cli/sessions/chat/chat/user/types.py +0 -15
  338. ommlds/cli/sessions/chat/driver.py +0 -43
  339. ommlds/cli/sessions/chat/tools/inject.py +0 -145
  340. ommlds/minichain/backends/impls/openai/format2.py +0 -210
  341. ommlds/minichain/content/materialize.py +0 -196
  342. ommlds/minichain/content/simple.py +0 -47
  343. ommlds/minichain/content/transforms/base.py +0 -46
  344. ommlds/minichain/content/transforms/interleave.py +0 -70
  345. ommlds/minichain/content/transforms/squeeze.py +0 -72
  346. ommlds/minichain/content/transforms/strings.py +0 -24
  347. ommlds/minichain/content/types.py +0 -43
  348. ommlds/minichain/stream/wrap.py +0 -62
  349. ommlds-0.0.0.dev466.dist-info/RECORD +0 -376
  350. /ommlds/{cli/sessions/chat/backends → backends/huggingface}/__init__.py +0 -0
  351. /ommlds/cli/{sessions/chat/chat → content}/__init__.py +0 -0
  352. /ommlds/cli/{sessions/chat/chat/ai → inputs}/__init__.py +0 -0
  353. /ommlds/cli/{sessions/chat/chat/state → rendering}/__init__.py +0 -0
  354. /ommlds/cli/sessions/chat/{chat/user → drivers}/__init__.py +0 -0
  355. /ommlds/cli/sessions/chat/{content → drivers/ai}/__init__.py +0 -0
  356. /ommlds/cli/sessions/chat/{chat → drivers}/ai/injection.py +0 -0
  357. /ommlds/cli/sessions/chat/{phases → drivers/events}/__init__.py +0 -0
  358. /ommlds/cli/sessions/chat/{rendering → drivers/phases}/__init__.py +0 -0
  359. /ommlds/cli/sessions/chat/{phases → drivers/phases}/inject.py +0 -0
  360. /ommlds/cli/sessions/chat/{phases → drivers/phases}/injection.py +0 -0
  361. /ommlds/cli/sessions/chat/{phases → drivers/phases}/manager.py +0 -0
  362. /ommlds/cli/sessions/chat/{phases → drivers/phases}/types.py +0 -0
  363. /ommlds/cli/sessions/chat/{tools → drivers/state}/__init__.py +0 -0
  364. /ommlds/{minichain/content/transforms → cli/sessions/chat/drivers/tools}/__init__.py +0 -0
  365. {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/entry_points.txt +0 -0
  366. {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/licenses/LICENSE +0 -0
  367. {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,4 @@
1
- import dataclasses as dc
2
-
1
+ from omlish import dataclasses as dc
3
2
  from omlish import lang
4
3
 
5
4
  from ...... import minichain as mc
@@ -21,10 +20,6 @@ class InMemoryChatStateManager(ChatStateManager):
21
20
  async def get_state(self) -> ChatState:
22
21
  return self._state
23
22
 
24
- async def clear_state(self) -> ChatState:
25
- self._state = ChatState()
26
- return self._state
27
-
28
23
  async def extend_chat(self, chat_additions: 'mc.Chat') -> ChatState:
29
24
  self._state = dc.replace(
30
25
  self._state,
@@ -1,10 +1,11 @@
1
- import dataclasses as dc
2
-
3
1
  from omlish import check
2
+ from omlish import dataclasses as dc
4
3
  from omlish import lang
4
+ from omlish import typedvalues as tv
5
5
 
6
6
  from ...... import minichain as mc
7
7
  from .....state.storage import StateStorage
8
+ from .types import ChatId
8
9
  from .types import ChatState
9
10
  from .types import ChatStateManager
10
11
 
@@ -12,35 +13,40 @@ from .types import ChatStateManager
12
13
  ##
13
14
 
14
15
 
16
+ class ChatStateStorageKey(tv.UniqueScalarTypedValue[str]):
17
+ pass
18
+
19
+
20
+ def build_chat_storage_key(chat_id: ChatId) -> ChatStateStorageKey:
21
+ return ChatStateStorageKey(f'chat:{chat_id.v}')
22
+
23
+
24
+ ##
25
+
26
+
15
27
  class StateStorageChatStateManager(ChatStateManager):
16
28
  def __init__(
17
29
  self,
18
30
  *,
19
31
  storage: StateStorage,
20
- key: str = 'chat',
32
+ key: ChatStateStorageKey,
21
33
  ) -> None:
22
34
  super().__init__()
23
35
 
24
36
  self._storage = storage
25
- self._key = check.non_empty_str(key)
37
+ self._key = check.isinstance(key, ChatStateStorageKey)
26
38
 
27
39
  self._state: ChatState | None = None
28
40
 
29
41
  async def get_state(self) -> ChatState:
30
42
  if self._state is not None:
31
43
  return self._state
32
- state: ChatState | None = await self._storage.load_state(self._key, ChatState)
44
+ state: ChatState | None = await self._storage.load_state(self._key.v, ChatState)
33
45
  if state is None:
34
46
  state = ChatState()
35
47
  self._state = state
36
48
  return state
37
49
 
38
- async def clear_state(self) -> ChatState:
39
- state = ChatState()
40
- await self._storage.save_state(self._key, state, ChatState)
41
- self._state = state
42
- return state
43
-
44
50
  async def extend_chat(self, chat_additions: 'mc.Chat') -> ChatState:
45
51
  state = await self.get_state()
46
52
  state = dc.replace(
@@ -48,6 +54,6 @@ class StateStorageChatStateManager(ChatStateManager):
48
54
  chat=[*state.chat, *chat_additions],
49
55
  updated_at=lang.utcnow(),
50
56
  )
51
- await self._storage.save_state(self._key, state, ChatState)
57
+ await self._storage.save_state(self._key.v, state, ChatState)
52
58
  self._state = state
53
59
  return state
@@ -1,9 +1,11 @@
1
1
  import abc
2
- import dataclasses as dc
3
2
  import datetime
4
3
  import typing as ta
4
+ import uuid
5
5
 
6
+ from omlish import dataclasses as dc
6
7
  from omlish import lang
8
+ from omlish import typedvalues as tv
7
9
 
8
10
  from ...... import minichain as mc
9
11
 
@@ -11,6 +13,13 @@ from ...... import minichain as mc
11
13
  ##
12
14
 
13
15
 
16
+ class ChatId(tv.UniqueScalarTypedValue[uuid.UUID]):
17
+ pass
18
+
19
+
20
+ ##
21
+
22
+
14
23
  @dc.dataclass(frozen=True)
15
24
  class ChatState:
16
25
  name: str | None = None
@@ -18,7 +27,7 @@ class ChatState:
18
27
  created_at: datetime.datetime = dc.field(default_factory=lang.utcnow)
19
28
  updated_at: datetime.datetime = dc.field(default_factory=lang.utcnow)
20
29
 
21
- chat: mc.Chat = ()
30
+ chat: 'mc.Chat' = ()
22
31
 
23
32
 
24
33
  ##
@@ -29,10 +38,6 @@ class ChatStateManager(lang.Abstract):
29
38
  def get_state(self) -> ta.Awaitable[ChatState]:
30
39
  raise NotImplementedError
31
40
 
32
- @abc.abstractmethod
33
- def clear_state(self) -> ta.Awaitable[ChatState]:
34
- raise NotImplementedError
35
-
36
41
  @abc.abstractmethod
37
42
  def extend_chat(self, chat_additions: 'mc.Chat') -> ta.Awaitable[ChatState]:
38
43
  raise NotImplementedError
@@ -0,0 +1,22 @@
1
+ import typing as ta
2
+
3
+ from omlish import dataclasses as dc
4
+ from omlish import lang
5
+
6
+
7
+ ##
8
+
9
+
10
+ @dc.dataclass(frozen=True, kw_only=True)
11
+ class ToolsConfig:
12
+ enabled_tools: ta.Iterable[str] | None = None
13
+
14
+ verbose: bool = False
15
+
16
+
17
+ ##
18
+
19
+
20
+ @dc.dataclass(frozen=True, kw_only=True)
21
+ class ToolSetConfig(lang.Abstract):
22
+ pass
@@ -0,0 +1,44 @@
1
+ import abc
2
+ import typing as ta
3
+
4
+ from omlish import lang
5
+
6
+ from ...... import minichain as mc
7
+
8
+
9
+ ##
10
+
11
+
12
+ class ToolExecutionRequestDeniedError(Exception):
13
+ pass
14
+
15
+
16
+ class ToolExecutionConfirmation(lang.Abstract):
17
+ @abc.abstractmethod
18
+ def confirm_tool_execution_or_raise(
19
+ self,
20
+ use: 'mc.ToolUse',
21
+ entry: 'mc.ToolCatalogEntry',
22
+ ) -> ta.Awaitable[None]:
23
+ raise NotImplementedError
24
+
25
+
26
+ ##
27
+
28
+
29
+ class AlwaysDenyToolExecutionConfirmation(ToolExecutionConfirmation):
30
+ async def confirm_tool_execution_or_raise(
31
+ self,
32
+ use: 'mc.ToolUse',
33
+ entry: 'mc.ToolCatalogEntry',
34
+ ) -> None:
35
+ raise ToolExecutionRequestDeniedError
36
+
37
+
38
+ class UnsafeAlwaysAllowToolExecutionConfirmation(ToolExecutionConfirmation):
39
+ async def confirm_tool_execution_or_raise(
40
+ self,
41
+ use: 'mc.ToolUse',
42
+ entry: 'mc.ToolCatalogEntry',
43
+ ) -> None:
44
+ pass
@@ -0,0 +1,39 @@
1
+ import typing as ta
2
+
3
+ from omlish import check
4
+
5
+ from ...... import minichain as mc
6
+ from .execution import ToolUseExecutor
7
+
8
+
9
+ ##
10
+
11
+
12
+ class ErrorHandlingToolUseExecutor(ToolUseExecutor):
13
+ def __init__(
14
+ self,
15
+ *,
16
+ wrapped: ToolUseExecutor,
17
+ ) -> None:
18
+ super().__init__()
19
+
20
+ self._wrapped = wrapped
21
+
22
+ async def execute_tool_use(
23
+ self,
24
+ use: 'mc.ToolUse',
25
+ *ctx_items: ta.Any,
26
+ ) -> 'mc.ToolUseResultMessage':
27
+ try:
28
+ return await self._wrapped.execute_tool_use(use, *ctx_items)
29
+
30
+ except mc.ToolExecutionError as txe: # noqa
31
+ s = check.non_empty_str(check.isinstance(txe.content, str))
32
+
33
+ return mc.ToolUseResultMessage(
34
+ mc.ToolUseResult(
35
+ id=use.id,
36
+ name=use.name,
37
+ c=s,
38
+ ),
39
+ )
@@ -4,7 +4,7 @@ import typing as ta
4
4
  from omlish import check
5
5
  from omlish import lang
6
6
 
7
- from ..... import minichain as mc
7
+ from ...... import minichain as mc
8
8
  from .confirmation import ToolExecutionConfirmation
9
9
 
10
10
 
@@ -37,7 +37,7 @@ class ToolUseExecutorImpl(ToolUseExecutor):
37
37
  *,
38
38
  catalog: 'mc.ToolCatalog',
39
39
  ctx_provider: ToolContextProvider,
40
- confirmation: ToolExecutionConfirmation | None = None,
40
+ confirmation: ToolExecutionConfirmation,
41
41
  ) -> None:
42
42
  super().__init__()
43
43
 
@@ -52,8 +52,7 @@ class ToolUseExecutorImpl(ToolUseExecutor):
52
52
  ) -> 'mc.ToolUseResultMessage':
53
53
  tce = self._catalog.by_name[check.non_empty_str(use.name)]
54
54
 
55
- if self._confirmation is not None:
56
- await self._confirmation.confirm_tool_execution_or_raise(use, tce)
55
+ await self._confirmation.confirm_tool_execution_or_raise(use, tce)
57
56
 
58
57
  return await mc.execute_tool_use(
59
58
  mc.ToolContext(
File without changes
@@ -0,0 +1,12 @@
1
+ from omlish import dataclasses as dc
2
+ from omlish import lang
3
+
4
+ from ..configs import ToolSetConfig
5
+
6
+
7
+ ##
8
+
9
+
10
+ @dc.dataclass(frozen=True, kw_only=True)
11
+ class FsToolSetConfig(ToolSetConfig, lang.Final):
12
+ pass
@@ -0,0 +1,35 @@
1
+ import os
2
+
3
+ from omlish import inject as inj
4
+
5
+ from ..injection import ToolSetBinder
6
+ from ..injection import bind_tool_context_provider_to_key
7
+ from ..injection import tool_catalog_entries
8
+ from .configs import FsToolSetConfig
9
+
10
+
11
+ ##
12
+
13
+
14
+ def bind_fs_tools(cfg: FsToolSetConfig) -> inj.Elements:
15
+ from .......minichain.lib.fs.context import FsContext
16
+ from .......minichain.lib.fs.tools.ls import ls_tool
17
+ from .......minichain.lib.fs.tools.read import read_tool
18
+
19
+ return inj.as_elements(
20
+ tool_catalog_entries().bind_item_consts(
21
+ ls_tool(),
22
+ read_tool(),
23
+ ),
24
+
25
+ inj.bind(FsContext(
26
+ root_dir=os.getcwd(),
27
+ )),
28
+ bind_tool_context_provider_to_key(FsContext),
29
+ )
30
+
31
+
32
+ ##
33
+
34
+
35
+ FS_TOOL_SET_BINDER = ToolSetBinder(FsToolSetConfig, bind_fs_tools)
@@ -0,0 +1,83 @@
1
+ from omlish import check
2
+ from omlish import inject as inj
3
+ from omlish import lang
4
+
5
+ from ...... import minichain as mc
6
+ from ..configs import ToolsConfig
7
+ from .injection import ToolSetBinder
8
+ from .injection import tool_catalog_entries
9
+ from .injection import tool_context_providers
10
+
11
+
12
+ with lang.auto_proxy_import(globals()):
13
+ from . import errorhandling as _errorhandling
14
+ from . import execution as _execution
15
+ from . import rendering as _rendering
16
+
17
+
18
+ ##
19
+
20
+
21
+ # if tools_config.enable_unsafe_tools_do_not_use_lol:
22
+ # from ...minichain.lib.bash import bash_tool
23
+ # els.append(bind_tool(bash_tool()))
24
+ #
25
+ # from ...minichain.lib.fs.tools.edit import edit_tool
26
+ # els.append(bind_tool(edit_tool()))
27
+
28
+
29
+ ##
30
+
31
+
32
+ def bind_tools(cfg: ToolsConfig = ToolsConfig()) -> inj.Elements:
33
+ els: list[inj.Elemental] = []
34
+
35
+ #
36
+
37
+ els.append(inj.bind(mc.ToolCatalog, singleton=True))
38
+
39
+ #
40
+
41
+ els.append(tool_catalog_entries().bind_items_provider(singleton=True))
42
+
43
+ for etn in check.not_isinstance(cfg.enabled_tools or [], str):
44
+ from .fs.inject import FS_TOOL_SET_BINDER
45
+ from .todo.inject import TODO_TOOL_SET_BINDER
46
+ from .weather.inject import WEATHER_TOOL_SET_BINDER
47
+ ts_binder: ToolSetBinder = { # type: ignore[assignment] # FIXME: placeholder obviously lol
48
+ 'fs': FS_TOOL_SET_BINDER,
49
+ 'todo': TODO_TOOL_SET_BINDER,
50
+ 'weather': WEATHER_TOOL_SET_BINDER,
51
+ }[etn]
52
+
53
+ els.append(ts_binder.fn(ts_binder.cfg_cls()))
54
+
55
+ #
56
+
57
+ exec_stack = inj.wrapper_binder_helper(_execution.ToolUseExecutor)
58
+
59
+ els.append(exec_stack.push_bind(to_ctor=_execution.ToolUseExecutorImpl, singleton=True))
60
+
61
+ els.append(exec_stack.push_bind(to_ctor=_errorhandling.ErrorHandlingToolUseExecutor, singleton=True))
62
+
63
+ if cfg.verbose:
64
+ els.append(exec_stack.push_bind(to_ctor=_rendering.ArgsRenderingToolUseExecutor, singleton=True))
65
+ els.append(exec_stack.push_bind(to_ctor=_rendering.ResultRenderingToolUseExecutor, singleton=True))
66
+
67
+ els.extend([
68
+ inj.bind(_execution.ToolUseExecutor, to_key=exec_stack.top),
69
+ ])
70
+
71
+ #
72
+
73
+ els.extend([
74
+ tool_context_providers().bind_items_provider(singleton=True),
75
+
76
+ inj.bind(_execution.ToolContextProvider, to_fn=lang.typed_lambda(tcps=_execution.ToolContextProviders)(
77
+ lambda tcps: _execution.ToolContextProvider(lambda: [tc for tcp in tcps for tc in tcp()]),
78
+ ), singleton=True),
79
+ ])
80
+
81
+ #
82
+
83
+ return inj.as_elements(*els)
@@ -1,14 +1,20 @@
1
1
  import typing as ta
2
2
 
3
+ from omlish import dataclasses as dc
3
4
  from omlish import inject as inj
4
5
  from omlish import lang
5
6
 
6
- from ..... import minichain as mc
7
+ from ...... import minichain as mc
8
+ from .configs import ToolSetConfig
7
9
 
8
10
 
9
11
  with lang.auto_proxy_import(globals()):
10
12
  from . import execution as _execution
11
13
 
14
+
15
+ ToolSetConfigT = ta.TypeVar('ToolSetConfigT', bound='ToolSetConfig')
16
+
17
+
12
18
  ##
13
19
 
14
20
 
@@ -23,7 +29,16 @@ def tool_context_providers() -> 'inj.ItemsBinderHelper[_execution.ToolContextPro
23
29
 
24
30
 
25
31
  def bind_tool_context_provider_to_key(key: ta.Any) -> inj.Elements:
26
- return tool_context_providers().bind_item(to_fn=inj.KwargsTarget.of(
27
- lambda v: _execution.ToolContextProvider(lambda: [v]),
28
- v=key,
29
- ), singleton=True)
32
+ return tool_context_providers().bind_item(
33
+ to_fn=inj.target(v=key)(lambda v: _execution.ToolContextProvider(lambda: [v])),
34
+ singleton=True,
35
+ )
36
+
37
+
38
+ ##
39
+
40
+
41
+ @dc.dataclass(frozen=True)
42
+ class ToolSetBinder(lang.Final, ta.Generic[ToolSetConfigT]):
43
+ cfg_cls: type[ToolSetConfig]
44
+ fn: ta.Callable[[ToolSetConfigT], inj.Elements]
@@ -1,8 +1,8 @@
1
1
  import typing as ta
2
2
 
3
- from ..... import minichain as mc
4
- from ..rendering.types import ContentRendering
5
- from .execution import ToolUseExecutor
3
+ from ...... import minichain as mc
4
+ from .....rendering.types import ContentRendering
5
+ from ...drivers.tools.execution import ToolUseExecutor
6
6
 
7
7
 
8
8
  ##
@@ -0,0 +1,12 @@
1
+ from omlish import dataclasses as dc
2
+ from omlish import lang
3
+
4
+ from ..configs import ToolSetConfig
5
+
6
+
7
+ ##
8
+
9
+
10
+ @dc.dataclass(frozen=True, kw_only=True)
11
+ class TodoToolSetConfig(ToolSetConfig, lang.Final):
12
+ pass
@@ -0,0 +1,31 @@
1
+ from omlish import inject as inj
2
+
3
+ from ..injection import ToolSetBinder
4
+ from ..injection import bind_tool_context_provider_to_key
5
+ from ..injection import tool_catalog_entries
6
+ from .configs import TodoToolSetConfig
7
+
8
+
9
+ ##
10
+
11
+
12
+ def bind_todo_tools(cfg: TodoToolSetConfig) -> inj.Elements:
13
+ from .......minichain.lib.todo.context import TodoContext
14
+ from .......minichain.lib.todo.tools.read import todo_read_tool
15
+ from .......minichain.lib.todo.tools.write import todo_write_tool
16
+
17
+ return inj.as_elements(
18
+ tool_catalog_entries().bind_item_consts(
19
+ todo_read_tool(),
20
+ todo_write_tool(),
21
+ ),
22
+
23
+ inj.bind(TodoContext()),
24
+ bind_tool_context_provider_to_key(TodoContext),
25
+ )
26
+
27
+
28
+ ##
29
+
30
+
31
+ TODO_TOOL_SET_BINDER = ToolSetBinder(TodoToolSetConfig, bind_todo_tools)
@@ -0,0 +1,12 @@
1
+ from omlish import dataclasses as dc
2
+ from omlish import lang
3
+
4
+ from ..configs import ToolSetConfig
5
+
6
+
7
+ ##
8
+
9
+
10
+ @dc.dataclass(frozen=True, kw_only=True)
11
+ class WeatherToolSetConfig(ToolSetConfig, lang.Final):
12
+ pass
@@ -0,0 +1,22 @@
1
+ from omlish import inject as inj
2
+
3
+ from ..injection import ToolSetBinder
4
+ from ..injection import tool_catalog_entries
5
+ from .configs import WeatherToolSetConfig
6
+
7
+
8
+ ##
9
+
10
+
11
+ def bind_weather_tools(cfg: WeatherToolSetConfig) -> inj.Elements:
12
+ from .tools import WEATHER_TOOL
13
+
14
+ return inj.as_elements(
15
+ tool_catalog_entries().bind_item_consts(WEATHER_TOOL),
16
+ )
17
+
18
+
19
+ ##
20
+
21
+
22
+ WEATHER_TOOL_SET_BINDER = ToolSetBinder(WeatherToolSetConfig, bind_weather_tools)
@@ -1,4 +1,4 @@
1
- from ..... import minichain as mc
1
+ from ....... import minichain as mc
2
2
 
3
3
 
4
4
  ##
@@ -0,0 +1,31 @@
1
+ import abc
2
+ import typing as ta
3
+ import uuid
4
+
5
+ from omlish import lang
6
+ from omlish import typedvalues as tv
7
+
8
+ from ..... import minichain as mc
9
+
10
+
11
+ ##
12
+
13
+
14
+ class ChatDriverId(tv.UniqueScalarTypedValue[uuid.UUID]):
15
+ pass
16
+
17
+
18
+ class ChatDriverGetter(lang.Func0[ta.Awaitable['ChatDriver']]):
19
+ pass
20
+
21
+
22
+ class ChatDriver(lang.Abstract):
23
+ async def start(self) -> None:
24
+ pass
25
+
26
+ async def stop(self) -> None:
27
+ pass
28
+
29
+ @abc.abstractmethod
30
+ def send_user_messages(self, next_user_chat: 'mc.UserChat') -> ta.Awaitable[None]:
31
+ raise NotImplementedError
File without changes
@@ -0,0 +1,14 @@
1
+ import typing as ta
2
+
3
+ from omlish import dataclasses as dc
4
+
5
+ from ...... import minichain as mc
6
+
7
+
8
+ ##
9
+
10
+
11
+ @dc.dataclass(frozen=True, kw_only=True)
12
+ class UserConfig:
13
+ initial_system_content: ta.Optional['mc.Content'] = None
14
+ initial_user_content: ta.Optional['mc.Content'] = None
@@ -0,0 +1,41 @@
1
+ from omlish import check
2
+ from omlish import inject as inj
3
+ from omlish import lang
4
+
5
+ from ...... import minichain as mc
6
+ from ..phases.injection import phase_callbacks
7
+ from ..phases.types import ChatPhase
8
+ from ..phases.types import ChatPhaseCallback
9
+ from .configs import UserConfig
10
+
11
+
12
+ with lang.auto_proxy_import(globals()):
13
+ from .. import types as _driver
14
+ from ..state import types as _state
15
+
16
+
17
+ ##
18
+
19
+
20
+ def bind_user(cfg: UserConfig = UserConfig()) -> inj.Elements:
21
+ els: list[inj.Elemental] = []
22
+
23
+ if cfg.initial_system_content is not None:
24
+ async def add_initial_system_content(cm: '_state.ChatStateManager') -> None:
25
+ await cm.extend_chat([mc.SystemMessage(check.not_none(cfg.initial_system_content))])
26
+
27
+ els.append(phase_callbacks().bind_item(to_fn=inj.KwargsTarget.of(
28
+ lambda cm: ChatPhaseCallback(ChatPhase.STARTED, lambda: add_initial_system_content(cm)),
29
+ cm=_state.ChatStateManager,
30
+ )))
31
+
32
+ if cfg.initial_user_content is not None:
33
+ async def add_initial_user_content(cdg: '_driver.ChatDriverGetter') -> None:
34
+ await (await cdg()).send_user_messages([mc.UserMessage(check.not_none(cfg.initial_user_content))])
35
+
36
+ els.append(phase_callbacks().bind_item(to_fn=inj.KwargsTarget.of(
37
+ lambda cdg: ChatPhaseCallback(ChatPhase.STARTED, lambda: add_initial_user_content(cdg)),
38
+ cdg=_driver.ChatDriverGetter,
39
+ )))
40
+
41
+ return inj.as_elements(*els)
File without changes
File without changes