sunholo 0.63.0__tar.gz → 0.64.3__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 (120) hide show
  1. {sunholo-0.63.0 → sunholo-0.64.3}/PKG-INFO +3 -2
  2. {sunholo-0.63.0 → sunholo-0.64.3}/setup.py +2 -1
  3. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/flask/qna_routes.py +148 -9
  4. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/langfuse/callback.py +3 -4
  5. sunholo-0.64.3/sunholo/utils/version.py +3 -0
  6. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo.egg-info/PKG-INFO +3 -2
  7. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo.egg-info/SOURCES.txt +1 -0
  8. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo.egg-info/requires.txt +1 -0
  9. {sunholo-0.63.0 → sunholo-0.64.3}/LICENSE.txt +0 -0
  10. {sunholo-0.63.0 → sunholo-0.64.3}/MANIFEST.in +0 -0
  11. {sunholo-0.63.0 → sunholo-0.64.3}/README.md +0 -0
  12. {sunholo-0.63.0 → sunholo-0.64.3}/setup.cfg +0 -0
  13. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/__init__.py +0 -0
  14. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/__init__.py +0 -0
  15. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/chat_history.py +0 -0
  16. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/dispatch_to_qa.py +0 -0
  17. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/fastapi/__init__.py +0 -0
  18. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/fastapi/base.py +0 -0
  19. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/fastapi/qna_routes.py +0 -0
  20. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/flask/__init__.py +0 -0
  21. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/flask/base.py +0 -0
  22. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/langserve.py +0 -0
  23. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/pubsub.py +0 -0
  24. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/route.py +0 -0
  25. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/agents/special_commands.py +0 -0
  26. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/archive/__init__.py +0 -0
  27. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/archive/archive.py +0 -0
  28. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/auth/__init__.py +0 -0
  29. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/auth/run.py +0 -0
  30. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/bots/__init__.py +0 -0
  31. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/bots/discord.py +0 -0
  32. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/bots/github_webhook.py +0 -0
  33. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/bots/webapp.py +0 -0
  34. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/__init__.py +0 -0
  35. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
  36. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/doc_handling.py +0 -0
  37. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/images.py +0 -0
  38. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/loaders.py +0 -0
  39. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/message_data.py +0 -0
  40. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/pdfs.py +0 -0
  41. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/publish.py +0 -0
  42. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/chunker/splitter.py +0 -0
  43. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/__init__.py +0 -0
  44. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/chat_vac.py +0 -0
  45. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/cli.py +0 -0
  46. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/cli_init.py +0 -0
  47. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/configs.py +0 -0
  48. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/deploy.py +0 -0
  49. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/embedder.py +0 -0
  50. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/merge_texts.py +0 -0
  51. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/run_proxy.py +0 -0
  52. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/cli/sun_rich.py +0 -0
  53. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/components/__init__.py +0 -0
  54. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/components/llm.py +0 -0
  55. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/components/retriever.py +0 -0
  56. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/components/vectorstore.py +0 -0
  57. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/__init__.py +0 -0
  58. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/alloydb.py +0 -0
  59. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/database.py +0 -0
  60. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/lancedb.py +0 -0
  61. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/sql/sb/create_function.sql +0 -0
  62. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  63. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/sql/sb/create_table.sql +0 -0
  64. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  65. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/sql/sb/return_sources.sql +0 -0
  66. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/sql/sb/setup.sql +0 -0
  67. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/static_dbs.py +0 -0
  68. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/database/uuid.py +0 -0
  69. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/embedder/__init__.py +0 -0
  70. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/embedder/embed_chunk.py +0 -0
  71. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/gcs/__init__.py +0 -0
  72. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/gcs/add_file.py +0 -0
  73. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/gcs/download_url.py +0 -0
  74. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/gcs/metadata.py +0 -0
  75. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/langfuse/__init__.py +0 -0
  76. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/langfuse/prompts.py +0 -0
  77. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/llamaindex/__init__.py +0 -0
  78. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/llamaindex/generate.py +0 -0
  79. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/llamaindex/get_files.py +0 -0
  80. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/llamaindex/import_files.py +0 -0
  81. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/logging.py +0 -0
  82. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/lookup/__init__.py +0 -0
  83. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/lookup/model_lookup.yaml +0 -0
  84. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/patches/__init__.py +0 -0
  85. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/patches/langchain/__init__.py +0 -0
  86. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/patches/langchain/lancedb.py +0 -0
  87. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/patches/langchain/vertexai.py +0 -0
  88. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/pubsub/__init__.py +0 -0
  89. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/pubsub/process_pubsub.py +0 -0
  90. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/pubsub/pubsub_manager.py +0 -0
  91. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/qna/__init__.py +0 -0
  92. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/qna/parsers.py +0 -0
  93. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/qna/retry.py +0 -0
  94. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/streaming/__init__.py +0 -0
  95. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/streaming/content_buffer.py +0 -0
  96. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/streaming/langserve.py +0 -0
  97. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/streaming/stream_lookup.py +0 -0
  98. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/streaming/streaming.py +0 -0
  99. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/summarise/__init__.py +0 -0
  100. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/summarise/summarise.py +0 -0
  101. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/__init__.py +0 -0
  102. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/big_context.py +0 -0
  103. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/config.py +0 -0
  104. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/config_schema.py +0 -0
  105. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/gcp.py +0 -0
  106. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/gcp_project.py +0 -0
  107. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/parsers.py +0 -0
  108. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/timedelta.py +0 -0
  109. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/utils/user_ids.py +0 -0
  110. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/vertex/__init__.py +0 -0
  111. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/vertex/init.py +0 -0
  112. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/vertex/memory_tools.py +0 -0
  113. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo/vertex/safety.py +0 -0
  114. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo.egg-info/dependency_links.txt +0 -0
  115. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo.egg-info/entry_points.txt +0 -0
  116. {sunholo-0.63.0 → sunholo-0.64.3}/sunholo.egg-info/top_level.txt +0 -0
  117. {sunholo-0.63.0 → sunholo-0.64.3}/tests/test_chat_history.py +0 -0
  118. {sunholo-0.63.0 → sunholo-0.64.3}/tests/test_chunker.py +0 -0
  119. {sunholo-0.63.0 → sunholo-0.64.3}/tests/test_config.py +0 -0
  120. {sunholo-0.63.0 → sunholo-0.64.3}/tests/test_dispatch_to_qa.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.63.0
3
+ Version: 0.64.3
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.63.0.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.64.3.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.txt
21
21
  Requires-Dist: google-auth
22
+ Requires-Dist: tenacity==8.3.0
22
23
  Requires-Dist: langchain
23
24
  Requires-Dist: langchain_experimental
24
25
  Requires-Dist: langchain-community
@@ -1,7 +1,7 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
3
  # Define your base version
4
- version = '0.63.0'
4
+ version = '0.64.3'
5
5
 
6
6
  setup(
7
7
  name='sunholo',
@@ -29,6 +29,7 @@ setup(
29
29
  install_requires=[
30
30
  # Base dependencies
31
31
  "google-auth", # to check if on gcp
32
+ "tenacity==8.3.0",
32
33
  "langchain",
33
34
  "langchain_experimental",
34
35
  "langchain-community",
@@ -16,6 +16,7 @@
16
16
  import json
17
17
  import traceback
18
18
  import datetime
19
+ import uuid
19
20
 
20
21
  from ...agents import extract_chat_history, handle_special_commands
21
22
  from ...qna.parsers import parse_output
@@ -23,7 +24,11 @@ from ...streaming import start_streaming_chat
23
24
  from ...archive import archive_qa
24
25
  from ...logging import log
25
26
  from ...utils.config import load_config
26
-
27
+ from ...utils.version import sunholo_version
28
+ import os
29
+ from ...gcs.add_file import add_file_to_gcs
30
+
31
+
27
32
  try:
28
33
  from flask import request, jsonify, Response
29
34
  except ImportError:
@@ -34,6 +39,7 @@ try:
34
39
  except ImportError:
35
40
  pass
36
41
 
42
+
37
43
  def register_qna_routes(app, stream_interpreter, vac_interpreter):
38
44
 
39
45
  @app.route("/")
@@ -155,9 +161,114 @@ def register_qna_routes(app, stream_interpreter, vac_interpreter):
155
161
  span.end(output=jsonify(bot_output))
156
162
  trace.update(output=jsonify(bot_output))
157
163
 
164
+ # {'answer': 'output'}
158
165
  return jsonify(bot_output)
159
166
 
160
- # Any other QNA related routes can be added here
167
+ @app.route('/openai/v1/chat/completions', methods=['POST'])
168
+ def openai_compatible_endpoint():
169
+ data = request.get_json()
170
+ model = data.pop('model', None)
171
+ messages = data.pop('messages', None)
172
+ chat_history = data.pop('chat_history', None)
173
+ stream = data.pop('stream', False)
174
+
175
+ if not messages:
176
+ return jsonify({"error": "No messages provided"}), 400
177
+
178
+ user_message = next((msg['content'] for msg in messages if msg['role'] == 'user'), None)
179
+ if not user_message:
180
+ return jsonify({"error": "No user message provided"}), 400
181
+
182
+ all_input = {
183
+ "user_input": user_message,
184
+ "chat_history": chat_history,
185
+ "kwargs": data
186
+ }
187
+
188
+ observed_stream_interpreter = observe()(stream_interpreter)
189
+
190
+
191
+ response_id = str(uuid.uuid4())
192
+
193
+ def generate_response_content():
194
+ for chunk in start_streaming_chat(question=user_message,
195
+ vector_name=model,
196
+ qna_func=observed_stream_interpreter,
197
+ chat_history=all_input["chat_history"],
198
+ wait_time=all_input.get("stream_wait_time", 1),
199
+ timeout=all_input.get("stream_timeout", 60),
200
+ **all_input["kwargs"]
201
+ ):
202
+ if isinstance(chunk, dict) and 'content' in chunk:
203
+ openai_chunk = {
204
+ "id": response_id,
205
+ "object": "chat.completion.chunk",
206
+ "created": int(datetime.time()),
207
+ "model": model,
208
+ "system_fingerprint": sunholo_version(),
209
+ "choices": [{
210
+ "index": 0,
211
+ "delta": {"content": chunk['content']},
212
+ "logprobs": None,
213
+ "finish_reason": None
214
+ }]
215
+ }
216
+ yield json.dumps(openai_chunk) + "\n"
217
+
218
+ final_chunk = {
219
+ "id": response_id,
220
+ "object": "chat.completion.chunk",
221
+ "created": int(datetime.time()),
222
+ "model": model,
223
+ "system_fingerprint": sunholo_version(),
224
+ "choices": [{
225
+ "index": 0,
226
+ "delta": {},
227
+ "logprobs": None,
228
+ "finish_reason": "stop"
229
+ }]
230
+ }
231
+ yield json.dumps(final_chunk) + "\n"
232
+
233
+ if stream:
234
+ return Response(generate_response_content(), content_type='text/plain; charset=utf-8')
235
+
236
+ try:
237
+ bot_output = observed_stream_interpreter(
238
+ question=user_message,
239
+ vector_name=model,
240
+ chat_history=all_input["chat_history"],
241
+ **all_input["kwargs"]
242
+ )
243
+ bot_output = parse_output(bot_output)
244
+
245
+ openai_response = {
246
+ "id": response_id,
247
+ "object": "chat.completion",
248
+ "created": int(datetime.time()),
249
+ "model": model,
250
+ "system_fingerprint": sunholo_version(),
251
+ "choices": [{
252
+ "index": 0,
253
+ "message": {
254
+ "role": "assistant",
255
+ "content": bot_output.get('answer', ''),
256
+ },
257
+ "logprobs": None,
258
+ "finish_reason": "stop"
259
+ }],
260
+ "usage": {
261
+ "prompt_tokens": len(user_message.split()),
262
+ "completion_tokens": len(bot_output.get('answer', '').split()),
263
+ "total_tokens": len(user_message.split()) + len(bot_output.get('answer', '').split())
264
+ }
265
+ }
266
+
267
+ return jsonify(openai_response)
268
+
269
+ except Exception as err:
270
+ return jsonify({'error': f'QNA_ERROR: An error occurred: {str(err)} traceback: {traceback.format_exc()}'}), 500
271
+
161
272
 
162
273
  def create_langfuse_trace(request, vector_name):
163
274
  try:
@@ -172,10 +283,8 @@ def create_langfuse_trace(request, vector_name):
172
283
  session_id = request.headers.get("X-Session-ID")
173
284
  message_source = request.headers.get("X-Message-Source")
174
285
 
175
- # can't import tags yet via CallbackHandler
176
- from importlib.metadata import version
177
- package_version = version('sunholo')
178
- tags = [f"sunholo-v{package_version}"]
286
+ package_version = sunholo_version()
287
+ tags = [package_version]
179
288
  if message_source:
180
289
  tags.append(message_source)
181
290
 
@@ -191,8 +300,28 @@ def prep_vac(request, vector_name):
191
300
  #trace = create_langfuse_trace(request, vector_name)
192
301
  trace = None
193
302
  span = None
194
- data = request.get_json()
303
+
304
+ if request.content_type.startswith('application/json'):
305
+ data = request.get_json()
306
+ elif request.content_type.startswith('multipart/form-data'):
307
+ data = request.form.to_dict()
308
+ if 'file' in request.files:
309
+ file = request.files['file']
310
+ if file.filename != '':
311
+ log.info(f"Found file: {file.filename} to upload to GCS")
312
+ try:
313
+ image_uri, mime_type = handle_file_upload(file, vector_name)
314
+ data["image_uri"] = image_uri
315
+ data["mime"] = mime_type
316
+ except Exception as e:
317
+ return jsonify({'error': str(e), 'traceback': traceback.format_exc()}), 500
318
+ else:
319
+ return jsonify({"error": "No file selected"}), 400
320
+ else:
321
+ return jsonify({"error": "Unsupported content type"}), 400
322
+
195
323
  log.info(f"vac/{vector_name} got data: {data}")
324
+
196
325
  config, _ = load_config("config/llm_config.yaml")
197
326
  vac_configs = config.get("vac")
198
327
  if vac_configs:
@@ -213,7 +342,7 @@ def prep_vac(request, vector_name):
213
342
  'vector_name': vector_name,
214
343
  'chat_history': paired_messages,
215
344
  'stream_wait_time': stream_wait_time,
216
- 'stream_timeout':stream_timeout,
345
+ 'stream_timeout': stream_timeout,
217
346
  'kwargs': data}
218
347
 
219
348
  if trace:
@@ -233,4 +362,14 @@ def prep_vac(request, vector_name):
233
362
  "command_response": command_response,
234
363
  "all_input": all_input,
235
364
  "vac_config": vac_config
236
- }
365
+ }
366
+
367
+
368
+ def handle_file_upload(file, vector_name):
369
+ try:
370
+ file.save(file.filename)
371
+ image_uri = add_file_to_gcs(file.filename, vector_name)
372
+ os.remove(file.filename) # Clean up the saved file
373
+ return image_uri, file.mimetype
374
+ except Exception as e:
375
+ raise Exception(f'File upload failed: {str(e)}')
@@ -7,6 +7,8 @@ try:
7
7
  except ImportError:
8
8
  CallbackHandler = None
9
9
 
10
+ from ..utils.version import sunholo_version
11
+
10
12
  def create_langfuse_callback(**kwargs):
11
13
 
12
14
  if not CallbackHandler:
@@ -40,10 +42,7 @@ def add_langfuse_tracing(
40
42
  session_id = request.headers.get("X-Session-ID")
41
43
  message_source = request.headers.get("X-Message-Source")
42
44
 
43
- # can't import tags yet via CallbackHandler
44
- from importlib.metadata import version
45
- package_version = version('sunholo')
46
- tags = [f"sunholo-v{package_version}"]
45
+ tags = [sunholo_version()]
47
46
  if message_source:
48
47
  tags.append(message_source)
49
48
 
@@ -0,0 +1,3 @@
1
+ def sunholo_version():
2
+ from importlib.metadata import version
3
+ return f"sunholo-{version('sunholo')}"
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.63.0
3
+ Version: 0.64.3
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.63.0.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.64.3.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.txt
21
21
  Requires-Dist: google-auth
22
+ Requires-Dist: tenacity==8.3.0
22
23
  Requires-Dist: langchain
23
24
  Requires-Dist: langchain_experimental
24
25
  Requires-Dist: langchain-community
@@ -108,6 +108,7 @@ sunholo/utils/gcp_project.py
108
108
  sunholo/utils/parsers.py
109
109
  sunholo/utils/timedelta.py
110
110
  sunholo/utils/user_ids.py
111
+ sunholo/utils/version.py
111
112
  sunholo/vertex/__init__.py
112
113
  sunholo/vertex/init.py
113
114
  sunholo/vertex/memory_tools.py
@@ -1,4 +1,5 @@
1
1
  google-auth
2
+ tenacity==8.3.0
2
3
  langchain
3
4
  langchain_experimental
4
5
  langchain-community
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
File without changes
File without changes