ommlds 0.0.0.dev480__py3-none-any.whl → 0.0.0.dev503__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 +100 -33
- ommlds/README.md +11 -0
- ommlds/__about__.py +9 -6
- 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/cerebras/__init__.py +7 -0
- ommlds/backends/cerebras/_dataclasses.py +4254 -0
- ommlds/backends/cerebras/_marshal.py +24 -0
- ommlds/backends/cerebras/protocol.py +312 -0
- ommlds/backends/google/protocol/__init__.py +13 -0
- ommlds/backends/google/protocol/_dataclasses.py +5997 -0
- ommlds/backends/groq/__init__.py +7 -0
- ommlds/backends/groq/_dataclasses.py +3901 -0
- ommlds/backends/groq/clients.py +9 -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 +3488 -0
- ommlds/backends/ollama/protocol.py +3 -0
- ommlds/backends/openai/protocol/__init__.py +15 -1
- ommlds/backends/openai/protocol/_dataclasses.py +7708 -0
- ommlds/backends/tavily/__init__.py +7 -0
- ommlds/backends/tavily/_dataclasses.py +1734 -0
- ommlds/backends/transformers/__init__.py +14 -0
- ommlds/cli/__init__.py +7 -0
- ommlds/cli/_dataclasses.py +3515 -0
- ommlds/cli/backends/catalog.py +0 -5
- ommlds/cli/backends/inject.py +70 -7
- ommlds/cli/backends/meta.py +82 -0
- ommlds/cli/content/messages.py +1 -1
- ommlds/cli/inject.py +11 -3
- ommlds/cli/main.py +137 -68
- ommlds/cli/rendering/types.py +6 -0
- ommlds/cli/secrets.py +2 -1
- ommlds/cli/sessions/base.py +1 -10
- ommlds/cli/sessions/chat/configs.py +9 -17
- ommlds/cli/sessions/chat/{chat → drivers}/ai/configs.py +3 -1
- ommlds/cli/sessions/chat/drivers/ai/events.py +57 -0
- ommlds/cli/sessions/chat/{chat → drivers}/ai/inject.py +10 -3
- ommlds/cli/sessions/chat/{chat → drivers}/ai/rendering.py +1 -1
- ommlds/cli/sessions/chat/{chat → drivers}/ai/services.py +1 -1
- ommlds/cli/sessions/chat/{chat → drivers}/ai/tools.py +4 -8
- ommlds/cli/sessions/chat/{chat → drivers}/ai/types.py +9 -0
- 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 +38 -0
- ommlds/cli/sessions/chat/drivers/impl.py +50 -0
- ommlds/cli/sessions/chat/drivers/inject.py +70 -0
- ommlds/cli/sessions/chat/{chat → drivers}/state/configs.py +2 -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 +0 -4
- ommlds/cli/sessions/chat/{chat → drivers}/state/storage.py +17 -10
- ommlds/cli/sessions/chat/{chat → drivers}/state/types.py +10 -5
- ommlds/cli/sessions/chat/{tools → drivers/tools}/configs.py +2 -2
- 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/{tools → drivers/tools}/fs/inject.py +3 -3
- ommlds/cli/sessions/chat/{tools → drivers/tools}/inject.py +7 -12
- ommlds/cli/sessions/chat/{tools → drivers/tools}/injection.py +5 -5
- ommlds/cli/sessions/chat/{tools → drivers/tools}/rendering.py +3 -3
- ommlds/cli/sessions/chat/{tools → drivers/tools}/todo/inject.py +3 -3
- ommlds/cli/sessions/chat/{tools → drivers/tools}/weather/tools.py +1 -1
- ommlds/cli/sessions/chat/drivers/types.py +31 -0
- ommlds/cli/sessions/chat/{chat → drivers}/user/configs.py +0 -3
- 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 +8 -31
- 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 +310 -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 +97 -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 +157 -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 +36 -0
- ommlds/cli/sessions/chat/interfaces/textual/widgets/messages.py +197 -0
- ommlds/cli/sessions/chat/session.py +8 -13
- ommlds/cli/sessions/completion/configs.py +3 -4
- ommlds/cli/sessions/completion/inject.py +1 -2
- ommlds/cli/sessions/completion/session.py +4 -8
- ommlds/cli/sessions/configs.py +10 -0
- ommlds/cli/sessions/embedding/configs.py +3 -4
- ommlds/cli/sessions/embedding/inject.py +1 -2
- ommlds/cli/sessions/embedding/session.py +4 -8
- ommlds/cli/sessions/inject.py +15 -15
- ommlds/cli/state/storage.py +7 -1
- ommlds/minichain/__init__.py +161 -38
- ommlds/minichain/_dataclasses.py +20452 -0
- ommlds/minichain/_typedvalues.py +11 -4
- 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 +1 -1
- ommlds/minichain/backends/impls/cerebras/__init__.py +0 -0
- ommlds/minichain/backends/impls/cerebras/chat.py +80 -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 +125 -0
- ommlds/minichain/backends/impls/duckduckgo/search.py +5 -1
- ommlds/minichain/backends/impls/google/names.py +6 -0
- ommlds/minichain/backends/impls/google/stream.py +1 -1
- ommlds/minichain/backends/impls/google/tools.py +2 -2
- ommlds/minichain/backends/impls/groq/chat.py +2 -0
- ommlds/minichain/backends/impls/groq/protocol.py +2 -2
- ommlds/minichain/backends/impls/groq/stream.py +3 -1
- ommlds/minichain/backends/impls/huggingface/repos.py +1 -5
- ommlds/minichain/backends/impls/llamacpp/chat.py +6 -3
- ommlds/minichain/backends/impls/llamacpp/completion.py +7 -3
- ommlds/minichain/backends/impls/llamacpp/stream.py +6 -3
- ommlds/minichain/backends/impls/mlx/chat.py +6 -3
- ommlds/minichain/backends/impls/ollama/chat.py +51 -57
- ommlds/minichain/backends/impls/ollama/protocol.py +144 -0
- ommlds/minichain/backends/impls/openai/format.py +4 -3
- ommlds/minichain/backends/impls/openai/names.py +3 -1
- ommlds/minichain/backends/impls/openai/stream.py +33 -1
- ommlds/minichain/backends/impls/sentencepiece/tokens.py +9 -6
- ommlds/minichain/backends/impls/tinygrad/chat.py +7 -4
- 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 +10 -8
- ommlds/minichain/backends/strings/resolving.py +1 -1
- ommlds/minichain/chat/content.py +42 -0
- ommlds/minichain/chat/messages.py +43 -39
- ommlds/minichain/chat/stream/joining.py +36 -12
- ommlds/minichain/chat/stream/types.py +1 -1
- ommlds/minichain/chat/templating.py +3 -3
- ommlds/minichain/content/__init__.py +19 -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/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 +51 -0
- ommlds/minichain/content/transform/metadata.py +16 -0
- ommlds/minichain/content/{prepare.py → transform/prepare.py} +10 -15
- ommlds/minichain/content/transform/recursive.py +97 -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/visitors.py +231 -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/metadata.py +56 -2
- ommlds/minichain/resources.py +22 -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/stream/services.py +24 -1
- 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 +1 -1
- 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 +6 -6
- ommlds/minichain/tools/types.py +12 -15
- 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/rustbpe/README.md +9 -0
- ommlds/nanochat/tokenizers.py +40 -6
- ommlds/specs/mcp/clients.py +146 -0
- ommlds/specs/mcp/protocol.py +123 -18
- ommlds/tools/git.py +82 -65
- {ommlds-0.0.0.dev480.dist-info → ommlds-0.0.0.dev503.dist-info}/METADATA +13 -11
- ommlds-0.0.0.dev503.dist-info/RECORD +520 -0
- ommlds/cli/sessions/chat/chat/state/inject.py +0 -36
- ommlds/cli/sessions/chat/chat/user/inject.py +0 -62
- ommlds/cli/sessions/chat/chat/user/interactive.py +0 -31
- 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/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.dev480.dist-info/RECORD +0 -427
- /ommlds/cli/sessions/chat/{chat → drivers}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{chat → drivers}/ai/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{chat → drivers}/ai/injection.py +0 -0
- /ommlds/cli/sessions/chat/{chat/state → drivers/events}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{chat/user → 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/{phases → drivers/state}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/fs/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/fs/configs.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/todo/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/todo/configs.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/weather/__init__.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/weather/configs.py +0 -0
- /ommlds/cli/sessions/chat/{tools → drivers/tools}/weather/inject.py +0 -0
- /ommlds/{minichain/content/transforms → cli/sessions/chat/drivers/user}/__init__.py +0 -0
- {ommlds-0.0.0.dev480.dist-info → ommlds-0.0.0.dev503.dist-info}/WHEEL +0 -0
- {ommlds-0.0.0.dev480.dist-info → ommlds-0.0.0.dev503.dist-info}/entry_points.txt +0 -0
- {ommlds-0.0.0.dev480.dist-info → ommlds-0.0.0.dev503.dist-info}/licenses/LICENSE +0 -0
- {ommlds-0.0.0.dev480.dist-info → ommlds-0.0.0.dev503.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from omlish import inject as inj
|
|
2
|
+
from omlish import lang
|
|
3
|
+
|
|
4
|
+
from .configs import FacadeConfig
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
with lang.auto_proxy_import(globals()):
|
|
8
|
+
from . import facade as _facade
|
|
9
|
+
from . import ui as _ui
|
|
10
|
+
from .commands import inject as _commands
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def bind_facade(cfg: FacadeConfig = FacadeConfig()) -> inj.Elements:
|
|
17
|
+
els: list[inj.Elemental] = []
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
els.extend([
|
|
22
|
+
_commands.bind_commands(cfg.commands),
|
|
23
|
+
])
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
els.append(inj.bind(_facade.ChatFacade, singleton=True))
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
|
|
31
|
+
els.append(inj.bind(_ui.UiQuitSignal(_ui.raise_system_exit_ui_quit_signal)))
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
|
|
35
|
+
return inj.as_elements(*els)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
import typing as ta
|
|
3
|
+
|
|
4
|
+
from omlish import lang
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class UiMessageDisplayer(lang.Abstract):
|
|
11
|
+
@abc.abstractmethod
|
|
12
|
+
def display_ui_message(self, content: str) -> ta.Awaitable[None]:
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class NopUiMessageDisplayer(UiMessageDisplayer):
|
|
17
|
+
async def display_ui_message(self, content: str) -> None:
|
|
18
|
+
pass
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class PrintMessageDisplayer(UiMessageDisplayer):
|
|
22
|
+
async def display_ui_message(self, content: str) -> None:
|
|
23
|
+
print(content)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class UiQuitSignal(lang.Func0[ta.Awaitable[None]]):
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
async def raise_system_exit_ui_quit_signal() -> None:
|
|
34
|
+
raise SystemExit
|
|
@@ -1,66 +1,43 @@
|
|
|
1
|
-
from omlish import dataclasses as dc
|
|
2
1
|
from omlish import inject as inj
|
|
3
2
|
from omlish import lang
|
|
4
3
|
|
|
5
|
-
from ...backends.types import DefaultBackendName
|
|
6
4
|
from ..base import Session
|
|
7
|
-
from .configs import DEFAULT_BACKEND
|
|
8
5
|
from .configs import ChatConfig
|
|
9
6
|
|
|
10
7
|
|
|
11
8
|
with lang.auto_proxy_import(globals()):
|
|
12
|
-
from ...backends import inject as _backends
|
|
13
9
|
from ...rendering import inject as _rendering
|
|
14
|
-
from . import driver as _driver
|
|
15
10
|
from . import session as _session
|
|
16
|
-
from .
|
|
17
|
-
from .
|
|
18
|
-
from .
|
|
19
|
-
from .phases import inject as _phases
|
|
20
|
-
from .tools import inject as _tools
|
|
11
|
+
from .drivers import inject as _drivers
|
|
12
|
+
from .facades import inject as _facades
|
|
13
|
+
from .interfaces import inject as _interfaces
|
|
21
14
|
|
|
22
15
|
|
|
23
16
|
##
|
|
24
17
|
|
|
25
18
|
|
|
26
|
-
def bind_chat(cfg: ChatConfig) -> inj.Elements:
|
|
19
|
+
def bind_chat(cfg: ChatConfig = ChatConfig()) -> inj.Elements:
|
|
27
20
|
els: list[inj.Elemental] = []
|
|
28
21
|
|
|
29
22
|
#
|
|
30
23
|
|
|
31
24
|
els.extend([
|
|
32
|
-
|
|
25
|
+
_drivers.bind_driver(cfg.driver),
|
|
33
26
|
|
|
34
|
-
|
|
27
|
+
_facades.bind_facade(cfg.facade),
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
_chat_state.bind_state(cfg.state),
|
|
39
|
-
|
|
40
|
-
_phases.bind_phases(),
|
|
29
|
+
_interfaces.bind_interface(cfg.interface),
|
|
41
30
|
|
|
42
31
|
_rendering.bind_rendering(cfg.rendering),
|
|
43
|
-
|
|
44
|
-
_tools.bind_tools(cfg.tools),
|
|
45
32
|
])
|
|
46
33
|
|
|
47
34
|
#
|
|
48
35
|
|
|
49
36
|
els.extend([
|
|
50
|
-
inj.bind(
|
|
51
|
-
])
|
|
52
|
-
|
|
53
|
-
#
|
|
54
|
-
|
|
55
|
-
els.extend([
|
|
56
|
-
inj.bind(_session.ChatSession.Config(**dc.asdict(cfg))),
|
|
37
|
+
# inj.bind(cfg), # NOTE: *not* done - the code is properly structured around not needing it.
|
|
57
38
|
inj.bind(Session, to_ctor=_session.ChatSession, singleton=True),
|
|
58
39
|
])
|
|
59
40
|
|
|
60
41
|
#
|
|
61
42
|
|
|
62
|
-
els.append(inj.bind(DefaultBackendName, to_const=DEFAULT_BACKEND))
|
|
63
|
-
|
|
64
|
-
#
|
|
65
|
-
|
|
66
43
|
return inj.as_elements(*els)
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from omlish import dataclasses as dc
|
|
4
|
+
|
|
5
|
+
from ..configs import InterfaceConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
##
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
|
12
|
+
class BareInterfaceConfig(InterfaceConfig):
|
|
13
|
+
interactive: bool = False
|
|
14
|
+
|
|
15
|
+
use_readline: bool | ta.Literal['auto'] = 'auto'
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from omlish import inject as inj
|
|
2
|
+
from omlish import lang
|
|
3
|
+
|
|
4
|
+
from ..base import ChatInterface
|
|
5
|
+
from .configs import BareInterfaceConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
with lang.auto_proxy_import(globals()):
|
|
9
|
+
from .....inputs import asyncs as _inputs_asyncs
|
|
10
|
+
from .....inputs import sync as _inputs_sync
|
|
11
|
+
from ...drivers.tools import confirmation as _tools_confirmation
|
|
12
|
+
from ...facades import ui as _facades_ui
|
|
13
|
+
from . import interactive as _interactive
|
|
14
|
+
from . import oneshot as _oneshot
|
|
15
|
+
from . import tools as _tools
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def bind_bare(cfg: BareInterfaceConfig = BareInterfaceConfig()) -> inj.Elements:
|
|
22
|
+
els: list[inj.Elemental] = []
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
|
|
26
|
+
if cfg.interactive:
|
|
27
|
+
els.extend([
|
|
28
|
+
inj.bind(_interactive.InteractiveBareChatInterface, singleton=True),
|
|
29
|
+
inj.bind(ChatInterface, to_key=_interactive.InteractiveBareChatInterface),
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
els.extend([
|
|
33
|
+
inj.bind(_inputs_sync.SyncStringInput, to_const=_inputs_sync.InputSyncStringInput(use_readline=cfg.use_readline)), # noqa
|
|
34
|
+
inj.bind(_inputs_asyncs.AsyncStringInput, to_ctor=_inputs_asyncs.ThreadAsyncStringInput, singleton=True),
|
|
35
|
+
])
|
|
36
|
+
|
|
37
|
+
else:
|
|
38
|
+
els.extend([
|
|
39
|
+
inj.bind(_oneshot.OneshotBareChatInterface, singleton=True),
|
|
40
|
+
inj.bind(ChatInterface, to_key=_oneshot.OneshotBareChatInterface),
|
|
41
|
+
])
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
|
|
45
|
+
if cfg.enable_tools:
|
|
46
|
+
if cfg.dangerous_no_tool_confirmation:
|
|
47
|
+
els.append(inj.bind(
|
|
48
|
+
_tools_confirmation.ToolExecutionConfirmation,
|
|
49
|
+
to_ctor=_tools_confirmation.UnsafeAlwaysAllowToolExecutionConfirmation,
|
|
50
|
+
singleton=True,
|
|
51
|
+
))
|
|
52
|
+
|
|
53
|
+
else:
|
|
54
|
+
els.append(inj.bind(
|
|
55
|
+
_tools_confirmation.ToolExecutionConfirmation,
|
|
56
|
+
to_ctor=_tools.InteractiveToolExecutionConfirmation,
|
|
57
|
+
singleton=True,
|
|
58
|
+
))
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
|
|
62
|
+
els.extend([
|
|
63
|
+
inj.bind(_facades_ui.PrintMessageDisplayer, singleton=True),
|
|
64
|
+
inj.bind(_facades_ui.UiMessageDisplayer, to_key=_facades_ui.PrintMessageDisplayer),
|
|
65
|
+
])
|
|
66
|
+
|
|
67
|
+
#
|
|
68
|
+
|
|
69
|
+
return inj.as_elements(*els)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from .....inputs.asyncs import AsyncStringInput
|
|
4
|
+
from .....inputs.asyncs import SyncAsyncStringInput
|
|
5
|
+
from .....inputs.sync import InputSyncStringInput
|
|
6
|
+
from ...drivers.types import ChatDriver
|
|
7
|
+
from ...facades.facade import ChatFacade
|
|
8
|
+
from ..base import ChatInterface
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
##
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InteractiveBareChatInterface(ChatInterface):
|
|
15
|
+
DEFAULT_STRING_INPUT: ta.ClassVar[AsyncStringInput] = SyncAsyncStringInput(InputSyncStringInput())
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
*,
|
|
20
|
+
driver: ChatDriver,
|
|
21
|
+
facade: ChatFacade,
|
|
22
|
+
string_input: AsyncStringInput | None = None,
|
|
23
|
+
) -> None:
|
|
24
|
+
super().__init__()
|
|
25
|
+
|
|
26
|
+
self._driver = driver
|
|
27
|
+
self._facade = facade
|
|
28
|
+
if string_input is None:
|
|
29
|
+
string_input = self.DEFAULT_STRING_INPUT
|
|
30
|
+
self._string_input = string_input
|
|
31
|
+
|
|
32
|
+
async def run(self) -> None:
|
|
33
|
+
await self._driver.start()
|
|
34
|
+
|
|
35
|
+
while True:
|
|
36
|
+
try:
|
|
37
|
+
s = await self._string_input()
|
|
38
|
+
except EOFError:
|
|
39
|
+
break
|
|
40
|
+
|
|
41
|
+
print()
|
|
42
|
+
print('<')
|
|
43
|
+
print()
|
|
44
|
+
|
|
45
|
+
await self._facade.handle_user_input(s)
|
|
46
|
+
|
|
47
|
+
print()
|
|
48
|
+
|
|
49
|
+
await self._driver.stop()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from ...drivers.types import ChatDriver
|
|
2
|
+
from ..base import ChatInterface
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
##
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OneshotBareChatInterface(ChatInterface):
|
|
9
|
+
def __init__(
|
|
10
|
+
self,
|
|
11
|
+
*,
|
|
12
|
+
driver: ChatDriver,
|
|
13
|
+
) -> None:
|
|
14
|
+
super().__init__()
|
|
15
|
+
|
|
16
|
+
self._driver = driver
|
|
17
|
+
|
|
18
|
+
async def run(self) -> None:
|
|
19
|
+
await self._driver.start()
|
|
20
|
+
|
|
21
|
+
await self._driver.stop()
|
|
@@ -1,28 +1,9 @@
|
|
|
1
|
-
import abc
|
|
2
|
-
import typing as ta
|
|
3
|
-
|
|
4
|
-
from omlish import lang
|
|
5
1
|
from omlish.formats import json
|
|
6
2
|
from omlish.term.confirm import confirm_action
|
|
7
3
|
|
|
8
|
-
from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class ToolExecutionRequestDeniedError(Exception):
|
|
15
|
-
pass
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class ToolExecutionConfirmation(lang.Abstract):
|
|
19
|
-
@abc.abstractmethod
|
|
20
|
-
def confirm_tool_execution_or_raise(
|
|
21
|
-
self,
|
|
22
|
-
use: 'mc.ToolUse',
|
|
23
|
-
entry: 'mc.ToolCatalogEntry',
|
|
24
|
-
) -> ta.Awaitable[None]:
|
|
25
|
-
raise NotImplementedError
|
|
4
|
+
from ...... import minichain as mc
|
|
5
|
+
from ...drivers.tools.confirmation import ToolExecutionConfirmation
|
|
6
|
+
from ...drivers.tools.confirmation import ToolExecutionRequestDeniedError
|
|
26
7
|
|
|
27
8
|
|
|
28
9
|
##
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from omlish import inject as inj
|
|
2
|
+
from omlish import lang
|
|
3
|
+
|
|
4
|
+
from .bare.configs import BareInterfaceConfig
|
|
5
|
+
from .configs import InterfaceConfig
|
|
6
|
+
from .textual.configs import TextualInterfaceConfig
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
with lang.auto_proxy_import(globals()):
|
|
10
|
+
from .bare import inject as _bare
|
|
11
|
+
from .textual import inject as _textual
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def bind_interface(cfg: InterfaceConfig = BareInterfaceConfig()) -> inj.Elements:
|
|
18
|
+
els: list[inj.Elemental] = []
|
|
19
|
+
|
|
20
|
+
if isinstance(cfg, TextualInterfaceConfig):
|
|
21
|
+
els.append(_textual.bind_textual(cfg))
|
|
22
|
+
|
|
23
|
+
elif isinstance(cfg, BareInterfaceConfig):
|
|
24
|
+
els.append(_bare.bind_bare(cfg))
|
|
25
|
+
|
|
26
|
+
else:
|
|
27
|
+
raise TypeError(cfg)
|
|
28
|
+
|
|
29
|
+
return inj.as_elements(*els)
|
|
File without changes
|