fmtr.tools 1.3.30__tar.gz → 1.3.32__tar.gz

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.

Potentially problematic release.


This version of fmtr.tools might be problematic. Click here for more details.

Files changed (95) hide show
  1. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/PKG-INFO +43 -43
  2. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/ai_tools/agentic_tools.py +18 -1
  3. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/constants.py +1 -1
  4. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/function_tools.py +27 -9
  5. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/interface_tools/interface_tools.py +12 -4
  6. fmtr_tools-1.3.32/fmtr/tools/version +1 -0
  7. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr.tools.egg-info/PKG-INFO +43 -43
  8. fmtr_tools-1.3.30/fmtr/tools/version +0 -1
  9. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/LICENSE +0 -0
  10. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/README.md +0 -0
  11. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/__init__.py +0 -0
  12. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/ai_tools/__init__.py +0 -0
  13. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  14. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/api_tools.py +0 -0
  15. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/async_tools.py +0 -0
  16. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/augmentation_tools.py +0 -0
  17. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/caching_tools.py +0 -0
  18. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/context_tools.py +0 -0
  19. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/data_modelling_tools.py +0 -0
  20. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/dataclass_tools.py +0 -0
  21. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/datatype_tools.py +0 -0
  22. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/debugging_tools.py +0 -0
  23. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/dns_tools/__init__.py +0 -0
  24. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/dns_tools/client.py +0 -0
  25. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/dns_tools/dm.py +0 -0
  26. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/dns_tools/proxy.py +0 -0
  27. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/dns_tools/server.py +0 -0
  28. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/docker_tools.py +0 -0
  29. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/entrypoints/__init__.py +0 -0
  30. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  31. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/entrypoints/ep_test.py +0 -0
  32. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  33. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  34. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  35. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/environment_tools.py +0 -0
  36. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/google_api_tools.py +0 -0
  37. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/hash_tools.py +0 -0
  38. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/hfh_tools.py +0 -0
  39. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/html_tools.py +0 -0
  40. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/http_tools.py +0 -0
  41. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/import_tools.py +0 -0
  42. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/inherit_tools.py +0 -0
  43. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/inspection_tools.py +0 -0
  44. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/interface_tools/__init__.py +0 -0
  45. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/interface_tools/controls.py +0 -0
  46. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/iterator_tools.py +0 -0
  47. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/json_fix_tools.py +0 -0
  48. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/json_tools.py +0 -0
  49. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/logging_tools.py +0 -0
  50. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/merging_tools.py +0 -0
  51. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/metric_tools.py +0 -0
  52. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/name_tools.py +0 -0
  53. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/netrc_tools.py +0 -0
  54. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/openai_tools.py +0 -0
  55. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/packaging_tools.py +0 -0
  56. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/parallel_tools.py +0 -0
  57. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/path_tools/__init__.py +0 -0
  58. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  59. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/path_tools/path_tools.py +0 -0
  60. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  61. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/pattern_tools.py +0 -0
  62. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/pdf_tools.py +0 -0
  63. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/platform_tools.py +0 -0
  64. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/process_tools.py +0 -0
  65. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/profiling_tools.py +0 -0
  66. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/random_tools.py +0 -0
  67. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/semantic_tools.py +0 -0
  68. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/settings_tools.py +0 -0
  69. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/setup_tools/__init__.py +0 -0
  70. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  71. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/spaces_tools.py +0 -0
  72. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/string_tools.py +0 -0
  73. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tabular_tools.py +0 -0
  74. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/__init__.py +0 -0
  75. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/conftest.py +0 -0
  76. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/helpers.py +0 -0
  77. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/test_datatype.py +0 -0
  78. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/test_environment.py +0 -0
  79. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/test_json.py +0 -0
  80. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/test_path.py +0 -0
  81. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tests/test_yaml.py +0 -0
  82. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tokenization_tools.py +0 -0
  83. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/tools.py +0 -0
  84. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/unicode_tools.py +0 -0
  85. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/version_tools/__init__.py +0 -0
  86. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/version_tools/version_tools.py +0 -0
  87. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr/tools/yaml_tools.py +0 -0
  88. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  89. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  90. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr.tools.egg-info/entry_points.txt +0 -0
  91. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr.tools.egg-info/requires.txt +42 -42
  92. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/fmtr.tools.egg-info/top_level.txt +0 -0
  93. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/pyproject.toml +0 -0
  94. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/setup.cfg +0 -0
  95. {fmtr_tools-1.3.30 → fmtr_tools-1.3.32}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.30
3
+ Version: 1.3.32
4
4
  Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
5
5
  Home-page: https://github.com/fmtr/fmtr.tools
6
6
  Author: Frontmatter
@@ -126,61 +126,61 @@ Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
128
  Provides-Extra: all
129
- Requires-Dist: sre_yield; extra == "all"
130
- Requires-Dist: filetype; extra == "all"
131
- Requires-Dist: huggingface_hub; extra == "all"
132
- Requires-Dist: faker; extra == "all"
133
129
  Requires-Dist: pytest-cov; extra == "all"
134
- Requires-Dist: logfire[fastapi]; extra == "all"
135
- Requires-Dist: contexttimer; extra == "all"
136
- Requires-Dist: sentence_transformers; extra == "all"
137
- Requires-Dist: httpx; extra == "all"
138
- Requires-Dist: tokenizers; extra == "all"
139
- Requires-Dist: distributed; extra == "all"
140
- Requires-Dist: peft; extra == "all"
130
+ Requires-Dist: semver; extra == "all"
131
+ Requires-Dist: google-auth-oauthlib; extra == "all"
132
+ Requires-Dist: uvicorn[standard]; extra == "all"
133
+ Requires-Dist: docker; extra == "all"
141
134
  Requires-Dist: transformers[sentencepiece]; extra == "all"
135
+ Requires-Dist: sentence_transformers; extra == "all"
142
136
  Requires-Dist: tinynetrc; extra == "all"
143
- Requires-Dist: json_repair; extra == "all"
144
- Requires-Dist: httpx_retries; extra == "all"
137
+ Requires-Dist: openai; extra == "all"
138
+ Requires-Dist: pymupdf4llm; extra == "all"
139
+ Requires-Dist: dnspython[doh]; extra == "all"
140
+ Requires-Dist: google-auth-httplib2; extra == "all"
141
+ Requires-Dist: diskcache; extra == "all"
142
+ Requires-Dist: yamlscript; extra == "all"
143
+ Requires-Dist: peft; extra == "all"
145
144
  Requires-Dist: logfire[httpx]; extra == "all"
146
- Requires-Dist: fastapi; extra == "all"
145
+ Requires-Dist: faker; extra == "all"
147
146
  Requires-Dist: pymupdf; extra == "all"
148
- Requires-Dist: bokeh; extra == "all"
149
- Requires-Dist: semver; extra == "all"
147
+ Requires-Dist: logfire; extra == "all"
148
+ Requires-Dist: torchvision; extra == "all"
149
+ Requires-Dist: pandas; extra == "all"
150
+ Requires-Dist: setuptools; extra == "all"
151
+ Requires-Dist: regex; extra == "all"
150
152
  Requires-Dist: google-api-python-client; extra == "all"
151
- Requires-Dist: deepmerge; extra == "all"
152
- Requires-Dist: flet-webview; extra == "all"
153
- Requires-Dist: pydantic; extra == "all"
154
153
  Requires-Dist: html2text; extra == "all"
155
- Requires-Dist: regex; extra == "all"
156
- Requires-Dist: google-auth-oauthlib; extra == "all"
157
- Requires-Dist: Unidecode; extra == "all"
158
- Requires-Dist: pymupdf4llm; extra == "all"
159
- Requires-Dist: yamlscript; extra == "all"
160
- Requires-Dist: logfire; extra == "all"
161
- Requires-Dist: docker; extra == "all"
162
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
154
+ Requires-Dist: tabulate; extra == "all"
155
+ Requires-Dist: httpx_retries; extra == "all"
156
+ Requires-Dist: fastapi; extra == "all"
157
+ Requires-Dist: flet-webview; extra == "all"
158
+ Requires-Dist: appdirs; extra == "all"
159
+ Requires-Dist: huggingface_hub; extra == "all"
160
+ Requires-Dist: httpx; extra == "all"
161
+ Requires-Dist: logfire[fastapi]; extra == "all"
163
162
  Requires-Dist: openpyxl; extra == "all"
164
- Requires-Dist: torchaudio; extra == "all"
165
- Requires-Dist: pandas; extra == "all"
166
163
  Requires-Dist: google-auth; extra == "all"
164
+ Requires-Dist: pyyaml; extra == "all"
165
+ Requires-Dist: dask[bag]; extra == "all"
166
+ Requires-Dist: cachetools; extra == "all"
167
+ Requires-Dist: json_repair; extra == "all"
168
+ Requires-Dist: tokenizers; extra == "all"
167
169
  Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
168
- Requires-Dist: diskcache; extra == "all"
170
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
171
+ Requires-Dist: distributed; extra == "all"
172
+ Requires-Dist: sre_yield; extra == "all"
169
173
  Requires-Dist: flet[all]; extra == "all"
170
- Requires-Dist: ollama; extra == "all"
171
- Requires-Dist: appdirs; extra == "all"
172
- Requires-Dist: google-auth-httplib2; extra == "all"
174
+ Requires-Dist: filetype; extra == "all"
173
175
  Requires-Dist: flet-video; extra == "all"
174
- Requires-Dist: openai; extra == "all"
175
- Requires-Dist: dask[bag]; extra == "all"
176
- Requires-Dist: torchvision; extra == "all"
177
- Requires-Dist: setuptools; extra == "all"
178
- Requires-Dist: cachetools; extra == "all"
179
- Requires-Dist: pyyaml; extra == "all"
176
+ Requires-Dist: contexttimer; extra == "all"
177
+ Requires-Dist: deepmerge; extra == "all"
178
+ Requires-Dist: torchaudio; extra == "all"
179
+ Requires-Dist: ollama; extra == "all"
180
+ Requires-Dist: bokeh; extra == "all"
180
181
  Requires-Dist: pydantic-settings; extra == "all"
181
- Requires-Dist: uvicorn[standard]; extra == "all"
182
- Requires-Dist: tabulate; extra == "all"
183
- Requires-Dist: dnspython[doh]; extra == "all"
182
+ Requires-Dist: Unidecode; extra == "all"
183
+ Requires-Dist: pydantic; extra == "all"
184
184
  Dynamic: author
185
185
  Dynamic: author-email
186
186
  Dynamic: description
@@ -1,9 +1,11 @@
1
+ from typing import List, Optional, Any, Annotated
2
+
1
3
  import pydantic_ai
4
+ from pydantic import PlainValidator
2
5
  from pydantic_ai import RunContext, ModelRetry
3
6
  from pydantic_ai.agent import AgentRunResult, Agent
4
7
  from pydantic_ai.models.openai import OpenAIModel
5
8
  from pydantic_ai.providers.openai import OpenAIProvider
6
- from typing import List, Optional, Any
7
9
 
8
10
  from fmtr.tools import environment_tools as env
9
11
  from fmtr.tools.constants import Constants
@@ -131,6 +133,21 @@ class Task:
131
133
  """
132
134
  return f'{self.__class__.__name__}({repr(truncate_mid(self.SYSTEM_PROMPT_STATIC, 100))})'
133
135
 
136
+
137
+ def default_prompt_none_specified(text):
138
+ """
139
+
140
+ If the prompt is falsey, explicitly state None Specified
141
+
142
+ """
143
+ if not (text or '').strip():
144
+ return Constants.PROMPT_NONE_SPECIFIED
145
+ return text
146
+
147
+
148
+ StringDefaultNoneSpecified = Annotated[str, PlainValidator(default_prompt_none_specified)]
149
+
150
+
134
151
  if __name__ == '__main__':
135
152
  import asyncio
136
153
  from fmtr.tools import dm
@@ -52,4 +52,4 @@ class Constants:
52
52
 
53
53
  INFRA = 'infra'
54
54
 
55
- PROMPT_NOT_SPECIFIED = '[None Specified]'
55
+ PROMPT_NONE_SPECIFIED = '[None Specified]'
@@ -1,6 +1,6 @@
1
1
  import functools
2
2
  import inspect
3
- from typing import Tuple
3
+ from typing import Tuple, Callable, Self
4
4
 
5
5
  from fmtr.tools import context_tools
6
6
 
@@ -35,25 +35,43 @@ def split_args_kwargs(args_kwargs: dict) -> Tuple[list, dict]:
35
35
  return args, kwargs
36
36
 
37
37
 
38
- class BoundDecorator:
38
+ class MethodDecorator:
39
39
  """
40
40
 
41
41
  Bound method decorator with overridable start/stop and context manager
42
42
 
43
43
  """
44
44
 
45
- def __init__(self, func):
45
+ CONTEXT_KEY = 'context'
46
+
47
+ def __init__(self):
48
+ """
49
+
50
+ Initialise with decorator arguments
51
+
52
+ """
53
+ self.func = None
54
+
55
+ def __call__(self, func: Callable) -> Self:
56
+ """
57
+
58
+ If called, arguments were provided, so return the object with those applied.
59
+
60
+ """
46
61
  self.func = func
47
- self.context_null = context_tools.null()
48
62
  functools.update_wrapper(self, func)
63
+ return self
49
64
 
50
65
  def get_context(self, instance):
51
66
  """
52
67
 
53
- By default use a null context.
68
+ If the instance has a context attribute, use that - otherwise use a null context.
54
69
 
55
70
  """
56
- return self.context_null
71
+ context = getattr(instance, self.CONTEXT_KEY, None)
72
+ if context:
73
+ return context
74
+ return context_tools.null()
57
75
 
58
76
  def __get__(self, instance, owner):
59
77
  """
@@ -61,7 +79,7 @@ class BoundDecorator:
61
79
  Wrap at runtime, call start/stop within context.
62
80
 
63
81
  """
64
- if instance is None:
82
+ if instance is None: # Class method called.
65
83
  return self.func
66
84
 
67
85
  if inspect.iscoroutinefunction(self.func):
@@ -72,7 +90,7 @@ class BoundDecorator:
72
90
  self.stop(instance)
73
91
  return result
74
92
 
75
- return functools.update_wrapper(async_wrapper, self.func)
93
+ return async_wrapper
76
94
 
77
95
  else:
78
96
  def sync_wrapper(*args, **kwargs):
@@ -82,7 +100,7 @@ class BoundDecorator:
82
100
  self.stop(instance)
83
101
  return result
84
102
 
85
- return functools.update_wrapper(sync_wrapper, self.func)
103
+ return sync_wrapper
86
104
 
87
105
  def start(self, instance):
88
106
  pass
@@ -4,11 +4,11 @@ from flet.core.view import View
4
4
 
5
5
  from fmtr.tools import environment_tools
6
6
  from fmtr.tools.constants import Constants
7
- from fmtr.tools.function_tools import BoundDecorator
7
+ from fmtr.tools.function_tools import MethodDecorator
8
8
  from fmtr.tools.logging_tools import logger
9
9
 
10
10
 
11
- class update(BoundDecorator):
11
+ class update(MethodDecorator):
12
12
  """
13
13
 
14
14
  Update the page after the decorated function is called.
@@ -48,7 +48,7 @@ class progress(update):
48
48
 
49
49
  Make progress not visible and update.
50
50
 
51
- """
51
+ """
52
52
  instance.progress.visible = False
53
53
  super().stop(instance)
54
54
 
@@ -68,6 +68,15 @@ class Interface(ft.Column):
68
68
  APPVIEW = AppView.WEB_BROWSER
69
69
  PATH_ASSETS = None
70
70
  ROUTE_ROOT = '/'
71
+ SCROLL = ft.ScrollMode.AUTO
72
+
73
+ def __init__(self, *args, **kwargs):
74
+ """
75
+
76
+ Instantiate and apply interface config
77
+
78
+ """
79
+ super().__init__(*args, **kwargs, scroll=self.SCROLL)
71
80
 
72
81
  @classmethod
73
82
  def render(cls, page: ft.Page):
@@ -80,7 +89,6 @@ class Interface(ft.Column):
80
89
  page.theme = cls.get_theme()
81
90
  page.views.clear()
82
91
  page.views.append(cls())
83
-
84
92
  page.on_route_change = cls.route
85
93
  page.on_view_pop = cls.pop
86
94
 
@@ -0,0 +1 @@
1
+ 1.3.32
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.30
3
+ Version: 1.3.32
4
4
  Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
5
5
  Home-page: https://github.com/fmtr/fmtr.tools
6
6
  Author: Frontmatter
@@ -126,61 +126,61 @@ Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
128
  Provides-Extra: all
129
- Requires-Dist: sre_yield; extra == "all"
130
- Requires-Dist: filetype; extra == "all"
131
- Requires-Dist: huggingface_hub; extra == "all"
132
- Requires-Dist: faker; extra == "all"
133
129
  Requires-Dist: pytest-cov; extra == "all"
134
- Requires-Dist: logfire[fastapi]; extra == "all"
135
- Requires-Dist: contexttimer; extra == "all"
136
- Requires-Dist: sentence_transformers; extra == "all"
137
- Requires-Dist: httpx; extra == "all"
138
- Requires-Dist: tokenizers; extra == "all"
139
- Requires-Dist: distributed; extra == "all"
140
- Requires-Dist: peft; extra == "all"
130
+ Requires-Dist: semver; extra == "all"
131
+ Requires-Dist: google-auth-oauthlib; extra == "all"
132
+ Requires-Dist: uvicorn[standard]; extra == "all"
133
+ Requires-Dist: docker; extra == "all"
141
134
  Requires-Dist: transformers[sentencepiece]; extra == "all"
135
+ Requires-Dist: sentence_transformers; extra == "all"
142
136
  Requires-Dist: tinynetrc; extra == "all"
143
- Requires-Dist: json_repair; extra == "all"
144
- Requires-Dist: httpx_retries; extra == "all"
137
+ Requires-Dist: openai; extra == "all"
138
+ Requires-Dist: pymupdf4llm; extra == "all"
139
+ Requires-Dist: dnspython[doh]; extra == "all"
140
+ Requires-Dist: google-auth-httplib2; extra == "all"
141
+ Requires-Dist: diskcache; extra == "all"
142
+ Requires-Dist: yamlscript; extra == "all"
143
+ Requires-Dist: peft; extra == "all"
145
144
  Requires-Dist: logfire[httpx]; extra == "all"
146
- Requires-Dist: fastapi; extra == "all"
145
+ Requires-Dist: faker; extra == "all"
147
146
  Requires-Dist: pymupdf; extra == "all"
148
- Requires-Dist: bokeh; extra == "all"
149
- Requires-Dist: semver; extra == "all"
147
+ Requires-Dist: logfire; extra == "all"
148
+ Requires-Dist: torchvision; extra == "all"
149
+ Requires-Dist: pandas; extra == "all"
150
+ Requires-Dist: setuptools; extra == "all"
151
+ Requires-Dist: regex; extra == "all"
150
152
  Requires-Dist: google-api-python-client; extra == "all"
151
- Requires-Dist: deepmerge; extra == "all"
152
- Requires-Dist: flet-webview; extra == "all"
153
- Requires-Dist: pydantic; extra == "all"
154
153
  Requires-Dist: html2text; extra == "all"
155
- Requires-Dist: regex; extra == "all"
156
- Requires-Dist: google-auth-oauthlib; extra == "all"
157
- Requires-Dist: Unidecode; extra == "all"
158
- Requires-Dist: pymupdf4llm; extra == "all"
159
- Requires-Dist: yamlscript; extra == "all"
160
- Requires-Dist: logfire; extra == "all"
161
- Requires-Dist: docker; extra == "all"
162
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
154
+ Requires-Dist: tabulate; extra == "all"
155
+ Requires-Dist: httpx_retries; extra == "all"
156
+ Requires-Dist: fastapi; extra == "all"
157
+ Requires-Dist: flet-webview; extra == "all"
158
+ Requires-Dist: appdirs; extra == "all"
159
+ Requires-Dist: huggingface_hub; extra == "all"
160
+ Requires-Dist: httpx; extra == "all"
161
+ Requires-Dist: logfire[fastapi]; extra == "all"
163
162
  Requires-Dist: openpyxl; extra == "all"
164
- Requires-Dist: torchaudio; extra == "all"
165
- Requires-Dist: pandas; extra == "all"
166
163
  Requires-Dist: google-auth; extra == "all"
164
+ Requires-Dist: pyyaml; extra == "all"
165
+ Requires-Dist: dask[bag]; extra == "all"
166
+ Requires-Dist: cachetools; extra == "all"
167
+ Requires-Dist: json_repair; extra == "all"
168
+ Requires-Dist: tokenizers; extra == "all"
167
169
  Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
168
- Requires-Dist: diskcache; extra == "all"
170
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
171
+ Requires-Dist: distributed; extra == "all"
172
+ Requires-Dist: sre_yield; extra == "all"
169
173
  Requires-Dist: flet[all]; extra == "all"
170
- Requires-Dist: ollama; extra == "all"
171
- Requires-Dist: appdirs; extra == "all"
172
- Requires-Dist: google-auth-httplib2; extra == "all"
174
+ Requires-Dist: filetype; extra == "all"
173
175
  Requires-Dist: flet-video; extra == "all"
174
- Requires-Dist: openai; extra == "all"
175
- Requires-Dist: dask[bag]; extra == "all"
176
- Requires-Dist: torchvision; extra == "all"
177
- Requires-Dist: setuptools; extra == "all"
178
- Requires-Dist: cachetools; extra == "all"
179
- Requires-Dist: pyyaml; extra == "all"
176
+ Requires-Dist: contexttimer; extra == "all"
177
+ Requires-Dist: deepmerge; extra == "all"
178
+ Requires-Dist: torchaudio; extra == "all"
179
+ Requires-Dist: ollama; extra == "all"
180
+ Requires-Dist: bokeh; extra == "all"
180
181
  Requires-Dist: pydantic-settings; extra == "all"
181
- Requires-Dist: uvicorn[standard]; extra == "all"
182
- Requires-Dist: tabulate; extra == "all"
183
- Requires-Dist: dnspython[doh]; extra == "all"
182
+ Requires-Dist: Unidecode; extra == "all"
183
+ Requires-Dist: pydantic; extra == "all"
184
184
  Dynamic: author
185
185
  Dynamic: author-email
186
186
  Dynamic: description
@@ -1 +0,0 @@
1
- 1.3.30
File without changes
File without changes
@@ -14,61 +14,61 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
- sre_yield
18
- filetype
19
- huggingface_hub
20
- faker
21
17
  pytest-cov
22
- logfire[fastapi]
23
- contexttimer
24
- sentence_transformers
25
- httpx
26
- tokenizers
27
- distributed
28
- peft
18
+ semver
19
+ google-auth-oauthlib
20
+ uvicorn[standard]
21
+ docker
29
22
  transformers[sentencepiece]
23
+ sentence_transformers
30
24
  tinynetrc
31
- json_repair
32
- httpx_retries
25
+ openai
26
+ pymupdf4llm
27
+ dnspython[doh]
28
+ google-auth-httplib2
29
+ diskcache
30
+ yamlscript
31
+ peft
33
32
  logfire[httpx]
34
- fastapi
33
+ faker
35
34
  pymupdf
36
- bokeh
37
- semver
35
+ logfire
36
+ torchvision
37
+ pandas
38
+ setuptools
39
+ regex
38
40
  google-api-python-client
39
- deepmerge
40
- flet-webview
41
- pydantic
42
41
  html2text
43
- regex
44
- google-auth-oauthlib
45
- Unidecode
46
- pymupdf4llm
47
- yamlscript
48
- logfire
49
- docker
50
- pydantic-ai[logfire,openai]
42
+ tabulate
43
+ httpx_retries
44
+ fastapi
45
+ flet-webview
46
+ appdirs
47
+ huggingface_hub
48
+ httpx
49
+ logfire[fastapi]
51
50
  openpyxl
52
- torchaudio
53
- pandas
54
51
  google-auth
52
+ pyyaml
53
+ dask[bag]
54
+ cachetools
55
+ json_repair
56
+ tokenizers
55
57
  pydevd-pycharm~=251.25410.159
56
- diskcache
58
+ pydantic-ai[logfire,openai]
59
+ distributed
60
+ sre_yield
57
61
  flet[all]
58
- ollama
59
- appdirs
60
- google-auth-httplib2
62
+ filetype
61
63
  flet-video
62
- openai
63
- dask[bag]
64
- torchvision
65
- setuptools
66
- cachetools
67
- pyyaml
64
+ contexttimer
65
+ deepmerge
66
+ torchaudio
67
+ ollama
68
+ bokeh
68
69
  pydantic-settings
69
- uvicorn[standard]
70
- tabulate
71
- dnspython[doh]
70
+ Unidecode
71
+ pydantic
72
72
 
73
73
  [api]
74
74
  fastapi
File without changes
File without changes
File without changes