|
4 | 4 |
|
5 | 5 | import json |
6 | 6 | import os |
7 | | -from pathlib import Path |
8 | 7 |
|
9 | | -import toml |
| 8 | +import tomllib # Python 3.11 built-in module |
| 9 | +from pathlib import Path |
10 | 10 |
|
11 | 11 | # Load the pyproject.toml file |
12 | 12 | SRC_DIR = Path(__file__).resolve().parent |
13 | 13 | ROOT_DIR = SRC_DIR.parent |
14 | 14 | SETUP_FILENAME = ROOT_DIR / "pyproject.toml" |
15 | 15 |
|
16 | | -with open(SETUP_FILENAME, "r") as file: |
17 | | - pyproject_data = toml.load(file) |
| 16 | +# Read the TOML file using tomllib (Python 3.11+) |
| 17 | +with open(SETUP_FILENAME, "rb") as file: |
| 18 | + pyproject_data = tomllib.load(file) |
18 | 19 |
|
19 | 20 | # For the sake of following the PEP8 standard, we will declare module-level dunder names. |
20 | 21 | # PEP8 standard about dunder names: https://peps.python.org/pep-0008/#module-level-dunder-names |
|
25 | 26 | # Constants |
26 | 27 | # ---------------------------- |
27 | 28 | # APP |
28 | | -APP_NAME = pyproject_data["project"]["name"] |
| 29 | +DEFAULT_APP_NAME = 'VividNode' |
29 | 30 | CONTACT = pyproject_data["project"]["authors"][0]['email'] |
30 | | -APP_ICON = 'icon.ico' |
| 31 | +DEFAULT_APP_ICON = 'icon.ico' |
31 | 32 | APP_INITIAL_WINDOW_SIZE = (1280, 768) |
32 | 33 |
|
33 | 34 | TRANSPARENT_RANGE = 20, 100 |
34 | 35 | TRANSPARENT_INIT_VAL = 100 |
35 | 36 |
|
36 | 37 | LICENSE = pyproject_data["project"]["license"]['text'] |
37 | 38 | LICENSE_URL = 'https://github.com/yjg30737/pyqt-openai/blob/main/LICENSE' |
| 39 | +KOFI_URL = 'https://ko-fi.com/junggyuyoon' |
38 | 40 | PAYPAL_URL = 'https://paypal.me/yjg30737' |
39 | | -BUYMEACOFFEE_URL = 'https://www.buymeacoffee.com/yjg30737' |
40 | 41 | GITHUB_URL = 'https://github.com/yjg30737/pyqt-openai' |
41 | 42 | DISCORD_URL = 'https://discord.gg/cHekprskVE' |
| 43 | + |
| 44 | +HOW_TO_GET_OPENAI_API_KEY_URL = 'https://medium.com/@yjg30737/how-to-get-your-openai-api-key-e2193850932e' |
| 45 | +HOW_TO_EXPORT_CHATGPT_CONVERSATION_HISTORY_URL = 'https://medium.com/@yjg30737/how-to-export-your-chatgpt-conversation-history-caa0946d6349' |
| 46 | +HOW_TO_REPLICATE = 'https://medium.com/@yjg30737/10a2cb983ceb' |
| 47 | + |
42 | 48 | COLUMN_TO_EXCLUDE_FROM_SHOW_HIDE_CHAT = ['id'] |
43 | 49 | COLUMN_TO_EXCLUDE_FROM_SHOW_HIDE_IMAGE = ['id', 'data'] |
44 | 50 | DEFAULT_LANGUAGE = 'en_US' |
45 | | -LANGUAGE_FILE = 'translations.json' |
| 51 | +LANGUAGE_FILE = 'lang/translations.json' |
46 | 52 | LANGUAGE_DICT = { |
47 | 53 | "English": "en_US", |
48 | 54 | "Spanish": "es_ES", |
|
61 | 67 | "Portuguese": "pt_BR" |
62 | 68 | } |
63 | 69 |
|
64 | | -MESSAGE_ADDITIONAL_HEIGHT = 40 |
65 | 70 | MESSAGE_PADDING = 16 |
66 | 71 | MESSAGE_MAXIMUM_HEIGHT = 800 |
67 | 72 | MAXIMUM_MESSAGES_IN_PARAMETER = 20 |
68 | 73 | MESSAGE_MAXIMUM_HEIGHT_RANGE = 300, 1000 |
69 | 74 | MAXIMUM_MESSAGES_IN_PARAMETER_RANGE = 2, 1000 |
70 | 75 |
|
| 76 | +CONTEXT_DELIMITER = '\n'*2 |
71 | 77 | PROMPT_IMAGE_SCALE = 200, 200 |
72 | 78 | TOAST_DURATION = 3 |
73 | 79 |
|
| 80 | +## OPENAI |
| 81 | +OPENAI_REQUEST_URL = 'https://api.openai.com/v1/models' |
| 82 | + |
74 | 83 | ## PARAMETER - OPENAI CHAT |
75 | 84 | OPENAI_TEMPERATURE_RANGE = 0, 2 |
76 | 85 | OPENAI_TEMPERATURE_STEP = 0.01 |
|
97 | 106 | ICON_EXPORT = 'ico/export.svg' |
98 | 107 | ICON_FAVORITE_NO = 'ico/favorite_no.svg' |
99 | 108 | ICON_FAVORITE_YES = 'ico/favorite_yes.svg' |
| 109 | +ICON_FOCUS_MODE = 'ico/focus_mode.svg' |
100 | 110 | ICON_FULLSCREEN = 'ico/fullscreen.svg' |
101 | 111 | ICON_GITHUB = 'ico/github.svg' |
102 | 112 | ICON_HELP = 'ico/help.svg' |
|
135 | 145 | DEFAULT_FOUND_TEXT_COLOR = '#00A2E8' |
136 | 146 | DEFAULT_FOUND_TEXT_BG_COLOR = '#FFF200' |
137 | 147 |
|
| 148 | +DEFAULT_LINK_COLOR = '#4F93FF' |
| 149 | +DEFAULT_LINK_HOVER_COLOR = '#FF0000' |
| 150 | + |
| 151 | +DEFAULT_TOAST_BACKGROUND_COLOR = '#444444' |
| 152 | +DEFAULT_TOAST_FOREGROUND_COLOR = '#EEEEEE' |
| 153 | + |
| 154 | +## MARKDOWN |
| 155 | +# I am not planning to use it at the moment. |
| 156 | +# DEFAULT_MARKDOWN_span_font = 'Courier New' |
| 157 | +# DEFAULT_MARKDOWN_span_color = '#000' |
| 158 | +# DEFAULT_MARKDOWN_ul_color = '#000' |
| 159 | +# DEFAULT_MARKDOWN_h1_color = '#000' |
| 160 | +# DEFAULT_MARKDOWN_h2_color = '#000' |
| 161 | +# DEFAULT_MARKDOWN_h3_color = '#000' |
| 162 | +# DEFAULT_MARKDOWN_h4_color = '#000' |
| 163 | +# DEFAULT_MARKDOWN_h5_color = '#000' |
| 164 | +# DEFAULT_MARKDOWN_h6_color = '#000' |
| 165 | +# DEFAULT_MARKDOWN_a_color = '#000' |
| 166 | + |
138 | 167 | ## SHORTCUT |
139 | | -DEFAULT_SHORTCUT_GENERAL_ACTION = 'Enter' |
| 168 | +DEFAULT_SHORTCUT_GENERAL_ACTION = 'Return' |
140 | 169 | DEFAULT_SHORTCUT_FIND_PREV = 'Ctrl+Shift+D' |
141 | 170 | DEFAULT_SHORTCUT_FIND_NEXT = 'Ctrl+D' |
142 | 171 | DEFAULT_SHORTCUT_FIND_CLOSE = 'Escape' |
143 | 172 | DEFAULT_SHORTCUT_PROMPT_BEGINNING = 'Ctrl+B' |
144 | 173 | DEFAULT_SHORTCUT_PROMPT_ENDING = 'Ctrl+E' |
145 | 174 | DEFAULT_SHORTCUT_SUPPORT_PROMPT_COMMAND = 'Ctrl+Shift+P' |
| 175 | +DEFAULT_SHORTCUT_SHOW_TOOLBAR = 'Ctrl+T' |
| 176 | +DEFAULT_SHORTCUT_SHOW_SECONDARY_TOOLBAR = 'Ctrl+Shift+T' |
| 177 | +DEFAULT_SHORTCUT_FOCUS_MODE = 'F10' |
146 | 178 | DEFAULT_SHORTCUT_FULL_SCREEN = 'F11' |
147 | 179 | DEFAULT_SHORTCUT_FIND = 'Ctrl+F' |
148 | 180 | DEFAULT_SHORTCUT_JSON_MODE = 'Ctrl+J' |
149 | 181 | DEFAULT_SHORTCUT_LEFT_SIDEBAR_WINDOW = 'Ctrl+L' |
150 | 182 | DEFAULT_SHORTCUT_RIGHT_SIDEBAR_WINDOW = 'Ctrl+R' |
151 | 183 | DEFAULT_SHORTCUT_CONTROL_PROMPT_WINDOW = 'Ctrl+Shift+C' |
152 | 184 | DEFAULT_SHORTCUT_SETTING = 'Ctrl+Alt+S' |
153 | | -DEFAULT_SHORTCUT_SEND = 'Ctrl+Enter' |
| 185 | +DEFAULT_SHORTCUT_SEND = 'Ctrl+Return' |
154 | 186 |
|
155 | 187 | ## DIRECTORY PATH & FILE'S NAME |
156 | 188 | MAIN_INDEX = 'main.py' |
157 | 189 | IMAGE_DEFAULT_SAVE_DIRECTORY = 'image_result' |
158 | | -LLAMA_INDEX_DEFAULT_READ_DIRECTORY = './example' |
159 | | -INI_FILE_NAME = 'pyqt_openai.ini' |
| 190 | +INI_FILE_NAME = 'config.yaml' |
160 | 191 | DB_FILE_NAME = 'conv' |
161 | 192 | FILE_NAME_LENGTH = 32 |
162 | 193 | QFILEDIALOG_DEFAULT_DIRECTORY = os.path.expanduser('~') |
|
179 | 210 | PROMPT_END_KEY_NAME = 'prompt_ending' |
180 | 211 | PROMPT_NAME_REGEX = '^[a-zA-Z_0-9]+$' |
181 | 212 | INDENT_SIZE = 4 |
| 213 | +NOTIFIER_MAX_CHAR = 100 |
182 | 214 |
|
183 | 215 | # DB |
184 | 216 | DB_NAME_REGEX = '[a-zA-Z0-9]{1,20}' |
|
264 | 296 | if os.path.exists(ALEX_BROGAN_PROMPT_FILENAME): |
265 | 297 | ALEX_BROGAN_PROMPT = json.load(open(ALEX_BROGAN_PROMPT_FILENAME))[0] |
266 | 298 |
|
| 299 | +# DEFAULT Configuration data for the application settings |
| 300 | +# Initialize here to avoid circular import |
| 301 | +# ---------------------------- |
| 302 | +CONFIG_DATA = { |
| 303 | + 'General': { |
| 304 | + 'TAB_IDX': 0, |
| 305 | + 'lang': 'English', |
| 306 | + 'show_chat_list': True, |
| 307 | + 'stream': True, |
| 308 | + 'db': 'conv', |
| 309 | + 'model': 'gpt-4o', |
| 310 | + 'show_setting': True, |
| 311 | + 'use_llama_index': False, |
| 312 | + 'do_not_ask_again': False, |
| 313 | + 'show_prompt': True, |
| 314 | + 'system': 'You are a helpful assistant.', |
| 315 | + 'notify_finish': True, |
| 316 | + 'temperature': 1, |
| 317 | + 'max_tokens': -1, |
| 318 | + 'show_toolbar': True, |
| 319 | + 'show_secondary_toolbar': True, |
| 320 | + 'top_p': 1, |
| 321 | + 'chat_column_to_show': ['id', 'name', 'insert_dt', 'update_dt'], |
| 322 | + 'frequency_penalty': 0, |
| 323 | + 'image_column_to_show': ['id', 'model', 'width', 'height', 'prompt', 'negative_prompt', 'n', 'quality', 'data', 'style', 'revised_prompt', 'update_dt', 'insert_dt'], |
| 324 | + 'presence_penalty': 0, |
| 325 | + 'json_object': False, |
| 326 | + 'maximum_messages_in_parameter': MAXIMUM_MESSAGES_IN_PARAMETER, |
| 327 | + 'show_as_markdown': True, |
| 328 | + 'use_max_tokens': False, |
| 329 | + 'background_image': '', |
| 330 | + 'user_image': DEFAULT_USER_IMAGE_PATH, |
| 331 | + 'ai_image': DEFAULT_AI_IMAGE_PATH, |
| 332 | + 'font_size': DEFAULT_FONT_SIZE, |
| 333 | + 'font_family': DEFAULT_FONT_FAMILY, |
| 334 | + 'API_KEY': '', |
| 335 | + 'llama_index_directory': '', |
| 336 | + 'apply_user_defined_styles': False, |
| 337 | + 'focus_mode': False, |
| 338 | + }, |
| 339 | + 'DALLE': { |
| 340 | + 'quality': 'standard', |
| 341 | + 'show_history': True, |
| 342 | + 'n': 1, |
| 343 | + 'show_setting': True, |
| 344 | + 'size': '1024x1024', |
| 345 | + 'directory': QFILEDIALOG_DEFAULT_DIRECTORY, |
| 346 | + 'is_save': True, |
| 347 | + 'continue_generation': False, |
| 348 | + 'number_of_images_to_create': 2, |
| 349 | + 'style': 'vivid', |
| 350 | + 'response_format': 'b64_json', |
| 351 | + 'save_prompt_as_text': True, |
| 352 | + 'show_prompt_on_image': False, |
| 353 | + 'prompt_type': 1, |
| 354 | + 'width': 1024, |
| 355 | + 'height': 1024, |
| 356 | + 'prompt': "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" |
| 357 | + }, |
| 358 | + 'REPLICATE': { |
| 359 | + 'REPLICATE_API_TOKEN': '', |
| 360 | + 'show_history': True, |
| 361 | + 'model': 'stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b', |
| 362 | + 'show_setting': True, |
| 363 | + 'width': 768, |
| 364 | + 'height': 768, |
| 365 | + 'prompt': "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", |
| 366 | + 'negative_prompt': "ugly, deformed, noisy, blurry, distorted", |
| 367 | + 'directory': QFILEDIALOG_DEFAULT_DIRECTORY, |
| 368 | + 'is_save': True, |
| 369 | + 'continue_generation': False, |
| 370 | + 'number_of_images_to_create': 2, |
| 371 | + 'save_prompt_as_text': True, |
| 372 | + 'show_prompt_on_image': False |
| 373 | + } |
| 374 | +} |
| 375 | + |
267 | 376 | # Update the __all__ list with the PEP8 standard dunder names |
268 | 377 | __all__ = ['__version__', |
269 | 378 | '__author__'] |
|
0 commit comments