pygpt-net 2.5.7__py3-none-any.whl → 2.5.8__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 (39) hide show
  1. CHANGELOG.md +7 -1
  2. README.md +18 -4
  3. pygpt_net/CHANGELOG.txt +7 -1
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/controller/chat/stream.py +6 -1
  6. pygpt_net/controller/chat/vision.py +2 -0
  7. pygpt_net/controller/lang/custom.py +3 -1
  8. pygpt_net/controller/presets/editor.py +8 -1
  9. pygpt_net/core/agents/legacy.py +2 -0
  10. pygpt_net/core/bridge/__init__.py +10 -2
  11. pygpt_net/core/ctx/__init__.py +4 -1
  12. pygpt_net/core/debug/presets.py +3 -1
  13. pygpt_net/core/events/control.py +2 -1
  14. pygpt_net/core/experts/__init__.py +3 -1
  15. pygpt_net/core/models/__init__.py +6 -1
  16. pygpt_net/core/modes/__init__.py +3 -1
  17. pygpt_net/core/presets/__init__.py +5 -1
  18. pygpt_net/core/tokens/__init__.py +4 -2
  19. pygpt_net/core/types/mode.py +3 -2
  20. pygpt_net/data/config/config.json +5 -3
  21. pygpt_net/data/config/models.json +424 -3
  22. pygpt_net/data/config/modes.json +9 -3
  23. pygpt_net/data/config/presets/current.research.json +35 -0
  24. pygpt_net/data/config/settings.json +19 -0
  25. pygpt_net/data/locale/locale.en.ini +6 -0
  26. pygpt_net/item/preset.py +5 -1
  27. pygpt_net/plugin/openai_dalle/__init__.py +3 -1
  28. pygpt_net/plugin/openai_vision/__init__.py +3 -1
  29. pygpt_net/provider/core/config/patch.py +10 -1
  30. pygpt_net/provider/core/model/patch.py +7 -1
  31. pygpt_net/provider/core/preset/json_file.py +4 -0
  32. pygpt_net/provider/gpt/__init__.py +30 -6
  33. pygpt_net/provider/gpt/chat.py +3 -6
  34. pygpt_net/ui/dialog/preset.py +3 -1
  35. {pygpt_net-2.5.7.dist-info → pygpt_net-2.5.8.dist-info}/METADATA +19 -5
  36. {pygpt_net-2.5.7.dist-info → pygpt_net-2.5.8.dist-info}/RECORD +39 -38
  37. {pygpt_net-2.5.7.dist-info → pygpt_net-2.5.8.dist-info}/LICENSE +0 -0
  38. {pygpt_net-2.5.7.dist-info → pygpt_net-2.5.8.dist-info}/WHEEL +0 -0
  39. {pygpt_net-2.5.7.dist-info → pygpt_net-2.5.8.dist-info}/entry_points.txt +0 -0
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.7",
4
- "app.version": "2.5.7",
5
- "updated_at": "2025-02-26T00:00:00"
3
+ "version": "2.5.8",
4
+ "app.version": "2.5.8",
5
+ "updated_at": "2025-03-02T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "claude-3-5-sonnet-20240620": {
@@ -1861,6 +1861,85 @@
1861
1861
  "default": false,
1862
1862
  "multimodal": []
1863
1863
  },
1864
+ "gpt-4.5-preview": {
1865
+ "id": "gpt-4.5-preview",
1866
+ "name": "gpt-4.5-preview",
1867
+ "mode": [
1868
+ "chat",
1869
+ "assistant",
1870
+ "langchain",
1871
+ "llama_index",
1872
+ "vision",
1873
+ "agent",
1874
+ "agent_llama",
1875
+ "expert"
1876
+ ],
1877
+ "langchain": {
1878
+ "provider": "openai",
1879
+ "mode": [
1880
+ "chat"
1881
+ ],
1882
+ "args": [
1883
+ {
1884
+ "name": "model_name",
1885
+ "value": "gpt-4.5-preview",
1886
+ "type": "str"
1887
+ }
1888
+ ],
1889
+ "env": [
1890
+ {
1891
+ "name": "OPENAI_API_KEY",
1892
+ "value": "{api_key}"
1893
+ },
1894
+ {
1895
+ "name": "OPENAI_API_BASE",
1896
+ "value": "{api_endpoint}"
1897
+ },
1898
+ {
1899
+ "name": "AZURE_OPENAI_ENDPOINT",
1900
+ "value": "{api_azure_endpoint}"
1901
+ },
1902
+ {
1903
+ "name": "OPENAI_API_VERSION",
1904
+ "value": "{api_azure_version}"
1905
+ }
1906
+ ]
1907
+ },
1908
+ "llama_index": {
1909
+ "provider": "openai",
1910
+ "mode": [
1911
+ "chat"
1912
+ ],
1913
+ "args": [
1914
+ {
1915
+ "name": "model",
1916
+ "value": "gpt-4o",
1917
+ "type": "str"
1918
+ }
1919
+ ],
1920
+ "env": [
1921
+ {
1922
+ "name": "OPENAI_API_KEY",
1923
+ "value": "{api_key}"
1924
+ },
1925
+ {
1926
+ "name": "OPENAI_API_BASE",
1927
+ "value": "{api_endpoint}"
1928
+ },
1929
+ {
1930
+ "name": "AZURE_OPENAI_ENDPOINT",
1931
+ "value": "{api_azure_endpoint}"
1932
+ },
1933
+ {
1934
+ "name": "OPENAI_API_VERSION",
1935
+ "value": "{api_azure_version}"
1936
+ }
1937
+ ]
1938
+ },
1939
+ "ctx": 128000,
1940
+ "tokens": 16384,
1941
+ "default": false
1942
+ },
1864
1943
  "chatgpt-4o-latest": {
1865
1944
  "id": "chatgpt-4o-latest",
1866
1945
  "name": "chatgpt-4o-latest",
@@ -2927,6 +3006,348 @@
2927
3006
  "ctx": 32768,
2928
3007
  "tokens": 4096,
2929
3008
  "default": false
3009
+ },
3010
+ "sonar-deep-research": {
3011
+ "id": "sonar-deep-research",
3012
+ "name": "sonar-deep-research",
3013
+ "mode": [
3014
+ "research"
3015
+ ],
3016
+ "langchain": {
3017
+ "provider": "openai",
3018
+ "mode": [
3019
+ "chat"
3020
+ ],
3021
+ "args": [
3022
+ {
3023
+ "name": "model_name",
3024
+ "value": "sonar-deep-research",
3025
+ "type": "str"
3026
+ }
3027
+ ],
3028
+ "env": [
3029
+ {
3030
+ "name": "OPENAI_API_KEY",
3031
+ "value": "{api_key_perplexity}"
3032
+ },
3033
+ {
3034
+ "name": "OPENAI_API_BASE",
3035
+ "value": "{api_endpoint_perplexity}"
3036
+ }
3037
+ ]
3038
+ },
3039
+ "llama_index": {
3040
+ "provider": "openai",
3041
+ "mode": [
3042
+ "chat"
3043
+ ],
3044
+ "args": [
3045
+ {
3046
+ "name": "model",
3047
+ "value": "sonar-deep-research",
3048
+ "type": "str"
3049
+ }
3050
+ ],
3051
+ "env": [
3052
+ {
3053
+ "name": "OPENAI_API_KEY",
3054
+ "value": "{api_key_perplexity}"
3055
+ },
3056
+ {
3057
+ "name": "OPENAI_API_BASE",
3058
+ "value": "{api_endpoint_perplexity}"
3059
+ }
3060
+ ]
3061
+ },
3062
+ "ctx": 128000,
3063
+ "tokens": 16384,
3064
+ "default": false,
3065
+ "multimodal": []
3066
+ },
3067
+ "sonar-reasoning-pro": {
3068
+ "id": "sonar-reasoning-pro",
3069
+ "name": "sonar-reasoning-pro",
3070
+ "mode": [
3071
+ "research"
3072
+ ],
3073
+ "langchain": {
3074
+ "provider": "openai",
3075
+ "mode": [
3076
+ "chat"
3077
+ ],
3078
+ "args": [
3079
+ {
3080
+ "name": "model_name",
3081
+ "value": "sonar-reasoning-pro",
3082
+ "type": "str"
3083
+ }
3084
+ ],
3085
+ "env": [
3086
+ {
3087
+ "name": "OPENAI_API_KEY",
3088
+ "value": "{api_key_perplexity}"
3089
+ },
3090
+ {
3091
+ "name": "OPENAI_API_BASE",
3092
+ "value": "{api_endpoint_perplexity}"
3093
+ }
3094
+ ]
3095
+ },
3096
+ "llama_index": {
3097
+ "provider": "openai",
3098
+ "mode": [
3099
+ "chat"
3100
+ ],
3101
+ "args": [
3102
+ {
3103
+ "name": "model",
3104
+ "value": "sonar-reasoning-pro",
3105
+ "type": "str"
3106
+ }
3107
+ ],
3108
+ "env": [
3109
+ {
3110
+ "name": "OPENAI_API_KEY",
3111
+ "value": "{api_key_perplexity}"
3112
+ },
3113
+ {
3114
+ "name": "OPENAI_API_BASE",
3115
+ "value": "{api_endpoint_perplexity}"
3116
+ }
3117
+ ]
3118
+ },
3119
+ "ctx": 128000,
3120
+ "tokens": 8000,
3121
+ "default": false,
3122
+ "multimodal": []
3123
+ },
3124
+ "sonar-reasoning": {
3125
+ "id": "sonar-reasoning",
3126
+ "name": "sonar-reasoning",
3127
+ "mode": [
3128
+ "research"
3129
+ ],
3130
+ "langchain": {
3131
+ "provider": "openai",
3132
+ "mode": [
3133
+ "chat"
3134
+ ],
3135
+ "args": [
3136
+ {
3137
+ "name": "model_name",
3138
+ "value": "sonar-reasoning",
3139
+ "type": "str"
3140
+ }
3141
+ ],
3142
+ "env": [
3143
+ {
3144
+ "name": "OPENAI_API_KEY",
3145
+ "value": "{api_key_perplexity}"
3146
+ },
3147
+ {
3148
+ "name": "OPENAI_API_BASE",
3149
+ "value": "{api_endpoint_perplexity}"
3150
+ }
3151
+ ]
3152
+ },
3153
+ "llama_index": {
3154
+ "provider": "openai",
3155
+ "mode": [
3156
+ "chat"
3157
+ ],
3158
+ "args": [
3159
+ {
3160
+ "name": "model",
3161
+ "value": "sonar-reasoning",
3162
+ "type": "str"
3163
+ }
3164
+ ],
3165
+ "env": [
3166
+ {
3167
+ "name": "OPENAI_API_KEY",
3168
+ "value": "{api_key_perplexity}"
3169
+ },
3170
+ {
3171
+ "name": "OPENAI_API_BASE",
3172
+ "value": "{api_endpoint_perplexity}"
3173
+ }
3174
+ ]
3175
+ },
3176
+ "ctx": 128000,
3177
+ "tokens": 16384,
3178
+ "default": false,
3179
+ "multimodal": []
3180
+ },
3181
+ "sonar-pro": {
3182
+ "id": "sonar-pro",
3183
+ "name": "sonar-pro",
3184
+ "mode": [
3185
+ "research"
3186
+ ],
3187
+ "langchain": {
3188
+ "provider": "openai",
3189
+ "mode": [
3190
+ "chat"
3191
+ ],
3192
+ "args": [
3193
+ {
3194
+ "name": "model_name",
3195
+ "value": "sonar-pro",
3196
+ "type": "str"
3197
+ }
3198
+ ],
3199
+ "env": [
3200
+ {
3201
+ "name": "OPENAI_API_KEY",
3202
+ "value": "{api_key_perplexity}"
3203
+ },
3204
+ {
3205
+ "name": "OPENAI_API_BASE",
3206
+ "value": "{api_endpoint_perplexity}"
3207
+ }
3208
+ ]
3209
+ },
3210
+ "llama_index": {
3211
+ "provider": "openai",
3212
+ "mode": [
3213
+ "chat"
3214
+ ],
3215
+ "args": [
3216
+ {
3217
+ "name": "model",
3218
+ "value": "sonar-pro",
3219
+ "type": "str"
3220
+ }
3221
+ ],
3222
+ "env": [
3223
+ {
3224
+ "name": "OPENAI_API_KEY",
3225
+ "value": "{api_key_perplexity}"
3226
+ },
3227
+ {
3228
+ "name": "OPENAI_API_BASE",
3229
+ "value": "{api_endpoint_perplexity}"
3230
+ }
3231
+ ]
3232
+ },
3233
+ "ctx": 200000,
3234
+ "tokens": 8000,
3235
+ "default": false,
3236
+ "multimodal": []
3237
+ },
3238
+ "sonar": {
3239
+ "id": "sonar",
3240
+ "name": "sonar",
3241
+ "mode": [
3242
+ "research"
3243
+ ],
3244
+ "langchain": {
3245
+ "provider": "openai",
3246
+ "mode": [
3247
+ "chat"
3248
+ ],
3249
+ "args": [
3250
+ {
3251
+ "name": "model_name",
3252
+ "value": "sonar",
3253
+ "type": "str"
3254
+ }
3255
+ ],
3256
+ "env": [
3257
+ {
3258
+ "name": "OPENAI_API_KEY",
3259
+ "value": "{api_key_perplexity}"
3260
+ },
3261
+ {
3262
+ "name": "OPENAI_API_BASE",
3263
+ "value": "{api_endpoint_perplexity}"
3264
+ }
3265
+ ]
3266
+ },
3267
+ "llama_index": {
3268
+ "provider": "openai",
3269
+ "mode": [
3270
+ "chat"
3271
+ ],
3272
+ "args": [
3273
+ {
3274
+ "name": "model",
3275
+ "value": "sonar",
3276
+ "type": "str"
3277
+ }
3278
+ ],
3279
+ "env": [
3280
+ {
3281
+ "name": "OPENAI_API_KEY",
3282
+ "value": "{api_key_perplexity}"
3283
+ },
3284
+ {
3285
+ "name": "OPENAI_API_BASE",
3286
+ "value": "{api_endpoint_perplexity}"
3287
+ }
3288
+ ]
3289
+ },
3290
+ "ctx": 128000,
3291
+ "tokens": 16384,
3292
+ "default": false,
3293
+ "multimodal": []
3294
+ },
3295
+ "r1-1776": {
3296
+ "id": "r1-1776",
3297
+ "name": "r1-1776",
3298
+ "mode": [
3299
+ "research"
3300
+ ],
3301
+ "langchain": {
3302
+ "provider": "openai",
3303
+ "mode": [
3304
+ "chat"
3305
+ ],
3306
+ "args": [
3307
+ {
3308
+ "name": "model_name",
3309
+ "value": "r1-1776",
3310
+ "type": "str"
3311
+ }
3312
+ ],
3313
+ "env": [
3314
+ {
3315
+ "name": "OPENAI_API_KEY",
3316
+ "value": "{api_key_perplexity}"
3317
+ },
3318
+ {
3319
+ "name": "OPENAI_API_BASE",
3320
+ "value": "{api_endpoint_perplexity}"
3321
+ }
3322
+ ]
3323
+ },
3324
+ "llama_index": {
3325
+ "provider": "openai",
3326
+ "mode": [
3327
+ "chat"
3328
+ ],
3329
+ "args": [
3330
+ {
3331
+ "name": "model",
3332
+ "value": "r1-1776",
3333
+ "type": "str"
3334
+ }
3335
+ ],
3336
+ "env": [
3337
+ {
3338
+ "name": "OPENAI_API_KEY",
3339
+ "value": "{api_key_perplexity}"
3340
+ },
3341
+ {
3342
+ "name": "OPENAI_API_BASE",
3343
+ "value": "{api_endpoint_perplexity}"
3344
+ }
3345
+ ]
3346
+ },
3347
+ "ctx": 128000,
3348
+ "tokens": 16384,
3349
+ "default": false,
3350
+ "multimodal": []
2930
3351
  }
2931
3352
  }
2932
3353
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.7",
4
- "app.version": "2.5.7",
5
- "updated_at": "2025-02-26T00:00:00"
3
+ "version": "2.5.8",
4
+ "app.version": "2.5.8",
5
+ "updated_at": "2025-03-02T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "chat": {
@@ -17,6 +17,12 @@
17
17
  "label": "mode.audio",
18
18
  "default": false
19
19
  },
20
+ "research": {
21
+ "id": "research",
22
+ "name": "research",
23
+ "label": "mode.research",
24
+ "default": false
25
+ },
20
26
  "completion": {
21
27
  "id": "completion",
22
28
  "name": "completion",
@@ -0,0 +1,35 @@
1
+ {
2
+ "uuid": "900887dd-dfec-47e6-ab6f-2f217f2e9ada",
3
+ "name": "*",
4
+ "ai_name": "",
5
+ "user_name": "",
6
+ "prompt": "",
7
+ "chat": false,
8
+ "completion": false,
9
+ "img": false,
10
+ "vision": false,
11
+ "langchain": false,
12
+ "assistant": false,
13
+ "llama_index": false,
14
+ "agent": false,
15
+ "agent_llama": false,
16
+ "expert": false,
17
+ "audio": false,
18
+ "research": true,
19
+ "temperature": 1.0,
20
+ "filename": "current.research",
21
+ "model": null,
22
+ "tools": {
23
+ "function": []
24
+ },
25
+ "experts": [],
26
+ "idx": null,
27
+ "agent_provider": null,
28
+ "assistant_id": "",
29
+ "enabled": true,
30
+ "__meta__": {
31
+ "version": "2.4.34",
32
+ "app.version": "2.4.34",
33
+ "updated_at": "2024-11-26T22:06:18"
34
+ }
35
+ }
@@ -177,6 +177,25 @@
177
177
  "advanced": false,
178
178
  "tab": "Azure OpenAI"
179
179
  },
180
+ "api_key_perplexity": {
181
+ "section": "api_keys",
182
+ "type": "text",
183
+ "slider": false,
184
+ "label": "settings.api_key.perplexity",
185
+ "description": "settings.api_key.perplexity.desc",
186
+ "value": "",
187
+ "min": null,
188
+ "max": null,
189
+ "multiplier": null,
190
+ "step": null,
191
+ "extra": {
192
+ "bold": true
193
+ },
194
+ "secret": true,
195
+ "persist": true,
196
+ "advanced": false,
197
+ "tab": "Perplexity"
198
+ },
180
199
  "app.env": {
181
200
  "section": "general",
182
201
  "type": "dict",
@@ -816,6 +816,8 @@ model.tokens = Output tokens
816
816
  model.tokens.desc = Max model output tokens
817
817
  mode.vision = Vision
818
818
  mode.vision.tooltip = Image analysis with GPT-4 Vision
819
+ mode.research = Research (Perplexity)
820
+ mode.research.tooltip = Web research with Perplexity
819
821
  msg.agent.plan = Plan
820
822
  msg.agent.plan.current = Current plan
821
823
  msg.agent.plan.deps = Dependencies
@@ -885,6 +887,7 @@ preset.prompt.paste_template = Paste from template...
885
887
  preset.prompt.rename = Rename
886
888
  preset.prompt.save_custom = Save as My template
887
889
  preset.prompt.use = Paste...
890
+ preset.research = Research (Perplexity)
888
891
  preset.temperature = Temperature
889
892
  preset.tool.function = Functions
890
893
  preset.tool.function.tip.agent_llama = Tip: Functions from plugins are enabled automatically.
@@ -941,6 +944,8 @@ settings.api_key.google = Google API KEY
941
944
  settings.api_key.google.desc = Required for the Google API and Gemini models.
942
945
  settings.api_key.hugging_face = HuggingFace API KEY
943
946
  settings.api_key.hugging_face.desc = Required for the HuggingFace API.
947
+ settings.api_key.perplexity = Perplexity API KEY
948
+ settings.api_key.perplexity.desc = Required for the Perplexity API.
944
949
  settings.api_proxy = Proxy address
945
950
  settings.api_proxy.desc = Optional, proxy for OpenAI API, e.g. http://proxy.example.com or socks5://user:pass@host:port
946
951
  settings.app.env = Application environment (os.environ)
@@ -1123,6 +1128,7 @@ settings.section.api_keys.deepseek = DeepSeek
1123
1128
  settings.section.api_keys.google = Google
1124
1129
  settings.section.api_keys.huggingface = HuggingFace
1125
1130
  settings.section.api_keys.openai = OpenAI
1131
+ settings.section.api_keys.perplexity = Perplexity
1126
1132
  settings.section.audio = Audio
1127
1133
  settings.section.ctx = Context
1128
1134
  settings.section.developer = Developer
pygpt_net/item/preset.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: 2024.11.26 19:00:00 #
9
+ # Updated Date: 2025.03.02 19:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -31,6 +31,7 @@ class PresetItem:
31
31
  self.agent_llama = False
32
32
  self.expert = False
33
33
  self.audio = False
34
+ self.research = False
34
35
  self.temperature = 1.0
35
36
  self.filename = None
36
37
  self.model = None
@@ -65,6 +66,7 @@ class PresetItem:
65
66
  "agent_llama": self.agent_llama,
66
67
  "expert": self.expert,
67
68
  "audio": self.audio,
69
+ "research": self.research,
68
70
  "temperature": self.temperature,
69
71
  "filename": self.filename,
70
72
  "model": self.model,
@@ -109,6 +111,8 @@ class PresetItem:
109
111
  self.expert = data["expert"]
110
112
  if "audio" in data:
111
113
  self.audio = data["audio"]
114
+ if "research" in data:
115
+ self.research = data["research"]
112
116
  if "temperature" in data:
113
117
  self.temperature = data["temperature"]
114
118
  if "filename" in data:
@@ -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.02.01 11:00:00 #
9
+ # Updated Date: 2025.03.02 19:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.core.types import (
@@ -18,6 +18,7 @@ from pygpt_net.core.types import (
18
18
  MODE_LANGCHAIN,
19
19
  MODE_LLAMA_INDEX,
20
20
  MODE_VISION,
21
+ MODE_RESEARCH,
21
22
  )
22
23
  from pygpt_net.plugin.base.plugin import BasePlugin
23
24
  from pygpt_net.core.bridge.context import BridgeContext
@@ -46,6 +47,7 @@ class Plugin(BasePlugin):
46
47
  MODE_ASSISTANT,
47
48
  MODE_AGENT,
48
49
  MODE_AUDIO,
50
+ MODE_RESEARCH,
49
51
  ]
50
52
  self.allowed_cmds = [
51
53
  "image",
@@ -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: 2024.11.26 19:00:00 #
9
+ # Updated Date: 2025.03.02 19:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.core.types import (
@@ -17,6 +17,7 @@ from pygpt_net.core.types import (
17
17
  MODE_LLAMA_INDEX,
18
18
  MODE_VISION,
19
19
  MODE_CHAT,
20
+ MODE_RESEARCH,
20
21
  )
21
22
  from pygpt_net.plugin.base.plugin import BasePlugin
22
23
  from pygpt_net.item.ctx import CtxItem
@@ -61,6 +62,7 @@ class Plugin(BasePlugin):
61
62
  MODE_LLAMA_INDEX,
62
63
  MODE_LANGCHAIN,
63
64
  MODE_AUDIO,
65
+ MODE_RESEARCH,
64
66
  ]
65
67
  self.worker = None
66
68
  self.config = Config(self)
@@ -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.02.26 23:00:00 #
9
+ # Updated Date: 2025.03.02 19:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
@@ -1846,6 +1846,15 @@ class Patch:
1846
1846
  self.window.core.updater.patch_css('web-chatgpt_wide.css', True) # force update
1847
1847
  updated = True
1848
1848
 
1849
+ # < 2.5.8
1850
+ if old < parse_version("2.5.8"):
1851
+ print("Migrating config from < 2.5.8...")
1852
+ if 'api_key_perplexity' not in data:
1853
+ data["api_key_perplexity"] = ""
1854
+ if 'api_endpoint_perplexity' not in data:
1855
+ data["api_endpoint_perplexity"] = "https://api.perplexity.ai"
1856
+ updated = True
1857
+
1849
1858
  # update file
1850
1859
  migrated = False
1851
1860
  if updated: