sunholo 0.86.1__tar.gz → 0.87.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 (157) hide show
  1. {sunholo-0.86.1 → sunholo-0.87.0}/PKG-INFO +2 -2
  2. {sunholo-0.86.1 → sunholo-0.87.0}/setup.py +1 -1
  3. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/flask/vac_routes.py +46 -2
  4. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/gcs/add_file.py +3 -0
  5. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/genai/process_funcs_cls.py +5 -1
  6. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo.egg-info/PKG-INFO +2 -2
  7. {sunholo-0.86.1 → sunholo-0.87.0}/LICENSE.txt +0 -0
  8. {sunholo-0.86.1 → sunholo-0.87.0}/MANIFEST.in +0 -0
  9. {sunholo-0.86.1 → sunholo-0.87.0}/README.md +0 -0
  10. {sunholo-0.86.1 → sunholo-0.87.0}/setup.cfg +0 -0
  11. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/__init__.py +0 -0
  12. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/__init__.py +0 -0
  13. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/chat_history.py +0 -0
  14. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/dispatch_to_qa.py +0 -0
  15. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/fastapi/__init__.py +0 -0
  16. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/fastapi/base.py +0 -0
  17. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/fastapi/qna_routes.py +0 -0
  18. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/flask/__init__.py +0 -0
  19. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/flask/base.py +0 -0
  20. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/flask/qna_routes.py +0 -0
  21. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/langserve.py +0 -0
  22. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/pubsub.py +0 -0
  23. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/route.py +0 -0
  24. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/special_commands.py +0 -0
  25. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/agents/swagger.py +0 -0
  26. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/archive/__init__.py +0 -0
  27. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/archive/archive.py +0 -0
  28. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/auth/__init__.py +0 -0
  29. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/auth/gcloud.py +0 -0
  30. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/auth/refresh.py +0 -0
  31. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/auth/run.py +0 -0
  32. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/azure/__init__.py +0 -0
  33. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/azure/auth.py +0 -0
  34. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/azure/blobs.py +0 -0
  35. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/azure/event_grid.py +0 -0
  36. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/bots/__init__.py +0 -0
  37. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/bots/discord.py +0 -0
  38. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/bots/github_webhook.py +0 -0
  39. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/bots/webapp.py +0 -0
  40. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/__init__.py +0 -0
  41. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/azure.py +0 -0
  42. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/doc_handling.py +0 -0
  43. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/encode_metadata.py +0 -0
  44. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/images.py +0 -0
  45. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/loaders.py +0 -0
  46. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/message_data.py +0 -0
  47. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/pdfs.py +0 -0
  48. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/process_chunker_data.py +0 -0
  49. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/publish.py +0 -0
  50. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/pubsub.py +0 -0
  51. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/chunker/splitter.py +0 -0
  52. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/__init__.py +0 -0
  53. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/chat_vac.py +0 -0
  54. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/cli.py +0 -0
  55. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/cli_init.py +0 -0
  56. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/configs.py +0 -0
  57. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/deploy.py +0 -0
  58. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/embedder.py +0 -0
  59. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/merge_texts.py +0 -0
  60. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/run_proxy.py +0 -0
  61. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/sun_rich.py +0 -0
  62. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/swagger.py +0 -0
  63. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/cli/vertex.py +0 -0
  64. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/components/__init__.py +0 -0
  65. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/components/llm.py +0 -0
  66. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/components/retriever.py +0 -0
  67. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/components/vectorstore.py +0 -0
  68. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/custom_logging.py +0 -0
  69. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/__init__.py +0 -0
  70. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/alloydb.py +0 -0
  71. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/alloydb_client.py +0 -0
  72. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/database.py +0 -0
  73. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/lancedb.py +0 -0
  74. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/sql/sb/create_function.sql +0 -0
  75. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  76. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/sql/sb/create_table.sql +0 -0
  77. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  78. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/sql/sb/return_sources.sql +0 -0
  79. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/sql/sb/setup.sql +0 -0
  80. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/static_dbs.py +0 -0
  81. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/database/uuid.py +0 -0
  82. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/discovery_engine/__init__.py +0 -0
  83. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/discovery_engine/chunker_handler.py +0 -0
  84. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/discovery_engine/create_new.py +0 -0
  85. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  86. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  87. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/embedder/__init__.py +0 -0
  88. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/embedder/embed_chunk.py +0 -0
  89. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/excel/__init__.py +0 -0
  90. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/excel/plugin.py +0 -0
  91. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/gcs/__init__.py +0 -0
  92. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/gcs/download_folder.py +0 -0
  93. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/gcs/download_url.py +0 -0
  94. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/gcs/metadata.py +0 -0
  95. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/genai/__init__.py +0 -0
  96. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/genai/init.py +0 -0
  97. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/genai/safety.py +0 -0
  98. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/invoke/__init__.py +0 -0
  99. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/invoke/async_class.py +0 -0
  100. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/invoke/direct_vac_func.py +0 -0
  101. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/invoke/invoke_vac_utils.py +0 -0
  102. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/langfuse/__init__.py +0 -0
  103. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/langfuse/callback.py +0 -0
  104. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/langfuse/prompts.py +0 -0
  105. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/llamaindex/__init__.py +0 -0
  106. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/llamaindex/get_files.py +0 -0
  107. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/llamaindex/import_files.py +0 -0
  108. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/llamaindex/llamaindex_class.py +0 -0
  109. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/llamaindex/user_history.py +0 -0
  110. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/lookup/__init__.py +0 -0
  111. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/lookup/model_lookup.yaml +0 -0
  112. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/patches/__init__.py +0 -0
  113. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/patches/langchain/__init__.py +0 -0
  114. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/patches/langchain/lancedb.py +0 -0
  115. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/patches/langchain/vertexai.py +0 -0
  116. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/pubsub/__init__.py +0 -0
  117. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/pubsub/process_pubsub.py +0 -0
  118. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/pubsub/pubsub_manager.py +0 -0
  119. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/qna/__init__.py +0 -0
  120. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/qna/parsers.py +0 -0
  121. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/qna/retry.py +0 -0
  122. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/streaming/__init__.py +0 -0
  123. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/streaming/content_buffer.py +0 -0
  124. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/streaming/langserve.py +0 -0
  125. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/streaming/stream_lookup.py +0 -0
  126. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/streaming/streaming.py +0 -0
  127. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/summarise/__init__.py +0 -0
  128. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/summarise/summarise.py +0 -0
  129. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/tools/__init__.py +0 -0
  130. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/tools/web_browser.py +0 -0
  131. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/__init__.py +0 -0
  132. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/api_key.py +0 -0
  133. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/big_context.py +0 -0
  134. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/config.py +0 -0
  135. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/config_class.py +0 -0
  136. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/config_schema.py +0 -0
  137. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/gcp.py +0 -0
  138. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/gcp_project.py +0 -0
  139. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/parsers.py +0 -0
  140. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/timedelta.py +0 -0
  141. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/user_ids.py +0 -0
  142. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/utils/version.py +0 -0
  143. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/__init__.py +0 -0
  144. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/extensions_call.py +0 -0
  145. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/extensions_class.py +0 -0
  146. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/genai_functions.py +0 -0
  147. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/init.py +0 -0
  148. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/memory_tools.py +0 -0
  149. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/safety.py +0 -0
  150. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo/vertex/type_dict_to_json.py +0 -0
  151. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo.egg-info/SOURCES.txt +0 -0
  152. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo.egg-info/dependency_links.txt +0 -0
  153. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo.egg-info/entry_points.txt +0 -0
  154. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo.egg-info/requires.txt +0 -0
  155. {sunholo-0.86.1 → sunholo-0.87.0}/sunholo.egg-info/top_level.txt +0 -0
  156. {sunholo-0.86.1 → sunholo-0.87.0}/tests/test_chat_history.py +0 -0
  157. {sunholo-0.86.1 → sunholo-0.87.0}/tests/test_config.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.86.1
3
+ Version: 0.87.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.86.1.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.87.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.86.1'
4
+ version = '0.87.0'
5
5
 
6
6
  setup(
7
7
  name='sunholo',
@@ -53,10 +53,11 @@ if __name__ == "__main__":
53
53
  ```
54
54
 
55
55
  """
56
- def __init__(self, app, stream_interpreter, vac_interpreter):
56
+ def __init__(self, app, stream_interpreter, vac_interpreter, additional_routes=None):
57
57
  self.app = app
58
58
  self.stream_interpreter = stream_interpreter
59
59
  self.vac_interpreter = vac_interpreter
60
+ self.additional_routes = additional_routes if additional_routes is not None else []
60
61
  self.register_routes()
61
62
 
62
63
  def register_routes(self):
@@ -82,6 +83,47 @@ if __name__ == "__main__":
82
83
  # OpenAI compatible endpoint
83
84
  self.app.route('/openai/v1/chat/completions', methods=['POST'])(self.handle_openai_compatible_endpoint)
84
85
  self.app.route('/openai/v1/chat/completions/<vector_name>', methods=['POST'])(self.handle_openai_compatible_endpoint)
86
+ # Register additional routes
87
+ self.register_additional_routes()
88
+
89
+ def register_additional_routes(self):
90
+ """
91
+ Registers additional custom routes provided during initialization.
92
+
93
+ Example:
94
+ ```python
95
+ from flask import Flask, jsonify
96
+ from agents.flask import VACRoutes
97
+
98
+ app = Flask(__name__)
99
+
100
+ def stream_interpreter(question, vector_name, chat_history, **kwargs):
101
+ # Implement your streaming logic
102
+ ...
103
+
104
+ def vac_interpreter(question, vector_name, chat_history, **kwargs):
105
+ # Implement your static VAC logic
106
+ ...
107
+
108
+ def custom_handler():
109
+ return jsonify({"message": "Custom route!"})
110
+
111
+ custom_routes = [
112
+ {
113
+ "rule": "/custom",
114
+ "methods": ["GET"],
115
+ "handler": custom_handler
116
+ }
117
+ ]
118
+
119
+ vac_routes = VACRoutes(app, stream_interpreter, vac_interpreter, additional_routes=custom_routes)
120
+
121
+ if __name__ == "__main__":
122
+ app.run(debug=True)
123
+ ```
124
+ """
125
+ for route in self.additional_routes:
126
+ self.app.route(route["rule"], methods=route["methods"])(route["handler"])
85
127
 
86
128
  def home(self):
87
129
  return jsonify("OK")
@@ -121,7 +163,7 @@ if __name__ == "__main__":
121
163
  def handle_stream_vac(self, vector_name):
122
164
  observed_stream_interpreter = observe()(self.stream_interpreter)
123
165
  prep = self.prep_vac(request, vector_name)
124
- log.debug(f"Processing prep: {prep}")
166
+ log.info(f"Processing prep: {prep}")
125
167
  trace = prep["trace"]
126
168
  span = prep["span"]
127
169
  command_response = prep["command_response"]
@@ -438,8 +480,10 @@ if __name__ == "__main__":
438
480
  data["image_uri"] = image_uri
439
481
  data["mime"] = mime_type
440
482
  except Exception as e:
483
+ log.error(traceback.format_exc())
441
484
  return jsonify({'error': str(e), 'traceback': traceback.format_exc()}), 500
442
485
  else:
486
+ log.error("No file selected")
443
487
  return jsonify({"error": "No file selected"}), 400
444
488
  else:
445
489
  return jsonify({"error": "Unsupported content type"}), 400
@@ -70,6 +70,8 @@ def handle_base64_image(base64_data: str, vector_name: str, extension: str):
70
70
 
71
71
 
72
72
  def resolve_bucket(vector_name):
73
+ bucket_name = None
74
+
73
75
  if os.getenv('EXTENSIONS_BUCKET'):
74
76
  log.warning('Resolving to EXTENSIONS_BUCKET environment variable')
75
77
  return os.getenv('EXTENSIONS_BUCKET')
@@ -144,6 +146,7 @@ def add_file_to_gcs(filename: str,
144
146
  hour_prev = (now - datetime.timedelta(hours=1)).strftime("%H")
145
147
 
146
148
  if os.getenv('EXTENSIONS_BUCKET'):
149
+ log.warning(f"setting {bucket_filepath=} to {os.path.basename(filename)} basename due to EXTENSIONS_BUCKET setting")
147
150
  bucket_filepath = os.path.basename(filename)
148
151
 
149
152
  if not vector_name:
@@ -202,6 +202,10 @@ class GenAIFunctionProcessor:
202
202
  """
203
203
  api_requests_and_responses = []
204
204
 
205
+ if not full_response:
206
+ log.info("No response was found to process")
207
+ return api_requests_and_responses
208
+
205
209
  # Loop through each part in the response to handle multiple function calls
206
210
  #TODO: async
207
211
  for part in full_response.candidates[0].content.parts:
@@ -284,7 +288,7 @@ class GenAIFunctionProcessor:
284
288
  if generation_config is None:
285
289
  generation_config = {
286
290
  "temperature": 0.1,
287
- "max_output_tokens": 4000,
291
+ "max_output_tokens": 8000,
288
292
  }
289
293
 
290
294
  # Extract the functions from the dictionary to pass into the model
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.86.1
3
+ Version: 0.87.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.86.1.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.87.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
File without changes
File without changes
File without changes