sunholo 0.96.7__tar.gz → 0.96.8__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 (161) hide show
  1. {sunholo-0.96.7 → sunholo-0.96.8}/PKG-INFO +2 -2
  2. {sunholo-0.96.7 → sunholo-0.96.8}/setup.py +1 -1
  3. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/discovery_engine/discovery_engine_client.py +98 -2
  4. sunholo-0.96.8/sunholo/discovery_engine/get_ai_search_chunks.py +101 -0
  5. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo.egg-info/PKG-INFO +2 -2
  6. sunholo-0.96.7/sunholo/discovery_engine/get_ai_search_chunks.py +0 -53
  7. {sunholo-0.96.7 → sunholo-0.96.8}/LICENSE.txt +0 -0
  8. {sunholo-0.96.7 → sunholo-0.96.8}/MANIFEST.in +0 -0
  9. {sunholo-0.96.7 → sunholo-0.96.8}/README.md +0 -0
  10. {sunholo-0.96.7 → sunholo-0.96.8}/setup.cfg +0 -0
  11. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/__init__.py +0 -0
  12. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/__init__.py +0 -0
  13. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/chat_history.py +0 -0
  14. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/dispatch_to_qa.py +0 -0
  15. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/fastapi/__init__.py +0 -0
  16. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/fastapi/base.py +0 -0
  17. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/fastapi/qna_routes.py +0 -0
  18. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/flask/__init__.py +0 -0
  19. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/flask/base.py +0 -0
  20. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/flask/qna_routes.py +0 -0
  21. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/flask/vac_routes.py +0 -0
  22. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/langserve.py +0 -0
  23. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/pubsub.py +0 -0
  24. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/route.py +0 -0
  25. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/special_commands.py +0 -0
  26. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/agents/swagger.py +0 -0
  27. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/archive/__init__.py +0 -0
  28. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/archive/archive.py +0 -0
  29. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/auth/__init__.py +0 -0
  30. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/auth/gcloud.py +0 -0
  31. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/auth/refresh.py +0 -0
  32. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/auth/run.py +0 -0
  33. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/azure/__init__.py +0 -0
  34. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/azure/auth.py +0 -0
  35. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/azure/blobs.py +0 -0
  36. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/azure/event_grid.py +0 -0
  37. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/bots/__init__.py +0 -0
  38. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/bots/discord.py +0 -0
  39. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/bots/github_webhook.py +0 -0
  40. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/bots/webapp.py +0 -0
  41. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/__init__.py +0 -0
  42. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/azure.py +0 -0
  43. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/doc_handling.py +0 -0
  44. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/encode_metadata.py +0 -0
  45. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/images.py +0 -0
  46. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/loaders.py +0 -0
  47. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/message_data.py +0 -0
  48. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/pdfs.py +0 -0
  49. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/process_chunker_data.py +0 -0
  50. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/publish.py +0 -0
  51. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/pubsub.py +0 -0
  52. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/chunker/splitter.py +0 -0
  53. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/__init__.py +0 -0
  54. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/chat_vac.py +0 -0
  55. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/cli.py +0 -0
  56. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/cli_init.py +0 -0
  57. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/configs.py +0 -0
  58. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/deploy.py +0 -0
  59. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/embedder.py +0 -0
  60. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/merge_texts.py +0 -0
  61. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/run_proxy.py +0 -0
  62. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/sun_rich.py +0 -0
  63. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/swagger.py +0 -0
  64. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/cli/vertex.py +0 -0
  65. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/components/__init__.py +0 -0
  66. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/components/llm.py +0 -0
  67. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/components/retriever.py +0 -0
  68. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/components/vectorstore.py +0 -0
  69. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/custom_logging.py +0 -0
  70. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/__init__.py +0 -0
  71. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/alloydb.py +0 -0
  72. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/alloydb_client.py +0 -0
  73. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/database.py +0 -0
  74. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/lancedb.py +0 -0
  75. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/sql/sb/create_function.sql +0 -0
  76. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  77. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/sql/sb/create_table.sql +0 -0
  78. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  79. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/sql/sb/return_sources.sql +0 -0
  80. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/sql/sb/setup.sql +0 -0
  81. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/static_dbs.py +0 -0
  82. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/database/uuid.py +0 -0
  83. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/discovery_engine/__init__.py +0 -0
  84. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/discovery_engine/chunker_handler.py +0 -0
  85. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/discovery_engine/create_new.py +0 -0
  86. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/embedder/__init__.py +0 -0
  87. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/embedder/embed_chunk.py +0 -0
  88. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/excel/__init__.py +0 -0
  89. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/excel/plugin.py +0 -0
  90. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/gcs/__init__.py +0 -0
  91. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/gcs/add_file.py +0 -0
  92. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/gcs/download_folder.py +0 -0
  93. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/gcs/download_url.py +0 -0
  94. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/gcs/metadata.py +0 -0
  95. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/genai/__init__.py +0 -0
  96. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/genai/init.py +0 -0
  97. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/genai/process_funcs_cls.py +0 -0
  98. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/genai/safety.py +0 -0
  99. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/invoke/__init__.py +0 -0
  100. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/invoke/async_class.py +0 -0
  101. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/invoke/direct_vac_func.py +0 -0
  102. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/invoke/invoke_vac_utils.py +0 -0
  103. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/langfuse/__init__.py +0 -0
  104. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/langfuse/callback.py +0 -0
  105. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/langfuse/evals.py +0 -0
  106. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/langfuse/prompts.py +0 -0
  107. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/llamaindex/__init__.py +0 -0
  108. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/llamaindex/get_files.py +0 -0
  109. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/llamaindex/import_files.py +0 -0
  110. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/llamaindex/llamaindex_class.py +0 -0
  111. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/llamaindex/user_history.py +0 -0
  112. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/lookup/__init__.py +0 -0
  113. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/lookup/model_lookup.yaml +0 -0
  114. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/patches/__init__.py +0 -0
  115. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/patches/langchain/__init__.py +0 -0
  116. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/patches/langchain/lancedb.py +0 -0
  117. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/patches/langchain/vertexai.py +0 -0
  118. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/pubsub/__init__.py +0 -0
  119. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/pubsub/process_pubsub.py +0 -0
  120. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/pubsub/pubsub_manager.py +0 -0
  121. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/qna/__init__.py +0 -0
  122. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/qna/parsers.py +0 -0
  123. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/qna/retry.py +0 -0
  124. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/streaming/__init__.py +0 -0
  125. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/streaming/content_buffer.py +0 -0
  126. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/streaming/langserve.py +0 -0
  127. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/streaming/stream_lookup.py +0 -0
  128. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/streaming/streaming.py +0 -0
  129. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/summarise/__init__.py +0 -0
  130. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/summarise/summarise.py +0 -0
  131. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/terraform/__init__.py +0 -0
  132. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/terraform/tfvars_editor.py +0 -0
  133. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/tools/__init__.py +0 -0
  134. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/tools/web_browser.py +0 -0
  135. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/__init__.py +0 -0
  136. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/api_key.py +0 -0
  137. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/big_context.py +0 -0
  138. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/config.py +0 -0
  139. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/config_class.py +0 -0
  140. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/config_schema.py +0 -0
  141. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/gcp.py +0 -0
  142. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/gcp_project.py +0 -0
  143. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/parsers.py +0 -0
  144. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/timedelta.py +0 -0
  145. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/user_ids.py +0 -0
  146. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/utils/version.py +0 -0
  147. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/__init__.py +0 -0
  148. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/extensions_call.py +0 -0
  149. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/extensions_class.py +0 -0
  150. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/genai_functions.py +0 -0
  151. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/init.py +0 -0
  152. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/memory_tools.py +0 -0
  153. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/safety.py +0 -0
  154. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo/vertex/type_dict_to_json.py +0 -0
  155. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo.egg-info/SOURCES.txt +0 -0
  156. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo.egg-info/dependency_links.txt +0 -0
  157. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo.egg-info/entry_points.txt +0 -0
  158. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo.egg-info/requires.txt +0 -0
  159. {sunholo-0.96.7 → sunholo-0.96.8}/sunholo.egg-info/top_level.txt +0 -0
  160. {sunholo-0.96.7 → sunholo-0.96.8}/tests/test_chat_history.py +0 -0
  161. {sunholo-0.96.7 → sunholo-0.96.8}/tests/test_config.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.96.7
3
+ Version: 0.96.8
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.96.7.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.96.8.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.96.7'
3
+ version = '0.96.8'
4
4
 
5
5
  setup(
6
6
  name='sunholo',
@@ -69,8 +69,10 @@ class DiscoveryEngineClient:
69
69
  self.store_client = discoveryengine.DataStoreServiceClient(client_options=client_options)
70
70
  self.doc_client = discoveryengine.DocumentServiceClient(client_options=client_options)
71
71
  self.search_client = discoveryengine.SearchServiceClient(client_options=client_options)
72
+ self.async_search_client = discoveryengine.SearchServiceAsyncClient(client_options=client_options)
72
73
  self.engine_client = discoveryengine.EngineServiceClient(client_options=client_options)
73
74
 
75
+
74
76
  @classmethod
75
77
  def my_retry(cls):
76
78
  return Retry(
@@ -221,6 +223,71 @@ class DiscoveryEngineClient:
221
223
  log.info(f"Discovery engine request: {search_request=}")
222
224
  search_response = self.search_client.search(search_request)
223
225
 
226
+ if parse_chunks_to_string:
227
+
228
+ big_string = self.process_chunks(search_response)
229
+ log.info(f"Discovery engine chunks string sample: {big_string[:100]}")
230
+
231
+ return big_string
232
+
233
+ log.info("Discovery engine response object")
234
+ return search_response
235
+
236
+ async def async_get_chunks(
237
+ self,
238
+ query: str,
239
+ num_previous_chunks: int = 3,
240
+ num_next_chunks: int = 3,
241
+ page_size: int = 10,
242
+ parse_chunks_to_string: bool = True,
243
+ serving_config: str = "default_serving_config",
244
+ ):
245
+ """Retrieves chunks or documents based on a query.
246
+
247
+ Args:
248
+ query (str): The search query.
249
+ collection_id (str): The ID of the collection to search.
250
+ num_previous_chunks (int, optional): Number of previous chunks to return for context (default is 3).
251
+ num_next_chunks (int, optional): Number of next chunks to return for context (default is 3).
252
+ page_size (int, optional): The maximum number of results to return per page (default is 10).
253
+ parse_chunks_to_string: If True will put chunks in one big string, False will return object
254
+ serving_config: The resource name of the Search serving config
255
+
256
+ Returns:
257
+ discoveryengine.SearchResponse: The search response object containing the search results.
258
+
259
+ Example:
260
+ ```python
261
+ search_response = client.get_chunks('your query', 'your_collection_id')
262
+ for result in search_response.results:
263
+ for chunk in result.document.chunks:
264
+ print(f"Chunk: {chunk.snippet}, document name: {chunk.document_name}")
265
+ ```
266
+ """
267
+
268
+ serving_config_path = self.async_search_client.serving_config_path(
269
+ self.project_id,
270
+ self.location,
271
+ self.data_store_id,
272
+ serving_config
273
+ )
274
+
275
+
276
+ search_request = discoveryengine.SearchRequest(
277
+ serving_config=serving_config_path,
278
+ query=query,
279
+ page_size=page_size,
280
+ content_search_spec=discoveryengine.SearchRequest.ContentSearchSpec(
281
+ search_result_mode="CHUNKS",
282
+ chunk_spec=discoveryengine.SearchRequest.ContentSearchSpec.ChunkSpec(
283
+ num_previous_chunks=num_previous_chunks,
284
+ num_next_chunks=num_next_chunks,
285
+ ),
286
+ ),
287
+ )
288
+
289
+ log.info(f"Discovery engine async request: {search_request=}")
290
+ search_response = self.async_search_client.search(search_request)
224
291
 
225
292
  if parse_chunks_to_string:
226
293
 
@@ -232,7 +299,7 @@ class DiscoveryEngineClient:
232
299
  log.info("Discovery engine response object")
233
300
  return search_response
234
301
 
235
- def chunk_format(self, chunk: Chunk):
302
+ def chunk_format(self, chunk):
236
303
  return (
237
304
  f"# {chunk.id}\n"
238
305
  f"{chunk.content}\n"
@@ -241,7 +308,7 @@ class DiscoveryEngineClient:
241
308
  f"Document Title: {chunk.document_metadata.title}\n"
242
309
  )
243
310
 
244
- def process_chunks(self, response: SearchResponse):
311
+ def process_chunks(self, response):
245
312
  all_chunks = []
246
313
 
247
314
  # Check if the response contains results
@@ -269,6 +336,35 @@ class DiscoveryEngineClient:
269
336
  result_string = "\n".join(all_chunks)
270
337
 
271
338
  return result_string
339
+
340
+ async def async_process_chunks(self, response):
341
+ all_chunks = []
342
+
343
+ # Check if the response contains results
344
+ if not hasattr(response, 'results') or not response.results:
345
+ raise ValueError(f'No results found in response: {response=}')
346
+
347
+ # Iterate through each result in the response
348
+ async for result in response.results:
349
+ chunk = result.chunk
350
+ chunk_metadata = chunk.ChunkMetadata
351
+
352
+ if hasattr(chunk_metadata, 'previous_chunks'):
353
+ # Process previous chunks
354
+ for prev_chunk in chunk_metadata.previous_chunks:
355
+ all_chunks.append(self.chunk_format(prev_chunk))
356
+
357
+ all_chunks.append(self.chunk_format(chunk))
358
+
359
+ # Process next chunks
360
+ if hasattr(chunk_metadata, 'next_chunks'):
361
+ for next_chunk in chunk_metadata.next_chunks:
362
+ all_chunks.append(self.chunk_format(next_chunk))
363
+
364
+ # Combine all chunks into one long string
365
+ result_string = "\n".join(all_chunks)
366
+
367
+ return result_string
272
368
 
273
369
  def create_engine(self,
274
370
  engine_id: str,
@@ -0,0 +1,101 @@
1
+ from ..utils import ConfigManager
2
+ from ..utils.gcp_project import get_gcp_project
3
+ from ..custom_logging import log
4
+ from .discovery_engine_client import DiscoveryEngineClient
5
+ from ..components import load_memories
6
+
7
+ def get_all_chunks(question:str, config:ConfigManager):
8
+ """
9
+ Look through a config memory key and find all Vertex AI Search retrievers, call them and return a joined string of chunks
10
+
11
+ args: question - question to search similarity for
12
+ config: A ConfigManager object
13
+
14
+ returns: a big string of chunks
15
+ """
16
+ memories = load_memories(config=config)
17
+ chunks = []
18
+
19
+ if not memories:
20
+ return None
21
+
22
+ vector_name = config.vector_name
23
+ for memory in memories:
24
+ for key, value in memory.items(): # Now iterate over the dictionary
25
+ log.info(f"Found memory {key}")
26
+ vectorstore = value.get('vectorstore')
27
+ if vectorstore == "discovery_engine" or vectorstore == "vertex_ai_search":
28
+ if value.get('read_only'):
29
+ new_vector_name = value.get('vector_name')
30
+ if not new_vector_name:
31
+ log.warning("read_only specified but no new vector_name to read from")
32
+ continue
33
+ else:
34
+ vector_name = new_vector_name
35
+
36
+ num_chunks = value.get('num_chunks') or 3
37
+
38
+ chunk = get_chunks(question, vector_name, num_chunks)
39
+ if chunk:
40
+ chunks.append(chunk)
41
+ if chunks:
42
+ return "\n".join(chunks)
43
+
44
+ log.warning(f"No chunks found for {vector_name}")
45
+ return None
46
+
47
+ def get_chunks(question, vector_name, num_chunks):
48
+ de = DiscoveryEngineClient(vector_name, project_id=get_gcp_project(include_config=True))
49
+ try:
50
+ return de.get_chunks(question, num_previous_chunks=num_chunks, num_next_chunks=num_chunks)
51
+ except Exception as err:
52
+ log.error(f"No discovery engine chunks found: {str(err)}")
53
+
54
+
55
+
56
+ async def async_get_all_chunks(question:str, config:ConfigManager):
57
+ """
58
+ Look through a config memory key and find all Vertex AI Search retrievers, call them and return a joined string of chunks
59
+
60
+ args: question - question to search similarity for
61
+ config: A ConfigManager object
62
+
63
+ returns: a big string of chunks
64
+ """
65
+ memories = load_memories(config=config)
66
+ chunks = []
67
+
68
+ if not memories:
69
+ return None
70
+
71
+ vector_name = config.vector_name
72
+ for memory in memories:
73
+ for key, value in memory.items(): # Now iterate over the dictionary
74
+ log.info(f"Found memory {key}")
75
+ vectorstore = value.get('vectorstore')
76
+ if vectorstore == "discovery_engine" or vectorstore == "vertex_ai_search":
77
+ if value.get('read_only'):
78
+ new_vector_name = value.get('vector_name')
79
+ if not new_vector_name:
80
+ log.warning("read_only specified but no new vector_name to read from")
81
+ continue
82
+ else:
83
+ vector_name = new_vector_name
84
+
85
+ num_chunks = value.get('num_chunks') or 3
86
+
87
+ chunk = await async_get_chunks(question, vector_name, num_chunks)
88
+ if chunk:
89
+ chunks.append(chunk)
90
+ if chunks:
91
+ return "\n".join(chunks)
92
+
93
+ log.warning(f"No chunks found for {vector_name}")
94
+ return None
95
+
96
+ async def async_get_chunks(question, vector_name, num_chunks):
97
+ de = DiscoveryEngineClient(vector_name, project_id=get_gcp_project(include_config=True))
98
+ try:
99
+ return await de.async_get_chunks(question, num_previous_chunks=num_chunks, num_next_chunks=num_chunks)
100
+ except Exception as err:
101
+ log.error(f"No discovery engine chunks found: {str(err)}")
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.96.7
3
+ Version: 0.96.8
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.96.7.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.96.8.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -1,53 +0,0 @@
1
- from ..utils import ConfigManager
2
- from ..utils.gcp_project import get_gcp_project
3
- from ..custom_logging import log
4
- from .discovery_engine_client import DiscoveryEngineClient
5
- from ..components import load_memories
6
-
7
- def get_all_chunks(question:str, config:ConfigManager):
8
- """
9
- Look through a config memory key and find all Vertex AI Search retrievers, call them and return a joined string of chunks
10
-
11
- args: question - question to search similarity for
12
- config: A ConfigManager object
13
-
14
- returns: a big string of chunks
15
- """
16
- memories = load_memories(config=config)
17
- chunks = []
18
-
19
- if not memories:
20
- return None
21
-
22
- vector_name = config.vector_name
23
- for memory in memories:
24
- for key, value in memory.items(): # Now iterate over the dictionary
25
- log.info(f"Found memory {key}")
26
- vectorstore = value.get('vectorstore')
27
- if vectorstore == "discovery_engine" or vectorstore == "vertex_ai_search":
28
- if value.get('read_only'):
29
- new_vector_name = value.get('vector_name')
30
- if not new_vector_name:
31
- log.warning("read_only specified but no new vector_name to read from")
32
- vector_name = new_vector_name
33
-
34
- num_chunks = value.get('num_chunks') or 3
35
-
36
- chunk = get_chunks(question, vector_name, num_chunks)
37
- if chunk:
38
- chunks.append(chunk)
39
- if chunks:
40
- return "\n".join(chunks)
41
-
42
- log.warning(f"No chunks found for {vector_name}")
43
- return None
44
-
45
- def get_chunks(question, vector_name, num_chunks):
46
- de = DiscoveryEngineClient(vector_name, project_id=get_gcp_project(include_config=True))
47
- try:
48
- return de.get_chunks(question, num_previous_chunks=num_chunks, num_next_chunks=num_chunks)
49
- except Exception as err:
50
- log.error(f"No discovery engine chunks found: {str(err)}")
51
-
52
-
53
-
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