sunholo 0.64.18__tar.gz → 0.66.0__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.
Files changed (123) hide show
  1. {sunholo-0.64.18 → sunholo-0.66.0}/PKG-INFO +2 -2
  2. {sunholo-0.64.18 → sunholo-0.66.0}/setup.py +1 -1
  3. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/swagger.py +54 -4
  4. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/config.py +2 -1
  5. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/PKG-INFO +2 -2
  6. {sunholo-0.64.18 → sunholo-0.66.0}/LICENSE.txt +0 -0
  7. {sunholo-0.64.18 → sunholo-0.66.0}/MANIFEST.in +0 -0
  8. {sunholo-0.64.18 → sunholo-0.66.0}/README.md +0 -0
  9. {sunholo-0.64.18 → sunholo-0.66.0}/setup.cfg +0 -0
  10. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/__init__.py +0 -0
  11. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/__init__.py +0 -0
  12. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/chat_history.py +0 -0
  13. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/dispatch_to_qa.py +0 -0
  14. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/fastapi/__init__.py +0 -0
  15. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/fastapi/base.py +0 -0
  16. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/fastapi/qna_routes.py +0 -0
  17. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/flask/__init__.py +0 -0
  18. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/flask/base.py +0 -0
  19. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/flask/qna_routes.py +0 -0
  20. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/langserve.py +0 -0
  21. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/pubsub.py +0 -0
  22. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/route.py +0 -0
  23. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/special_commands.py +0 -0
  24. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/archive/__init__.py +0 -0
  25. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/archive/archive.py +0 -0
  26. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/auth/__init__.py +0 -0
  27. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/auth/run.py +0 -0
  28. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/__init__.py +0 -0
  29. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/discord.py +0 -0
  30. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/github_webhook.py +0 -0
  31. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/webapp.py +0 -0
  32. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/__init__.py +0 -0
  33. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
  34. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/doc_handling.py +0 -0
  35. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/images.py +0 -0
  36. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/loaders.py +0 -0
  37. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/message_data.py +0 -0
  38. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/pdfs.py +0 -0
  39. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/publish.py +0 -0
  40. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/splitter.py +0 -0
  41. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/__init__.py +0 -0
  42. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/chat_vac.py +0 -0
  43. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/cli.py +0 -0
  44. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/cli_init.py +0 -0
  45. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/configs.py +0 -0
  46. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/deploy.py +0 -0
  47. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/embedder.py +0 -0
  48. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/merge_texts.py +0 -0
  49. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/run_proxy.py +0 -0
  50. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/sun_rich.py +0 -0
  51. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/swagger.py +0 -0
  52. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/__init__.py +0 -0
  53. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/llm.py +0 -0
  54. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/retriever.py +0 -0
  55. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/vectorstore.py +0 -0
  56. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/__init__.py +0 -0
  57. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/alloydb.py +0 -0
  58. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/database.py +0 -0
  59. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/lancedb.py +0 -0
  60. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/create_function.sql +0 -0
  61. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  62. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/create_table.sql +0 -0
  63. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  64. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/return_sources.sql +0 -0
  65. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/setup.sql +0 -0
  66. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/static_dbs.py +0 -0
  67. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/uuid.py +0 -0
  68. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/embedder/__init__.py +0 -0
  69. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/embedder/embed_chunk.py +0 -0
  70. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/__init__.py +0 -0
  71. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/add_file.py +0 -0
  72. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/download_url.py +0 -0
  73. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/metadata.py +0 -0
  74. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/langfuse/__init__.py +0 -0
  75. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/langfuse/callback.py +0 -0
  76. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/langfuse/prompts.py +0 -0
  77. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/__init__.py +0 -0
  78. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/generate.py +0 -0
  79. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/get_files.py +0 -0
  80. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/import_files.py +0 -0
  81. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/logging.py +0 -0
  82. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/lookup/__init__.py +0 -0
  83. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/lookup/model_lookup.yaml +0 -0
  84. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/__init__.py +0 -0
  85. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/langchain/__init__.py +0 -0
  86. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/langchain/lancedb.py +0 -0
  87. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/langchain/vertexai.py +0 -0
  88. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/pubsub/__init__.py +0 -0
  89. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/pubsub/process_pubsub.py +0 -0
  90. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/pubsub/pubsub_manager.py +0 -0
  91. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/qna/__init__.py +0 -0
  92. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/qna/parsers.py +0 -0
  93. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/qna/retry.py +0 -0
  94. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/__init__.py +0 -0
  95. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/content_buffer.py +0 -0
  96. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/langserve.py +0 -0
  97. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/stream_lookup.py +0 -0
  98. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/streaming.py +0 -0
  99. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/summarise/__init__.py +0 -0
  100. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/summarise/summarise.py +0 -0
  101. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/__init__.py +0 -0
  102. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/big_context.py +0 -0
  103. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/config_schema.py +0 -0
  104. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/gcp.py +0 -0
  105. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/gcp_project.py +0 -0
  106. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/parsers.py +0 -0
  107. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/timedelta.py +0 -0
  108. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/user_ids.py +0 -0
  109. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/version.py +0 -0
  110. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/__init__.py +0 -0
  111. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/init.py +0 -0
  112. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/memory_tools.py +0 -0
  113. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/safety.py +0 -0
  114. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/SOURCES.txt +0 -0
  115. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/dependency_links.txt +0 -0
  116. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/entry_points.txt +0 -0
  117. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/requires.txt +0 -0
  118. {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/top_level.txt +0 -0
  119. {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_chat_history.py +0 -0
  120. {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_chunker.py +0 -0
  121. {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_config.py +0 -0
  122. {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_dispatch_to_qa.py +0 -0
  123. {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_swagger.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.64.18
3
+ Version: 0.66.0
4
4
  Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
5
5
  Home-page: https://github.com/sunholo-data/sunholo-py
6
- Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.64.18.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.66.0.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -1,7 +1,7 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
3
  # Define your base version
4
- version = '0.64.18'
4
+ version = '0.66.0'
5
5
 
6
6
  setup(
7
7
  name='sunholo',
@@ -130,7 +130,19 @@ def generate_swagger(vac_config, agent_config):
130
130
  'host': '${_ENDPOINTS_HOST}',
131
131
  'schemes': ['https'],
132
132
  'produces': ['application/json'],
133
- 'paths': {}
133
+ 'paths': {},
134
+ 'securityDefinitions': {
135
+ 'ApiKeyAuth': { # For private VAC endpoint
136
+ 'type': 'apiKey',
137
+ 'name': 'x-api-key', # Custom header name for API key
138
+ 'in': 'header'
139
+ },
140
+ 'None': { # For public documentation
141
+ 'type': 'apiKey',
142
+ 'name': 'allow', # Dummy parameter for public access
143
+ 'in': 'query' # Use query parameter to avoid interfering with other headers
144
+ }
145
+ }
134
146
  }
135
147
 
136
148
  vac_services = vac_config['vac']
@@ -146,9 +158,24 @@ def generate_swagger(vac_config, agent_config):
146
158
  log.warning(f"Failed to find URL stem for {vector_name}/{agent_type} - using {stem} instead")
147
159
 
148
160
  for method, endpoints in agent_config_paths.items():
149
- if method not in ['get', 'post']:
150
- log.warning(f"Skipping {endpoints}")
161
+ # controls if get requests are protected or not
162
+ do_auth = True
163
+
164
+ # default get: noauth, post: auth
165
+ if method not in ['get', 'post', 'get-auth', 'post-noauth']:
151
166
  continue
167
+
168
+ if method == 'get-auth':
169
+ do_auth = True
170
+ method = 'get'
171
+ elif method == 'post-noauth':
172
+ do_auth = False
173
+ method = 'post'
174
+ elif method == 'get':
175
+ do_auth = False
176
+ elif method == 'post':
177
+ do_auth = True # not needed but to be clear whats happening
178
+
152
179
  for endpoint_key, endpoint_template in endpoints.items():
153
180
  endpoint_template = endpoint_template.strip()
154
181
  endpoint_address = endpoint_template.replace("{stem}", stem).replace("{vector_name}", vector_name).strip()
@@ -161,6 +188,8 @@ def generate_swagger(vac_config, agent_config):
161
188
 
162
189
  operation_id = f"{method}_{agent_type}_{endpoint_key}_{vector_name}"
163
190
 
191
+ security = [{'ApiKeyAuth': []}] if do_auth else [{'None': []}]
192
+
164
193
  swagger_template['paths'][endpoint_path][method] = {
165
194
  'summary': f"{method.capitalize()} {vector_name}",
166
195
  'operationId': operation_id,
@@ -168,6 +197,7 @@ def generate_swagger(vac_config, agent_config):
168
197
  'address': endpoint_address,
169
198
  'protocol': 'h2'
170
199
  },
200
+ 'security': security,
171
201
  'responses': copy.deepcopy(agent_config_paths.get('response', {}).get(endpoint_key, {
172
202
  '200': {
173
203
  'description': 'Default - A successful response',
@@ -191,9 +221,26 @@ def generate_swagger(vac_config, agent_config):
191
221
  stem = f"${{{agent_type.upper()}_BACKEND_URL}}"
192
222
  log.warning(f"Failed to find URL stem for {vector_name}/{agent_type} - using {stem} instead")
193
223
 
224
+
194
225
  for method, endpoints in default_agent_config.items():
195
- if method not in ['get', 'post']:
226
+ # controls if get requests are protected or not
227
+ do_auth = True
228
+
229
+ # default get: noauth, post: auth
230
+ if method not in ['get', 'post', 'get-auth', 'post-noauth']:
196
231
  continue
232
+
233
+ if method == 'get-auth':
234
+ do_auth = True
235
+ method = 'get'
236
+ elif method == 'post-noauth':
237
+ do_auth = False
238
+ method = 'post'
239
+ elif method == 'get':
240
+ do_auth = False
241
+ elif method == 'post':
242
+ do_auth = True # not needed but to be clear whats happening
243
+
197
244
  for endpoint_key, endpoint_template in endpoints.items():
198
245
  endpoint_template = endpoint_template.strip()
199
246
  endpoint_address = endpoint_template.replace("{stem}", stem).replace("{vector_name}", vector_name).strip()
@@ -205,6 +252,8 @@ def generate_swagger(vac_config, agent_config):
205
252
  swagger_template['paths'][endpoint_path] = {}
206
253
 
207
254
  operation_id = f"{method}_{agent_type}_{endpoint_key}_{vector_name}"
255
+
256
+ security = [{'ApiKeyAuth': []}] if do_auth else [{'None': []}]
208
257
 
209
258
  swagger_template['paths'][endpoint_path][method] = {
210
259
  'summary': f"{method.capitalize()} {agent_type}",
@@ -213,6 +262,7 @@ def generate_swagger(vac_config, agent_config):
213
262
  'address': endpoint_address,
214
263
  'protocol': 'h2'
215
264
  },
265
+ 'security': security,
216
266
  'responses': copy.deepcopy(default_agent_config.get('response', {}).get(endpoint_key, {
217
267
  '200': {
218
268
  'description': 'Default - A successful response',
@@ -82,7 +82,6 @@ def load_all_configs():
82
82
  cached_config, cache_time = config_cache[filename]
83
83
  time_to_recache = (current_time - cache_time)
84
84
  if time_to_recache < timedelta(minutes=5):
85
- log.debug(f"Returning cached config for {filename} - recache in {format_timedelta(timedelta(minutes=5) - time_to_recache)}")
86
85
  config = cached_config
87
86
  else:
88
87
  config = reload_config_file(config_file, filename)
@@ -94,6 +93,8 @@ def load_all_configs():
94
93
  configs_by_kind[kind] = config
95
94
  else:
96
95
  log.warning(f"No 'kind' found in {filename}")
96
+
97
+ #log.debug(f"Config recache in {format_timedelta(timedelta(minutes=5) - time_to_recache)}")
97
98
 
98
99
  return configs_by_kind
99
100
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.64.18
3
+ Version: 0.66.0
4
4
  Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
5
5
  Home-page: https://github.com/sunholo-data/sunholo-py
6
- Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.64.18.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.66.0.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes