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 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.104 (Packaging + docs)
7
- Release Date: January 14, 2026
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.112"
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 from user_data folder"""
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
- if not api_keys_file.exists():
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
- api_keys = load_api_keys()
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.112
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=qHBsSWBG_tWmEHuRCD6t9rPO-SkBBgCDPo3CfTHF-qE,2124338
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=xfMLSlP-fn-l6XY7yyG8Knerplq1mUM7F1fKOAgDo4U,159978
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.112.dist-info/licenses/LICENSE,sha256=m28u-4qL5nXIWnJ6xlQVw__H30rWFtRK3pCOais2OuY,1092
81
- supervertaler-1.9.112.dist-info/METADATA,sha256=aDqD2NFH_WzJVbt1GPE4FPLR5DoLty6Mx-EGBsWxNnY,39490
82
- supervertaler-1.9.112.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
- supervertaler-1.9.112.dist-info/entry_points.txt,sha256=NP4hiCvx-_30YYKqgr-jfJYQvHr1qTYBMfoVmKIXSM8,53
84
- supervertaler-1.9.112.dist-info/top_level.txt,sha256=9tUHBYUSfaE4S2E4W3eavJsDyYymkwLfeWAHHAPT6Dk,22
85
- supervertaler-1.9.112.dist-info/RECORD,,
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,,