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.
- ommlds/.omlish-manifests.json +404 -31
- ommlds/README.md +11 -0
- ommlds/__about__.py +21 -12
- ommlds/_hacks/__init__.py +4 -0
- ommlds/_hacks/funcs.py +110 -0
- ommlds/_hacks/names.py +158 -0
- ommlds/_hacks/params.py +73 -0
- ommlds/_hacks/patches.py +0 -3
- ommlds/backends/anthropic/protocol/__init__.py +13 -1
- ommlds/backends/anthropic/protocol/_dataclasses.py +1625 -0
- ommlds/backends/anthropic/protocol/sse/events.py +2 -0
- ommlds/backends/anthropic/protocol/types.py +5 -7
- ommlds/backends/cerebras/__init__.py +7 -0
- ommlds/backends/cerebras/_dataclasses.py +4254 -0
- ommlds/backends/cerebras/_marshal.py +24 -0
- ommlds/backends/cerebras/clients.py +9 -0
- ommlds/backends/cerebras/protocol.py +310 -0
- ommlds/backends/google/protocol/__init__.py +13 -0
- ommlds/backends/google/protocol/_dataclasses.py +5997 -0
- ommlds/backends/google/protocol/types.py +6 -8
- ommlds/backends/groq/__init__.py +7 -0
- ommlds/backends/groq/_dataclasses.py +3901 -0
- ommlds/backends/groq/_marshal.py +23 -0
- ommlds/backends/groq/clients.py +9 -0
- ommlds/backends/groq/protocol.py +247 -0
- ommlds/{huggingface.py → backends/huggingface/cache.py} +1 -6
- ommlds/backends/huggingface/cli.py +208 -0
- ommlds/backends/llamacpp/logging.py +4 -1
- ommlds/backends/mlx/caching.py +7 -3
- ommlds/backends/mlx/cli.py +10 -7
- ommlds/backends/mlx/generation.py +18 -16
- ommlds/backends/mlx/limits.py +10 -6
- ommlds/backends/mlx/loading.py +7 -4
- ommlds/backends/ollama/__init__.py +7 -0
- ommlds/backends/ollama/_dataclasses.py +3940 -0
- ommlds/backends/ollama/cli.py +36 -0
- ommlds/backends/ollama/protocol.py +201 -0
- ommlds/backends/openai/protocol/__init__.py +15 -1
- ommlds/backends/openai/protocol/_common.py +3 -5
- ommlds/backends/openai/protocol/_dataclasses.py +7708 -0
- ommlds/backends/tavily/__init__.py +7 -0
- ommlds/backends/tavily/_dataclasses.py +1734 -0
- ommlds/backends/tavily/protocol.py +299 -0
- ommlds/backends/tinygrad/models/llama3/__init__.py +22 -14
- ommlds/backends/torch/backends.py +1 -1
- ommlds/backends/transformers/__init__.py +14 -0
- ommlds/backends/transformers/filecache.py +109 -0
- ommlds/backends/transformers/streamers.py +73 -0
- ommlds/cli/__init__.py +7 -0
- ommlds/cli/_dataclasses.py +3835 -0
- ommlds/cli/asyncs.py +30 -0
- ommlds/cli/backends/catalog.py +88 -0
- ommlds/cli/backends/configs.py +9 -0
- ommlds/cli/backends/inject.py +100 -42
- ommlds/cli/{sessions/chat/backends → backends}/injection.py +1 -1
- ommlds/cli/backends/meta.py +82 -0
- ommlds/cli/{sessions/chat/backends → backends}/types.py +11 -1
- ommlds/cli/{sessions/chat/content → content}/messages.py +2 -2
- ommlds/cli/{sessions/chat/content → content}/strings.py +1 -1
- ommlds/cli/inject.py +17 -8
- ommlds/cli/inputs/asyncs.py +32 -0
- ommlds/cli/inputs/sync.py +75 -0
- ommlds/cli/main.py +346 -114
- ommlds/cli/rendering/configs.py +9 -0
- ommlds/cli/{sessions/chat/rendering → rendering}/inject.py +4 -5
- ommlds/cli/{sessions/chat/rendering → rendering}/markdown.py +1 -1
- ommlds/cli/{sessions/chat/rendering → rendering}/raw.py +1 -1
- ommlds/cli/{sessions/chat/rendering → rendering}/types.py +7 -1
- ommlds/cli/secrets.py +22 -0
- ommlds/cli/sessions/base.py +1 -10
- ommlds/cli/sessions/chat/configs.py +13 -30
- ommlds/cli/sessions/chat/drivers/ai/configs.py +13 -0
- ommlds/cli/sessions/chat/drivers/ai/events.py +57 -0
- ommlds/cli/sessions/chat/{chat → drivers}/ai/inject.py +15 -12
- ommlds/cli/sessions/chat/{chat → drivers}/ai/rendering.py +8 -8
- ommlds/cli/sessions/chat/{chat → drivers}/ai/services.py +5 -5
- ommlds/cli/sessions/chat/{chat → drivers}/ai/tools.py +4 -8
- ommlds/cli/sessions/chat/{chat → drivers}/ai/types.py +10 -1
- ommlds/cli/sessions/chat/drivers/configs.py +25 -0
- ommlds/cli/sessions/chat/drivers/events/inject.py +27 -0
- ommlds/cli/sessions/chat/drivers/events/injection.py +14 -0
- ommlds/cli/sessions/chat/drivers/events/manager.py +16 -0
- ommlds/cli/sessions/chat/drivers/events/types.py +44 -0
- ommlds/cli/sessions/chat/drivers/impl.py +50 -0
- ommlds/cli/sessions/chat/drivers/inject.py +70 -0
- ommlds/cli/sessions/chat/drivers/state/configs.py +13 -0
- ommlds/cli/sessions/chat/drivers/state/ids.py +25 -0
- ommlds/cli/sessions/chat/drivers/state/inject.py +83 -0
- ommlds/cli/sessions/chat/{chat → drivers}/state/inmemory.py +1 -6
- ommlds/cli/sessions/chat/{chat → drivers}/state/storage.py +18 -12
- ommlds/cli/sessions/chat/{chat → drivers}/state/types.py +11 -6
- ommlds/cli/sessions/chat/drivers/tools/configs.py +22 -0
- ommlds/cli/sessions/chat/drivers/tools/confirmation.py +44 -0
- ommlds/cli/sessions/chat/drivers/tools/errorhandling.py +39 -0
- ommlds/cli/sessions/chat/{tools → drivers/tools}/execution.py +3 -4
- ommlds/cli/sessions/chat/drivers/tools/fs/__init__.py +0 -0
- ommlds/cli/sessions/chat/drivers/tools/fs/configs.py +12 -0
- ommlds/cli/sessions/chat/drivers/tools/fs/inject.py +35 -0
- ommlds/cli/sessions/chat/drivers/tools/inject.py +83 -0
- ommlds/cli/sessions/chat/{tools → drivers/tools}/injection.py +20 -5
- ommlds/cli/sessions/chat/{tools → drivers/tools}/rendering.py +3 -3
- ommlds/cli/sessions/chat/drivers/tools/todo/__init__.py +0 -0
- ommlds/cli/sessions/chat/drivers/tools/todo/configs.py +12 -0
- ommlds/cli/sessions/chat/drivers/tools/todo/inject.py +31 -0
- ommlds/cli/sessions/chat/drivers/tools/weather/__init__.py +0 -0
- ommlds/cli/sessions/chat/drivers/tools/weather/configs.py +12 -0
- ommlds/cli/sessions/chat/drivers/tools/weather/inject.py +22 -0
- ommlds/cli/sessions/chat/{tools/weather.py → drivers/tools/weather/tools.py} +1 -1
- ommlds/cli/sessions/chat/drivers/types.py +31 -0
- ommlds/cli/sessions/chat/drivers/user/__init__.py +0 -0
- ommlds/cli/sessions/chat/drivers/user/configs.py +14 -0
- ommlds/cli/sessions/chat/drivers/user/inject.py +41 -0
- ommlds/cli/sessions/chat/facades/__init__.py +0 -0
- ommlds/cli/sessions/chat/facades/commands/__init__.py +0 -0
- ommlds/cli/sessions/chat/facades/commands/base.py +83 -0
- ommlds/cli/sessions/chat/facades/commands/configs.py +9 -0
- ommlds/cli/sessions/chat/facades/commands/inject.py +41 -0
- ommlds/cli/sessions/chat/facades/commands/injection.py +15 -0
- ommlds/cli/sessions/chat/facades/commands/manager.py +59 -0
- ommlds/cli/sessions/chat/facades/commands/simple.py +34 -0
- ommlds/cli/sessions/chat/facades/commands/types.py +13 -0
- ommlds/cli/sessions/chat/facades/configs.py +11 -0
- ommlds/cli/sessions/chat/facades/facade.py +26 -0
- ommlds/cli/sessions/chat/facades/inject.py +35 -0
- ommlds/cli/sessions/chat/facades/ui.py +34 -0
- ommlds/cli/sessions/chat/inject.py +10 -49
- ommlds/cli/sessions/chat/interfaces/__init__.py +0 -0
- ommlds/cli/sessions/chat/interfaces/bare/__init__.py +0 -0
- ommlds/cli/sessions/chat/interfaces/bare/configs.py +15 -0
- ommlds/cli/sessions/chat/interfaces/bare/inject.py +69 -0
- ommlds/cli/sessions/chat/interfaces/bare/interactive.py +49 -0
- ommlds/cli/sessions/chat/interfaces/bare/oneshot.py +21 -0
- ommlds/cli/sessions/chat/{tools/confirmation.py → interfaces/bare/tools.py} +3 -22
- ommlds/cli/sessions/chat/interfaces/base.py +13 -0
- ommlds/cli/sessions/chat/interfaces/configs.py +11 -0
- ommlds/cli/sessions/chat/interfaces/inject.py +29 -0
- ommlds/cli/sessions/chat/interfaces/textual/__init__.py +0 -0
- ommlds/cli/sessions/chat/interfaces/textual/app.py +429 -0
- ommlds/cli/sessions/chat/interfaces/textual/configs.py +11 -0
- ommlds/cli/sessions/chat/interfaces/textual/facades.py +19 -0
- ommlds/cli/sessions/chat/interfaces/textual/inject.py +111 -0
- ommlds/cli/sessions/chat/interfaces/textual/inputhistory.py +174 -0
- ommlds/cli/sessions/chat/interfaces/textual/interface.py +24 -0
- ommlds/cli/sessions/chat/interfaces/textual/styles/__init__.py +29 -0
- ommlds/cli/sessions/chat/interfaces/textual/styles/input.tcss +53 -0
- ommlds/cli/sessions/chat/interfaces/textual/styles/markdown.tcss +7 -0
- ommlds/cli/sessions/chat/interfaces/textual/styles/messages.tcss +167 -0
- ommlds/cli/sessions/chat/interfaces/textual/tools.py +38 -0
- ommlds/cli/sessions/chat/interfaces/textual/widgets/__init__.py +0 -0
- ommlds/cli/sessions/chat/interfaces/textual/widgets/input.py +70 -0
- ommlds/cli/sessions/chat/interfaces/textual/widgets/messages.py +207 -0
- ommlds/cli/sessions/chat/session.py +8 -13
- ommlds/cli/sessions/completion/configs.py +5 -6
- ommlds/cli/sessions/completion/inject.py +15 -2
- ommlds/cli/sessions/completion/session.py +10 -18
- ommlds/cli/sessions/configs.py +10 -0
- ommlds/cli/sessions/embedding/configs.py +5 -6
- ommlds/cli/sessions/embedding/inject.py +15 -2
- ommlds/cli/sessions/embedding/session.py +10 -18
- ommlds/cli/sessions/inject.py +15 -15
- ommlds/cli/state/storage.py +8 -2
- ommlds/minichain/__init__.py +217 -60
- ommlds/minichain/_dataclasses.py +20640 -0
- ommlds/minichain/_typedvalues.py +15 -8
- ommlds/minichain/backends/catalogs/base.py +20 -1
- ommlds/minichain/backends/catalogs/simple.py +2 -2
- ommlds/minichain/backends/catalogs/strings.py +13 -10
- ommlds/minichain/backends/impls/anthropic/chat.py +28 -5
- ommlds/minichain/backends/impls/anthropic/names.py +3 -3
- ommlds/minichain/backends/impls/anthropic/protocol.py +2 -2
- ommlds/minichain/backends/impls/anthropic/stream.py +23 -18
- ommlds/minichain/backends/impls/cerebras/__init__.py +0 -0
- ommlds/minichain/backends/impls/cerebras/chat.py +82 -0
- ommlds/minichain/backends/impls/cerebras/names.py +45 -0
- ommlds/minichain/backends/impls/cerebras/protocol.py +143 -0
- ommlds/minichain/backends/impls/cerebras/stream.py +114 -0
- ommlds/minichain/backends/impls/duckduckgo/search.py +5 -1
- ommlds/minichain/backends/impls/dummy/__init__.py +0 -0
- ommlds/minichain/backends/impls/dummy/chat.py +69 -0
- ommlds/minichain/backends/impls/google/chat.py +20 -84
- ommlds/minichain/backends/impls/google/names.py +6 -0
- ommlds/minichain/backends/impls/google/protocol.py +105 -0
- ommlds/minichain/backends/impls/google/search.py +10 -5
- ommlds/minichain/backends/impls/google/stream.py +64 -142
- ommlds/minichain/backends/impls/google/tools.py +2 -2
- ommlds/minichain/backends/impls/groq/__init__.py +0 -0
- ommlds/minichain/backends/impls/groq/chat.py +77 -0
- ommlds/minichain/backends/impls/groq/names.py +48 -0
- ommlds/minichain/backends/impls/groq/protocol.py +143 -0
- ommlds/minichain/backends/impls/groq/stream.py +114 -0
- ommlds/minichain/backends/impls/huggingface/repos.py +1 -5
- ommlds/minichain/backends/impls/llamacpp/chat.py +15 -3
- ommlds/minichain/backends/impls/llamacpp/completion.py +7 -3
- ommlds/minichain/backends/impls/llamacpp/stream.py +38 -19
- ommlds/minichain/backends/impls/mistral.py +9 -2
- ommlds/minichain/backends/impls/mlx/chat.py +100 -23
- ommlds/minichain/backends/impls/ollama/__init__.py +0 -0
- ommlds/minichain/backends/impls/ollama/chat.py +193 -0
- ommlds/minichain/backends/impls/ollama/protocol.py +144 -0
- ommlds/minichain/backends/impls/openai/chat.py +14 -7
- ommlds/minichain/backends/impls/openai/completion.py +9 -2
- ommlds/minichain/backends/impls/openai/embedding.py +9 -2
- ommlds/minichain/backends/impls/openai/format.py +117 -115
- ommlds/minichain/backends/impls/openai/names.py +33 -5
- ommlds/minichain/backends/impls/openai/stream.py +61 -70
- ommlds/minichain/backends/impls/sentencepiece/tokens.py +9 -6
- ommlds/minichain/backends/impls/tavily.py +66 -0
- ommlds/minichain/backends/impls/tinygrad/chat.py +17 -14
- ommlds/minichain/backends/impls/tokenizers/tokens.py +9 -6
- ommlds/minichain/backends/impls/transformers/sentence.py +5 -2
- ommlds/minichain/backends/impls/transformers/tokens.py +9 -6
- ommlds/minichain/backends/impls/transformers/transformers.py +139 -20
- ommlds/minichain/backends/strings/parsing.py +2 -2
- ommlds/minichain/backends/strings/resolving.py +7 -2
- ommlds/minichain/chat/choices/stream/__init__.py +0 -0
- ommlds/minichain/chat/{stream → choices/stream}/adapters.py +7 -7
- ommlds/minichain/chat/choices/stream/joining.py +31 -0
- ommlds/minichain/chat/choices/stream/services.py +45 -0
- ommlds/minichain/chat/choices/stream/types.py +43 -0
- ommlds/minichain/chat/content.py +42 -0
- ommlds/minichain/chat/messages.py +46 -42
- ommlds/minichain/chat/stream/_marshal.py +4 -4
- ommlds/minichain/chat/stream/joining.py +56 -43
- ommlds/minichain/chat/stream/services.py +15 -15
- ommlds/minichain/chat/stream/types.py +17 -24
- ommlds/minichain/chat/templating.py +3 -3
- ommlds/minichain/content/__init__.py +20 -3
- ommlds/minichain/content/_marshal.py +181 -55
- ommlds/minichain/content/code.py +26 -0
- ommlds/minichain/content/composite.py +28 -0
- ommlds/minichain/content/content.py +27 -0
- ommlds/minichain/content/dynamic.py +12 -0
- ommlds/minichain/content/emphasis.py +27 -0
- ommlds/minichain/content/images.py +2 -2
- ommlds/minichain/content/json.py +2 -2
- ommlds/minichain/content/link.py +13 -0
- ommlds/minichain/content/markdown.py +12 -0
- ommlds/minichain/content/metadata.py +10 -0
- ommlds/minichain/content/namespaces.py +8 -0
- ommlds/minichain/content/placeholders.py +10 -9
- ommlds/minichain/content/quote.py +26 -0
- ommlds/minichain/content/raw.py +49 -0
- ommlds/minichain/content/recursive.py +12 -0
- ommlds/minichain/content/resources.py +22 -0
- ommlds/minichain/content/section.py +26 -0
- ommlds/minichain/content/sequence.py +17 -3
- ommlds/minichain/content/standard.py +32 -0
- ommlds/minichain/content/tag.py +28 -0
- ommlds/minichain/content/templates.py +13 -0
- ommlds/minichain/content/text.py +2 -2
- ommlds/minichain/content/transform/__init__.py +0 -0
- ommlds/minichain/content/transform/json.py +55 -0
- ommlds/minichain/content/transform/markdown.py +8 -0
- ommlds/minichain/content/transform/materialize.py +59 -0
- ommlds/minichain/content/transform/metadata.py +16 -0
- ommlds/minichain/content/transform/namespaces.py +20 -0
- ommlds/minichain/content/transform/placeholders.py +60 -0
- ommlds/minichain/content/{prepare.py → transform/prepare.py} +10 -15
- ommlds/minichain/content/transform/recursive.py +54 -0
- ommlds/minichain/content/transform/resources.py +58 -0
- ommlds/minichain/content/transform/standard.py +43 -0
- ommlds/minichain/content/{transforms → transform}/stringify.py +1 -7
- ommlds/minichain/content/transform/strings.py +33 -0
- ommlds/minichain/content/transform/templates.py +25 -0
- ommlds/minichain/content/transform/types.py +18 -0
- ommlds/minichain/content/transform/visitors.py +38 -0
- ommlds/minichain/content/visitors.py +218 -0
- ommlds/minichain/http/__init__.py +0 -0
- ommlds/minichain/http/stream.py +195 -0
- ommlds/minichain/lib/fs/tools/read.py +1 -1
- ommlds/minichain/lib/fs/tools/recursivels/rendering.py +1 -1
- ommlds/minichain/lib/fs/tools/recursivels/running.py +1 -1
- ommlds/minichain/lib/todo/tools/write.py +2 -1
- ommlds/minichain/lib/todo/types.py +1 -1
- ommlds/minichain/llms/types.py +4 -0
- ommlds/minichain/metadata.py +56 -2
- ommlds/minichain/models/configs.py +2 -2
- ommlds/minichain/models/names.py +2 -0
- ommlds/minichain/registries/globals.py +18 -4
- ommlds/minichain/resources.py +49 -3
- ommlds/minichain/search.py +1 -1
- ommlds/minichain/services/README.md +154 -0
- ommlds/minichain/services/__init__.py +6 -2
- ommlds/minichain/services/_marshal.py +46 -10
- ommlds/minichain/services/_origclasses.py +11 -0
- ommlds/minichain/services/_typedvalues.py +8 -3
- ommlds/minichain/services/requests.py +73 -3
- ommlds/minichain/services/responses.py +73 -3
- ommlds/minichain/services/services.py +9 -0
- ommlds/minichain/standard.py +8 -0
- ommlds/minichain/stream/services.py +43 -17
- ommlds/minichain/text/applypatch.py +2 -1
- ommlds/minichain/text/toolparsing/llamacpp/types.py +1 -1
- ommlds/minichain/tokens/specials.py +1 -1
- ommlds/minichain/tools/execution/catalog.py +2 -2
- ommlds/minichain/tools/execution/errorhandling.py +36 -0
- ommlds/minichain/tools/execution/errors.py +2 -2
- ommlds/minichain/tools/execution/executors.py +1 -1
- ommlds/minichain/tools/fns.py +1 -1
- ommlds/minichain/tools/jsonschema.py +2 -2
- ommlds/minichain/tools/reflect.py +11 -7
- ommlds/minichain/tools/types.py +16 -19
- ommlds/minichain/vectors/_marshal.py +1 -1
- ommlds/minichain/vectors/embeddings.py +1 -1
- ommlds/minichain/wrappers/__init__.py +7 -0
- ommlds/minichain/wrappers/firstinwins.py +144 -0
- ommlds/minichain/wrappers/instrument.py +146 -0
- ommlds/minichain/wrappers/retry.py +168 -0
- ommlds/minichain/wrappers/services.py +98 -0
- ommlds/minichain/wrappers/stream.py +57 -0
- ommlds/nanochat/LICENSE +21 -0
- ommlds/nanochat/__init__.py +0 -0
- ommlds/nanochat/rustbpe/LICENSE +21 -0
- ommlds/nanochat/rustbpe/README.md +10 -0
- ommlds/nanochat/tokenizers.py +440 -0
- ommlds/specs/__init__.py +0 -0
- ommlds/specs/mcp/__init__.py +0 -0
- ommlds/specs/mcp/_marshal.py +23 -0
- ommlds/specs/mcp/clients.py +146 -0
- ommlds/specs/mcp/protocol.py +369 -0
- ommlds/tools/git.py +84 -64
- ommlds/tools/ocr.py +1 -1
- ommlds/wiki/analyze.py +2 -2
- ommlds/wiki/models.py +4 -4
- ommlds/wiki/text/mfh.py +9 -9
- ommlds/wiki/utils/xml.py +5 -5
- {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/METADATA +28 -21
- ommlds-0.0.0.dev512.dist-info/RECORD +534 -0
- {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/WHEEL +1 -1
- ommlds/cli/backends/standard.py +0 -20
- ommlds/cli/sessions/chat/backends/catalog.py +0 -56
- ommlds/cli/sessions/chat/backends/inject.py +0 -37
- ommlds/cli/sessions/chat/chat/state/inject.py +0 -40
- ommlds/cli/sessions/chat/chat/user/inject.py +0 -61
- ommlds/cli/sessions/chat/chat/user/interactive.py +0 -29
- ommlds/cli/sessions/chat/chat/user/oneshot.py +0 -25
- ommlds/cli/sessions/chat/chat/user/types.py +0 -15
- ommlds/cli/sessions/chat/driver.py +0 -43
- ommlds/cli/sessions/chat/tools/inject.py +0 -145
- ommlds/minichain/backends/impls/openai/format2.py +0 -210
- ommlds/minichain/content/materialize.py +0 -196
- ommlds/minichain/content/simple.py +0 -47
- ommlds/minichain/content/transforms/base.py +0 -46
- ommlds/minichain/content/transforms/interleave.py +0 -70
- ommlds/minichain/content/transforms/squeeze.py +0 -72
- ommlds/minichain/content/transforms/strings.py +0 -24
- ommlds/minichain/content/types.py +0 -43
- ommlds/minichain/stream/wrap.py +0 -62
- ommlds-0.0.0.dev466.dist-info/RECORD +0 -376
- /ommlds/{cli/sessions/chat/backends → backends/huggingface}/__init__.py +0 -0
- /ommlds/cli/{sessions/chat/chat → content}/__init__.py +0 -0
- /ommlds/cli/{sessions/chat/chat/ai → inputs}/__init__.py +0 -0
- /ommlds/cli/{sessions/chat/chat/state → rendering}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{chat/user → drivers}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{content → drivers/ai}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{chat → drivers}/ai/injection.py +0 -0
- /ommlds/cli/sessions/chat/{phases → drivers/events}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{rendering → drivers/phases}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{phases → drivers/phases}/inject.py +0 -0
- /ommlds/cli/sessions/chat/{phases → drivers/phases}/injection.py +0 -0
- /ommlds/cli/sessions/chat/{phases → drivers/phases}/manager.py +0 -0
- /ommlds/cli/sessions/chat/{phases → drivers/phases}/types.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/state}/__init__.py +0 -0
- /ommlds/{minichain/content/transforms → cli/sessions/chat/drivers/tools}/__init__.py +0 -0
- {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/entry_points.txt +0 -0
- {ommlds-0.0.0.dev466.dist-info → ommlds-0.0.0.dev512.dist-info}/licenses/LICENSE +0 -0
- {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:
|
|
32
|
+
key: ChatStateStorageKey,
|
|
21
33
|
) -> None:
|
|
22
34
|
super().__init__()
|
|
23
35
|
|
|
24
36
|
self._storage = storage
|
|
25
|
-
self._key = check.
|
|
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
|
|
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
|
|
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
|
-
|
|
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,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
|
|
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(
|
|
27
|
-
lambda v: _execution.ToolContextProvider(lambda: [v]),
|
|
28
|
-
|
|
29
|
-
)
|
|
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
|
|
4
|
-
from
|
|
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
|
##
|
|
File without changes
|
|
@@ -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)
|
|
File without changes
|
|
@@ -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)
|
|
@@ -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
|