GameSentenceMiner 2.18.1__tar.gz → 2.21.25__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.
- gamesentenceminer-2.21.25/GameSentenceMiner/__init__.py +39 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/ai/ai_prompting.py +35 -34
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/anki.py +254 -136
- gamesentenceminer-2.21.25/GameSentenceMiner/discord_rpc.py +133 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/gametext.py +157 -59
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/gsm.py +361 -189
- gamesentenceminer-2.21.25/GameSentenceMiner/live_stats.py +58 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/locales/en_us.json +27 -8
- gamesentenceminer-2.21.25/GameSentenceMiner/locales/es_es.json +704 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/locales/ja_jp.json +28 -9
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/locales/zh_cn.json +27 -8
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/obs.py +310 -57
- gamesentenceminer-2.21.25/GameSentenceMiner/ocr/owocr_area_selector.py +633 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ocr/owocr_area_selector_qt.py +853 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/ocr/owocr_helper.py +174 -40
- gamesentenceminer-2.21.25/GameSentenceMiner/ocr/ss_picker.py +140 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ocr/ss_picker_qt.py +327 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/owocr/owocr/__init__.py +1 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/owocr/owocr/config.py +2 -2
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/owocr/owocr/ocr.py +797 -17
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/owocr/owocr/run.py +58 -18
- gamesentenceminer-2.21.25/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +112 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/tools/audio_offset_selector.py +215 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/tools/furigana_filter_preview.py +410 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/tools/ss_selector.py +134 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/__init__.py +87 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/anki_confirmation.py +337 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/anki_confirmation_qt.py +559 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/config_gui.py +2704 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/config_gui_qt.py +1675 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/furigana_filter_preview.py +410 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/furigana_filter_preview_qt.py +591 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/qt_main.py +444 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/screenshot_selector.py +224 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/ui/screenshot_selector_qt.py +383 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/audio_player.py +220 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/communication/electron_ipc.py +114 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/communication/send.py +19 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/configuration.py +168 -52
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron/__init__.py +12 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron/daily_rollup.py +619 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron/jiten_update.py +397 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron/populate_games.py +154 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron/run_crons.py +272 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron/setup_populate_games_cron.py +118 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/cron_table.py +334 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/db.py +483 -85
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/downloader/download_tools.py +63 -37
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/ffmpeg.py +314 -30
- gamesentenceminer-2.21.25/GameSentenceMiner/util/games_table.py +567 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/get_overlay_coords.py +199 -71
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/gsm_utils.py +8 -4
- gamesentenceminer-2.21.25/GameSentenceMiner/util/hotkey.py +138 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/util/jiten_api_client.py +188 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/model.py +4 -2
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/notification.py +58 -3
- gamesentenceminer-2.21.25/GameSentenceMiner/util/stats_rollup_table.py +216 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/text_log.py +48 -46
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/vad.py +39 -26
- gamesentenceminer-2.21.25/GameSentenceMiner/web/__init__.py +17 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/anki_api_endpoints.py +724 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/database_api.py +1679 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/events.py +102 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/goals_api.py +1718 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/gsm_websocket.py +254 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/jiten_database_api.py +1023 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/rollup_stats.py +672 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/service.py +79 -35
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/css/dashboard-shared.css +75 -13
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/css/goals.css +309 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/css/loading-skeleton.css +41 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/css/overview.css +604 -47
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/css/search.css +294 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/css/shared.css +801 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/css/stats.css +509 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/anki_stats.js +424 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/components/bar-chart.js +339 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-bulk-operations.js +320 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-game-data.js +390 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-game-operations.js +213 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-helpers.js +44 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-jiten-integration.js +750 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-popups.js +89 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-tabs.js +64 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database-text-management.js +371 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/database.js +150 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/goals.js +2124 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/heatmap.js +350 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/overview.js +2170 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/regex-patterns.js +100 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/search.js +661 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/js/shared.js +212 -41
- gamesentenceminer-2.21.25/GameSentenceMiner/web/static/js/stats.js +2635 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/stats.py +1648 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/stats_api.py +2107 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/anki_stats.html +134 -60
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/components/date-range.html +134 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/components/html-head.html +79 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/components/js-config.html +37 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/components/popups.html +15 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/components/regex-input.html +160 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/components/settings-modal.html +251 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/database.html +809 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/goals.html +433 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/index.html +51 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/overview.html +278 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/search.html +226 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/templates/stats.html +291 -0
- gamesentenceminer-2.21.25/GameSentenceMiner/web/texthooking_page.py +553 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25/GameSentenceMiner.egg-info}/PKG-INFO +109 -32
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner.egg-info/SOURCES.txt +48 -1
- gamesentenceminer-2.21.25/GameSentenceMiner.egg-info/requires.txt +51 -0
- gamesentenceminer-2.18.1/README.md → gamesentenceminer-2.21.25/PKG-INFO +132 -3
- gamesentenceminer-2.18.1/GameSentenceMiner.egg-info/PKG-INFO → gamesentenceminer-2.21.25/README.md +68 -54
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/pyproject.toml +42 -31
- gamesentenceminer-2.18.1/GameSentenceMiner/ocr/owocr_area_selector.py +0 -630
- gamesentenceminer-2.18.1/GameSentenceMiner/ocr/ss_picker.py +0 -140
- gamesentenceminer-2.18.1/GameSentenceMiner/owocr/owocr/__init__.py +0 -1
- gamesentenceminer-2.18.1/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -109
- gamesentenceminer-2.18.1/GameSentenceMiner/tools/audio_offset_selector.py +0 -215
- gamesentenceminer-2.18.1/GameSentenceMiner/tools/furigana_filter_preview.py +0 -330
- gamesentenceminer-2.18.1/GameSentenceMiner/tools/ss_selector.py +0 -134
- gamesentenceminer-2.18.1/GameSentenceMiner/ui/anki_confirmation.py +0 -187
- gamesentenceminer-2.18.1/GameSentenceMiner/ui/config_gui.py +0 -2548
- gamesentenceminer-2.18.1/GameSentenceMiner/ui/screenshot_selector.py +0 -215
- gamesentenceminer-2.18.1/GameSentenceMiner/util/communication/send.py +0 -7
- gamesentenceminer-2.18.1/GameSentenceMiner/util/communication/websocket.py +0 -95
- gamesentenceminer-2.18.1/GameSentenceMiner/util/downloader/__init__.py +0 -0
- gamesentenceminer-2.18.1/GameSentenceMiner/web/__init__.py +0 -0
- gamesentenceminer-2.18.1/GameSentenceMiner/web/database_api.py +0 -1733
- gamesentenceminer-2.18.1/GameSentenceMiner/web/events.py +0 -178
- gamesentenceminer-2.18.1/GameSentenceMiner/web/gsm_websocket.py +0 -120
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/__init__.py +0 -0
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/css/search.css +0 -14
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/js/anki_stats.js +0 -170
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/js/database.js +0 -745
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/js/goals.js +0 -610
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/js/overview.js +0 -1176
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/js/search.js +0 -297
- gamesentenceminer-2.18.1/GameSentenceMiner/web/static/js/stats.js +0 -902
- gamesentenceminer-2.18.1/GameSentenceMiner/web/stats.py +0 -587
- gamesentenceminer-2.18.1/GameSentenceMiner/web/templates/database.html +0 -352
- gamesentenceminer-2.18.1/GameSentenceMiner/web/templates/goals.html +0 -376
- gamesentenceminer-2.18.1/GameSentenceMiner/web/templates/index.html +0 -51
- gamesentenceminer-2.18.1/GameSentenceMiner/web/templates/overview.html +0 -416
- gamesentenceminer-2.18.1/GameSentenceMiner/web/templates/search.html +0 -111
- gamesentenceminer-2.18.1/GameSentenceMiner/web/templates/stats.html +0 -399
- gamesentenceminer-2.18.1/GameSentenceMiner/web/texthooking_page.py +0 -427
- gamesentenceminer-2.18.1/GameSentenceMiner.egg-info/requires.txt +0 -40
- {gamesentenceminer-2.18.1/GameSentenceMiner → gamesentenceminer-2.21.25/GameSentenceMiner/ai}/__init__.py +0 -0
- {gamesentenceminer-2.18.1/GameSentenceMiner/ai → gamesentenceminer-2.21.25/GameSentenceMiner/assets}/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/icon.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/icon128.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/icon256.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/icon32.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/icon512.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/icon64.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/assets/pickaxe.png +0 -0
- {gamesentenceminer-2.18.1/GameSentenceMiner/assets → gamesentenceminer-2.21.25/GameSentenceMiner/ocr}/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
- {gamesentenceminer-2.18.1/GameSentenceMiner/ocr → gamesentenceminer-2.21.25/GameSentenceMiner/tools}/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/tools/window_transparency.py +0 -0
- {gamesentenceminer-2.18.1/GameSentenceMiner/tools → gamesentenceminer-2.21.25/GameSentenceMiner/util}/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/communication/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
- {gamesentenceminer-2.18.1/GameSentenceMiner/ui → gamesentenceminer-2.21.25/GameSentenceMiner/util/downloader}/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/electron_config.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/win10toast/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/util/win10toast/__main__.py +0 -0
- {gamesentenceminer-2.18.1/GameSentenceMiner/util → gamesentenceminer-2.21.25/GameSentenceMiner/web/static}/__init__.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/css/kanji-grid.css +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/css/popups-shared.css +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/favicon.ico +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/favicon.svg +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/js/kanji-grid.js +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/site.webmanifest +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/style.css +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/basic_kanji_book_bkb_v1_v2.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/duolingo_kanji.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/grade.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/hk_primary_learning.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/hkscs2016.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/hsk_levels.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/humanum_frequency_list.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/jis_levels.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/jlpt_level.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/jpdb_kanji_frequency_list.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/jpdbv2_kanji_frequency_list.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/jun_das_modern_chinese_character_frequency_list.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/kanji_in_context_revised_edition.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/kanji_kentei_level.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/mainland_china_elementary_textbook_characters.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/moe_way_quiz.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/official_kanji.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/remembering_the_kanji.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/standard_form_of_national_characters.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/table_of_general_standard_chinese_characters.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/the_kodansha_kanji_learners_course_klc.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/thousand_character_classic.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/wanikani_levels.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/kanji_grid/words_hk_frequency_list.json +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/navigation.html +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/components/theme-styles.html +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/web/templates/utility.html +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner/wip/__init___.py +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/GameSentenceMiner.egg-info/top_level.txt +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/LICENSE +0 -0
- {gamesentenceminer-2.18.1 → gamesentenceminer-2.21.25}/setup.cfg +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
# Remove environment variables that could interfere with managed Python instance
|
|
4
|
+
# This prevents conflicts with user's system Python installations and configurations
|
|
5
|
+
|
|
6
|
+
# Tk/Tcl libraries
|
|
7
|
+
os.environ.pop('TCL_LIBRARY', None)
|
|
8
|
+
os.environ.pop('TK_LIBRARY', None)
|
|
9
|
+
|
|
10
|
+
# Python-specific paths that could cause module conflicts
|
|
11
|
+
os.environ.pop('PYTHONPATH', None)
|
|
12
|
+
os.environ.pop('PYTHONHOME', None)
|
|
13
|
+
os.environ.pop('PYTHONSTARTUP', None)
|
|
14
|
+
os.environ.pop('PYTHONUSERBASE', None)
|
|
15
|
+
|
|
16
|
+
# Virtual environment variables
|
|
17
|
+
os.environ.pop('VIRTUAL_ENV', None)
|
|
18
|
+
os.environ.pop('CONDA_PREFIX', None)
|
|
19
|
+
os.environ.pop('CONDA_DEFAULT_ENV', None)
|
|
20
|
+
os.environ.pop('CONDA_PYTHON_EXE', None)
|
|
21
|
+
|
|
22
|
+
# Python version managers
|
|
23
|
+
os.environ.pop('PYENV_ROOT', None)
|
|
24
|
+
os.environ.pop('PYENV_VERSION', None)
|
|
25
|
+
os.environ.pop('PYENV_SHELL', None)
|
|
26
|
+
|
|
27
|
+
# Poetry package manager
|
|
28
|
+
os.environ.pop('POETRY_ACTIVE', None)
|
|
29
|
+
os.environ.pop('POETRY_HOME', None)
|
|
30
|
+
|
|
31
|
+
# Pip configuration that could override behavior
|
|
32
|
+
os.environ.pop('PIP_CONFIG_FILE', None)
|
|
33
|
+
os.environ.pop('PIP_REQUIRE_VIRTUALENV', None)
|
|
34
|
+
|
|
35
|
+
# Prevent user site-packages from being loaded
|
|
36
|
+
# os.environ['PYTHONNOUSERSITE'] = '1'
|
|
37
|
+
|
|
38
|
+
# Isolate from system installations
|
|
39
|
+
os.environ['PYTHONIOENCODING'] = 'utf-8'
|
|
@@ -213,13 +213,17 @@ class OpenAIManager(AIManager):
|
|
|
213
213
|
text_output = response.choices[0].message.content.strip()
|
|
214
214
|
# get the json at the end of the message
|
|
215
215
|
if "{" in text_output and "}" in text_output:
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
try:
|
|
217
|
+
json_output = text_output[text_output.find(
|
|
218
|
+
"{"):text_output.rfind("}")+1]
|
|
219
|
+
json_output = json_output.replace("{output:", '{"output":')
|
|
220
|
+
text_output = json.loads(json_output)['output']
|
|
221
|
+
except Exception as e:
|
|
222
|
+
self.logger.debug(f"Failed to parse JSON from response returning response raw: {e}", exc_info=True)
|
|
219
223
|
# self.logger.debug(f"Received response:\n{text_output}")
|
|
220
224
|
return text_output
|
|
221
225
|
except Exception as e:
|
|
222
|
-
self.logger.error(f"OpenAI processing failed: {e}")
|
|
226
|
+
self.logger.error(f"OpenAI processing failed: {e}", exc_info=True)
|
|
223
227
|
return f"Processing failed: {e}"
|
|
224
228
|
|
|
225
229
|
|
|
@@ -361,37 +365,34 @@ def get_ai_prompt_result(lines: List[GameLine], sentence: str, current_line: Gam
|
|
|
361
365
|
"No internet connection. Unable to proceed with AI prompt.")
|
|
362
366
|
return ""
|
|
363
367
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
if
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
f"Reusing existing Gemini AI Manager for model: {get_config().ai.gemini_model}")
|
|
371
|
-
else:
|
|
372
|
-
ai_manager = GeminiAI(model=get_config(
|
|
373
|
-
).ai.gemini_model, api_key=get_config().ai.gemini_api_key, logger=logger)
|
|
374
|
-
elif provider == AIType.GROQ.value:
|
|
375
|
-
if get_config().ai.groq_model in ai_managers:
|
|
376
|
-
ai_manager = ai_managers[get_config().ai.groq_model]
|
|
377
|
-
logger.info(
|
|
378
|
-
f"Reusing existing Groq AI Manager for model: {get_config().ai.groq_model}")
|
|
379
|
-
else:
|
|
380
|
-
ai_manager = GroqAI(model=get_config(
|
|
381
|
-
).ai.groq_model, api_key=get_config().ai.groq_api_key, logger=logger)
|
|
382
|
-
elif provider == AIType.OPENAI.value:
|
|
383
|
-
if f"{get_config().ai.open_ai_url}:{get_config().ai.open_ai_model}:{get_config().ai.open_ai_api_key}" in ai_managers:
|
|
384
|
-
ai_manager = ai_managers[f"{get_config().ai.open_ai_url}:{get_config().ai.open_ai_model}:{get_config().ai.open_ai_api_key}"]
|
|
385
|
-
logger.info(
|
|
386
|
-
f"Reusing existing OpenAI AI Manager for model: {get_config().ai.open_ai_model}")
|
|
387
|
-
else:
|
|
388
|
-
ai_manager = OpenAIManager(model=get_config().ai.open_ai_model, api_key=get_config(
|
|
389
|
-
).ai.open_ai_api_key, api_url=get_config().ai.open_ai_url, logger=logger)
|
|
368
|
+
provider = get_config().ai.provider
|
|
369
|
+
if provider == AIType.GEMINI.value:
|
|
370
|
+
if get_config().ai.gemini_model in ai_managers:
|
|
371
|
+
ai_manager = ai_managers[get_config().ai.gemini_model]
|
|
372
|
+
logger.info(
|
|
373
|
+
f"Reusing existing Gemini AI Manager for model: {get_config().ai.gemini_model}")
|
|
390
374
|
else:
|
|
391
|
-
ai_manager =
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
375
|
+
ai_manager = GeminiAI(model=get_config(
|
|
376
|
+
).ai.gemini_model, api_key=get_config().ai.gemini_api_key, logger=logger)
|
|
377
|
+
elif provider == AIType.GROQ.value:
|
|
378
|
+
if get_config().ai.groq_model in ai_managers:
|
|
379
|
+
ai_manager = ai_managers[get_config().ai.groq_model]
|
|
380
|
+
logger.info(
|
|
381
|
+
f"Reusing existing Groq AI Manager for model: {get_config().ai.groq_model}")
|
|
382
|
+
else:
|
|
383
|
+
ai_manager = GroqAI(model=get_config(
|
|
384
|
+
).ai.groq_model, api_key=get_config().ai.groq_api_key, logger=logger)
|
|
385
|
+
elif provider == AIType.OPENAI.value:
|
|
386
|
+
if f"{get_config().ai.open_ai_url}:{get_config().ai.open_ai_model}:{get_config().ai.open_ai_api_key}" in ai_managers:
|
|
387
|
+
ai_manager = ai_managers[f"{get_config().ai.open_ai_url}:{get_config().ai.open_ai_model}:{get_config().ai.open_ai_api_key}"]
|
|
388
|
+
logger.info(
|
|
389
|
+
f"Reusing existing OpenAI AI Manager for model: {get_config().ai.open_ai_model}")
|
|
390
|
+
else:
|
|
391
|
+
ai_manager = OpenAIManager(model=get_config().ai.open_ai_model, api_key=get_config(
|
|
392
|
+
).ai.open_ai_api_key, api_url=get_config().ai.open_ai_url, logger=logger)
|
|
393
|
+
if ai_manager:
|
|
394
|
+
ai_managers[ai_manager.model_name] = ai_manager
|
|
395
|
+
current_ai_config = get_config().ai
|
|
395
396
|
|
|
396
397
|
if not ai_manager:
|
|
397
398
|
logger.error(
|