sunholo 0.89.2__tar.gz → 0.89.4__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 (160) hide show
  1. {sunholo-0.89.2 → sunholo-0.89.4}/PKG-INFO +2 -2
  2. {sunholo-0.89.2 → sunholo-0.89.4}/setup.py +1 -1
  3. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/flask/vac_routes.py +35 -3
  4. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/langfuse/evals.py +5 -4
  5. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo.egg-info/PKG-INFO +2 -2
  6. {sunholo-0.89.2 → sunholo-0.89.4}/LICENSE.txt +0 -0
  7. {sunholo-0.89.2 → sunholo-0.89.4}/MANIFEST.in +0 -0
  8. {sunholo-0.89.2 → sunholo-0.89.4}/README.md +0 -0
  9. {sunholo-0.89.2 → sunholo-0.89.4}/setup.cfg +0 -0
  10. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/__init__.py +0 -0
  11. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/__init__.py +0 -0
  12. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/chat_history.py +0 -0
  13. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/dispatch_to_qa.py +0 -0
  14. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/fastapi/__init__.py +0 -0
  15. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/fastapi/base.py +0 -0
  16. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/fastapi/qna_routes.py +0 -0
  17. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/flask/__init__.py +0 -0
  18. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/flask/base.py +0 -0
  19. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/flask/qna_routes.py +0 -0
  20. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/langserve.py +0 -0
  21. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/pubsub.py +0 -0
  22. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/route.py +0 -0
  23. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/special_commands.py +0 -0
  24. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/agents/swagger.py +0 -0
  25. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/archive/__init__.py +0 -0
  26. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/archive/archive.py +0 -0
  27. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/auth/__init__.py +0 -0
  28. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/auth/gcloud.py +0 -0
  29. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/auth/refresh.py +0 -0
  30. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/auth/run.py +0 -0
  31. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/azure/__init__.py +0 -0
  32. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/azure/auth.py +0 -0
  33. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/azure/blobs.py +0 -0
  34. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/azure/event_grid.py +0 -0
  35. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/bots/__init__.py +0 -0
  36. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/bots/discord.py +0 -0
  37. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/bots/github_webhook.py +0 -0
  38. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/bots/webapp.py +0 -0
  39. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/__init__.py +0 -0
  40. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/azure.py +0 -0
  41. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/doc_handling.py +0 -0
  42. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/encode_metadata.py +0 -0
  43. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/images.py +0 -0
  44. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/loaders.py +0 -0
  45. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/message_data.py +0 -0
  46. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/pdfs.py +0 -0
  47. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/process_chunker_data.py +0 -0
  48. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/publish.py +0 -0
  49. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/pubsub.py +0 -0
  50. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/chunker/splitter.py +0 -0
  51. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/__init__.py +0 -0
  52. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/chat_vac.py +0 -0
  53. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/cli.py +0 -0
  54. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/cli_init.py +0 -0
  55. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/configs.py +0 -0
  56. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/deploy.py +0 -0
  57. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/embedder.py +0 -0
  58. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/merge_texts.py +0 -0
  59. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/run_proxy.py +0 -0
  60. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/sun_rich.py +0 -0
  61. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/swagger.py +0 -0
  62. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/cli/vertex.py +0 -0
  63. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/components/__init__.py +0 -0
  64. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/components/llm.py +0 -0
  65. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/components/retriever.py +0 -0
  66. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/components/vectorstore.py +0 -0
  67. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/custom_logging.py +0 -0
  68. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/__init__.py +0 -0
  69. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/alloydb.py +0 -0
  70. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/alloydb_client.py +0 -0
  71. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/database.py +0 -0
  72. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/lancedb.py +0 -0
  73. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/sql/sb/create_function.sql +0 -0
  74. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  75. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/sql/sb/create_table.sql +0 -0
  76. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  77. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/sql/sb/return_sources.sql +0 -0
  78. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/sql/sb/setup.sql +0 -0
  79. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/static_dbs.py +0 -0
  80. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/database/uuid.py +0 -0
  81. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/discovery_engine/__init__.py +0 -0
  82. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/discovery_engine/chunker_handler.py +0 -0
  83. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/discovery_engine/create_new.py +0 -0
  84. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  85. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  86. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/embedder/__init__.py +0 -0
  87. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/embedder/embed_chunk.py +0 -0
  88. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/excel/__init__.py +0 -0
  89. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/excel/plugin.py +0 -0
  90. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/gcs/__init__.py +0 -0
  91. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/gcs/add_file.py +0 -0
  92. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/gcs/download_folder.py +0 -0
  93. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/gcs/download_url.py +0 -0
  94. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/gcs/metadata.py +0 -0
  95. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/genai/__init__.py +0 -0
  96. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/genai/init.py +0 -0
  97. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/genai/process_funcs_cls.py +0 -0
  98. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/genai/safety.py +0 -0
  99. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/invoke/__init__.py +0 -0
  100. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/invoke/async_class.py +0 -0
  101. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/invoke/direct_vac_func.py +0 -0
  102. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/invoke/invoke_vac_utils.py +0 -0
  103. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/langfuse/__init__.py +0 -0
  104. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/langfuse/callback.py +0 -0
  105. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/langfuse/prompts.py +0 -0
  106. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/llamaindex/__init__.py +0 -0
  107. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/llamaindex/get_files.py +0 -0
  108. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/llamaindex/import_files.py +0 -0
  109. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/llamaindex/llamaindex_class.py +0 -0
  110. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/llamaindex/user_history.py +0 -0
  111. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/lookup/__init__.py +0 -0
  112. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/lookup/model_lookup.yaml +0 -0
  113. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/patches/__init__.py +0 -0
  114. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/patches/langchain/__init__.py +0 -0
  115. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/patches/langchain/lancedb.py +0 -0
  116. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/patches/langchain/vertexai.py +0 -0
  117. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/pubsub/__init__.py +0 -0
  118. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/pubsub/process_pubsub.py +0 -0
  119. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/pubsub/pubsub_manager.py +0 -0
  120. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/qna/__init__.py +0 -0
  121. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/qna/parsers.py +0 -0
  122. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/qna/retry.py +0 -0
  123. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/streaming/__init__.py +0 -0
  124. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/streaming/content_buffer.py +0 -0
  125. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/streaming/langserve.py +0 -0
  126. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/streaming/stream_lookup.py +0 -0
  127. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/streaming/streaming.py +0 -0
  128. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/summarise/__init__.py +0 -0
  129. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/summarise/summarise.py +0 -0
  130. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/terraform/__init__.py +0 -0
  131. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/terraform/tfvars_editor.py +0 -0
  132. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/tools/__init__.py +0 -0
  133. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/tools/web_browser.py +0 -0
  134. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/__init__.py +0 -0
  135. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/api_key.py +0 -0
  136. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/big_context.py +0 -0
  137. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/config.py +0 -0
  138. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/config_class.py +0 -0
  139. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/config_schema.py +0 -0
  140. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/gcp.py +0 -0
  141. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/gcp_project.py +0 -0
  142. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/parsers.py +0 -0
  143. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/timedelta.py +0 -0
  144. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/user_ids.py +0 -0
  145. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/utils/version.py +0 -0
  146. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/__init__.py +0 -0
  147. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/extensions_call.py +0 -0
  148. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/extensions_class.py +0 -0
  149. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/genai_functions.py +0 -0
  150. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/init.py +0 -0
  151. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/memory_tools.py +0 -0
  152. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/safety.py +0 -0
  153. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo/vertex/type_dict_to_json.py +0 -0
  154. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo.egg-info/SOURCES.txt +0 -0
  155. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo.egg-info/dependency_links.txt +0 -0
  156. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo.egg-info/entry_points.txt +0 -0
  157. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo.egg-info/requires.txt +0 -0
  158. {sunholo-0.89.2 → sunholo-0.89.4}/sunholo.egg-info/top_level.txt +0 -0
  159. {sunholo-0.89.2 → sunholo-0.89.4}/tests/test_chat_history.py +0 -0
  160. {sunholo-0.89.2 → sunholo-0.89.4}/tests/test_config.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.89.2
3
+ Version: 0.89.4
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.89.2.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.89.4.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -1,6 +1,6 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
- version = '0.89.2'
3
+ version = '0.89.4'
4
4
 
5
5
  setup(
6
6
  name='sunholo',
@@ -2,6 +2,7 @@ import json
2
2
  import traceback
3
3
  import datetime
4
4
  import uuid
5
+ import random
5
6
 
6
7
  from ...agents import extract_chat_history, handle_special_commands
7
8
  from ...qna.parsers import parse_output
@@ -18,12 +19,12 @@ from datetime import timedelta
18
19
  try:
19
20
  from flask import request, jsonify, Response
20
21
  except ImportError:
21
- pass
22
+ pass
22
23
 
23
24
  try:
24
- from langfuse.decorators import langfuse_context, observe
25
+ from ..pubsub import PubSubManager
25
26
  except ImportError:
26
- pass
27
+ PubSubManager = None
27
28
 
28
29
  # Cache dictionary to store validated API keys
29
30
  api_key_cache = {}
@@ -221,8 +222,38 @@ if __name__ == "__main__":
221
222
  generation.end(output=response)
222
223
  span.end(output=response)
223
224
  trace.update(output=response)
225
+ self.langfuse_eval_response(trace.id, all_input.get('eval_percent', 0.01))
224
226
 
225
227
  return response
228
+
229
+ def langfuse_eval_response(trace_id, eval_percent=0.01):
230
+ """
231
+ Sends an evaluation message based on a probability defined by eval_percent.
232
+
233
+ Args:
234
+ eval_percent (float): The probability (0 to 1) of triggering the evaluation.
235
+ trace_id (str): The trace identifier for the evaluation.
236
+
237
+ Returns:
238
+ None
239
+ """
240
+ if eval_percent > 1 or eval_percent < 0:
241
+ raise ValueError("eval_percent must be a float between 0 and 1.")
242
+
243
+ # Generate a random float between 0 and 1
244
+ random_value = random.random()
245
+
246
+ # Check if evaluation should be triggered
247
+ if random_value < eval_percent:
248
+ if PubSubManager:
249
+ try:
250
+ pubsub_manager = PubSubManager("langfuse_evals", pubsub_topic="topicid-to-langfuse-eval")
251
+ the_data = {"trace_id": trace_id}
252
+ pubsub_manager.publish_message(the_data)
253
+ except Exception as e:
254
+ log.warning(f"Could not publish message for 'langfuse_evals' to topicid-to-langfuse-eval - {str(e)}")
255
+ else:
256
+ log.info(f"Did not do Langfuse eval due to random sampling not passed: {eval_percent=}")
226
257
 
227
258
  def handle_process_vac(self, vector_name):
228
259
  observed_vac_interpreter = self.vac_interpreter
@@ -268,6 +299,7 @@ if __name__ == "__main__":
268
299
  if trace:
269
300
  span.end(output=jsonify(bot_output))
270
301
  trace.update(output=jsonify(bot_output))
302
+ self.langfuse_eval_response(trace.id, all_input.get('eval_percent', 0.01))
271
303
 
272
304
  # {'answer': 'output'}
273
305
  return jsonify(bot_output)
@@ -38,8 +38,9 @@ def pubsub_to_evals(data: dict, eval_funcs: list=[eval_length]) -> dict:
38
38
  def direct_langfuse_evals(data, eval_funcs: list=[eval_length]):
39
39
  if 'trace_id' not in data:
40
40
  raise ValueError('No trace_id found in data')
41
-
42
- return do_evals(data['trace_id'], eval_funcs, **data)
41
+ trace_id = data.pop('trace_id', None)
42
+
43
+ return do_evals(trace_id, eval_funcs, **data)
43
44
 
44
45
 
45
46
  def do_evals(trace_id, eval_funcs: list=[eval_length], **kwargs) -> dict:
@@ -51,7 +52,7 @@ def do_evals(trace_id, eval_funcs: list=[eval_length], **kwargs) -> dict:
51
52
  )
52
53
 
53
54
  # Fetch the latest trace (or modify as needed to fetch a specific trace)
54
- trace = langfuse.fetch_trace(id=trace_id)
55
+ trace = langfuse.get_trace(id=trace_id)
55
56
 
56
57
  if trace.output is None:
57
58
  raise ValueError("Trace {trace.name} had no generated output, it was skipped")
@@ -64,7 +65,7 @@ def do_evals(trace_id, eval_funcs: list=[eval_length], **kwargs) -> dict:
64
65
 
65
66
  eval_name = eval_func.__name__
66
67
 
67
- if 'score' or 'reason' not in eval_result:
68
+ if 'score' and 'reason' not in eval_result:
68
69
  raise ValueError(f"Trace {trace.name} using {eval_name=} did not return a dict with 'score' and 'reason': {eval_result=}")
69
70
 
70
71
  log.info(f"TraceId {trace.id} with name {trace.name} had {eval_name=} with score {eval_result=}")
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.89.2
3
+ Version: 0.89.4
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.89.2.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.89.4.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