ommlds 0.0.0.dev503__py3-none-any.whl → 0.0.0.dev505__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 +5 -5
- ommlds/__about__.py +1 -1
- ommlds/backends/anthropic/protocol/_dataclasses.py +16 -16
- ommlds/backends/cerebras/_dataclasses.py +42 -42
- ommlds/backends/google/protocol/_dataclasses.py +64 -64
- ommlds/backends/groq/_dataclasses.py +36 -36
- ommlds/backends/ollama/_dataclasses.py +28 -28
- ommlds/backends/openai/protocol/_dataclasses.py +88 -88
- ommlds/backends/tavily/_dataclasses.py +16 -16
- ommlds/cli/_dataclasses.py +212 -43
- ommlds/cli/sessions/chat/interfaces/textual/app.py +34 -0
- ommlds/cli/sessions/chat/interfaces/textual/configs.py +1 -1
- ommlds/cli/sessions/chat/interfaces/textual/inject.py +14 -0
- ommlds/cli/sessions/chat/interfaces/textual/inputhistory.py +174 -0
- ommlds/cli/sessions/chat/interfaces/textual/widgets/input.py +42 -8
- ommlds/minichain/_dataclasses.py +361 -343
- ommlds/minichain/backends/impls/cerebras/stream.py +39 -52
- ommlds/minichain/backends/impls/google/chat.py +11 -82
- ommlds/minichain/backends/impls/google/protocol.py +105 -0
- ommlds/minichain/backends/impls/google/stream.py +49 -132
- ommlds/minichain/backends/impls/groq/stream.py +40 -53
- ommlds/minichain/backends/impls/openai/stream.py +40 -87
- ommlds/minichain/http/__init__.py +0 -0
- ommlds/minichain/http/stream.py +195 -0
- {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/METADATA +6 -6
- {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/RECORD +30 -26
- {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/WHEEL +0 -0
- {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/entry_points.txt +0 -0
- {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/licenses/LICENSE +0 -0
- {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/top_level.txt +0 -0
ommlds/cli/_dataclasses.py
CHANGED
|
@@ -231,7 +231,7 @@ def _process_dataclass__0af757919efd30aee522fc0804dd63f932b30d84():
|
|
|
231
231
|
def __setattr__(self, name, value):
|
|
232
232
|
if (
|
|
233
233
|
type(self) is __dataclass__cls
|
|
234
|
-
|
|
234
|
+
or name in __dataclass___setattr_frozen_fields
|
|
235
235
|
):
|
|
236
236
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
237
237
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -250,7 +250,7 @@ def _process_dataclass__0af757919efd30aee522fc0804dd63f932b30d84():
|
|
|
250
250
|
def __delattr__(self, name):
|
|
251
251
|
if (
|
|
252
252
|
type(self) is __dataclass__cls
|
|
253
|
-
|
|
253
|
+
or name in __dataclass___delattr_frozen_fields
|
|
254
254
|
):
|
|
255
255
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
256
256
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -378,7 +378,7 @@ def _process_dataclass__fa5665ecddac4bdf52a6a47db3b5b5362a8b3c7a():
|
|
|
378
378
|
def __setattr__(self, name, value):
|
|
379
379
|
if (
|
|
380
380
|
type(self) is __dataclass__cls
|
|
381
|
-
|
|
381
|
+
or name in __dataclass___setattr_frozen_fields
|
|
382
382
|
):
|
|
383
383
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
384
384
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -395,7 +395,7 @@ def _process_dataclass__fa5665ecddac4bdf52a6a47db3b5b5362a8b3c7a():
|
|
|
395
395
|
def __delattr__(self, name):
|
|
396
396
|
if (
|
|
397
397
|
type(self) is __dataclass__cls
|
|
398
|
-
|
|
398
|
+
or name in __dataclass___delattr_frozen_fields
|
|
399
399
|
):
|
|
400
400
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
401
401
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -548,7 +548,7 @@ def _process_dataclass__9e8c99e7d2eb01a6861d3003bd95e38b3c3fe9ae():
|
|
|
548
548
|
def __setattr__(self, name, value):
|
|
549
549
|
if (
|
|
550
550
|
type(self) is __dataclass__cls
|
|
551
|
-
|
|
551
|
+
or name in __dataclass___setattr_frozen_fields
|
|
552
552
|
):
|
|
553
553
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
554
554
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -568,7 +568,7 @@ def _process_dataclass__9e8c99e7d2eb01a6861d3003bd95e38b3c3fe9ae():
|
|
|
568
568
|
def __delattr__(self, name):
|
|
569
569
|
if (
|
|
570
570
|
type(self) is __dataclass__cls
|
|
571
|
-
|
|
571
|
+
or name in __dataclass___delattr_frozen_fields
|
|
572
572
|
):
|
|
573
573
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
574
574
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -731,7 +731,7 @@ def _process_dataclass__e6b40ac244fb47a1c6436b8775079bada9725246():
|
|
|
731
731
|
def __setattr__(self, name, value):
|
|
732
732
|
if (
|
|
733
733
|
type(self) is __dataclass__cls
|
|
734
|
-
|
|
734
|
+
or name in __dataclass___setattr_frozen_fields
|
|
735
735
|
):
|
|
736
736
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
737
737
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -751,7 +751,7 @@ def _process_dataclass__e6b40ac244fb47a1c6436b8775079bada9725246():
|
|
|
751
751
|
def __delattr__(self, name):
|
|
752
752
|
if (
|
|
753
753
|
type(self) is __dataclass__cls
|
|
754
|
-
|
|
754
|
+
or name in __dataclass___delattr_frozen_fields
|
|
755
755
|
):
|
|
756
756
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
757
757
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -892,7 +892,7 @@ def _process_dataclass__3fffc5e71015066ea8ecac48620fe5be7ba69f26():
|
|
|
892
892
|
def __setattr__(self, name, value):
|
|
893
893
|
if (
|
|
894
894
|
type(self) is __dataclass__cls
|
|
895
|
-
|
|
895
|
+
or name in __dataclass___setattr_frozen_fields
|
|
896
896
|
):
|
|
897
897
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
898
898
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -910,7 +910,7 @@ def _process_dataclass__3fffc5e71015066ea8ecac48620fe5be7ba69f26():
|
|
|
910
910
|
def __delattr__(self, name):
|
|
911
911
|
if (
|
|
912
912
|
type(self) is __dataclass__cls
|
|
913
|
-
|
|
913
|
+
or name in __dataclass___delattr_frozen_fields
|
|
914
914
|
):
|
|
915
915
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
916
916
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1074,7 +1074,7 @@ def _process_dataclass__ccc522b0563e76033e8f2d3b6864b8a7c48c0fb7():
|
|
|
1074
1074
|
def __setattr__(self, name, value):
|
|
1075
1075
|
if (
|
|
1076
1076
|
type(self) is __dataclass__cls
|
|
1077
|
-
|
|
1077
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1078
1078
|
):
|
|
1079
1079
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1080
1080
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1095,7 +1095,7 @@ def _process_dataclass__ccc522b0563e76033e8f2d3b6864b8a7c48c0fb7():
|
|
|
1095
1095
|
def __delattr__(self, name):
|
|
1096
1096
|
if (
|
|
1097
1097
|
type(self) is __dataclass__cls
|
|
1098
|
-
|
|
1098
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1099
1099
|
):
|
|
1100
1100
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1101
1101
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1231,7 +1231,7 @@ def _process_dataclass__2eae35290b327f0d934cd6747eeb9064b6f01259():
|
|
|
1231
1231
|
def __setattr__(self, name, value):
|
|
1232
1232
|
if (
|
|
1233
1233
|
type(self) is __dataclass__cls
|
|
1234
|
-
|
|
1234
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1235
1235
|
):
|
|
1236
1236
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1237
1237
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1248,7 +1248,7 @@ def _process_dataclass__2eae35290b327f0d934cd6747eeb9064b6f01259():
|
|
|
1248
1248
|
def __delattr__(self, name):
|
|
1249
1249
|
if (
|
|
1250
1250
|
type(self) is __dataclass__cls
|
|
1251
|
-
|
|
1251
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1252
1252
|
):
|
|
1253
1253
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1254
1254
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1320,7 +1320,6 @@ def _process_dataclass__2eae35290b327f0d934cd6747eeb9064b6f01259():
|
|
|
1320
1320
|
),
|
|
1321
1321
|
cls_names=(
|
|
1322
1322
|
('ommlds.cli.main', 'InterfaceConfig'),
|
|
1323
|
-
('ommlds.cli.main', 'TextualInterfaceConfig'),
|
|
1324
1323
|
),
|
|
1325
1324
|
)
|
|
1326
1325
|
def _process_dataclass__d65d18393f357ae0fb02bb80268c6f1473462613():
|
|
@@ -1381,7 +1380,7 @@ def _process_dataclass__d65d18393f357ae0fb02bb80268c6f1473462613():
|
|
|
1381
1380
|
def __setattr__(self, name, value):
|
|
1382
1381
|
if (
|
|
1383
1382
|
type(self) is __dataclass__cls
|
|
1384
|
-
|
|
1383
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1385
1384
|
):
|
|
1386
1385
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1387
1386
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1399,7 +1398,7 @@ def _process_dataclass__d65d18393f357ae0fb02bb80268c6f1473462613():
|
|
|
1399
1398
|
def __delattr__(self, name):
|
|
1400
1399
|
if (
|
|
1401
1400
|
type(self) is __dataclass__cls
|
|
1402
|
-
|
|
1401
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1403
1402
|
):
|
|
1404
1403
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1405
1404
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1523,7 +1522,7 @@ def _process_dataclass__254623427d52b86f69ed60d24a0e95b0b1b391ca():
|
|
|
1523
1522
|
def __setattr__(self, name, value):
|
|
1524
1523
|
if (
|
|
1525
1524
|
type(self) is __dataclass__cls
|
|
1526
|
-
|
|
1525
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1527
1526
|
):
|
|
1528
1527
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1529
1528
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1540,7 +1539,7 @@ def _process_dataclass__254623427d52b86f69ed60d24a0e95b0b1b391ca():
|
|
|
1540
1539
|
def __delattr__(self, name):
|
|
1541
1540
|
if (
|
|
1542
1541
|
type(self) is __dataclass__cls
|
|
1543
|
-
|
|
1542
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1544
1543
|
):
|
|
1545
1544
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1546
1545
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1670,7 +1669,7 @@ def _process_dataclass__76648be4a999973a966584081092052c01632d85():
|
|
|
1670
1669
|
def __setattr__(self, name, value):
|
|
1671
1670
|
if (
|
|
1672
1671
|
type(self) is __dataclass__cls
|
|
1673
|
-
|
|
1672
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1674
1673
|
):
|
|
1675
1674
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1676
1675
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1688,7 +1687,7 @@ def _process_dataclass__76648be4a999973a966584081092052c01632d85():
|
|
|
1688
1687
|
def __delattr__(self, name):
|
|
1689
1688
|
if (
|
|
1690
1689
|
type(self) is __dataclass__cls
|
|
1691
|
-
|
|
1690
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1692
1691
|
):
|
|
1693
1692
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1694
1693
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1740,6 +1739,176 @@ def _process_dataclass__76648be4a999973a966584081092052c01632d85():
|
|
|
1740
1739
|
return _process_dataclass
|
|
1741
1740
|
|
|
1742
1741
|
|
|
1742
|
+
@_register(
|
|
1743
|
+
plan_repr=(
|
|
1744
|
+
"Plans(tup=(CopyPlan(fields=('enable_tools', 'dangerous_no_tool_confirmation', 'input_history_file')), EqPlan(f"
|
|
1745
|
+
"ields=('enable_tools', 'dangerous_no_tool_confirmation', 'input_history_file')), FrozenPlan(fields=('enable_to"
|
|
1746
|
+
"ols', 'dangerous_no_tool_confirmation', 'input_history_file'), allow_dynamic_dunder_attrs=False), HashPlan(act"
|
|
1747
|
+
"ion='add', fields=('enable_tools', 'dangerous_no_tool_confirmation', 'input_history_file'), cache=False), Init"
|
|
1748
|
+
"Plan(fields=(InitPlan.Field(name='enable_tools', annotation=OpRef(name='init.fields.0.annotation'), default=Op"
|
|
1749
|
+
"Ref(name='init.fields.0.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTA"
|
|
1750
|
+
"NCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='dangerous_no_tool_confirmation', annot"
|
|
1751
|
+
"ation=OpRef(name='init.fields.1.annotation'), default=OpRef(name='init.fields.1.default'), default_factory=Non"
|
|
1752
|
+
"e, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), Ini"
|
|
1753
|
+
"tPlan.Field(name='input_history_file', annotation=OpRef(name='init.fields.2.annotation'), default=OpRef(name='"
|
|
1754
|
+
"init.fields.2.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerc"
|
|
1755
|
+
"e=None, validate=None, check_type=None)), self_param='self', std_params=(), kw_only_params=('enable_tools', 'd"
|
|
1756
|
+
"angerous_no_tool_confirmation', 'input_history_file'), frozen=True, slots=False, post_init_params=None, init_f"
|
|
1757
|
+
"ns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='enable_tools', kw_only=True, fn=None), ReprPlan"
|
|
1758
|
+
".Field(name='dangerous_no_tool_confirmation', kw_only=True, fn=None), ReprPlan.Field(name='input_history_file'"
|
|
1759
|
+
", kw_only=True, fn=None)), id=False, terse=False, default_fn=None)))"
|
|
1760
|
+
),
|
|
1761
|
+
plan_repr_sha1='f515764cf4b50b208c232c9355d9b2ed75cf26f4',
|
|
1762
|
+
op_ref_idents=(
|
|
1763
|
+
'__dataclass__init__fields__0__annotation',
|
|
1764
|
+
'__dataclass__init__fields__0__default',
|
|
1765
|
+
'__dataclass__init__fields__1__annotation',
|
|
1766
|
+
'__dataclass__init__fields__1__default',
|
|
1767
|
+
'__dataclass__init__fields__2__annotation',
|
|
1768
|
+
'__dataclass__init__fields__2__default',
|
|
1769
|
+
),
|
|
1770
|
+
cls_names=(
|
|
1771
|
+
('ommlds.cli.main', 'TextualInterfaceConfig'),
|
|
1772
|
+
),
|
|
1773
|
+
)
|
|
1774
|
+
def _process_dataclass__f515764cf4b50b208c232c9355d9b2ed75cf26f4():
|
|
1775
|
+
def _process_dataclass(
|
|
1776
|
+
*,
|
|
1777
|
+
__dataclass__cls,
|
|
1778
|
+
__dataclass__init__fields__0__annotation,
|
|
1779
|
+
__dataclass__init__fields__0__default,
|
|
1780
|
+
__dataclass__init__fields__1__annotation,
|
|
1781
|
+
__dataclass__init__fields__1__default,
|
|
1782
|
+
__dataclass__init__fields__2__annotation,
|
|
1783
|
+
__dataclass__init__fields__2__default,
|
|
1784
|
+
__dataclass__FieldFnValidationError, # noqa
|
|
1785
|
+
__dataclass__FieldTypeValidationError, # noqa
|
|
1786
|
+
__dataclass__FnValidationError, # noqa
|
|
1787
|
+
__dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
|
|
1788
|
+
__dataclass__FunctionType=types.FunctionType, # noqa
|
|
1789
|
+
__dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
|
|
1790
|
+
__dataclass__MISSING=dataclasses.MISSING, # noqa
|
|
1791
|
+
__dataclass__None=None, # noqa
|
|
1792
|
+
__dataclass__TypeError=TypeError, # noqa
|
|
1793
|
+
__dataclass___recursive_repr=reprlib.recursive_repr, # noqa
|
|
1794
|
+
__dataclass__isinstance=isinstance, # noqa
|
|
1795
|
+
__dataclass__object_setattr=object.__setattr__, # noqa
|
|
1796
|
+
__dataclass__property=property, # noqa
|
|
1797
|
+
):
|
|
1798
|
+
def __copy__(self):
|
|
1799
|
+
if self.__class__ is not __dataclass__cls:
|
|
1800
|
+
raise TypeError(self)
|
|
1801
|
+
return __dataclass__cls( # noqa
|
|
1802
|
+
enable_tools=self.enable_tools,
|
|
1803
|
+
dangerous_no_tool_confirmation=self.dangerous_no_tool_confirmation,
|
|
1804
|
+
input_history_file=self.input_history_file,
|
|
1805
|
+
)
|
|
1806
|
+
|
|
1807
|
+
__copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
|
|
1808
|
+
if '__copy__' in __dataclass__cls.__dict__:
|
|
1809
|
+
raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
|
|
1810
|
+
setattr(__dataclass__cls, '__copy__', __copy__)
|
|
1811
|
+
|
|
1812
|
+
def __eq__(self, other):
|
|
1813
|
+
if self is other:
|
|
1814
|
+
return True
|
|
1815
|
+
if self.__class__ is not other.__class__:
|
|
1816
|
+
return NotImplemented
|
|
1817
|
+
return (
|
|
1818
|
+
self.enable_tools == other.enable_tools and
|
|
1819
|
+
self.dangerous_no_tool_confirmation == other.dangerous_no_tool_confirmation and
|
|
1820
|
+
self.input_history_file == other.input_history_file
|
|
1821
|
+
)
|
|
1822
|
+
|
|
1823
|
+
__eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
|
|
1824
|
+
if '__eq__' in __dataclass__cls.__dict__:
|
|
1825
|
+
raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
|
|
1826
|
+
setattr(__dataclass__cls, '__eq__', __eq__)
|
|
1827
|
+
|
|
1828
|
+
__dataclass___setattr_frozen_fields = {
|
|
1829
|
+
'enable_tools',
|
|
1830
|
+
'dangerous_no_tool_confirmation',
|
|
1831
|
+
'input_history_file',
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1834
|
+
def __setattr__(self, name, value):
|
|
1835
|
+
if (
|
|
1836
|
+
type(self) is __dataclass__cls
|
|
1837
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1838
|
+
):
|
|
1839
|
+
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1840
|
+
super(__dataclass__cls, self).__setattr__(name, value)
|
|
1841
|
+
|
|
1842
|
+
__setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
|
|
1843
|
+
if '__setattr__' in __dataclass__cls.__dict__:
|
|
1844
|
+
raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
|
|
1845
|
+
setattr(__dataclass__cls, '__setattr__', __setattr__)
|
|
1846
|
+
|
|
1847
|
+
__dataclass___delattr_frozen_fields = {
|
|
1848
|
+
'enable_tools',
|
|
1849
|
+
'dangerous_no_tool_confirmation',
|
|
1850
|
+
'input_history_file',
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
def __delattr__(self, name):
|
|
1854
|
+
if (
|
|
1855
|
+
type(self) is __dataclass__cls
|
|
1856
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1857
|
+
):
|
|
1858
|
+
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1859
|
+
super(__dataclass__cls, self).__delattr__(name)
|
|
1860
|
+
|
|
1861
|
+
__delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
|
|
1862
|
+
if '__delattr__' in __dataclass__cls.__dict__:
|
|
1863
|
+
raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
|
|
1864
|
+
setattr(__dataclass__cls, '__delattr__', __delattr__)
|
|
1865
|
+
|
|
1866
|
+
def __hash__(self):
|
|
1867
|
+
return hash((
|
|
1868
|
+
self.enable_tools,
|
|
1869
|
+
self.dangerous_no_tool_confirmation,
|
|
1870
|
+
self.input_history_file,
|
|
1871
|
+
))
|
|
1872
|
+
|
|
1873
|
+
__hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
|
|
1874
|
+
setattr(__dataclass__cls, '__hash__', __hash__)
|
|
1875
|
+
|
|
1876
|
+
def __init__(
|
|
1877
|
+
self,
|
|
1878
|
+
*,
|
|
1879
|
+
enable_tools: __dataclass__init__fields__0__annotation = __dataclass__init__fields__0__default,
|
|
1880
|
+
dangerous_no_tool_confirmation: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
|
|
1881
|
+
input_history_file: __dataclass__init__fields__2__annotation = __dataclass__init__fields__2__default,
|
|
1882
|
+
) -> __dataclass__None:
|
|
1883
|
+
__dataclass__object_setattr(self, 'enable_tools', enable_tools)
|
|
1884
|
+
__dataclass__object_setattr(self, 'dangerous_no_tool_confirmation', dangerous_no_tool_confirmation)
|
|
1885
|
+
__dataclass__object_setattr(self, 'input_history_file', input_history_file)
|
|
1886
|
+
|
|
1887
|
+
__init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
|
|
1888
|
+
if '__init__' in __dataclass__cls.__dict__:
|
|
1889
|
+
raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
|
|
1890
|
+
setattr(__dataclass__cls, '__init__', __init__)
|
|
1891
|
+
|
|
1892
|
+
@__dataclass___recursive_repr()
|
|
1893
|
+
def __repr__(self):
|
|
1894
|
+
parts = []
|
|
1895
|
+
parts.append(f"enable_tools={self.enable_tools!r}")
|
|
1896
|
+
parts.append(f"dangerous_no_tool_confirmation={self.dangerous_no_tool_confirmation!r}")
|
|
1897
|
+
parts.append(f"input_history_file={self.input_history_file!r}")
|
|
1898
|
+
return (
|
|
1899
|
+
f"{self.__class__.__qualname__}("
|
|
1900
|
+
f"{', '.join(parts)}"
|
|
1901
|
+
f")"
|
|
1902
|
+
)
|
|
1903
|
+
|
|
1904
|
+
__repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
|
|
1905
|
+
if '__repr__' in __dataclass__cls.__dict__:
|
|
1906
|
+
raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
|
|
1907
|
+
setattr(__dataclass__cls, '__repr__', __repr__)
|
|
1908
|
+
|
|
1909
|
+
return _process_dataclass
|
|
1910
|
+
|
|
1911
|
+
|
|
1743
1912
|
@_register(
|
|
1744
1913
|
plan_repr=(
|
|
1745
1914
|
"Plans(tup=(CopyPlan(fields=('enabled_tools', 'verbose')), EqPlan(fields=('enabled_tools', 'verbose')), FrozenP"
|
|
@@ -1823,7 +1992,7 @@ def _process_dataclass__aa22ff44ed3bf3e31aaa2841f61d3f7175c85c42():
|
|
|
1823
1992
|
def __setattr__(self, name, value):
|
|
1824
1993
|
if (
|
|
1825
1994
|
type(self) is __dataclass__cls
|
|
1826
|
-
|
|
1995
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1827
1996
|
):
|
|
1828
1997
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1829
1998
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1841,7 +2010,7 @@ def _process_dataclass__aa22ff44ed3bf3e31aaa2841f61d3f7175c85c42():
|
|
|
1841
2010
|
def __delattr__(self, name):
|
|
1842
2011
|
if (
|
|
1843
2012
|
type(self) is __dataclass__cls
|
|
1844
|
-
|
|
2013
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1845
2014
|
):
|
|
1846
2015
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
1847
2016
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1977,7 +2146,7 @@ def _process_dataclass__55eb2b38eb7d4e32f3a9306577040632e1c376fb():
|
|
|
1977
2146
|
def __setattr__(self, name, value):
|
|
1978
2147
|
if (
|
|
1979
2148
|
type(self) is __dataclass__cls
|
|
1980
|
-
|
|
2149
|
+
or name in __dataclass___setattr_frozen_fields
|
|
1981
2150
|
):
|
|
1982
2151
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
1983
2152
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -1995,7 +2164,7 @@ def _process_dataclass__55eb2b38eb7d4e32f3a9306577040632e1c376fb():
|
|
|
1995
2164
|
def __delattr__(self, name):
|
|
1996
2165
|
if (
|
|
1997
2166
|
type(self) is __dataclass__cls
|
|
1998
|
-
|
|
2167
|
+
or name in __dataclass___delattr_frozen_fields
|
|
1999
2168
|
):
|
|
2000
2169
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2001
2170
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -2117,7 +2286,7 @@ def _process_dataclass__aff24d9a92d53ba94dacb7fb303b9eb4ebd0763f():
|
|
|
2117
2286
|
def __setattr__(self, name, value):
|
|
2118
2287
|
if (
|
|
2119
2288
|
type(self) is __dataclass__cls
|
|
2120
|
-
|
|
2289
|
+
or name in __dataclass___setattr_frozen_fields
|
|
2121
2290
|
):
|
|
2122
2291
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
2123
2292
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -2134,7 +2303,7 @@ def _process_dataclass__aff24d9a92d53ba94dacb7fb303b9eb4ebd0763f():
|
|
|
2134
2303
|
def __delattr__(self, name):
|
|
2135
2304
|
if (
|
|
2136
2305
|
type(self) is __dataclass__cls
|
|
2137
|
-
|
|
2306
|
+
or name in __dataclass___delattr_frozen_fields
|
|
2138
2307
|
):
|
|
2139
2308
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2140
2309
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -2252,7 +2421,7 @@ def _process_dataclass__b211fde543b7c2c533cdcf9f21b47d2f7f76e5c9():
|
|
|
2252
2421
|
def __setattr__(self, name, value):
|
|
2253
2422
|
if (
|
|
2254
2423
|
type(self) is __dataclass__cls
|
|
2255
|
-
|
|
2424
|
+
or name in __dataclass___setattr_frozen_fields
|
|
2256
2425
|
):
|
|
2257
2426
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
2258
2427
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -2269,7 +2438,7 @@ def _process_dataclass__b211fde543b7c2c533cdcf9f21b47d2f7f76e5c9():
|
|
|
2269
2438
|
def __delattr__(self, name):
|
|
2270
2439
|
if (
|
|
2271
2440
|
type(self) is __dataclass__cls
|
|
2272
|
-
|
|
2441
|
+
or name in __dataclass___delattr_frozen_fields
|
|
2273
2442
|
):
|
|
2274
2443
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2275
2444
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -2387,7 +2556,7 @@ def _process_dataclass__3576262424b3ef8ff20966fa3744e5dba9a2ae7d():
|
|
|
2387
2556
|
def __setattr__(self, name, value):
|
|
2388
2557
|
if (
|
|
2389
2558
|
type(self) is __dataclass__cls
|
|
2390
|
-
|
|
2559
|
+
or name in __dataclass___setattr_frozen_fields
|
|
2391
2560
|
):
|
|
2392
2561
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
2393
2562
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -2404,7 +2573,7 @@ def _process_dataclass__3576262424b3ef8ff20966fa3744e5dba9a2ae7d():
|
|
|
2404
2573
|
def __delattr__(self, name):
|
|
2405
2574
|
if (
|
|
2406
2575
|
type(self) is __dataclass__cls
|
|
2407
|
-
|
|
2576
|
+
or name in __dataclass___delattr_frozen_fields
|
|
2408
2577
|
):
|
|
2409
2578
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2410
2579
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -2531,7 +2700,7 @@ def _process_dataclass__927265170439340895560333250bc087fa726eff():
|
|
|
2531
2700
|
def __setattr__(self, name, value):
|
|
2532
2701
|
if (
|
|
2533
2702
|
type(self) is __dataclass__cls
|
|
2534
|
-
|
|
2703
|
+
or name in __dataclass___setattr_frozen_fields
|
|
2535
2704
|
):
|
|
2536
2705
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
2537
2706
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -2549,7 +2718,7 @@ def _process_dataclass__927265170439340895560333250bc087fa726eff():
|
|
|
2549
2718
|
def __delattr__(self, name):
|
|
2550
2719
|
if (
|
|
2551
2720
|
type(self) is __dataclass__cls
|
|
2552
|
-
|
|
2721
|
+
or name in __dataclass___delattr_frozen_fields
|
|
2553
2722
|
):
|
|
2554
2723
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2555
2724
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -2710,7 +2879,7 @@ def _process_dataclass__9f7e26a87dd163b610f38caa1ce9b3c6356e632a():
|
|
|
2710
2879
|
def __setattr__(self, name, value):
|
|
2711
2880
|
if (
|
|
2712
2881
|
type(self) is __dataclass__cls
|
|
2713
|
-
|
|
2882
|
+
or name in __dataclass___setattr_frozen_fields
|
|
2714
2883
|
):
|
|
2715
2884
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
2716
2885
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -2730,7 +2899,7 @@ def _process_dataclass__9f7e26a87dd163b610f38caa1ce9b3c6356e632a():
|
|
|
2730
2899
|
def __delattr__(self, name):
|
|
2731
2900
|
if (
|
|
2732
2901
|
type(self) is __dataclass__cls
|
|
2733
|
-
|
|
2902
|
+
or name in __dataclass___delattr_frozen_fields
|
|
2734
2903
|
):
|
|
2735
2904
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2736
2905
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -2892,7 +3061,7 @@ def _process_dataclass__61e69339fbc885327f4389d705747f188b874a91():
|
|
|
2892
3061
|
def __setattr__(self, name, value):
|
|
2893
3062
|
if (
|
|
2894
3063
|
type(self) is __dataclass__cls
|
|
2895
|
-
|
|
3064
|
+
or name in __dataclass___setattr_frozen_fields
|
|
2896
3065
|
):
|
|
2897
3066
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
2898
3067
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -2912,7 +3081,7 @@ def _process_dataclass__61e69339fbc885327f4389d705747f188b874a91():
|
|
|
2912
3081
|
def __delattr__(self, name):
|
|
2913
3082
|
if (
|
|
2914
3083
|
type(self) is __dataclass__cls
|
|
2915
|
-
|
|
3084
|
+
or name in __dataclass___delattr_frozen_fields
|
|
2916
3085
|
):
|
|
2917
3086
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
2918
3087
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -3052,7 +3221,7 @@ def _process_dataclass__0f6d91dd6a878d827836d961e4683d55b1c9095a():
|
|
|
3052
3221
|
def __setattr__(self, name, value):
|
|
3053
3222
|
if (
|
|
3054
3223
|
type(self) is __dataclass__cls
|
|
3055
|
-
|
|
3224
|
+
or name in __dataclass___setattr_frozen_fields
|
|
3056
3225
|
):
|
|
3057
3226
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
3058
3227
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -3070,7 +3239,7 @@ def _process_dataclass__0f6d91dd6a878d827836d961e4683d55b1c9095a():
|
|
|
3070
3239
|
def __delattr__(self, name):
|
|
3071
3240
|
if (
|
|
3072
3241
|
type(self) is __dataclass__cls
|
|
3073
|
-
|
|
3242
|
+
or name in __dataclass___delattr_frozen_fields
|
|
3074
3243
|
):
|
|
3075
3244
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
3076
3245
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -3316,7 +3485,7 @@ def _process_dataclass__b85c47820b05dab0f4c49061d498738fe67a73a4():
|
|
|
3316
3485
|
def __setattr__(self, name, value):
|
|
3317
3486
|
if (
|
|
3318
3487
|
type(self) is __dataclass__cls
|
|
3319
|
-
|
|
3488
|
+
or name in __dataclass___setattr_frozen_fields
|
|
3320
3489
|
):
|
|
3321
3490
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
3322
3491
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -3333,7 +3502,7 @@ def _process_dataclass__b85c47820b05dab0f4c49061d498738fe67a73a4():
|
|
|
3333
3502
|
def __delattr__(self, name):
|
|
3334
3503
|
if (
|
|
3335
3504
|
type(self) is __dataclass__cls
|
|
3336
|
-
|
|
3505
|
+
or name in __dataclass___delattr_frozen_fields
|
|
3337
3506
|
):
|
|
3338
3507
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
3339
3508
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -3451,7 +3620,7 @@ def _process_dataclass__ce2a4c81e0f66e62a54ea3adfdc532902daece78():
|
|
|
3451
3620
|
def __setattr__(self, name, value):
|
|
3452
3621
|
if (
|
|
3453
3622
|
type(self) is __dataclass__cls
|
|
3454
|
-
|
|
3623
|
+
or name in __dataclass___setattr_frozen_fields
|
|
3455
3624
|
):
|
|
3456
3625
|
raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
|
|
3457
3626
|
super(__dataclass__cls, self).__setattr__(name, value)
|
|
@@ -3468,7 +3637,7 @@ def _process_dataclass__ce2a4c81e0f66e62a54ea3adfdc532902daece78():
|
|
|
3468
3637
|
def __delattr__(self, name):
|
|
3469
3638
|
if (
|
|
3470
3639
|
type(self) is __dataclass__cls
|
|
3471
|
-
|
|
3640
|
+
or name in __dataclass___delattr_frozen_fields
|
|
3472
3641
|
):
|
|
3473
3642
|
raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
|
|
3474
3643
|
super(__dataclass__cls, self).__delattr__(name)
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- textual.getters.query_one
|
|
4
|
+
- AUTO_FOCUS
|
|
5
|
+
"""
|
|
1
6
|
import asyncio
|
|
2
7
|
import os
|
|
3
8
|
import typing as ta
|
|
@@ -15,6 +20,7 @@ from ...drivers.events.types import AiDeltaChatEvent
|
|
|
15
20
|
from ...drivers.events.types import AiMessagesChatEvent
|
|
16
21
|
from ...drivers.types import ChatDriver
|
|
17
22
|
from ...facades.facade import ChatFacade
|
|
23
|
+
from .inputhistory import InputHistoryManager
|
|
18
24
|
from .styles import read_app_css
|
|
19
25
|
from .widgets.input import InputOuter
|
|
20
26
|
from .widgets.input import InputTextArea
|
|
@@ -55,6 +61,7 @@ class ChatApp(tx.App):
|
|
|
55
61
|
chat_event_queue: ChatEventQueue,
|
|
56
62
|
backend_name: BackendName | None = None,
|
|
57
63
|
devtools_setup: tx.DevtoolsSetup | None = None,
|
|
64
|
+
input_history_manager: InputHistoryManager,
|
|
58
65
|
) -> None:
|
|
59
66
|
super().__init__()
|
|
60
67
|
|
|
@@ -65,6 +72,7 @@ class ChatApp(tx.App):
|
|
|
65
72
|
self._chat_driver = chat_driver
|
|
66
73
|
self._chat_event_queue = chat_event_queue
|
|
67
74
|
self._backend_name = backend_name
|
|
75
|
+
self._input_history_manager = input_history_manager
|
|
68
76
|
|
|
69
77
|
self._chat_action_queue: asyncio.Queue[ta.Any] = asyncio.Queue()
|
|
70
78
|
|
|
@@ -263,8 +271,34 @@ class ChatApp(tx.App):
|
|
|
263
271
|
),
|
|
264
272
|
)
|
|
265
273
|
|
|
274
|
+
self._input_history_manager.add(event.text)
|
|
275
|
+
|
|
266
276
|
await self._chat_action_queue.put(ChatApp.UserInput(event.text))
|
|
267
277
|
|
|
278
|
+
def _move_input_cursor_to_end(self) -> None:
|
|
279
|
+
ita = self._get_input_text_area()
|
|
280
|
+
ln = ita.document.line_count - 1
|
|
281
|
+
lt = ita.document.lines[ln]
|
|
282
|
+
ita.move_cursor((ln, len(lt)))
|
|
283
|
+
|
|
284
|
+
@tx.on(InputTextArea.HistoryPrevious)
|
|
285
|
+
async def on_input_text_area_history_previous(self, event: InputTextArea.HistoryPrevious) -> None:
|
|
286
|
+
if (entry := self._input_history_manager.get_previous(event.text)) is not None:
|
|
287
|
+
self._get_input_text_area().text = entry
|
|
288
|
+
self._move_input_cursor_to_end()
|
|
289
|
+
|
|
290
|
+
@tx.on(InputTextArea.HistoryNext)
|
|
291
|
+
async def on_input_text_area_history_next(self, event: InputTextArea.HistoryNext) -> None:
|
|
292
|
+
if (entry := self._input_history_manager.get_next(event.text)) is not None:
|
|
293
|
+
ita = self._get_input_text_area()
|
|
294
|
+
ita.text = entry
|
|
295
|
+
self._move_input_cursor_to_end()
|
|
296
|
+
else:
|
|
297
|
+
# At the end of history, clear the input
|
|
298
|
+
ita = self._get_input_text_area()
|
|
299
|
+
ita.clear()
|
|
300
|
+
self._input_history_manager.reset_position()
|
|
301
|
+
|
|
268
302
|
@tx.on(tx.Key)
|
|
269
303
|
async def on_key(self, event: tx.Key) -> None:
|
|
270
304
|
if event in self._input_focused_key_events:
|
|
@@ -20,6 +20,7 @@ with lang.auto_proxy_import(globals()):
|
|
|
20
20
|
from ...facades import ui as _facades_ui
|
|
21
21
|
from . import app as _app
|
|
22
22
|
from . import facades as _facades
|
|
23
|
+
from . import inputhistory as _inputhistory
|
|
23
24
|
from . import interface as _interface
|
|
24
25
|
from . import tools as _tools
|
|
25
26
|
|
|
@@ -94,4 +95,17 @@ def bind_textual(cfg: TextualInterfaceConfig = TextualInterfaceConfig()) -> inj.
|
|
|
94
95
|
|
|
95
96
|
#
|
|
96
97
|
|
|
98
|
+
def _make_input_history_storage() -> _inputhistory.InputHistoryStorage:
|
|
99
|
+
if cfg.input_history_file is not None:
|
|
100
|
+
return _inputhistory.FileInputHistoryStorage(path=cfg.input_history_file)
|
|
101
|
+
else:
|
|
102
|
+
return _inputhistory.InMemoryInputHistoryStorage()
|
|
103
|
+
|
|
104
|
+
els.extend([
|
|
105
|
+
inj.bind(_inputhistory.InputHistoryStorage, to_fn=_make_input_history_storage, singleton=True),
|
|
106
|
+
inj.bind(_inputhistory.InputHistoryManager, singleton=True),
|
|
107
|
+
])
|
|
108
|
+
|
|
109
|
+
#
|
|
110
|
+
|
|
97
111
|
return inj.as_elements(*els)
|