sunholo 0.86.0__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.0 → sunholo-0.87.0}/PKG-INFO +2 -2
  2. {sunholo-0.86.0 → sunholo-0.87.0}/setup.py +1 -1
  3. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/flask/vac_routes.py +46 -2
  4. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/gcs/add_file.py +3 -0
  5. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/genai/process_funcs_cls.py +15 -2
  6. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo.egg-info/PKG-INFO +2 -2
  7. {sunholo-0.86.0 → sunholo-0.87.0}/LICENSE.txt +0 -0
  8. {sunholo-0.86.0 → sunholo-0.87.0}/MANIFEST.in +0 -0
  9. {sunholo-0.86.0 → sunholo-0.87.0}/README.md +0 -0
  10. {sunholo-0.86.0 → sunholo-0.87.0}/setup.cfg +0 -0
  11. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/__init__.py +0 -0
  12. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/__init__.py +0 -0
  13. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/chat_history.py +0 -0
  14. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/dispatch_to_qa.py +0 -0
  15. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/fastapi/__init__.py +0 -0
  16. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/fastapi/base.py +0 -0
  17. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/fastapi/qna_routes.py +0 -0
  18. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/flask/__init__.py +0 -0
  19. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/flask/base.py +0 -0
  20. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/flask/qna_routes.py +0 -0
  21. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/langserve.py +0 -0
  22. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/pubsub.py +0 -0
  23. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/route.py +0 -0
  24. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/special_commands.py +0 -0
  25. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/agents/swagger.py +0 -0
  26. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/archive/__init__.py +0 -0
  27. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/archive/archive.py +0 -0
  28. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/auth/__init__.py +0 -0
  29. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/auth/gcloud.py +0 -0
  30. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/auth/refresh.py +0 -0
  31. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/auth/run.py +0 -0
  32. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/azure/__init__.py +0 -0
  33. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/azure/auth.py +0 -0
  34. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/azure/blobs.py +0 -0
  35. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/azure/event_grid.py +0 -0
  36. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/bots/__init__.py +0 -0
  37. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/bots/discord.py +0 -0
  38. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/bots/github_webhook.py +0 -0
  39. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/bots/webapp.py +0 -0
  40. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/__init__.py +0 -0
  41. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/azure.py +0 -0
  42. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/doc_handling.py +0 -0
  43. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/encode_metadata.py +0 -0
  44. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/images.py +0 -0
  45. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/loaders.py +0 -0
  46. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/message_data.py +0 -0
  47. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/pdfs.py +0 -0
  48. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/process_chunker_data.py +0 -0
  49. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/publish.py +0 -0
  50. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/pubsub.py +0 -0
  51. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/chunker/splitter.py +0 -0
  52. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/__init__.py +0 -0
  53. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/chat_vac.py +0 -0
  54. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/cli.py +0 -0
  55. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/cli_init.py +0 -0
  56. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/configs.py +0 -0
  57. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/deploy.py +0 -0
  58. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/embedder.py +0 -0
  59. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/merge_texts.py +0 -0
  60. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/run_proxy.py +0 -0
  61. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/sun_rich.py +0 -0
  62. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/swagger.py +0 -0
  63. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/cli/vertex.py +0 -0
  64. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/components/__init__.py +0 -0
  65. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/components/llm.py +0 -0
  66. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/components/retriever.py +0 -0
  67. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/components/vectorstore.py +0 -0
  68. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/custom_logging.py +0 -0
  69. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/__init__.py +0 -0
  70. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/alloydb.py +0 -0
  71. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/alloydb_client.py +0 -0
  72. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/database.py +0 -0
  73. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/lancedb.py +0 -0
  74. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/sql/sb/create_function.sql +0 -0
  75. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  76. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/sql/sb/create_table.sql +0 -0
  77. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  78. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/sql/sb/return_sources.sql +0 -0
  79. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/sql/sb/setup.sql +0 -0
  80. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/static_dbs.py +0 -0
  81. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/database/uuid.py +0 -0
  82. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/discovery_engine/__init__.py +0 -0
  83. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/discovery_engine/chunker_handler.py +0 -0
  84. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/discovery_engine/create_new.py +0 -0
  85. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  86. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  87. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/embedder/__init__.py +0 -0
  88. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/embedder/embed_chunk.py +0 -0
  89. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/excel/__init__.py +0 -0
  90. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/excel/plugin.py +0 -0
  91. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/gcs/__init__.py +0 -0
  92. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/gcs/download_folder.py +0 -0
  93. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/gcs/download_url.py +0 -0
  94. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/gcs/metadata.py +0 -0
  95. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/genai/__init__.py +0 -0
  96. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/genai/init.py +0 -0
  97. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/genai/safety.py +0 -0
  98. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/invoke/__init__.py +0 -0
  99. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/invoke/async_class.py +0 -0
  100. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/invoke/direct_vac_func.py +0 -0
  101. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/invoke/invoke_vac_utils.py +0 -0
  102. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/langfuse/__init__.py +0 -0
  103. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/langfuse/callback.py +0 -0
  104. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/langfuse/prompts.py +0 -0
  105. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/llamaindex/__init__.py +0 -0
  106. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/llamaindex/get_files.py +0 -0
  107. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/llamaindex/import_files.py +0 -0
  108. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/llamaindex/llamaindex_class.py +0 -0
  109. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/llamaindex/user_history.py +0 -0
  110. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/lookup/__init__.py +0 -0
  111. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/lookup/model_lookup.yaml +0 -0
  112. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/patches/__init__.py +0 -0
  113. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/patches/langchain/__init__.py +0 -0
  114. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/patches/langchain/lancedb.py +0 -0
  115. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/patches/langchain/vertexai.py +0 -0
  116. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/pubsub/__init__.py +0 -0
  117. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/pubsub/process_pubsub.py +0 -0
  118. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/pubsub/pubsub_manager.py +0 -0
  119. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/qna/__init__.py +0 -0
  120. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/qna/parsers.py +0 -0
  121. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/qna/retry.py +0 -0
  122. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/streaming/__init__.py +0 -0
  123. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/streaming/content_buffer.py +0 -0
  124. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/streaming/langserve.py +0 -0
  125. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/streaming/stream_lookup.py +0 -0
  126. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/streaming/streaming.py +0 -0
  127. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/summarise/__init__.py +0 -0
  128. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/summarise/summarise.py +0 -0
  129. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/tools/__init__.py +0 -0
  130. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/tools/web_browser.py +0 -0
  131. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/__init__.py +0 -0
  132. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/api_key.py +0 -0
  133. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/big_context.py +0 -0
  134. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/config.py +0 -0
  135. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/config_class.py +0 -0
  136. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/config_schema.py +0 -0
  137. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/gcp.py +0 -0
  138. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/gcp_project.py +0 -0
  139. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/parsers.py +0 -0
  140. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/timedelta.py +0 -0
  141. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/user_ids.py +0 -0
  142. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/utils/version.py +0 -0
  143. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/__init__.py +0 -0
  144. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/extensions_call.py +0 -0
  145. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/extensions_class.py +0 -0
  146. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/genai_functions.py +0 -0
  147. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/init.py +0 -0
  148. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/memory_tools.py +0 -0
  149. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/safety.py +0 -0
  150. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo/vertex/type_dict_to_json.py +0 -0
  151. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo.egg-info/SOURCES.txt +0 -0
  152. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo.egg-info/dependency_links.txt +0 -0
  153. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo.egg-info/entry_points.txt +0 -0
  154. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo.egg-info/requires.txt +0 -0
  155. {sunholo-0.86.0 → sunholo-0.87.0}/sunholo.egg-info/top_level.txt +0 -0
  156. {sunholo-0.86.0 → sunholo-0.87.0}/tests/test_chat_history.py +0 -0
  157. {sunholo-0.86.0 → 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.0
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.0.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.0'
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:
@@ -6,6 +6,8 @@ from .safety import genai_safety
6
6
 
7
7
  from typing import TYPE_CHECKING, Union
8
8
 
9
+ import json
10
+
9
11
  try:
10
12
  import google.generativeai as genai
11
13
  except ImportError:
@@ -111,7 +113,7 @@ class GenAIFunctionProcessor:
111
113
  Part(
112
114
  function_response=genai.protos.FunctionResponse(
113
115
  name=part[0],
114
- response={"result": part[2]}
116
+ response={"result": part[2], "args": json.dumps(part[1])}
115
117
  )
116
118
  )
117
119
  )
@@ -146,6 +148,13 @@ class GenAIFunctionProcessor:
146
148
  if isinstance(result, list) and target_value in result:
147
149
  log.info(f"Target value '{target_value}' found in the result of function '{function_name}'.")
148
150
  return True
151
+ elif isinstance(result, dict) and isinstance(target_value, dict):
152
+ for key, expected_value in target_value.items():
153
+ if key in result:
154
+ if result[key] == expected_value:
155
+ log.info(f"The key '{key}' has the same value in both dictionaries.")
156
+ return True
157
+ return False
149
158
  elif result == target_value:
150
159
  log.info(f"Target value '{target_value}' found in the result of function '{function_name}'.")
151
160
  return True
@@ -193,6 +202,10 @@ class GenAIFunctionProcessor:
193
202
  """
194
203
  api_requests_and_responses = []
195
204
 
205
+ if not full_response:
206
+ log.info("No response was found to process")
207
+ return api_requests_and_responses
208
+
196
209
  # Loop through each part in the response to handle multiple function calls
197
210
  #TODO: async
198
211
  for part in full_response.candidates[0].content.parts:
@@ -275,7 +288,7 @@ class GenAIFunctionProcessor:
275
288
  if generation_config is None:
276
289
  generation_config = {
277
290
  "temperature": 0.1,
278
- "max_output_tokens": 4000,
291
+ "max_output_tokens": 8000,
279
292
  }
280
293
 
281
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.0
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.0.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