pygpt-net 2.4.41__py3-none-any.whl → 2.4.44__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 (183) hide show
  1. CHANGELOG.md +19 -0
  2. README.md +151 -71
  3. pygpt_net/CHANGELOG.txt +19 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/app.py +3 -1
  6. pygpt_net/controller/attachment.py +31 -3
  7. pygpt_net/controller/audio/__init__.py +2 -2
  8. pygpt_net/controller/camera.py +1 -10
  9. pygpt_net/controller/chat/attachment.py +37 -36
  10. pygpt_net/controller/chat/audio.py +2 -2
  11. pygpt_net/controller/config/placeholder.py +20 -4
  12. pygpt_net/controller/idx/common.py +7 -3
  13. pygpt_net/controller/ui/mode.py +16 -21
  14. pygpt_net/core/attachments/__init__.py +7 -2
  15. pygpt_net/core/attachments/context.py +52 -34
  16. pygpt_net/core/audio/__init__.py +4 -1
  17. pygpt_net/core/audio/whisper.py +37 -0
  18. pygpt_net/core/bridge/worker.py +2 -2
  19. pygpt_net/core/db/__init__.py +2 -1
  20. pygpt_net/core/debug/attachments.py +1 -0
  21. pygpt_net/core/debug/events.py +22 -10
  22. pygpt_net/core/debug/tabs.py +6 -3
  23. pygpt_net/core/history.py +3 -2
  24. pygpt_net/core/idx/__init__.py +23 -6
  25. pygpt_net/core/idx/chat.py +15 -5
  26. pygpt_net/core/idx/indexing.py +47 -14
  27. pygpt_net/core/idx/ui/__init__.py +22 -0
  28. pygpt_net/core/idx/ui/loaders.py +217 -0
  29. pygpt_net/core/installer.py +2 -4
  30. pygpt_net/core/models.py +62 -17
  31. pygpt_net/core/modes.py +11 -13
  32. pygpt_net/core/notepad.py +4 -4
  33. pygpt_net/core/plugins.py +27 -16
  34. pygpt_net/core/presets.py +20 -9
  35. pygpt_net/core/profile.py +11 -3
  36. pygpt_net/core/render/web/parser.py +3 -1
  37. pygpt_net/core/settings.py +5 -5
  38. pygpt_net/core/tabs/tab.py +10 -2
  39. pygpt_net/core/tokens.py +8 -6
  40. pygpt_net/core/web/__init__.py +105 -0
  41. pygpt_net/core/{web.py → web/helpers.py} +93 -67
  42. pygpt_net/data/config/config.json +4 -4
  43. pygpt_net/data/config/models.json +3 -3
  44. pygpt_net/data/config/modes.json +3 -3
  45. pygpt_net/data/config/settings.json +5 -5
  46. pygpt_net/data/locale/locale.de.ini +3 -3
  47. pygpt_net/data/locale/locale.en.ini +12 -9
  48. pygpt_net/data/locale/locale.es.ini +3 -3
  49. pygpt_net/data/locale/locale.fr.ini +3 -3
  50. pygpt_net/data/locale/locale.it.ini +3 -3
  51. pygpt_net/data/locale/locale.pl.ini +3 -3
  52. pygpt_net/data/locale/locale.uk.ini +3 -3
  53. pygpt_net/data/locale/locale.zh.ini +3 -3
  54. pygpt_net/data/locale/plugin.cmd_web.en.ini +2 -0
  55. pygpt_net/data/locale/plugin.mailer.en.ini +21 -0
  56. pygpt_net/item/attachment.py +5 -1
  57. pygpt_net/item/ctx.py +111 -3
  58. pygpt_net/migrations/Version20241215110000.py +25 -0
  59. pygpt_net/migrations/__init__.py +3 -1
  60. pygpt_net/plugin/agent/__init__.py +7 -2
  61. pygpt_net/plugin/audio_output/__init__.py +6 -1
  62. pygpt_net/plugin/base/plugin.py +58 -26
  63. pygpt_net/plugin/base/worker.py +20 -17
  64. pygpt_net/plugin/cmd_files/__init__.py +3 -2
  65. pygpt_net/plugin/cmd_history/config.py +2 -2
  66. pygpt_net/plugin/cmd_web/__init__.py +3 -4
  67. pygpt_net/plugin/cmd_web/config.py +71 -3
  68. pygpt_net/plugin/cmd_web/websearch.py +20 -12
  69. pygpt_net/plugin/cmd_web/worker.py +67 -4
  70. pygpt_net/plugin/idx_llama_index/config.py +3 -3
  71. pygpt_net/plugin/mailer/__init__.py +123 -0
  72. pygpt_net/plugin/mailer/config.py +149 -0
  73. pygpt_net/plugin/mailer/runner.py +285 -0
  74. pygpt_net/plugin/mailer/worker.py +123 -0
  75. pygpt_net/provider/agents/base.py +5 -2
  76. pygpt_net/provider/agents/openai.py +4 -2
  77. pygpt_net/provider/agents/openai_assistant.py +4 -2
  78. pygpt_net/provider/agents/planner.py +4 -2
  79. pygpt_net/provider/agents/react.py +4 -2
  80. pygpt_net/provider/audio_output/openai_tts.py +5 -11
  81. pygpt_net/provider/core/assistant/base.py +5 -3
  82. pygpt_net/provider/core/assistant/json_file.py +8 -5
  83. pygpt_net/provider/core/assistant_file/base.py +4 -3
  84. pygpt_net/provider/core/assistant_file/db_sqlite/__init__.py +4 -3
  85. pygpt_net/provider/core/assistant_file/db_sqlite/storage.py +3 -2
  86. pygpt_net/provider/core/assistant_store/base.py +6 -4
  87. pygpt_net/provider/core/assistant_store/db_sqlite/__init__.py +5 -4
  88. pygpt_net/provider/core/assistant_store/db_sqlite/storage.py +5 -3
  89. pygpt_net/provider/core/attachment/base.py +5 -3
  90. pygpt_net/provider/core/attachment/json_file.py +7 -3
  91. pygpt_net/provider/core/calendar/base.py +5 -3
  92. pygpt_net/provider/core/calendar/db_sqlite/__init__.py +6 -5
  93. pygpt_net/provider/core/calendar/db_sqlite/storage.py +5 -4
  94. pygpt_net/provider/core/config/base.py +8 -6
  95. pygpt_net/provider/core/config/json_file.py +9 -7
  96. pygpt_net/provider/core/config/patch.py +6 -0
  97. pygpt_net/provider/core/ctx/base.py +27 -25
  98. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +51 -35
  99. pygpt_net/provider/core/ctx/db_sqlite/storage.py +92 -38
  100. pygpt_net/provider/core/ctx/db_sqlite/utils.py +37 -11
  101. pygpt_net/provider/core/index/base.py +129 -23
  102. pygpt_net/provider/core/index/db_sqlite/__init__.py +130 -23
  103. pygpt_net/provider/core/index/db_sqlite/storage.py +130 -23
  104. pygpt_net/provider/core/index/db_sqlite/utils.py +4 -2
  105. pygpt_net/provider/core/mode/base.py +5 -3
  106. pygpt_net/provider/core/mode/json_file.py +7 -6
  107. pygpt_net/provider/core/model/base.py +6 -4
  108. pygpt_net/provider/core/model/json_file.py +9 -7
  109. pygpt_net/provider/core/notepad/base.py +5 -3
  110. pygpt_net/provider/core/notepad/db_sqlite/__init__.py +5 -4
  111. pygpt_net/provider/core/notepad/db_sqlite/storage.py +4 -3
  112. pygpt_net/provider/core/plugin_preset/base.py +4 -2
  113. pygpt_net/provider/core/plugin_preset/json_file.py +5 -3
  114. pygpt_net/provider/core/preset/base.py +6 -4
  115. pygpt_net/provider/core/preset/json_file.py +9 -9
  116. pygpt_net/provider/core/prompt/base.py +6 -3
  117. pygpt_net/provider/core/prompt/json_file.py +11 -6
  118. pygpt_net/provider/gpt/assistants.py +15 -6
  119. pygpt_net/provider/gpt/audio.py +5 -5
  120. pygpt_net/provider/gpt/chat.py +7 -5
  121. pygpt_net/provider/gpt/completion.py +8 -4
  122. pygpt_net/provider/gpt/image.py +3 -3
  123. pygpt_net/provider/gpt/store.py +46 -12
  124. pygpt_net/provider/gpt/vision.py +16 -11
  125. pygpt_net/provider/llms/anthropic.py +7 -2
  126. pygpt_net/provider/llms/azure_openai.py +26 -5
  127. pygpt_net/provider/llms/base.py +47 -9
  128. pygpt_net/provider/llms/google.py +7 -2
  129. pygpt_net/provider/llms/hugging_face.py +13 -3
  130. pygpt_net/provider/llms/hugging_face_api.py +18 -4
  131. pygpt_net/provider/llms/local.py +7 -2
  132. pygpt_net/provider/llms/ollama.py +30 -6
  133. pygpt_net/provider/llms/openai.py +32 -6
  134. pygpt_net/provider/loaders/base.py +14 -0
  135. pygpt_net/provider/loaders/hub/yt/base.py +5 -0
  136. pygpt_net/provider/loaders/web_database.py +13 -5
  137. pygpt_net/provider/loaders/web_github_issues.py +5 -1
  138. pygpt_net/provider/loaders/web_google_calendar.py +9 -1
  139. pygpt_net/provider/loaders/web_google_docs.py +6 -1
  140. pygpt_net/provider/loaders/web_google_drive.py +10 -1
  141. pygpt_net/provider/loaders/web_google_gmail.py +2 -1
  142. pygpt_net/provider/loaders/web_google_keep.py +5 -1
  143. pygpt_net/provider/loaders/web_google_sheets.py +5 -1
  144. pygpt_net/provider/loaders/web_microsoft_onedrive.py +15 -1
  145. pygpt_net/provider/loaders/web_page.py +4 -2
  146. pygpt_net/provider/loaders/web_rss.py +2 -1
  147. pygpt_net/provider/loaders/web_sitemap.py +2 -1
  148. pygpt_net/provider/loaders/web_twitter.py +4 -2
  149. pygpt_net/provider/loaders/web_yt.py +17 -2
  150. pygpt_net/provider/vector_stores/__init__.py +45 -14
  151. pygpt_net/provider/vector_stores/base.py +35 -8
  152. pygpt_net/provider/vector_stores/chroma.py +13 -3
  153. pygpt_net/provider/vector_stores/ctx_attachment.py +32 -13
  154. pygpt_net/provider/vector_stores/elasticsearch.py +12 -3
  155. pygpt_net/provider/vector_stores/pinecode.py +12 -3
  156. pygpt_net/provider/vector_stores/redis.py +12 -3
  157. pygpt_net/provider/vector_stores/simple.py +12 -3
  158. pygpt_net/provider/vector_stores/temp.py +16 -4
  159. pygpt_net/provider/web/base.py +10 -3
  160. pygpt_net/provider/web/google_custom_search.py +9 -3
  161. pygpt_net/provider/web/microsoft_bing.py +9 -3
  162. pygpt_net/tools/__init__.py +13 -5
  163. pygpt_net/tools/audio_transcriber/__init__.py +4 -3
  164. pygpt_net/tools/base.py +15 -8
  165. pygpt_net/tools/code_interpreter/__init__.py +4 -3
  166. pygpt_net/tools/html_canvas/__init__.py +4 -3
  167. pygpt_net/tools/image_viewer/__init__.py +10 -4
  168. pygpt_net/tools/indexer/__init__.py +15 -46
  169. pygpt_net/tools/indexer/ui/web.py +20 -78
  170. pygpt_net/tools/media_player/__init__.py +4 -3
  171. pygpt_net/tools/text_editor/__init__.py +36 -10
  172. pygpt_net/ui/layout/chat/output.py +2 -2
  173. pygpt_net/ui/layout/ctx/ctx_list.py +86 -18
  174. pygpt_net/ui/menu/audio.py +12 -1
  175. pygpt_net/ui/widget/dialog/url.py +151 -14
  176. pygpt_net/ui/widget/element/group.py +15 -2
  177. pygpt_net/ui/widget/lists/context.py +23 -9
  178. pygpt_net/utils.py +1 -1
  179. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/METADATA +152 -72
  180. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/RECORD +183 -173
  181. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/LICENSE +0 -0
  182. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/WHEEL +0 -0
  183. {pygpt_net-2.4.41.dist-info → pygpt_net-2.4.44.dist-info}/entry_points.txt +0 -0
@@ -6,9 +6,11 @@
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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, List, Dict
13
+
12
14
  from langchain_openai import AzureOpenAI
13
15
  from langchain_openai import AzureChatOpenAI
14
16
 
@@ -39,7 +41,12 @@ class AzureOpenAILLM(BaseLLM):
39
41
  self.id = "azure_openai"
40
42
  self.type = [MODE_LANGCHAIN, MODE_LLAMA_INDEX, "embeddings"]
41
43
 
42
- def completion(self, window, model: ModelItem, stream: bool = False):
44
+ def completion(
45
+ self,
46
+ window,
47
+ model: ModelItem,
48
+ stream: bool = False
49
+ ):
43
50
  """
44
51
  Return LLM provider instance for completion
45
52
 
@@ -51,7 +58,12 @@ class AzureOpenAILLM(BaseLLM):
51
58
  args = self.parse_args(model.langchain)
52
59
  return AzureOpenAI(**args)
53
60
 
54
- def chat(self, window, model: ModelItem, stream: bool = False):
61
+ def chat(
62
+ self,
63
+ window,
64
+ model: ModelItem,
65
+ stream: bool = False
66
+ ):
55
67
  """
56
68
  Return LLM provider instance for chat
57
69
 
@@ -63,7 +75,12 @@ class AzureOpenAILLM(BaseLLM):
63
75
  args = self.parse_args(model.langchain)
64
76
  return AzureChatOpenAI(**args)
65
77
 
66
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
78
+ def llama(
79
+ self,
80
+ window,
81
+ model: ModelItem,
82
+ stream: bool = False
83
+ ) -> LlamaBaseLLM:
67
84
  """
68
85
  Return LLM provider instance for llama
69
86
 
@@ -75,7 +92,11 @@ class AzureOpenAILLM(BaseLLM):
75
92
  args = self.parse_args(model.llama_index)
76
93
  return LlamaAzureOpenAI(**args)
77
94
 
78
- def get_embeddings_model(self, window, config: list = None) -> BaseEmbedding:
95
+ def get_embeddings_model(
96
+ self,
97
+ window,
98
+ config: Optional[List[Dict]] = None
99
+ ) -> BaseEmbedding:
79
100
  """
80
101
  Return provider instance for embeddings
81
102
 
@@ -6,10 +6,11 @@
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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import Optional, List, Dict
13
14
 
14
15
  from llama_index.core.base.embeddings.base import BaseEmbedding
15
16
  from llama_index.core.llms.llm import BaseLLM as LlamaBaseLLM
@@ -30,7 +31,13 @@ class BaseLLM:
30
31
  self.type = [] # langchain, llama_index, embeddings
31
32
  self.description = ""
32
33
 
33
- def init(self, window, model: ModelItem, mode: str, sub_mode: str = None):
34
+ def init(
35
+ self,
36
+ window,
37
+ model: ModelItem,
38
+ mode: str,
39
+ sub_mode: str = None
40
+ ):
34
41
  """
35
42
  Initialize provider
36
43
 
@@ -53,7 +60,11 @@ class BaseLLM:
53
60
  except Exception as e:
54
61
  pass
55
62
 
56
- def init_embeddings(self, window, env: list):
63
+ def init_embeddings(
64
+ self,
65
+ window,
66
+ env: Optional[List[Dict]] = None
67
+ ):
57
68
  """
58
69
  Initialize embeddings provider
59
70
 
@@ -69,7 +80,10 @@ class BaseLLM:
69
80
  except Exception as e:
70
81
  pass
71
82
 
72
- def parse_args(self, options: dict) -> dict:
83
+ def parse_args(
84
+ self,
85
+ options: dict
86
+ ) -> dict:
73
87
  """
74
88
  Parse extra args
75
89
 
@@ -82,7 +96,12 @@ class BaseLLM:
82
96
  args = parse_args(options['args'])
83
97
  return args
84
98
 
85
- def completion(self, window, model: ModelItem, stream: bool = False) -> any:
99
+ def completion(
100
+ self,
101
+ window,
102
+ model: ModelItem,
103
+ stream: bool = False
104
+ ) -> any:
86
105
  """
87
106
  Return LLM provider instance for completion in langchain mode
88
107
 
@@ -93,7 +112,12 @@ class BaseLLM:
93
112
  """
94
113
  pass
95
114
 
96
- def chat(self, window, model: ModelItem, stream: bool = False) -> any:
115
+ def chat(
116
+ self,
117
+ window,
118
+ model: ModelItem,
119
+ stream: bool = False
120
+ ) -> any:
97
121
  """
98
122
  Return LLM provider instance for chat in langchain mode
99
123
 
@@ -104,7 +128,12 @@ class BaseLLM:
104
128
  """
105
129
  pass
106
130
 
107
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
131
+ def llama(
132
+ self,
133
+ window,
134
+ model: ModelItem,
135
+ stream: bool = False
136
+ ) -> LlamaBaseLLM:
108
137
  """
109
138
  Return LLM provider instance for llama index query and chat
110
139
 
@@ -115,7 +144,12 @@ class BaseLLM:
115
144
  """
116
145
  pass
117
146
 
118
- def llama_multimodal(self, window, model: ModelItem, stream: bool = False) -> LlamaMultiModalLLM:
147
+ def llama_multimodal(
148
+ self,
149
+ window,
150
+ model: ModelItem,
151
+ stream: bool = False
152
+ ) -> LlamaMultiModalLLM:
119
153
  """
120
154
  Return multimodal LLM provider instance for llama
121
155
 
@@ -126,7 +160,11 @@ class BaseLLM:
126
160
  """
127
161
  pass
128
162
 
129
- def get_embeddings_model(self, window, config: list = None) -> BaseEmbedding:
163
+ def get_embeddings_model(
164
+ self,
165
+ window,
166
+ config: Optional[List[Dict]] = None
167
+ ) -> BaseEmbedding:
130
168
  """
131
169
  Return provider instance for embeddings
132
170
 
@@ -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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from llama_index.llms.gemini import Gemini
@@ -32,7 +32,12 @@ class GoogleLLM(BaseLLM):
32
32
  self.id = "google"
33
33
  self.type = [MODE_LLAMA_INDEX]
34
34
 
35
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
35
+ def llama(
36
+ self,
37
+ window,
38
+ model: ModelItem,
39
+ stream: bool = False
40
+ ) -> LlamaBaseLLM:
36
41
  """
37
42
  Return LLM provider instance for llama
38
43
 
@@ -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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from langchain_community.llms import HuggingFaceHub
@@ -24,7 +24,12 @@ class HuggingFaceLLM(BaseLLM):
24
24
  self.id = "huggingface"
25
25
  self.type = [MODE_LANGCHAIN]
26
26
 
27
- def completion(self, window, model: ModelItem, stream: bool = False):
27
+ def completion(
28
+ self,
29
+ window,
30
+ model: ModelItem,
31
+ stream: bool = False
32
+ ):
28
33
  """
29
34
  Return LLM provider instance for completion
30
35
 
@@ -36,7 +41,12 @@ class HuggingFaceLLM(BaseLLM):
36
41
  args = self.parse_args(model.langchain)
37
42
  return HuggingFaceHub(**args)
38
43
 
39
- def chat(self, window, model: ModelItem, stream: bool = False):
44
+ def chat(
45
+ self,
46
+ window,
47
+ model: ModelItem,
48
+ stream: bool = False
49
+ ):
40
50
  """
41
51
  Return LLM provider instance for chat
42
52
 
@@ -6,10 +6,11 @@
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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import Optional, List, Dict
13
14
 
14
15
  from pygpt_net.core.types import (
15
16
  MODE_LLAMA_INDEX,
@@ -28,7 +29,12 @@ class HuggingFaceApiLLM(BaseLLM):
28
29
  self.id = "huggingface_api"
29
30
  self.type = [MODE_LLAMA_INDEX, "embeddings"]
30
31
 
31
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
32
+ def llama(
33
+ self,
34
+ window,
35
+ model: ModelItem,
36
+ stream: bool = False
37
+ ) -> LlamaBaseLLM:
32
38
  """
33
39
  Return LLM provider instance for llama
34
40
 
@@ -40,7 +46,11 @@ class HuggingFaceApiLLM(BaseLLM):
40
46
  args = self.parse_args(model.llama_index)
41
47
  return HuggingFaceInferenceAPI(**args)
42
48
 
43
- def get_embeddings_model(self, window, config: list = None) -> BaseEmbedding:
49
+ def get_embeddings_model(
50
+ self,
51
+ window,
52
+ config: Optional[List[Dict]] = None
53
+ ) -> BaseEmbedding:
44
54
  """
45
55
  Return provider instance for embeddings
46
56
 
@@ -55,7 +65,11 @@ class HuggingFaceApiLLM(BaseLLM):
55
65
  })
56
66
  return HuggingFaceAPIEmbedding(**args)
57
67
 
58
- def init_embeddings(self, window, env: list):
68
+ def init_embeddings(
69
+ self,
70
+ window,
71
+ env: Optional[List[Dict]] = None
72
+ ):
59
73
  """
60
74
  Initialize embeddings provider
61
75
 
@@ -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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from llama_index.llms.openai_like import OpenAILike
@@ -25,7 +25,12 @@ class LocalLLM(BaseLLM):
25
25
  self.id = "local_ai"
26
26
  self.type = [MODE_LLAMA_INDEX]
27
27
 
28
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
28
+ def llama(
29
+ self,
30
+ window,
31
+ model: ModelItem,
32
+ stream: bool = False
33
+ ) -> LlamaBaseLLM:
29
34
  """
30
35
  Return LLM provider instance for llama
31
36
 
@@ -6,10 +6,11 @@
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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
+ from typing import Optional, List, Dict
13
14
 
14
15
  from langchain_community.chat_models import ChatOllama
15
16
 
@@ -33,7 +34,12 @@ class OllamaLLM(BaseLLM):
33
34
  self.id = "ollama"
34
35
  self.type = [MODE_LANGCHAIN, MODE_LLAMA_INDEX, "embeddings"]
35
36
 
36
- def completion(self, window, model: ModelItem, stream: bool = False):
37
+ def completion(
38
+ self,
39
+ window,
40
+ model: ModelItem,
41
+ stream: bool = False
42
+ ):
37
43
  """
38
44
  Return LLM provider instance for completion
39
45
 
@@ -44,7 +50,12 @@ class OllamaLLM(BaseLLM):
44
50
  """
45
51
  return None
46
52
 
47
- def chat(self, window, model: ModelItem, stream: bool = False):
53
+ def chat(
54
+ self,
55
+ window,
56
+ model: ModelItem,
57
+ stream: bool = False
58
+ ):
48
59
  """
49
60
  Return LLM provider instance for chat
50
61
 
@@ -56,7 +67,12 @@ class OllamaLLM(BaseLLM):
56
67
  args = self.parse_args(model.langchain)
57
68
  return ChatOllama(**args)
58
69
 
59
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
70
+ def llama(
71
+ self,
72
+ window,
73
+ model: ModelItem,
74
+ stream: bool = False
75
+ ) -> LlamaBaseLLM:
60
76
  """
61
77
  Return LLM provider instance for llama
62
78
 
@@ -69,7 +85,11 @@ class OllamaLLM(BaseLLM):
69
85
  args = self.parse_args(model.llama_index)
70
86
  return Ollama(**args)
71
87
 
72
- def get_embeddings_model(self, window, config: list = None) -> BaseEmbedding:
88
+ def get_embeddings_model(
89
+ self,
90
+ window,
91
+ config: Optional[List[Dict]] = None
92
+ ) -> BaseEmbedding:
73
93
  """
74
94
  Return provider instance for embeddings
75
95
 
@@ -84,7 +104,11 @@ class OllamaLLM(BaseLLM):
84
104
  })
85
105
  return OllamaEmbedding(**args)
86
106
 
87
- def init_embeddings(self, window, env: list):
107
+ def init_embeddings(
108
+ self,
109
+ window,
110
+ env: Optional[List[Dict]] = None
111
+ ):
88
112
  """
89
113
  Initialize embeddings provider
90
114
 
@@ -6,9 +6,11 @@
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.21 20:00:00 #
9
+ # Updated Date: 2024.12.14 22:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import Optional, List, Dict
13
+
12
14
  from langchain_openai import OpenAI
13
15
  from langchain_openai import ChatOpenAI
14
16
 
@@ -33,7 +35,12 @@ class OpenAILLM(BaseLLM):
33
35
  self.id = "openai"
34
36
  self.type = [MODE_LANGCHAIN, MODE_LLAMA_INDEX, "embeddings"]
35
37
 
36
- def completion(self, window, model: ModelItem, stream: bool = False):
38
+ def completion(
39
+ self,
40
+ window,
41
+ model: ModelItem,
42
+ stream: bool = False
43
+ ):
37
44
  """
38
45
  Return LLM provider instance for completion
39
46
 
@@ -45,7 +52,12 @@ class OpenAILLM(BaseLLM):
45
52
  args = self.parse_args(model.langchain)
46
53
  return OpenAI(**args)
47
54
 
48
- def chat(self, window, model: ModelItem, stream: bool = False):
55
+ def chat(
56
+ self,
57
+ window,
58
+ model: ModelItem,
59
+ stream: bool = False
60
+ ):
49
61
  """
50
62
  Return LLM provider instance for chat
51
63
 
@@ -57,7 +69,12 @@ class OpenAILLM(BaseLLM):
57
69
  args = self.parse_args(model.langchain)
58
70
  return ChatOpenAI(**args)
59
71
 
60
- def llama(self, window, model: ModelItem, stream: bool = False) -> LlamaBaseLLM:
72
+ def llama(
73
+ self,
74
+ window,
75
+ model: ModelItem,
76
+ stream: bool = False
77
+ ) -> LlamaBaseLLM:
61
78
  """
62
79
  Return LLM provider instance for llama
63
80
 
@@ -69,7 +86,12 @@ class OpenAILLM(BaseLLM):
69
86
  args = self.parse_args(model.llama_index)
70
87
  return LlamaOpenAI(**args)
71
88
 
72
- def llama_multimodal(self, window, model: ModelItem, stream: bool = False) -> LlamaMultiModalLLM:
89
+ def llama_multimodal(
90
+ self,
91
+ window,
92
+ model: ModelItem,
93
+ stream: bool = False
94
+ ) -> LlamaMultiModalLLM:
73
95
  """
74
96
  Return multimodal LLM provider instance for llama
75
97
 
@@ -81,7 +103,11 @@ class OpenAILLM(BaseLLM):
81
103
  args = self.parse_args(model.llama_index)
82
104
  return LlamaOpenAIMultiModal(**args)
83
105
 
84
- def get_embeddings_model(self, window, config: list = None) -> BaseEmbedding:
106
+ def get_embeddings_model(
107
+ self,
108
+ window,
109
+ config: Optional[List[Dict]] = None
110
+ ) -> BaseEmbedding:
85
111
  """
86
112
  Return provider instance for embeddings
87
113
 
@@ -22,7 +22,9 @@ class BaseLoader:
22
22
  self.instructions = [] # list of instructions for 'web_index' command for how to handle this type
23
23
  self.args = {} # custom keyword arguments
24
24
  self.init_args = {} # initial keyword arguments
25
+ self.init_args_labels = {}
25
26
  self.init_args_types = {}
27
+ self.init_args_desc = {}
26
28
  self.allow_compiled = True # allow in compiled and Snap versions
27
29
  # This is required due to some readers may require Python environment to install additional packages
28
30
 
@@ -42,6 +44,18 @@ class BaseLoader:
42
44
  """
43
45
  self.args = args
44
46
 
47
+ def explode(self, value: str) -> list:
48
+ """
49
+ Explode list from string
50
+
51
+ :param value: value string
52
+ :return: list
53
+ """
54
+ if value:
55
+ items = value.split(",")
56
+ return [item.strip() for item in items]
57
+ return []
58
+
45
59
  def get_args(self):
46
60
  """
47
61
  Prepare keyword arguments for reader init method
@@ -15,6 +15,7 @@ class YoutubeTranscriptReader(BasePydanticReader):
15
15
  """Youtube Transcript reader."""
16
16
 
17
17
  is_remote: bool = True
18
+ languages: List[str] = ["en"]
18
19
 
19
20
  @classmethod
20
21
  def class_name(cls) -> str:
@@ -34,6 +35,10 @@ class YoutubeTranscriptReader(BasePydanticReader):
34
35
  for which transcripts are to be read.
35
36
 
36
37
  """
38
+ languages = self.languages
39
+ if not languages:
40
+ languages = ["en"]
41
+
37
42
  results = []
38
43
  for link in ytlinks:
39
44
  video_id = self._extract_video_id(link)
@@ -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.04.17 01:00:00 #
9
+ # Updated Date: 2024.12.16 01:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -30,14 +30,16 @@ class Loader(BaseLoader):
30
30
  "args": {
31
31
  "query": {
32
32
  "type": "str",
33
+ "label": "SQL query",
34
+ "description": "SQL query to read data from database, e.g. SELECT * FROM table",
33
35
  },
34
36
  },
35
37
  }
36
38
  }
37
39
  ]
38
40
  self.init_args = {
39
- "sql_database": None,
40
- "engine": None,
41
+ # "sql_database": None,
42
+ # "engine": None,
41
43
  "uri": None,
42
44
  "scheme": None,
43
45
  "host": None,
@@ -47,8 +49,8 @@ class Loader(BaseLoader):
47
49
  "dbname": None,
48
50
  }
49
51
  self.init_args_types = {
50
- "sql_database": "str",
51
- "engine": "str",
52
+ # "sql_database": "str",
53
+ # "engine": "str",
52
54
  "uri": "str",
53
55
  "scheme": "str",
54
56
  "host": "str",
@@ -57,6 +59,12 @@ class Loader(BaseLoader):
57
59
  "password": "str",
58
60
  "dbname": "str",
59
61
  }
62
+ self.init_args_desc = {
63
+ # "sql_database": "str",
64
+ # "engine": "str",
65
+ "uri": "You can provide a single URI in the form of: {scheme}://{user}:{password}@{host}:{port}/{dbname}, "
66
+ "or you can provide each field manually:",
67
+ }
60
68
 
61
69
  def get(self) -> BaseReader:
62
70
  """
@@ -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.04.17 01:00:00 #
9
+ # Updated Date: 2024.12.16 01:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -103,8 +103,12 @@ class Loader(BaseLoader):
103
103
  if "label_filters_include" in kwargs and kwargs.get("label_filters_include"):
104
104
  if isinstance(kwargs.get("label_filters_include"), list):
105
105
  args["label_filters_include"] = kwargs.get("label_filters_include")
106
+ elif isinstance(kwargs.get("label_filters_include"), str):
107
+ args["label_filters_include"] = self.explode(kwargs.get("label_filters_include"))
106
108
  if "label_filters_exclude" in kwargs and kwargs.get("label_filters_exclude"):
107
109
  if isinstance(kwargs.get("label_filters_exclude"), list):
108
110
  args["label_filters_exclude"] = kwargs.get("label_filters_exclude")
111
+ elif isinstance(kwargs.get("label_filters_exclude"), str):
112
+ args["label_filters_exclude"] = self.explode(kwargs.get("label_filters_exclude"))
109
113
 
110
114
  return args
@@ -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.04.17 01:00:00 #
9
+ # Updated Date: 2024.12.16 01:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -30,9 +30,13 @@ class Loader(BaseLoader):
30
30
  "args": {
31
31
  "number_of_results": {
32
32
  "type": "int",
33
+ "label": "Number of results",
34
+ "description": "Number of results to fetch, default: 100",
33
35
  },
34
36
  "start_date": {
35
37
  "type": "str",
38
+ "label": "Start date",
39
+ "description": "Start date for events, ISO format: YYYY-MM-DD, default: today",
36
40
  },
37
41
  },
38
42
  }
@@ -79,8 +83,12 @@ class Loader(BaseLoader):
79
83
  if "number_of_results" in kwargs and kwargs.get("number_of_results"):
80
84
  if isinstance(kwargs.get("number_of_results"), int):
81
85
  args["number_of_results"] = kwargs.get("number_of_results") # number of results
86
+ if args["number_of_results"] == 0:
87
+ args["number_of_results"] = None
82
88
 
83
89
  if "start_date" in kwargs and kwargs.get("start_date"):
84
90
  if isinstance(kwargs.get("start_date"), str):
85
91
  args["start_date"] = kwargs.get("start_date") # start date
92
+ if args["start_date"] == "today" or args["start_date"] == "":
93
+ args["start_date"] = None
86
94
  return args
@@ -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.04.17 01:00:00 #
9
+ # Updated Date: 2024.12.16 01:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -30,6 +30,9 @@ class Loader(BaseLoader):
30
30
  "args": {
31
31
  "document_ids": {
32
32
  "type": "list",
33
+ "label": "Document IDs",
34
+ "description": "List of document IDs to index, separated by comma (,)",
35
+ "required": True,
33
36
  },
34
37
  },
35
38
  }
@@ -76,4 +79,6 @@ class Loader(BaseLoader):
76
79
  if "document_ids" in kwargs and kwargs.get("document_ids"):
77
80
  if isinstance(kwargs.get("document_ids"), list):
78
81
  args["document_ids"] = kwargs.get("document_ids") # list of document ids
82
+ elif isinstance(kwargs.get("document_ids"), str):
83
+ args["document_ids"] = self.explode(kwargs.get("document_ids"))
79
84
  return args