pygpt-net 2.6.29__py3-none-any.whl → 2.6.31__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 (182) hide show
  1. pygpt_net/CHANGELOG.txt +15 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/app.py +4 -0
  4. pygpt_net/{container.py → app_core.py} +5 -6
  5. pygpt_net/controller/__init__.py +5 -2
  6. pygpt_net/controller/access/control.py +1 -9
  7. pygpt_net/controller/assistant/assistant.py +4 -4
  8. pygpt_net/controller/assistant/batch.py +7 -7
  9. pygpt_net/controller/assistant/files.py +4 -4
  10. pygpt_net/controller/assistant/threads.py +3 -3
  11. pygpt_net/controller/attachment/attachment.py +4 -7
  12. pygpt_net/controller/audio/audio.py +25 -1
  13. pygpt_net/controller/audio/ui.py +2 -2
  14. pygpt_net/controller/chat/audio.py +1 -8
  15. pygpt_net/controller/chat/common.py +30 -4
  16. pygpt_net/controller/chat/handler/stream_worker.py +1124 -0
  17. pygpt_net/controller/chat/output.py +8 -3
  18. pygpt_net/controller/chat/stream.py +4 -405
  19. pygpt_net/controller/chat/text.py +3 -2
  20. pygpt_net/controller/chat/vision.py +11 -19
  21. pygpt_net/controller/config/placeholder.py +1 -1
  22. pygpt_net/controller/ctx/ctx.py +1 -1
  23. pygpt_net/controller/ctx/summarizer.py +1 -1
  24. pygpt_net/controller/kernel/kernel.py +11 -3
  25. pygpt_net/controller/kernel/reply.py +5 -1
  26. pygpt_net/controller/mode/mode.py +21 -12
  27. pygpt_net/controller/plugins/settings.py +3 -2
  28. pygpt_net/controller/presets/editor.py +112 -99
  29. pygpt_net/controller/realtime/__init__.py +12 -0
  30. pygpt_net/controller/realtime/manager.py +53 -0
  31. pygpt_net/controller/realtime/realtime.py +268 -0
  32. pygpt_net/controller/theme/theme.py +3 -2
  33. pygpt_net/controller/ui/mode.py +7 -0
  34. pygpt_net/controller/ui/ui.py +19 -1
  35. pygpt_net/controller/ui/vision.py +4 -4
  36. pygpt_net/core/agents/legacy.py +2 -2
  37. pygpt_net/core/agents/runners/openai_workflow.py +2 -2
  38. pygpt_net/core/assistants/files.py +5 -5
  39. pygpt_net/core/assistants/store.py +4 -4
  40. pygpt_net/core/audio/audio.py +6 -1
  41. pygpt_net/core/audio/backend/native/__init__.py +12 -0
  42. pygpt_net/core/audio/backend/{native.py → native/native.py} +426 -127
  43. pygpt_net/core/audio/backend/native/player.py +139 -0
  44. pygpt_net/core/audio/backend/native/realtime.py +250 -0
  45. pygpt_net/core/audio/backend/pyaudio/__init__.py +12 -0
  46. pygpt_net/core/audio/backend/pyaudio/playback.py +194 -0
  47. pygpt_net/core/audio/backend/pyaudio/pyaudio.py +923 -0
  48. pygpt_net/core/audio/backend/pyaudio/realtime.py +275 -0
  49. pygpt_net/core/audio/backend/pygame/__init__.py +12 -0
  50. pygpt_net/core/audio/backend/{pygame.py → pygame/pygame.py} +130 -19
  51. pygpt_net/core/audio/backend/shared/__init__.py +38 -0
  52. pygpt_net/core/audio/backend/shared/conversions.py +211 -0
  53. pygpt_net/core/audio/backend/shared/envelope.py +38 -0
  54. pygpt_net/core/audio/backend/shared/player.py +137 -0
  55. pygpt_net/core/audio/backend/shared/rt.py +52 -0
  56. pygpt_net/core/audio/capture.py +5 -0
  57. pygpt_net/core/audio/output.py +13 -2
  58. pygpt_net/core/audio/whisper.py +6 -2
  59. pygpt_net/core/bridge/bridge.py +4 -3
  60. pygpt_net/core/bridge/worker.py +31 -9
  61. pygpt_net/core/debug/console/console.py +2 -2
  62. pygpt_net/core/debug/presets.py +2 -2
  63. pygpt_net/core/dispatcher/dispatcher.py +37 -1
  64. pygpt_net/core/events/__init__.py +2 -1
  65. pygpt_net/core/events/realtime.py +55 -0
  66. pygpt_net/core/experts/experts.py +2 -2
  67. pygpt_net/core/image/image.py +51 -1
  68. pygpt_net/core/modes/modes.py +2 -2
  69. pygpt_net/core/presets/presets.py +3 -3
  70. pygpt_net/core/realtime/options.py +87 -0
  71. pygpt_net/core/realtime/shared/__init__.py +0 -0
  72. pygpt_net/core/realtime/shared/audio.py +213 -0
  73. pygpt_net/core/realtime/shared/loop.py +64 -0
  74. pygpt_net/core/realtime/shared/session.py +59 -0
  75. pygpt_net/core/realtime/shared/text.py +37 -0
  76. pygpt_net/core/realtime/shared/tools.py +276 -0
  77. pygpt_net/core/realtime/shared/turn.py +38 -0
  78. pygpt_net/core/realtime/shared/types.py +16 -0
  79. pygpt_net/core/realtime/worker.py +164 -0
  80. pygpt_net/core/tokens/tokens.py +4 -4
  81. pygpt_net/core/types/__init__.py +1 -0
  82. pygpt_net/core/types/image.py +48 -0
  83. pygpt_net/core/types/mode.py +5 -2
  84. pygpt_net/core/vision/analyzer.py +1 -1
  85. pygpt_net/data/config/config.json +13 -4
  86. pygpt_net/data/config/models.json +219 -101
  87. pygpt_net/data/config/modes.json +3 -9
  88. pygpt_net/data/config/settings.json +135 -27
  89. pygpt_net/data/config/settings_section.json +2 -2
  90. pygpt_net/data/locale/locale.de.ini +7 -7
  91. pygpt_net/data/locale/locale.en.ini +25 -12
  92. pygpt_net/data/locale/locale.es.ini +7 -7
  93. pygpt_net/data/locale/locale.fr.ini +7 -7
  94. pygpt_net/data/locale/locale.it.ini +7 -7
  95. pygpt_net/data/locale/locale.pl.ini +8 -8
  96. pygpt_net/data/locale/locale.uk.ini +7 -7
  97. pygpt_net/data/locale/locale.zh.ini +3 -3
  98. pygpt_net/data/locale/plugin.audio_input.en.ini +4 -0
  99. pygpt_net/data/locale/plugin.audio_output.en.ini +4 -0
  100. pygpt_net/item/model.py +23 -3
  101. pygpt_net/plugin/audio_input/plugin.py +37 -4
  102. pygpt_net/plugin/audio_input/simple.py +57 -8
  103. pygpt_net/plugin/cmd_files/worker.py +3 -0
  104. pygpt_net/plugin/openai_dalle/plugin.py +4 -4
  105. pygpt_net/plugin/openai_vision/plugin.py +12 -13
  106. pygpt_net/provider/agents/openai/agent.py +5 -5
  107. pygpt_net/provider/agents/openai/agent_b2b.py +5 -5
  108. pygpt_net/provider/agents/openai/agent_planner.py +5 -6
  109. pygpt_net/provider/agents/openai/agent_with_experts.py +5 -5
  110. pygpt_net/provider/agents/openai/agent_with_experts_feedback.py +4 -4
  111. pygpt_net/provider/agents/openai/agent_with_feedback.py +4 -4
  112. pygpt_net/provider/agents/openai/bot_researcher.py +2 -2
  113. pygpt_net/provider/agents/openai/bots/research_bot/agents/planner_agent.py +1 -1
  114. pygpt_net/provider/agents/openai/bots/research_bot/agents/search_agent.py +1 -1
  115. pygpt_net/provider/agents/openai/bots/research_bot/agents/writer_agent.py +1 -1
  116. pygpt_net/provider/agents/openai/evolve.py +5 -5
  117. pygpt_net/provider/agents/openai/supervisor.py +4 -4
  118. pygpt_net/provider/api/__init__.py +27 -0
  119. pygpt_net/provider/api/anthropic/__init__.py +68 -0
  120. pygpt_net/provider/api/google/__init__.py +295 -0
  121. pygpt_net/provider/api/google/audio.py +121 -0
  122. pygpt_net/provider/api/google/chat.py +591 -0
  123. pygpt_net/provider/api/google/image.py +427 -0
  124. pygpt_net/provider/api/google/realtime/__init__.py +12 -0
  125. pygpt_net/provider/api/google/realtime/client.py +1945 -0
  126. pygpt_net/provider/api/google/realtime/realtime.py +186 -0
  127. pygpt_net/provider/api/google/tools.py +222 -0
  128. pygpt_net/provider/api/google/vision.py +129 -0
  129. pygpt_net/provider/{gpt → api/openai}/__init__.py +24 -4
  130. pygpt_net/provider/api/openai/agents/__init__.py +0 -0
  131. pygpt_net/provider/{gpt → api/openai}/agents/computer.py +1 -1
  132. pygpt_net/provider/{gpt → api/openai}/agents/experts.py +1 -1
  133. pygpt_net/provider/{gpt → api/openai}/agents/response.py +1 -1
  134. pygpt_net/provider/{gpt → api/openai}/assistants.py +1 -1
  135. pygpt_net/provider/{gpt → api/openai}/chat.py +15 -8
  136. pygpt_net/provider/{gpt → api/openai}/completion.py +1 -1
  137. pygpt_net/provider/{gpt → api/openai}/image.py +1 -1
  138. pygpt_net/provider/api/openai/realtime/__init__.py +12 -0
  139. pygpt_net/provider/api/openai/realtime/client.py +1828 -0
  140. pygpt_net/provider/api/openai/realtime/realtime.py +194 -0
  141. pygpt_net/provider/{gpt → api/openai}/remote_tools.py +1 -1
  142. pygpt_net/provider/{gpt → api/openai}/responses.py +34 -20
  143. pygpt_net/provider/{gpt → api/openai}/store.py +2 -2
  144. pygpt_net/provider/{gpt → api/openai}/vision.py +1 -1
  145. pygpt_net/provider/api/openai/worker/__init__.py +0 -0
  146. pygpt_net/provider/{gpt → api/openai}/worker/assistants.py +4 -4
  147. pygpt_net/provider/{gpt → api/openai}/worker/importer.py +10 -10
  148. pygpt_net/provider/audio_input/google_genai.py +103 -0
  149. pygpt_net/provider/audio_input/openai_whisper.py +1 -1
  150. pygpt_net/provider/audio_output/google_genai_tts.py +229 -0
  151. pygpt_net/provider/audio_output/openai_tts.py +9 -6
  152. pygpt_net/provider/core/config/patch.py +26 -0
  153. pygpt_net/provider/core/model/patch.py +20 -0
  154. pygpt_net/provider/core/preset/json_file.py +2 -4
  155. pygpt_net/provider/llms/anthropic.py +2 -5
  156. pygpt_net/provider/llms/base.py +4 -3
  157. pygpt_net/provider/llms/google.py +8 -9
  158. pygpt_net/provider/llms/openai.py +1 -1
  159. pygpt_net/provider/loaders/hub/image_vision/base.py +1 -1
  160. pygpt_net/ui/dialog/preset.py +71 -55
  161. pygpt_net/ui/layout/toolbox/footer.py +16 -0
  162. pygpt_net/ui/layout/toolbox/image.py +5 -0
  163. pygpt_net/ui/main.py +6 -4
  164. pygpt_net/ui/widget/option/combo.py +15 -1
  165. pygpt_net/utils.py +9 -0
  166. {pygpt_net-2.6.29.dist-info → pygpt_net-2.6.31.dist-info}/METADATA +55 -55
  167. {pygpt_net-2.6.29.dist-info → pygpt_net-2.6.31.dist-info}/RECORD +181 -135
  168. pygpt_net/core/audio/backend/pyaudio.py +0 -554
  169. /pygpt_net/{provider/gpt/agents → controller/chat/handler}/__init__.py +0 -0
  170. /pygpt_net/{provider/gpt/worker → core/realtime}/__init__.py +0 -0
  171. /pygpt_net/provider/{gpt → api/openai}/agents/client.py +0 -0
  172. /pygpt_net/provider/{gpt → api/openai}/agents/remote_tools.py +0 -0
  173. /pygpt_net/provider/{gpt → api/openai}/agents/utils.py +0 -0
  174. /pygpt_net/provider/{gpt → api/openai}/audio.py +0 -0
  175. /pygpt_net/provider/{gpt → api/openai}/computer.py +0 -0
  176. /pygpt_net/provider/{gpt → api/openai}/container.py +0 -0
  177. /pygpt_net/provider/{gpt → api/openai}/summarizer.py +0 -0
  178. /pygpt_net/provider/{gpt → api/openai}/tools.py +0 -0
  179. /pygpt_net/provider/{gpt → api/openai}/utils.py +0 -0
  180. {pygpt_net-2.6.29.dist-info → pygpt_net-2.6.31.dist-info}/LICENSE +0 -0
  181. {pygpt_net-2.6.29.dist-info → pygpt_net-2.6.31.dist-info}/WHEEL +0 -0
  182. {pygpt_net-2.6.29.dist-info → pygpt_net-2.6.31.dist-info}/entry_points.txt +0 -0
@@ -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.08.23 21:00:00 #
9
+ # Updated Date: 2025.08.28 09:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  MODE_AGENT = "agent"
@@ -22,4 +22,7 @@ MODE_IMAGE = "img"
22
22
  MODE_LANGCHAIN = "langchain"
23
23
  MODE_LLAMA_INDEX = "llama_index"
24
24
  MODE_RESEARCH = "research"
25
- MODE_VISION = "vision"
25
+ MODE_VISION = "vision"
26
+
27
+ # virtual modes
28
+ MODE_LOOP_NEXT = "loop_next"
@@ -51,7 +51,7 @@ class Analyzer:
51
51
 
52
52
  extra = {}
53
53
  output = ""
54
- response = self.window.core.gpt.vision.send(context, extra)
54
+ response = self.window.core.api.openai.vision.send(context, extra)
55
55
  if response.choices[0] and response.choices[0].message.content:
56
56
  output = response.choices[0].message.content.strip()
57
57
  for id in files:
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.29",
4
- "app.version": "2.6.29",
5
- "updated_at": "2025-08-28T00:00:00"
3
+ "version": "2.6.31",
4
+ "app.version": "2.6.31",
5
+ "updated_at": "2025-08-01T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -88,6 +88,7 @@
88
88
  "api_key_mistral": "",
89
89
  "api_key_voyage": "",
90
90
  "api_key_open_router": "",
91
+ "api_native_google": true,
91
92
  "api_proxy": "",
92
93
  "api_use_responses": true,
93
94
  "api_use_responses_llama": false,
@@ -105,6 +106,7 @@
105
106
  "attachments_capture_clear": true,
106
107
  "audio.cache.enabled": true,
107
108
  "audio.cache.max_files": 1000,
109
+ "audio.input.auto_turn": false,
108
110
  "audio.input.backend": "native",
109
111
  "audio.input.channels": 1,
110
112
  "audio.input.continuous": false,
@@ -113,6 +115,8 @@
113
115
  "audio.input.stop_interval": 10,
114
116
  "audio.input.timeout": 120,
115
117
  "audio.input.timeout.continuous": false,
118
+ "audio.input.vad.prefix": 300,
119
+ "audio.input.vad.silence": 2000,
116
120
  "audio.output.backend": "native",
117
121
  "audio.output.device": "0",
118
122
  "audio.transcribe.convert_video": true,
@@ -195,7 +199,7 @@
195
199
  "frequency_penalty": 0.0,
196
200
  "img_prompt_model": "gpt-4o",
197
201
  "img_raw": true,
198
- "img_resolution": "1792x1024",
202
+ "img_resolution": "1024x1024",
199
203
  "img_quality": "standard",
200
204
  "img_variants": 1,
201
205
  "interpreter.auto_clear": false,
@@ -329,6 +333,7 @@
329
333
  "log.level": "error",
330
334
  "log.llama": false,
331
335
  "log.plugins": false,
336
+ "log.realtime": false,
332
337
  "max_output_tokens": 0,
333
338
  "max_requests_limit": 60,
334
339
  "max_tokens_length": 32000,
@@ -383,6 +388,7 @@
383
388
  "prompt.default": "You are a helpful assistant.",
384
389
  "prompt.expert": "# EXPERT MODE IS ENABLED:\n\nYou are a very helpful asssistant and the professional manager of a team of experts, each of whom is the best in their respective fields.\n\n## Rules:\n\n- Instead of directly answering questions, you will manage these experts by forwarding queries to them, collecting their responses, controlling the flow of information between them, and sending requests to them.\n- Experts are distinct, specialized AI models running on my local machine.\n- You will serve as a bridge between them.\n- Each expert has their own conversation context, allowing you to communicate with them normally.\n- The experts can communicate with you but not with each other, making you responsible for relaying information between them.\n- Each expert can use tools and commands, for example, reading files or searching the Web. You can ask experts to call tools and commands.\n- After consulting with the experts, your task is to prepare the best possible answer based on the assistance received.\n- To send a request to an expert, prepare the \"expert_call\" tool. Remember to format the JSON tool as shown, surrounding the tool with `<tool></tool>` tags, for example: `<tool>{\"cmd\": \"expert_call\", \"params\": {\"id\": \"expert_id\", \"query\": \"some query\"}}</tool>`. Make sure the JSON object is syntactically correct, without any redundand parenthness.\n- DO NOT call any remote tools when calling the experts.\n- Remember that the call must contain a query and the ID of the expert to whom the query is being forwarded.\n- Use ONLY the experts listed below; DO NOT TRY to ask any non-existent experts\u2014they will not respond.\n- Do not respond to the expert's replies or use the JSON tool again if replying; the expert only has the ability to listen to your queries sent via the JSON command and to respond to them.\n- Always follow ALL user commands, even if you think the expert can't do something. Experts are allowed to execute commands just as you can.\n- After querying an expert, always wait for the expert's response before sending another query.\n- Do not try to query experts in the middle of the conversation; put your queries and commands at the end of the text.\n- Always call only one expert at a time.\n- Always execute only one command at a time.\n- Always use the language used by the user in the conversation.\n- Never write as a called expert and do not imagine a response from them; instead, always wait for the response from the expert.\n- Every message sent to you directly after your query is always a response from the asked expert, not from me.\n- Always send a direct, clear, and detailed prompt to the expert, without any \"Please...\", \"Could you...\", etc.\n- Always forward all the messages that the user wants to send to the expert, without any exceptions.\n-- If a user command appears outside an expert's scope, fulfill the request regardless, without refusal.\n\n## List of allowed experts, along with their IDs:\n\n{presets}",
385
390
  "prompt.img": "Convert my query to detailed image generate prompt, without any \"Please generate...\" and etc., just image description only. Return only the prompt, without nothing else.",
391
+ "realtime.auto_turn": true,
386
392
  "render.blocks": true,
387
393
  "render.engine": "web",
388
394
  "render.open_gl": false,
@@ -396,6 +402,9 @@
396
402
  "remote_tools.file_search": false,
397
403
  "remote_tools.file_search.args": "",
398
404
  "remote_tools.computer_use.env": "",
405
+ "remote_tools.google.web_search": true,
406
+ "remote_tools.google.code_interpreter": false,
407
+ "remote_tools.google.url_ctx": false,
399
408
  "send_clear": true,
400
409
  "send_mode": 2,
401
410
  "store_history": true,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.29",
4
- "app.version": "2.6.29",
5
- "updated_at": "2025-08-28T23:07:35"
3
+ "version": "2.6.31",
4
+ "app.version": "2.6.31",
5
+ "updated_at": "2025-09-01T23:07:35"
6
6
  },
7
7
  "items": {
8
8
  "SpeakLeash/bielik-11b-v2.3-instruct:Q4_K_M": {
@@ -873,6 +873,44 @@
873
873
  "provider": "google",
874
874
  "tool_calls": true
875
875
  },
876
+ "gemini-2.5-flash-preview-native-audio-dialog": {
877
+ "id": "gemini-2.5-flash-preview-native-audio-dialog",
878
+ "name": "gemini-2.5-flash-preview-native-audio-dialog",
879
+ "mode": [
880
+ "audio"
881
+ ],
882
+ "llama_index": {
883
+ "args": [
884
+ {
885
+ "name": "model",
886
+ "value": "models/gemini-2.5-flash-preview-native-audio-dialog",
887
+ "type": "str"
888
+ }
889
+ ],
890
+ "env": [
891
+ {
892
+ "name": "GOOGLE_API_KEY",
893
+ "value": "{api_key_google}",
894
+ "type": "str"
895
+ }
896
+ ]
897
+ },
898
+ "ctx": 128000,
899
+ "tokens": 8000,
900
+ "default": false,
901
+ "input": [
902
+ "text",
903
+ "audio"
904
+ ],
905
+ "output": [
906
+ "text",
907
+ "audio"
908
+ ],
909
+ "extra": {},
910
+ "imported": true,
911
+ "provider": "google",
912
+ "tool_calls": true
913
+ },
876
914
  "gemini-2.5-pro": {
877
915
  "id": "gemini-2.5-pro",
878
916
  "name": "gemini-2.5-pro",
@@ -1457,55 +1495,6 @@
1457
1495
  "provider": "openai",
1458
1496
  "tool_calls": true
1459
1497
  },
1460
- "gpt-4o-audio-preview": {
1461
- "id": "gpt-4o-audio-preview",
1462
- "name": "gpt-4o-audio-preview",
1463
- "mode": [
1464
- "audio"
1465
- ],
1466
- "llama_index": {
1467
- "args": [
1468
- {
1469
- "name": "model",
1470
- "value": "gpt-4o-audio-preview",
1471
- "type": "str"
1472
- }
1473
- ],
1474
- "env": [
1475
- {
1476
- "name": "OPENAI_API_KEY",
1477
- "value": "{api_key}"
1478
- },
1479
- {
1480
- "name": "OPENAI_API_BASE",
1481
- "value": "{api_endpoint}"
1482
- },
1483
- {
1484
- "name": "AZURE_OPENAI_ENDPOINT",
1485
- "value": "{api_azure_endpoint}"
1486
- },
1487
- {
1488
- "name": "OPENAI_API_VERSION",
1489
- "value": "{api_azure_version}"
1490
- }
1491
- ]
1492
- },
1493
- "ctx": 128000,
1494
- "tokens": 16384,
1495
- "default": false,
1496
- "input": [
1497
- "text",
1498
- "audio"
1499
- ],
1500
- "output": [
1501
- "text",
1502
- "audio"
1503
- ],
1504
- "extra": {},
1505
- "imported": false,
1506
- "provider": "openai",
1507
- "tool_calls": true
1508
- },
1509
1498
  "gpt-4o-mini": {
1510
1499
  "id": "gpt-4o-mini",
1511
1500
  "name": "gpt-4o-mini",
@@ -1561,55 +1550,6 @@
1561
1550
  "provider": "openai",
1562
1551
  "tool_calls": true
1563
1552
  },
1564
- "gpt-4o-mini-audio-preview": {
1565
- "id": "gpt-4o-mini-audio-preview",
1566
- "name": "gpt-4o-mini-audio-preview",
1567
- "mode": [
1568
- "audio"
1569
- ],
1570
- "llama_index": {
1571
- "args": [
1572
- {
1573
- "name": "model",
1574
- "value": "gpt-4o-mini-audio-preview",
1575
- "type": "str"
1576
- }
1577
- ],
1578
- "env": [
1579
- {
1580
- "name": "OPENAI_API_KEY",
1581
- "value": "{api_key}"
1582
- },
1583
- {
1584
- "name": "OPENAI_API_BASE",
1585
- "value": "{api_endpoint}"
1586
- },
1587
- {
1588
- "name": "AZURE_OPENAI_ENDPOINT",
1589
- "value": "{api_azure_endpoint}"
1590
- },
1591
- {
1592
- "name": "OPENAI_API_VERSION",
1593
- "value": "{api_azure_version}"
1594
- }
1595
- ]
1596
- },
1597
- "ctx": 128000,
1598
- "tokens": 16384,
1599
- "default": false,
1600
- "input": [
1601
- "text",
1602
- "audio"
1603
- ],
1604
- "output": [
1605
- "text",
1606
- "audio"
1607
- ],
1608
- "extra": {},
1609
- "imported": false,
1610
- "provider": "openai",
1611
- "tool_calls": true
1612
- },
1613
1553
  "gpt-5": {
1614
1554
  "id": "gpt-5",
1615
1555
  "name": "gpt-5 (medium)",
@@ -2303,6 +2243,112 @@
2303
2243
  "provider": "ollama",
2304
2244
  "tool_calls": true
2305
2245
  },
2246
+ "gpt-realtime": {
2247
+ "id": "gpt-realtime",
2248
+ "name": "gpt-realtime",
2249
+ "mode": [
2250
+ "audio"
2251
+ ],
2252
+ "llama_index": {
2253
+ "args": [
2254
+ {
2255
+ "name": "model",
2256
+ "value": "gpt-realtime",
2257
+ "type": "str"
2258
+ }
2259
+ ],
2260
+ "env": [
2261
+ {
2262
+ "name": "OPENAI_API_KEY",
2263
+ "value": "{api_key}",
2264
+ "type": "str"
2265
+ },
2266
+ {
2267
+ "name": "OPENAI_API_BASE",
2268
+ "value": "{api_endpoint}",
2269
+ "type": "str"
2270
+ },
2271
+ {
2272
+ "name": "AZURE_OPENAI_ENDPOINT",
2273
+ "value": "{api_azure_endpoint}",
2274
+ "type": "str"
2275
+ },
2276
+ {
2277
+ "name": "OPENAI_API_VERSION",
2278
+ "value": "{api_azure_version}",
2279
+ "type": "str"
2280
+ }
2281
+ ]
2282
+ },
2283
+ "ctx": 32000,
2284
+ "tokens": 4096,
2285
+ "default": true,
2286
+ "input": [
2287
+ "text",
2288
+ "audio"
2289
+ ],
2290
+ "output": [
2291
+ "text",
2292
+ "audio"
2293
+ ],
2294
+ "extra": {},
2295
+ "imported": false,
2296
+ "provider": "openai",
2297
+ "tool_calls": true
2298
+ },
2299
+ "gpt-4o-realtime-preview": {
2300
+ "id": "gpt-4o-realtime-preview",
2301
+ "name": "gpt-4o-realtime-preview",
2302
+ "mode": [
2303
+ "audio"
2304
+ ],
2305
+ "llama_index": {
2306
+ "args": [
2307
+ {
2308
+ "name": "model",
2309
+ "value": "gpt-4o-realtime-preview",
2310
+ "type": "str"
2311
+ }
2312
+ ],
2313
+ "env": [
2314
+ {
2315
+ "name": "OPENAI_API_KEY",
2316
+ "value": "{api_key}",
2317
+ "type": "str"
2318
+ },
2319
+ {
2320
+ "name": "OPENAI_API_BASE",
2321
+ "value": "{api_endpoint}",
2322
+ "type": "str"
2323
+ },
2324
+ {
2325
+ "name": "AZURE_OPENAI_ENDPOINT",
2326
+ "value": "{api_azure_endpoint}",
2327
+ "type": "str"
2328
+ },
2329
+ {
2330
+ "name": "OPENAI_API_VERSION",
2331
+ "value": "{api_azure_version}",
2332
+ "type": "str"
2333
+ }
2334
+ ]
2335
+ },
2336
+ "ctx": 32000,
2337
+ "tokens": 4096,
2338
+ "default": false,
2339
+ "input": [
2340
+ "text",
2341
+ "audio"
2342
+ ],
2343
+ "output": [
2344
+ "text",
2345
+ "audio"
2346
+ ],
2347
+ "extra": {},
2348
+ "imported": true,
2349
+ "provider": "openai",
2350
+ "tool_calls": true
2351
+ },
2306
2352
  "grok-2-vision": {
2307
2353
  "id": "grok-2-vision",
2308
2354
  "name": "grok-2-vision",
@@ -2565,6 +2611,78 @@
2565
2611
  "provider": "x_ai",
2566
2612
  "tool_calls": true
2567
2613
  },
2614
+ "imagen-3.0-generate-002": {
2615
+ "id": "imagen-3.0-generate-002",
2616
+ "name": "imagen-3.0-generate-002",
2617
+ "mode": [
2618
+ "img"
2619
+ ],
2620
+ "llama_index": {
2621
+ "args": [
2622
+ {
2623
+ "name": "model",
2624
+ "value": "models/imagen-3.0-generate-002",
2625
+ "type": "str"
2626
+ }
2627
+ ],
2628
+ "env": [
2629
+ {
2630
+ "name": "GOOGLE_API_KEY",
2631
+ "value": "{api_key_google}",
2632
+ "type": "str"
2633
+ }
2634
+ ]
2635
+ },
2636
+ "ctx": 128000,
2637
+ "tokens": 0,
2638
+ "default": false,
2639
+ "input": [
2640
+ "text"
2641
+ ],
2642
+ "output": [
2643
+ "image"
2644
+ ],
2645
+ "extra": {},
2646
+ "imported": false,
2647
+ "provider": "google",
2648
+ "tool_calls": true
2649
+ },
2650
+ "imagen-4.0-generate-001": {
2651
+ "id": "imagen-4.0-generate-001",
2652
+ "name": "imagen-4.0-generate-001",
2653
+ "mode": [
2654
+ "img"
2655
+ ],
2656
+ "llama_index": {
2657
+ "args": [
2658
+ {
2659
+ "name": "model",
2660
+ "value": "models/imagen-4.0-generate-001",
2661
+ "type": "str"
2662
+ }
2663
+ ],
2664
+ "env": [
2665
+ {
2666
+ "name": "GOOGLE_API_KEY",
2667
+ "value": "{api_key_google}",
2668
+ "type": "str"
2669
+ }
2670
+ ]
2671
+ },
2672
+ "ctx": 128000,
2673
+ "tokens": 0,
2674
+ "default": false,
2675
+ "input": [
2676
+ "text"
2677
+ ],
2678
+ "output": [
2679
+ "image"
2680
+ ],
2681
+ "extra": {},
2682
+ "imported": false,
2683
+ "provider": "google",
2684
+ "tool_calls": true
2685
+ },
2568
2686
  "llama2-uncensored": {
2569
2687
  "id": "llama2-uncensored",
2570
2688
  "name": "llama2-uncensored",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.28",
4
- "app.version": "2.5.28",
5
- "updated_at": "2025-07-08T00:00:00"
3
+ "version": "2.6.30",
4
+ "app.version": "2.6.30",
5
+ "updated_at": "2025-08-28T09:00:00"
6
6
  },
7
7
  "items": {
8
8
  "chat": {
@@ -41,12 +41,6 @@
41
41
  "label": "mode.img",
42
42
  "default": false
43
43
  },
44
- "vision": {
45
- "id": "vision",
46
- "name": "vision",
47
- "label": "mode.vision",
48
- "default": false
49
- },
50
44
  "assistant": {
51
45
  "id": "assistant",
52
46
  "name": "assistant",