pygpt-net 2.5.91__py3-none-any.whl → 2.5.93__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 (37) hide show
  1. pygpt_net/CHANGELOG.txt +8 -0
  2. pygpt_net/__init__.py +1 -1
  3. pygpt_net/app.py +3 -1
  4. pygpt_net/container.py +3 -1
  5. pygpt_net/controller/config/placeholder.py +11 -1
  6. pygpt_net/controller/dialogs/confirm.py +9 -1
  7. pygpt_net/core/audio/audio.py +17 -0
  8. pygpt_net/core/text/__init__.py +1 -0
  9. pygpt_net/core/text/text.py +59 -0
  10. pygpt_net/data/config/config.json +3 -2
  11. pygpt_net/data/config/models.json +347 -5
  12. pygpt_net/data/config/settings.json +23 -11
  13. pygpt_net/data/languages.csv +186 -0
  14. pygpt_net/data/locale/locale.de.ini +15 -0
  15. pygpt_net/data/locale/locale.en.ini +15 -0
  16. pygpt_net/data/locale/locale.es.ini +15 -0
  17. pygpt_net/data/locale/locale.fr.ini +15 -0
  18. pygpt_net/data/locale/locale.it.ini +15 -0
  19. pygpt_net/data/locale/locale.pl.ini +16 -1
  20. pygpt_net/data/locale/locale.uk.ini +15 -0
  21. pygpt_net/data/locale/locale.zh.ini +15 -0
  22. pygpt_net/plugin/audio_output/plugin.py +15 -10
  23. pygpt_net/provider/core/config/patch.py +8 -0
  24. pygpt_net/provider/core/model/patch.py +19 -1
  25. pygpt_net/provider/gpt/__init__.py +4 -4
  26. pygpt_net/provider/gpt/summarizer.py +2 -2
  27. pygpt_net/tools/translator/__init__.py +12 -0
  28. pygpt_net/tools/translator/tool.py +490 -0
  29. pygpt_net/tools/translator/ui/__init__.py +0 -0
  30. pygpt_net/tools/translator/ui/dialogs.py +144 -0
  31. pygpt_net/tools/translator/ui/widgets.py +483 -0
  32. pygpt_net/ui/base/context_menu.py +18 -1
  33. {pygpt_net-2.5.91.dist-info → pygpt_net-2.5.93.dist-info}/METADATA +14 -2
  34. {pygpt_net-2.5.91.dist-info → pygpt_net-2.5.93.dist-info}/RECORD +37 -30
  35. {pygpt_net-2.5.91.dist-info → pygpt_net-2.5.93.dist-info}/LICENSE +0 -0
  36. {pygpt_net-2.5.91.dist-info → pygpt_net-2.5.93.dist-info}/WHEEL +0 -0
  37. {pygpt_net-2.5.91.dist-info → pygpt_net-2.5.93.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,11 @@
1
+ 2.5.93 (2025-08-08)
2
+
3
+ - Added a new tool: Translate - in menu Tools - feature #123.
4
+
5
+ 2.5.92 (2025-08-08)
6
+
7
+ - Added max files to store config option in Audio -> Cache.
8
+
1
9
  2.5.91 (2025-08-08)
2
10
 
3
11
  - Added GPT-5.
pygpt_net/__init__.py CHANGED
@@ -13,7 +13,7 @@ __author__ = "Marcin Szczygliński"
13
13
  __copyright__ = "Copyright 2025, Marcin Szczygliński"
14
14
  __credits__ = ["Marcin Szczygliński"]
15
15
  __license__ = "MIT"
16
- __version__ = "2.5.91"
16
+ __version__ = "2.5.93"
17
17
  __build__ = "2025-08-08"
18
18
  __maintainer__ = "Marcin Szczygliński"
19
19
  __github__ = "https://github.com/szczyglis-dev/py-gpt"
pygpt_net/app.py CHANGED
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.07 03:00:00 #
9
+ # Updated Date: 2025.08.08 05:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
@@ -161,6 +161,7 @@ from pygpt_net.tools.image_viewer import ImageViewer as ImageViewerTool
161
161
  from pygpt_net.tools.media_player import MediaPlayer as MediaPlayerTool
162
162
  from pygpt_net.tools.text_editor import TextEditor as TextEditorTool
163
163
  from pygpt_net.tools.html_canvas import HtmlCanvas as HtmlCanvasTool
164
+ from pygpt_net.tools.translator import Translator as TranslatorTool
164
165
 
165
166
  def run(**kwargs):
166
167
  """
@@ -444,6 +445,7 @@ def run(**kwargs):
444
445
  launcher.add_tool(AudioTranscriberTool())
445
446
  launcher.add_tool(CodeInterpreterTool())
446
447
  launcher.add_tool(HtmlCanvasTool())
448
+ launcher.add_tool(TranslatorTool())
447
449
 
448
450
  # register custom tools
449
451
  tools = kwargs.get('tools', None)
pygpt_net/container.py CHANGED
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.06.28 16:00:00 #
9
+ # Updated Date: 2025.08.08 05:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.config import Config
@@ -40,6 +40,7 @@ from pygpt_net.core.presets import Presets
40
40
  from pygpt_net.core.prompt import Prompt
41
41
  from pygpt_net.core.settings import Settings
42
42
  from pygpt_net.core.tabs import Tabs
43
+ from pygpt_net.core.text import Text
43
44
  from pygpt_net.core.tokens import Tokens
44
45
  from pygpt_net.core.updater import Updater
45
46
  from pygpt_net.core.vision import Vision
@@ -89,6 +90,7 @@ class Container:
89
90
  self.prompt = Prompt(window)
90
91
  self.settings = Settings(window)
91
92
  self.tabs = Tabs(window)
93
+ self.text = Text(window)
92
94
  self.tokens = Tokens(window)
93
95
  self.updater = Updater(window)
94
96
  self.vision = Vision(window)
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.07 03:00:00 #
9
+ # Updated Date: 2025.08.08 05:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from typing import Dict, Any, List
@@ -86,6 +86,8 @@ class Placeholder:
86
86
  return self.get_modes(params)
87
87
  elif id == "models":
88
88
  return self.get_models(params)
89
+ elif id == "languages":
90
+ return self.get_languages()
89
91
  elif id == "multimodal":
90
92
  return self.get_multimodal(params)
91
93
  elif id == "langchain_providers":
@@ -456,6 +458,14 @@ class Placeholder:
456
458
  data.append({id: name})
457
459
  return data
458
460
 
461
+ def get_languages(self) -> List[Dict[str, str]]:
462
+ """
463
+ Get world languages list
464
+
465
+ :return: Languages placeholders list
466
+ """
467
+ return self.window.core.text.get_language_choices()
468
+
459
469
  def get_idx(self, params: dict = None) -> List[Dict[str, str]]:
460
470
  """
461
471
  Get indexes placeholders list
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.07.19 17:00:00 #
9
+ # Updated Date: 2025.08.08 05:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from typing import Any, Optional
@@ -86,6 +86,14 @@ class Confirm:
86
86
  elif type == 'html_canvas.clear':
87
87
  self.window.tools.get("html_canvas").clear(force=True)
88
88
 
89
+ # translator
90
+ elif type == 'translator.clear':
91
+ self.window.tools.get("translator").clear(force=True)
92
+ elif type == 'translator.clear.left':
93
+ self.window.tools.get("translator").clear_left(force=True)
94
+ elif type == 'translator.clear.right':
95
+ self.window.tools.get("translator").clear_right(force=True)
96
+
89
97
  # audio transcribe
90
98
  elif type == 'audio.transcribe':
91
99
  self.window.tools.get("transcriber").transcribe(id, force=True)
@@ -204,11 +204,28 @@ class Audio:
204
204
  :return: audio cache directory path
205
205
  """
206
206
  dir = self.window.core.config.get_user_dir("tmp")
207
+ if not os.path.exists(dir):
208
+ os.makedirs(dir, exist_ok=True)
207
209
  tmp_dir = os.path.join(dir, "audio_cache")
208
210
  if not os.path.exists(tmp_dir):
209
211
  os.makedirs(tmp_dir, exist_ok=True)
210
212
  return tmp_dir
211
213
 
214
+ def delete_old_cache(self, max_files: int = 10):
215
+ """
216
+ Delete old cache files, keeping only the most recent ones.
217
+
218
+ :param max_files: Maximum number of cache files to keep.
219
+ """
220
+ tmp_dir = self.get_cache_dir()
221
+ files = [os.path.join(tmp_dir, f) for f in os.listdir(tmp_dir) if f.endswith('.' + self.CACHE_FORMAT)]
222
+ files.sort(key=os.path.getmtime, reverse=True)
223
+ for file in files[max_files:]:
224
+ try:
225
+ os.remove(file)
226
+ except Exception as e:
227
+ print(f"Error deleting cache file {file}: {e}")
228
+
212
229
  def mp3_to_wav(
213
230
  self,
214
231
  src_file: str,
@@ -0,0 +1 @@
1
+ from .text import *
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # ================================================== #
4
+ # This file is a part of PYGPT package #
5
+ # Website: https://pygpt.net #
6
+ # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
+ # MIT License #
8
+ # Created By : Marcin Szczygliński #
9
+ # Updated Date: 2025.08.08 05:00:00 #
10
+ # ================================================== #
11
+ import os
12
+
13
+
14
+ class Text:
15
+ def __init__(self, window=None):
16
+ """
17
+ Text helpers
18
+
19
+ :param window: Window instance
20
+ """
21
+ self.window = window
22
+
23
+ def get_language_choices(self) -> list:
24
+ """
25
+ Get available language choices
26
+
27
+ :return: list of dictionaries with language codes and names
28
+ """
29
+ choices = []
30
+ choices.append({"-": "--- AUTO DETECT ---"})
31
+ csv_path = os.path.join(self.window.core.config.get_app_path(), 'data', 'languages.csv')
32
+ if os.path.exists(csv_path):
33
+ with open(csv_path, 'r', encoding='utf-8') as file:
34
+ for line in file.readlines()[1:]:
35
+ parts = line.strip().split(',')
36
+ if len(parts) >= 4:
37
+ lang_code = parts[0].strip()
38
+ lang_name = parts[3].strip()
39
+ lang_orig_name = parts[4].strip()
40
+ name = f"{lang_name} ({lang_orig_name})" if lang_orig_name else lang_name
41
+ name = name.replace("'", "").replace('"', "")
42
+ choices.append({lang_code: name})
43
+
44
+ # sort choices by language name
45
+ choices.sort(key=lambda x: list(x.values())[0].lower())
46
+ return choices
47
+
48
+ def get_language_name(self, lang_code: str) -> str:
49
+ """
50
+ Get language name by code
51
+
52
+ :param lang_code: language code
53
+ :return: language name or empty string if not found
54
+ """
55
+ choices = self.get_language_choices()
56
+ for choice in choices:
57
+ if lang_code in choice:
58
+ return choice[lang_code]
59
+ return ""
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.91",
4
- "app.version": "2.5.91",
3
+ "version": "2.5.93",
4
+ "app.version": "2.5.93",
5
5
  "updated_at": "2025-08-08T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
@@ -95,6 +95,7 @@
95
95
  "attachments_send_clear": true,
96
96
  "attachments_capture_clear": true,
97
97
  "audio.cache.enabled": true,
98
+ "audio.cache.max_files": 1000,
98
99
  "audio.input.backend": "native",
99
100
  "audio.input.channels": 1,
100
101
  "audio.input.continuous": false,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.91",
4
- "app.version": "2.5.91",
3
+ "version": "2.5.93",
4
+ "app.version": "2.5.93",
5
5
  "updated_at": "2025-08-08T23:07:35"
6
6
  },
7
7
  "items": {
@@ -2030,7 +2030,7 @@
2030
2030
  },
2031
2031
  "gpt-5": {
2032
2032
  "id": "gpt-5",
2033
- "name": "gpt-5",
2033
+ "name": "gpt-5 (medium)",
2034
2034
  "mode": [
2035
2035
  "chat",
2036
2036
  "assistant",
@@ -2085,7 +2085,7 @@
2085
2085
  },
2086
2086
  "gpt-5-mini": {
2087
2087
  "id": "gpt-5-mini",
2088
- "name": "gpt-5-mini",
2088
+ "name": "gpt-5-mini (medium)",
2089
2089
  "mode": [
2090
2090
  "chat",
2091
2091
  "assistant",
@@ -2140,7 +2140,7 @@
2140
2140
  },
2141
2141
  "gpt-5-nano": {
2142
2142
  "id": "gpt-5-nano",
2143
- "name": "gpt-5-nano",
2143
+ "name": "gpt-5-nano (medium)",
2144
2144
  "mode": [
2145
2145
  "chat",
2146
2146
  "assistant",
@@ -2193,6 +2193,348 @@
2193
2193
  "provider": "openai",
2194
2194
  "tool_calls": true
2195
2195
  },
2196
+ "gpt-5-low": {
2197
+ "id": "gpt-5",
2198
+ "name": "gpt-5 (low)",
2199
+ "mode": [
2200
+ "chat",
2201
+ "assistant",
2202
+ "llama_index",
2203
+ "vision",
2204
+ "agent",
2205
+ "agent_llama",
2206
+ "expert",
2207
+ "agent_openai"
2208
+ ],
2209
+ "llama_index": {
2210
+ "args": [
2211
+ {
2212
+ "name": "model",
2213
+ "value": "gpt-5",
2214
+ "type": "str"
2215
+ }
2216
+ ],
2217
+ "env": [
2218
+ {
2219
+ "name": "OPENAI_API_KEY",
2220
+ "value": "{api_key}"
2221
+ },
2222
+ {
2223
+ "name": "OPENAI_API_BASE",
2224
+ "value": "{api_endpoint}"
2225
+ },
2226
+ {
2227
+ "name": "AZURE_OPENAI_ENDPOINT",
2228
+ "value": "{api_azure_endpoint}"
2229
+ },
2230
+ {
2231
+ "name": "OPENAI_API_VERSION",
2232
+ "value": "{api_azure_version}"
2233
+ }
2234
+ ]
2235
+ },
2236
+ "ctx": 400000,
2237
+ "tokens": 128000,
2238
+ "default": true,
2239
+ "input": [
2240
+ "text",
2241
+ "image"
2242
+ ],
2243
+ "output": [
2244
+ "text"
2245
+ ],
2246
+ "extra": {
2247
+ "reasoning_effort": "low"
2248
+ },
2249
+ "imported": false,
2250
+ "provider": "openai",
2251
+ "tool_calls": true
2252
+ },
2253
+ "gpt-5-mini-low": {
2254
+ "id": "gpt-5-mini",
2255
+ "name": "gpt-5-mini (low)",
2256
+ "mode": [
2257
+ "chat",
2258
+ "assistant",
2259
+ "llama_index",
2260
+ "vision",
2261
+ "agent",
2262
+ "agent_llama",
2263
+ "expert",
2264
+ "agent_openai"
2265
+ ],
2266
+ "llama_index": {
2267
+ "args": [
2268
+ {
2269
+ "name": "model",
2270
+ "value": "gpt-5-mini",
2271
+ "type": "str"
2272
+ }
2273
+ ],
2274
+ "env": [
2275
+ {
2276
+ "name": "OPENAI_API_KEY",
2277
+ "value": "{api_key}"
2278
+ },
2279
+ {
2280
+ "name": "OPENAI_API_BASE",
2281
+ "value": "{api_endpoint}"
2282
+ },
2283
+ {
2284
+ "name": "AZURE_OPENAI_ENDPOINT",
2285
+ "value": "{api_azure_endpoint}"
2286
+ },
2287
+ {
2288
+ "name": "OPENAI_API_VERSION",
2289
+ "value": "{api_azure_version}"
2290
+ }
2291
+ ]
2292
+ },
2293
+ "ctx": 400000,
2294
+ "tokens": 128000,
2295
+ "default": true,
2296
+ "input": [
2297
+ "text",
2298
+ "image"
2299
+ ],
2300
+ "output": [
2301
+ "text"
2302
+ ],
2303
+ "extra": {
2304
+ "reasoning_effort": "low"
2305
+ },
2306
+ "imported": false,
2307
+ "provider": "openai",
2308
+ "tool_calls": true
2309
+ },
2310
+ "gpt-5-nano-low": {
2311
+ "id": "gpt-5-nano",
2312
+ "name": "gpt-5-nano (low)",
2313
+ "mode": [
2314
+ "chat",
2315
+ "assistant",
2316
+ "llama_index",
2317
+ "vision",
2318
+ "agent",
2319
+ "agent_llama",
2320
+ "expert",
2321
+ "agent_openai"
2322
+ ],
2323
+ "llama_index": {
2324
+ "args": [
2325
+ {
2326
+ "name": "model",
2327
+ "value": "gpt-5-nano",
2328
+ "type": "str"
2329
+ }
2330
+ ],
2331
+ "env": [
2332
+ {
2333
+ "name": "OPENAI_API_KEY",
2334
+ "value": "{api_key}"
2335
+ },
2336
+ {
2337
+ "name": "OPENAI_API_BASE",
2338
+ "value": "{api_endpoint}"
2339
+ },
2340
+ {
2341
+ "name": "AZURE_OPENAI_ENDPOINT",
2342
+ "value": "{api_azure_endpoint}"
2343
+ },
2344
+ {
2345
+ "name": "OPENAI_API_VERSION",
2346
+ "value": "{api_azure_version}"
2347
+ }
2348
+ ]
2349
+ },
2350
+ "ctx": 400000,
2351
+ "tokens": 128000,
2352
+ "default": true,
2353
+ "input": [
2354
+ "text",
2355
+ "image"
2356
+ ],
2357
+ "output": [
2358
+ "text"
2359
+ ],
2360
+ "extra": {
2361
+ "reasoning_effort": "low"
2362
+ },
2363
+ "imported": false,
2364
+ "provider": "openai",
2365
+ "tool_calls": true
2366
+ },
2367
+ "gpt-5-high": {
2368
+ "id": "gpt-5",
2369
+ "name": "gpt-5 (high)",
2370
+ "mode": [
2371
+ "chat",
2372
+ "assistant",
2373
+ "llama_index",
2374
+ "vision",
2375
+ "agent",
2376
+ "agent_llama",
2377
+ "expert",
2378
+ "agent_openai"
2379
+ ],
2380
+ "llama_index": {
2381
+ "args": [
2382
+ {
2383
+ "name": "model",
2384
+ "value": "gpt-5",
2385
+ "type": "str"
2386
+ }
2387
+ ],
2388
+ "env": [
2389
+ {
2390
+ "name": "OPENAI_API_KEY",
2391
+ "value": "{api_key}"
2392
+ },
2393
+ {
2394
+ "name": "OPENAI_API_BASE",
2395
+ "value": "{api_endpoint}"
2396
+ },
2397
+ {
2398
+ "name": "AZURE_OPENAI_ENDPOINT",
2399
+ "value": "{api_azure_endpoint}"
2400
+ },
2401
+ {
2402
+ "name": "OPENAI_API_VERSION",
2403
+ "value": "{api_azure_version}"
2404
+ }
2405
+ ]
2406
+ },
2407
+ "ctx": 400000,
2408
+ "tokens": 128000,
2409
+ "default": true,
2410
+ "input": [
2411
+ "text",
2412
+ "image"
2413
+ ],
2414
+ "output": [
2415
+ "text"
2416
+ ],
2417
+ "extra": {
2418
+ "reasoning_effort": "high"
2419
+ },
2420
+ "imported": false,
2421
+ "provider": "openai",
2422
+ "tool_calls": true
2423
+ },
2424
+ "gpt-5-mini-high": {
2425
+ "id": "gpt-5-mini",
2426
+ "name": "gpt-5-mini (high)",
2427
+ "mode": [
2428
+ "chat",
2429
+ "assistant",
2430
+ "llama_index",
2431
+ "vision",
2432
+ "agent",
2433
+ "agent_llama",
2434
+ "expert",
2435
+ "agent_openai"
2436
+ ],
2437
+ "llama_index": {
2438
+ "args": [
2439
+ {
2440
+ "name": "model",
2441
+ "value": "gpt-5-mini",
2442
+ "type": "str"
2443
+ }
2444
+ ],
2445
+ "env": [
2446
+ {
2447
+ "name": "OPENAI_API_KEY",
2448
+ "value": "{api_key}"
2449
+ },
2450
+ {
2451
+ "name": "OPENAI_API_BASE",
2452
+ "value": "{api_endpoint}"
2453
+ },
2454
+ {
2455
+ "name": "AZURE_OPENAI_ENDPOINT",
2456
+ "value": "{api_azure_endpoint}"
2457
+ },
2458
+ {
2459
+ "name": "OPENAI_API_VERSION",
2460
+ "value": "{api_azure_version}"
2461
+ }
2462
+ ]
2463
+ },
2464
+ "ctx": 400000,
2465
+ "tokens": 128000,
2466
+ "default": true,
2467
+ "input": [
2468
+ "text",
2469
+ "image"
2470
+ ],
2471
+ "output": [
2472
+ "text"
2473
+ ],
2474
+ "extra": {
2475
+ "reasoning_effort": "high"
2476
+ },
2477
+ "imported": false,
2478
+ "provider": "openai",
2479
+ "tool_calls": true
2480
+ },
2481
+ "gpt-5-nano-high": {
2482
+ "id": "gpt-5-nano",
2483
+ "name": "gpt-5-nano (high)",
2484
+ "mode": [
2485
+ "chat",
2486
+ "assistant",
2487
+ "llama_index",
2488
+ "vision",
2489
+ "agent",
2490
+ "agent_llama",
2491
+ "expert",
2492
+ "agent_openai"
2493
+ ],
2494
+ "llama_index": {
2495
+ "args": [
2496
+ {
2497
+ "name": "model",
2498
+ "value": "gpt-5-nano",
2499
+ "type": "str"
2500
+ }
2501
+ ],
2502
+ "env": [
2503
+ {
2504
+ "name": "OPENAI_API_KEY",
2505
+ "value": "{api_key}"
2506
+ },
2507
+ {
2508
+ "name": "OPENAI_API_BASE",
2509
+ "value": "{api_endpoint}"
2510
+ },
2511
+ {
2512
+ "name": "AZURE_OPENAI_ENDPOINT",
2513
+ "value": "{api_azure_endpoint}"
2514
+ },
2515
+ {
2516
+ "name": "OPENAI_API_VERSION",
2517
+ "value": "{api_azure_version}"
2518
+ }
2519
+ ]
2520
+ },
2521
+ "ctx": 400000,
2522
+ "tokens": 128000,
2523
+ "default": true,
2524
+ "input": [
2525
+ "text",
2526
+ "image"
2527
+ ],
2528
+ "output": [
2529
+ "text"
2530
+ ],
2531
+ "extra": {
2532
+ "reasoning_effort": "high"
2533
+ },
2534
+ "imported": false,
2535
+ "provider": "openai",
2536
+ "tool_calls": true
2537
+ },
2196
2538
  "gpt-image-1": {
2197
2539
  "id": "gpt-image-1",
2198
2540
  "name": "gpt-image-1",
@@ -1373,17 +1373,7 @@
1373
1373
  "step": 1,
1374
1374
  "advanced": false,
1375
1375
  "tab": "device"
1376
- },
1377
- "audio.cache.enabled": {
1378
- "section": "audio",
1379
- "type": "bool",
1380
- "slider": true,
1381
- "label": "settings.audio.cache.enabled",
1382
- "description": "settings.audio.cache.enabled.desc",
1383
- "value": true,
1384
- "advanced": false,
1385
- "tab": "options"
1386
- },
1376
+ },
1387
1377
  "audio.input.stop_interval": {
1388
1378
  "section": "audio",
1389
1379
  "type": "int",
@@ -1424,6 +1414,28 @@
1424
1414
  "advanced": false,
1425
1415
  "tab": "options"
1426
1416
  },
1417
+ "audio.cache.enabled": {
1418
+ "section": "audio",
1419
+ "type": "bool",
1420
+ "slider": true,
1421
+ "label": "settings.audio.cache.enabled",
1422
+ "description": "settings.audio.cache.enabled.desc",
1423
+ "value": true,
1424
+ "advanced": false,
1425
+ "tab": "cache"
1426
+ },
1427
+ "audio.cache.max_files": {
1428
+ "section": "audio",
1429
+ "type": "int",
1430
+ "slider": false,
1431
+ "label": "settings.audio.cache.max_files",
1432
+ "description": "settings.audio.cache.max_files.desc",
1433
+ "min": 0,
1434
+ "multiplier": 1,
1435
+ "value": 1000,
1436
+ "advanced": false,
1437
+ "tab": "cache"
1438
+ },
1427
1439
  "remote_tools.web_search": {
1428
1440
  "section": "remote_tools",
1429
1441
  "type": "bool",