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.
Files changed (30) hide show
  1. ommlds/.omlish-manifests.json +5 -5
  2. ommlds/__about__.py +1 -1
  3. ommlds/backends/anthropic/protocol/_dataclasses.py +16 -16
  4. ommlds/backends/cerebras/_dataclasses.py +42 -42
  5. ommlds/backends/google/protocol/_dataclasses.py +64 -64
  6. ommlds/backends/groq/_dataclasses.py +36 -36
  7. ommlds/backends/ollama/_dataclasses.py +28 -28
  8. ommlds/backends/openai/protocol/_dataclasses.py +88 -88
  9. ommlds/backends/tavily/_dataclasses.py +16 -16
  10. ommlds/cli/_dataclasses.py +212 -43
  11. ommlds/cli/sessions/chat/interfaces/textual/app.py +34 -0
  12. ommlds/cli/sessions/chat/interfaces/textual/configs.py +1 -1
  13. ommlds/cli/sessions/chat/interfaces/textual/inject.py +14 -0
  14. ommlds/cli/sessions/chat/interfaces/textual/inputhistory.py +174 -0
  15. ommlds/cli/sessions/chat/interfaces/textual/widgets/input.py +42 -8
  16. ommlds/minichain/_dataclasses.py +361 -343
  17. ommlds/minichain/backends/impls/cerebras/stream.py +39 -52
  18. ommlds/minichain/backends/impls/google/chat.py +11 -82
  19. ommlds/minichain/backends/impls/google/protocol.py +105 -0
  20. ommlds/minichain/backends/impls/google/stream.py +49 -132
  21. ommlds/minichain/backends/impls/groq/stream.py +40 -53
  22. ommlds/minichain/backends/impls/openai/stream.py +40 -87
  23. ommlds/minichain/http/__init__.py +0 -0
  24. ommlds/minichain/http/stream.py +195 -0
  25. {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/METADATA +6 -6
  26. {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/RECORD +30 -26
  27. {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/WHEEL +0 -0
  28. {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/entry_points.txt +0 -0
  29. {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/licenses/LICENSE +0 -0
  30. {ommlds-0.0.0.dev503.dist-info → ommlds-0.0.0.dev505.dist-info}/top_level.txt +0 -0
@@ -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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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
- or name in __dataclass___setattr_frozen_fields
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
- or name in __dataclass___delattr_frozen_fields
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:
@@ -8,4 +8,4 @@ from ..configs import InterfaceConfig
8
8
 
9
9
  @dc.dataclass(frozen=True, kw_only=True)
10
10
  class TextualInterfaceConfig(InterfaceConfig):
11
- pass
11
+ input_history_file: str | None = None
@@ -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)