pygpt-net 2.5.92__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 (33) hide show
  1. pygpt_net/CHANGELOG.txt +4 -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/text/__init__.py +1 -0
  8. pygpt_net/core/text/text.py +59 -0
  9. pygpt_net/data/config/config.json +2 -2
  10. pygpt_net/data/config/models.json +347 -5
  11. pygpt_net/data/languages.csv +186 -0
  12. pygpt_net/data/locale/locale.de.ini +12 -0
  13. pygpt_net/data/locale/locale.en.ini +12 -0
  14. pygpt_net/data/locale/locale.es.ini +12 -0
  15. pygpt_net/data/locale/locale.fr.ini +12 -0
  16. pygpt_net/data/locale/locale.it.ini +12 -0
  17. pygpt_net/data/locale/locale.pl.ini +13 -1
  18. pygpt_net/data/locale/locale.uk.ini +12 -0
  19. pygpt_net/data/locale/locale.zh.ini +12 -0
  20. pygpt_net/provider/core/model/patch.py +18 -1
  21. pygpt_net/provider/gpt/__init__.py +4 -4
  22. pygpt_net/provider/gpt/summarizer.py +2 -2
  23. pygpt_net/tools/translator/__init__.py +12 -0
  24. pygpt_net/tools/translator/tool.py +490 -0
  25. pygpt_net/tools/translator/ui/__init__.py +0 -0
  26. pygpt_net/tools/translator/ui/dialogs.py +144 -0
  27. pygpt_net/tools/translator/ui/widgets.py +483 -0
  28. pygpt_net/ui/base/context_menu.py +18 -1
  29. {pygpt_net-2.5.92.dist-info → pygpt_net-2.5.93.dist-info}/METADATA +6 -2
  30. {pygpt_net-2.5.92.dist-info → pygpt_net-2.5.93.dist-info}/RECORD +33 -26
  31. {pygpt_net-2.5.92.dist-info → pygpt_net-2.5.93.dist-info}/LICENSE +0 -0
  32. {pygpt_net-2.5.92.dist-info → pygpt_net-2.5.93.dist-info}/WHEEL +0 -0
  33. {pygpt_net-2.5.92.dist-info → pygpt_net-2.5.93.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,7 @@
1
+ 2.5.93 (2025-08-08)
2
+
3
+ - Added a new tool: Translate - in menu Tools - feature #123.
4
+
1
5
  2.5.92 (2025-08-08)
2
6
 
3
7
  - Added max files to store config option in Audio -> Cache.
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.92"
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)
@@ -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.92",
4
- "app.version": "2.5.92",
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,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.92",
4
- "app.version": "2.5.92",
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",