supervertaler 1.9.112__py3-none-any.whl → 1.9.114__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.
- Supervertaler.py +21 -6
- modules/unified_prompt_manager_qt.py +14 -2
- {supervertaler-1.9.112.dist-info → supervertaler-1.9.114.dist-info}/METADATA +5 -1
- {supervertaler-1.9.112.dist-info → supervertaler-1.9.114.dist-info}/RECORD +8 -8
- {supervertaler-1.9.112.dist-info → supervertaler-1.9.114.dist-info}/WHEEL +0 -0
- {supervertaler-1.9.112.dist-info → supervertaler-1.9.114.dist-info}/entry_points.txt +0 -0
- {supervertaler-1.9.112.dist-info → supervertaler-1.9.114.dist-info}/licenses/LICENSE +0 -0
- {supervertaler-1.9.112.dist-info → supervertaler-1.9.114.dist-info}/top_level.txt +0 -0
Supervertaler.py
CHANGED
|
@@ -3,8 +3,8 @@ Supervertaler
|
|
|
3
3
|
=============
|
|
4
4
|
The Ultimate Translation Workbench.
|
|
5
5
|
Modern PyQt6 interface with specialised modules to handle any problem.
|
|
6
|
-
Version: 1.9.
|
|
7
|
-
Release Date: January
|
|
6
|
+
Version: 1.9.114 (AI Assistant diagnostic logging)
|
|
7
|
+
Release Date: January 19, 2026
|
|
8
8
|
Framework: PyQt6
|
|
9
9
|
|
|
10
10
|
This is the modern edition of Supervertaler using PyQt6 framework.
|
|
@@ -34,7 +34,7 @@ License: MIT
|
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
36
|
# Version Information.
|
|
37
|
-
__version__ = "1.9.
|
|
37
|
+
__version__ = "1.9.114"
|
|
38
38
|
__phase__ = "0.9"
|
|
39
39
|
__release_date__ = "2026-01-18"
|
|
40
40
|
__edition__ = "Qt"
|
|
@@ -39404,11 +39404,26 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
|
|
|
39404
39404
|
return f"[MyMemory error: {str(e)}]"
|
|
39405
39405
|
|
|
39406
39406
|
def load_api_keys(self) -> Dict[str, str]:
|
|
39407
|
-
"""Load API keys
|
|
39407
|
+
"""Load API keys with dev-first priority
|
|
39408
|
+
|
|
39409
|
+
Priority order:
|
|
39410
|
+
1. user_data_private/api_keys.txt (dev mode, gitignored)
|
|
39411
|
+
2. user_data/api_keys.txt (user mode, shipped with app)
|
|
39412
|
+
"""
|
|
39408
39413
|
api_keys = {}
|
|
39409
|
-
api_keys_file = self.user_data_path / "api_keys.txt"
|
|
39410
39414
|
|
|
39411
|
-
|
|
39415
|
+
# Priority 1: Dev mode (gitignored, never shipped)
|
|
39416
|
+
dev_file = Path("user_data_private") / "api_keys.txt"
|
|
39417
|
+
|
|
39418
|
+
# Priority 2: User mode (ships with app)
|
|
39419
|
+
user_file = self.user_data_path / "api_keys.txt"
|
|
39420
|
+
|
|
39421
|
+
# Check dev first, then user
|
|
39422
|
+
if dev_file.exists():
|
|
39423
|
+
api_keys_file = dev_file
|
|
39424
|
+
elif user_file.exists():
|
|
39425
|
+
api_keys_file = user_file
|
|
39426
|
+
else:
|
|
39412
39427
|
return api_keys
|
|
39413
39428
|
|
|
39414
39429
|
try:
|
|
@@ -2821,7 +2821,19 @@ If the text refers to figures (e.g., 'Figure 1A'), relevant images may be provid
|
|
|
2821
2821
|
def _init_llm_client(self):
|
|
2822
2822
|
"""Initialize LLM client with available API keys"""
|
|
2823
2823
|
try:
|
|
2824
|
-
|
|
2824
|
+
# Use parent app's API key loading method (reads from user_data/api_keys.txt)
|
|
2825
|
+
if hasattr(self.parent_app, 'load_api_keys'):
|
|
2826
|
+
api_keys = self.parent_app.load_api_keys()
|
|
2827
|
+
else:
|
|
2828
|
+
# Fallback to module function (legacy path)
|
|
2829
|
+
api_keys = load_api_keys()
|
|
2830
|
+
|
|
2831
|
+
# Debug: Log which keys were found (without exposing the actual keys)
|
|
2832
|
+
key_names = [k for k in api_keys.keys() if api_keys.get(k)]
|
|
2833
|
+
if key_names:
|
|
2834
|
+
self.log_message(f"🔑 Found API keys for: {', '.join(key_names)}")
|
|
2835
|
+
else:
|
|
2836
|
+
self.log_message("⚠ No API keys found in api_keys.txt")
|
|
2825
2837
|
|
|
2826
2838
|
# Try to use the same provider as main app if available
|
|
2827
2839
|
provider = None
|
|
@@ -2839,7 +2851,7 @@ If the text refers to figures (e.g., 'Figure 1A'), relevant images may be provid
|
|
|
2839
2851
|
provider = "openai"
|
|
2840
2852
|
elif api_keys.get("claude"):
|
|
2841
2853
|
provider = "claude"
|
|
2842
|
-
elif api_keys.get("google"):
|
|
2854
|
+
elif api_keys.get("google") or api_keys.get("gemini"):
|
|
2843
2855
|
provider = "gemini"
|
|
2844
2856
|
|
|
2845
2857
|
if provider:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: supervertaler
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.114
|
|
4
4
|
Summary: Professional AI-powered translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
|
|
5
5
|
Home-page: https://supervertaler.com
|
|
6
6
|
Author: Michael Beijer
|
|
@@ -584,6 +584,10 @@ python Supervertaler.py
|
|
|
584
584
|
### First Steps
|
|
585
585
|
|
|
586
586
|
1. **Configure API Keys**: Set up OpenAI, Claude, or Gemini credentials
|
|
587
|
+
- Copy `user_data/api_keys.example.txt` to `user_data/api_keys.txt`
|
|
588
|
+
- Add your API keys (remove the `#` from each line you use)
|
|
589
|
+
- Format: `openai = sk-YOUR_KEY_HERE` (no quotes needed)
|
|
590
|
+
- **Developers**: Use `user_data_private/api_keys.txt` instead (gitignored)
|
|
587
591
|
2. **Explore System Prompts** (Ctrl+P) - Browse domain-specific specialist prompts
|
|
588
592
|
3. **Create Custom Instructions** - Define your translation preferences
|
|
589
593
|
4. **Open a Document** - Import DOCX, create segments
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Supervertaler.py,sha256=
|
|
1
|
+
Supervertaler.py,sha256=KuDtE0913mMgdF1Aku7fdKEJR7ipeHvXpJo67r_ifdQ,2124860
|
|
2
2
|
modules/__init__.py,sha256=G58XleS-EJ2sX4Kehm-3N2m618_W2Es0Kg8CW_eBG7g,327
|
|
3
3
|
modules/ai_actions.py,sha256=i5MJcM-7Y6CAvKUwxmxrVHeoZAVtAP7aRDdWM5KLkO0,33877
|
|
4
4
|
modules/ai_attachment_manager.py,sha256=mA5ISI22qN9mH3DQFF4gOTciDyBt5xVR7sHTkgkTIlw,11361
|
|
@@ -73,13 +73,13 @@ modules/translation_memory.py,sha256=U-deNPybG2PKeEt2LSTZv0Ziu5VwxkH2BsuCCXbpalc
|
|
|
73
73
|
modules/translation_results_panel.py,sha256=DmEe0pZRSfcZFg2cWeEREK7H9vrTcPkgeuMW54Pgrys,92505
|
|
74
74
|
modules/translation_services.py,sha256=lyVpWuZK1wtVtYZMDMdLoq1DHBoSaeAnp-Yejb0TlVQ,10530
|
|
75
75
|
modules/unified_prompt_library.py,sha256=f9C0oTmOCCL5yzDrTpPPPWk_67uwFnH1-wOGyqaYIBA,25862
|
|
76
|
-
modules/unified_prompt_manager_qt.py,sha256=
|
|
76
|
+
modules/unified_prompt_manager_qt.py,sha256=x6MwpLb2hZcjhKKqkVvDNsJb5I8o2vML443hHADmQ08,160675
|
|
77
77
|
modules/voice_commands.py,sha256=iBb-gjWxRMLhFH7-InSRjYJz1EIDBNA2Pog8V7TtJaY,38516
|
|
78
78
|
modules/voice_dictation.py,sha256=QmitXfkG-vRt5hIQATjphHdhXfqmwhzcQcbXB6aRzIg,16386
|
|
79
79
|
modules/voice_dictation_lite.py,sha256=jorY0BmWE-8VczbtGrWwt1zbnOctMoSlWOsQrcufBcc,9423
|
|
80
|
-
supervertaler-1.9.
|
|
81
|
-
supervertaler-1.9.
|
|
82
|
-
supervertaler-1.9.
|
|
83
|
-
supervertaler-1.9.
|
|
84
|
-
supervertaler-1.9.
|
|
85
|
-
supervertaler-1.9.
|
|
80
|
+
supervertaler-1.9.114.dist-info/licenses/LICENSE,sha256=m28u-4qL5nXIWnJ6xlQVw__H30rWFtRK3pCOais2OuY,1092
|
|
81
|
+
supervertaler-1.9.114.dist-info/METADATA,sha256=WoCfudkW7C-792FzrMAIBW_4Z6wWLbAFIUWIoQttprU,39771
|
|
82
|
+
supervertaler-1.9.114.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
83
|
+
supervertaler-1.9.114.dist-info/entry_points.txt,sha256=NP4hiCvx-_30YYKqgr-jfJYQvHr1qTYBMfoVmKIXSM8,53
|
|
84
|
+
supervertaler-1.9.114.dist-info/top_level.txt,sha256=9tUHBYUSfaE4S2E4W3eavJsDyYymkwLfeWAHHAPT6Dk,22
|
|
85
|
+
supervertaler-1.9.114.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|