sunholo 0.126.3__tar.gz → 0.127.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 (188) hide show
  1. {sunholo-0.126.3/src/sunholo.egg-info → sunholo-0.127.0}/PKG-INFO +3 -1
  2. {sunholo-0.126.3 → sunholo-0.127.0}/pyproject.toml +3 -1
  3. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/dispatch_to_qa.py +5 -6
  4. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/discovery_engine/chunker_handler.py +9 -1
  5. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/discovery_engine/discovery_engine_client.py +8 -2
  6. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/embedder/embed_metadata.py +1 -1
  7. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/config_class.py +19 -12
  8. {sunholo-0.126.3 → sunholo-0.127.0/src/sunholo.egg-info}/PKG-INFO +3 -1
  9. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo.egg-info/requires.txt +2 -0
  10. {sunholo-0.126.3 → sunholo-0.127.0}/LICENSE.txt +0 -0
  11. {sunholo-0.126.3 → sunholo-0.127.0}/MANIFEST.in +0 -0
  12. {sunholo-0.126.3 → sunholo-0.127.0}/README.md +0 -0
  13. {sunholo-0.126.3 → sunholo-0.127.0}/setup.cfg +0 -0
  14. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/__init__.py +0 -0
  15. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/__init__.py +0 -0
  16. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/chat_history.py +0 -0
  17. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/fastapi/__init__.py +0 -0
  18. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/fastapi/base.py +0 -0
  19. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
  20. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/flask/__init__.py +0 -0
  21. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/flask/base.py +0 -0
  22. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/flask/qna_routes.py +0 -0
  23. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/flask/vac_routes.py +0 -0
  24. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/langserve.py +0 -0
  25. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/pubsub.py +0 -0
  26. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/route.py +0 -0
  27. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/special_commands.py +0 -0
  28. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/agents/swagger.py +0 -0
  29. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/archive/__init__.py +0 -0
  30. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/archive/archive.py +0 -0
  31. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/auth/__init__.py +0 -0
  32. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/auth/gcloud.py +0 -0
  33. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/auth/refresh.py +0 -0
  34. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/auth/run.py +0 -0
  35. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/azure/__init__.py +0 -0
  36. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/azure/auth.py +0 -0
  37. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/azure/blobs.py +0 -0
  38. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/azure/event_grid.py +0 -0
  39. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/bots/__init__.py +0 -0
  40. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/bots/discord.py +0 -0
  41. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/bots/github_webhook.py +0 -0
  42. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/bots/webapp.py +0 -0
  43. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/__init__.py +0 -0
  44. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/azure.py +0 -0
  45. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/doc_handling.py +0 -0
  46. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/encode_metadata.py +0 -0
  47. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/images.py +0 -0
  48. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/loaders.py +0 -0
  49. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/message_data.py +0 -0
  50. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/pdfs.py +0 -0
  51. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/process_chunker_data.py +0 -0
  52. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/publish.py +0 -0
  53. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/pubsub.py +0 -0
  54. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/chunker/splitter.py +0 -0
  55. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/__init__.py +0 -0
  56. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/chat_vac.py +0 -0
  57. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/cli.py +0 -0
  58. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/cli_init.py +0 -0
  59. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/configs.py +0 -0
  60. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/deploy.py +0 -0
  61. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/embedder.py +0 -0
  62. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/merge_texts.py +0 -0
  63. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/run_proxy.py +0 -0
  64. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/sun_rich.py +0 -0
  65. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/swagger.py +0 -0
  66. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/cli/vertex.py +0 -0
  67. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/components/__init__.py +0 -0
  68. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/components/llm.py +0 -0
  69. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/components/retriever.py +0 -0
  70. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/components/vectorstore.py +0 -0
  71. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/custom_logging.py +0 -0
  72. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/__init__.py +0 -0
  73. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/alloydb.py +0 -0
  74. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/alloydb_client.py +0 -0
  75. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/database.py +0 -0
  76. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/lancedb.py +0 -0
  77. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/sql/sb/create_function.sql +0 -0
  78. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
  79. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/sql/sb/create_table.sql +0 -0
  80. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  81. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
  82. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/sql/sb/setup.sql +0 -0
  83. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/static_dbs.py +0 -0
  84. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/database/uuid.py +0 -0
  85. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/discovery_engine/__init__.py +0 -0
  86. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/discovery_engine/cli.py +0 -0
  87. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/discovery_engine/create_new.py +0 -0
  88. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  89. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/embedder/__init__.py +0 -0
  90. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/embedder/embed_chunk.py +0 -0
  91. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/excel/__init__.py +0 -0
  92. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/excel/plugin.py +0 -0
  93. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/gcs/__init__.py +0 -0
  94. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/gcs/add_file.py +0 -0
  95. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/gcs/download_folder.py +0 -0
  96. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/gcs/download_url.py +0 -0
  97. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/gcs/extract_and_sign.py +0 -0
  98. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/gcs/metadata.py +0 -0
  99. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/__init__.py +0 -0
  100. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/file_handling.py +0 -0
  101. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/genaiv2.py +0 -0
  102. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/images.py +0 -0
  103. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/init.py +0 -0
  104. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/process_funcs_cls.py +0 -0
  105. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/genai/safety.py +0 -0
  106. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/invoke/__init__.py +0 -0
  107. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/invoke/async_class.py +0 -0
  108. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/invoke/direct_vac_func.py +0 -0
  109. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
  110. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/langchain_types.py +0 -0
  111. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/langfuse/__init__.py +0 -0
  112. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/langfuse/callback.py +0 -0
  113. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/langfuse/evals.py +0 -0
  114. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/langfuse/prompts.py +0 -0
  115. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/llamaindex/__init__.py +0 -0
  116. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/llamaindex/get_files.py +0 -0
  117. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/llamaindex/import_files.py +0 -0
  118. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
  119. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/llamaindex/user_history.py +0 -0
  120. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/lookup/__init__.py +0 -0
  121. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/lookup/model_lookup.yaml +0 -0
  122. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/mcp/__init__.py +0 -0
  123. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/mcp/cli.py +0 -0
  124. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/ollama/__init__.py +0 -0
  125. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/ollama/ollama_images.py +0 -0
  126. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/pubsub/__init__.py +0 -0
  127. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/pubsub/process_pubsub.py +0 -0
  128. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/pubsub/pubsub_manager.py +0 -0
  129. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/qna/__init__.py +0 -0
  130. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/qna/parsers.py +0 -0
  131. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/qna/retry.py +0 -0
  132. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/senses/__init__.py +0 -0
  133. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/senses/stream_voice.py +0 -0
  134. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/streaming/__init__.py +0 -0
  135. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/streaming/content_buffer.py +0 -0
  136. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/streaming/langserve.py +0 -0
  137. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/streaming/stream_lookup.py +0 -0
  138. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/streaming/streaming.py +0 -0
  139. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/summarise/__init__.py +0 -0
  140. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/summarise/summarise.py +0 -0
  141. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/__init__.py +0 -0
  142. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/agent_service.py +0 -0
  143. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/app.py +0 -0
  144. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/my_log.py +0 -0
  145. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/tools/__init__.py +0 -0
  146. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
  147. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/agent/vac_service.py +0 -0
  148. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/project/__init__.py +0 -0
  149. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/project/app.py +0 -0
  150. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/project/my_log.py +0 -0
  151. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/project/vac_service.py +0 -0
  152. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/system_services/__init__.py +0 -0
  153. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/system_services/app.py +0 -0
  154. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/templates/system_services/my_log.py +0 -0
  155. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/terraform/__init__.py +0 -0
  156. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/terraform/tfvars_editor.py +0 -0
  157. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/tools/__init__.py +0 -0
  158. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/tools/web_browser.py +0 -0
  159. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/__init__.py +0 -0
  160. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/api_key.py +0 -0
  161. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/big_context.py +0 -0
  162. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/config.py +0 -0
  163. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/config_schema.py +0 -0
  164. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/gcp.py +0 -0
  165. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/gcp_project.py +0 -0
  166. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/mime.py +0 -0
  167. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/parsers.py +0 -0
  168. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/timedelta.py +0 -0
  169. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/user_ids.py +0 -0
  170. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/utils/version.py +0 -0
  171. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/__init__.py +0 -0
  172. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/extensions_call.py +0 -0
  173. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/extensions_class.py +0 -0
  174. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/genai_functions.py +0 -0
  175. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/init.py +0 -0
  176. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/memory_tools.py +0 -0
  177. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/safety.py +0 -0
  178. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo/vertex/type_dict_to_json.py +0 -0
  179. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo.egg-info/SOURCES.txt +0 -0
  180. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo.egg-info/dependency_links.txt +0 -0
  181. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo.egg-info/entry_points.txt +0 -0
  182. {sunholo-0.126.3 → sunholo-0.127.0}/src/sunholo.egg-info/top_level.txt +0 -0
  183. {sunholo-0.126.3 → sunholo-0.127.0}/tests/test_async.py +0 -0
  184. {sunholo-0.126.3 → sunholo-0.127.0}/tests/test_async_genai2.py +0 -0
  185. {sunholo-0.126.3 → sunholo-0.127.0}/tests/test_chat_history.py +0 -0
  186. {sunholo-0.126.3 → sunholo-0.127.0}/tests/test_config.py +0 -0
  187. {sunholo-0.126.3 → sunholo-0.127.0}/tests/test_genai2.py +0 -0
  188. {sunholo-0.126.3 → sunholo-0.127.0}/tests/test_unstructured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.126.3
3
+ Version: 0.127.0
4
4
  Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
5
5
  Author-email: Holosun ApS <multivac@sunholo.com>
6
6
  License: Apache License, Version 2.0
@@ -142,6 +142,7 @@ Requires-Dist: google-cloud-discoveryengine>=0.13.4; extra == "gcp"
142
142
  Requires-Dist: google-cloud-texttospeech; extra == "gcp"
143
143
  Requires-Dist: google-genai>=0.2.2; extra == "gcp"
144
144
  Requires-Dist: google-generativeai>=0.8.3; extra == "gcp"
145
+ Requires-Dist: langchain; extra == "gcp"
145
146
  Requires-Dist: langchain-google-genai>=2.0.0; extra == "gcp"
146
147
  Requires-Dist: langchain_google_alloydb_pg>=0.2.2; extra == "gcp"
147
148
  Requires-Dist: langchain-google-vertexai; extra == "gcp"
@@ -164,6 +165,7 @@ Requires-Dist: flask; extra == "http"
164
165
  Requires-Dist: gunicorn; extra == "http"
165
166
  Requires-Dist: httpcore; extra == "http"
166
167
  Requires-Dist: httpx; extra == "http"
168
+ Requires-Dist: langchain; extra == "http"
167
169
  Requires-Dist: langfuse; extra == "http"
168
170
  Requires-Dist: python-socketio; extra == "http"
169
171
  Requires-Dist: requests; extra == "http"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sunholo"
7
- version = "0.126.3"
7
+ version = "0.127.0"
8
8
  description = "Large Language Model DevOps - a package to help deploy LLMs to the Cloud."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -179,6 +179,7 @@ gcp = [
179
179
  "google-cloud-texttospeech",
180
180
  "google-genai>=0.2.2",
181
181
  "google-generativeai>=0.8.3",
182
+ "langchain",
182
183
  "langchain-google-genai>=2.0.0",
183
184
  "langchain_google_alloydb_pg>=0.2.2",
184
185
  "langchain-google-vertexai",
@@ -206,6 +207,7 @@ http = [
206
207
  "gunicorn",
207
208
  "httpcore",
208
209
  "httpx",
210
+ "langchain",
209
211
  "langfuse",
210
212
  "python-socketio",
211
213
  "requests",
@@ -21,11 +21,6 @@ import traceback
21
21
  from .route import route_endpoint
22
22
  import os
23
23
 
24
- try:
25
- from langfuse import Langfuse
26
- langfuse = Langfuse()
27
- except ImportError:
28
- langfuse = None
29
24
 
30
25
  def prep_request_payload(user_input, chat_history, vector_name, stream, **kwargs):
31
26
  """
@@ -93,7 +88,11 @@ def prep_request_payload(user_input, chat_history, vector_name, stream, **kwargs
93
88
  return qna_endpoint, qna_data
94
89
 
95
90
  def add_langfuse_trace(qna_endpoint):
96
- if not langfuse:
91
+ try:
92
+ from langfuse import Langfuse
93
+ langfuse = Langfuse()
94
+ except Exception as err:
95
+ log.error(err)
97
96
  return None
98
97
 
99
98
  trace = langfuse.trace(name = f'dispatch/{os.path.basename(qna_endpoint)}')
@@ -36,6 +36,7 @@ def do_discovery_engine(message_data:str, metadata:dict, config:ConfigManager=No
36
36
  if vectorstore == "discovery_engine" or vectorstore == "vertex_ai_search":
37
37
  log.info(f"Found vectorstore {vectorstore}")
38
38
  if value.get('read_only'):
39
+ log.info(f"{vectorstore} is read only, skipping")
39
40
  continue
40
41
 
41
42
  project_id = value.get("project_id")
@@ -50,6 +51,7 @@ def do_discovery_engine(message_data:str, metadata:dict, config:ConfigManager=No
50
51
  if not project_id:
51
52
  raise ValueError("Couldn't retrieve project_id for vertex_ai_search")
52
53
 
54
+ log.info(f"Using {project_id} and {location} for DiscoveryEngineClient")
53
55
  corpus = DiscoveryEngineClient(
54
56
  data_store_id=config.vector_name,
55
57
  project_id=project_id,
@@ -67,10 +69,13 @@ def do_discovery_engine(message_data:str, metadata:dict, config:ConfigManager=No
67
69
  if message_data.startswith("gs://"):
68
70
  log.info(f"DiscoveryEngineClient.import_files for {message_data}")
69
71
  if "/pdf_parts/" in message_data:
72
+ log.info(f"Not processing files with /pdf_parts/ - {message_data}")
70
73
  return None
71
74
  for corp in corpuses:
72
75
  try:
76
+
73
77
  metadata = audit_metadata(metadata, chunk_length=500)
78
+ log.info(f"Importing {message_data} {metadata=} to {corp}")
74
79
  response = corp.import_document_with_metadata(
75
80
  gcs_uri=message_data,
76
81
  metadata=metadata
@@ -160,7 +165,10 @@ def discovery_engine_chunker_check(message_data,
160
165
  try:
161
166
  log.info(f"Process discovery engine for {metadata}")
162
167
  disc_meta = do_discovery_engine(message_data, metadata, config=config)
163
- log.info(f"Processed discovery engine: {disc_meta}")
168
+ if disc_meta is None:
169
+ log.error(f"No disc_meta found for {metadata}")
170
+ else:
171
+ log.info(f"Processed discovery engine: {disc_meta}")
164
172
  except Exception as err:
165
173
  log.error(f"Error processing discovery engine: {str(err)} {traceback.format_exc()}")
166
174
  disc_meta = None
@@ -16,6 +16,7 @@ import asyncio
16
16
  import json
17
17
  import uuid
18
18
  from ..utils.mime import guess_mime_type
19
+ import traceback
19
20
 
20
21
  class DiscoveryEngineClient:
21
22
  """
@@ -80,8 +81,10 @@ class DiscoveryEngineClient:
80
81
  self.async_search_client = discoveryengine.SearchServiceAsyncClient(client_options=client_options)
81
82
  except RuntimeError:
82
83
  # No event loop in non-async environment, set async client to None
83
- log.info("No event loop detected; skipping async client initialization")
84
+ log.info("No event loop detected; skipping Discoveryengine async client initialization")
84
85
  self.async_search_client = None
86
+
87
+ log.info(f"Discovery Engine client initialized with {self.project_id=}, {self.data_store_id=}, {self.location=}")
85
88
 
86
89
  @classmethod
87
90
  def my_retry(cls):
@@ -490,6 +493,7 @@ class DiscoveryEngineClient:
490
493
  return doc_client.import_documents(request=request)
491
494
 
492
495
  try:
496
+ log.debug(f"Requesting import of documents: {request=}")
493
497
  operation = import_documents_with_retry(self.doc_client, request)
494
498
  except ResourceExhausted as e:
495
499
  log.error(f"DiscoveryEngine Operation failed after retries due to quota exceeded: {e}")
@@ -610,6 +614,7 @@ class DiscoveryEngineClient:
610
614
  reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
611
615
  )
612
616
 
617
+ log.debug(f"Making import_document_request: {request}")
613
618
  return self._import_document_request(request)
614
619
 
615
620
  def _create_unique_gsuri_docid(self, gcs_uri:str):
@@ -632,6 +637,7 @@ class DiscoveryEngineClient:
632
637
  str: The operation name.
633
638
  """
634
639
  try:
640
+ log.info(f"Importing doc with metadata: {gcs_uri=}, {metadata=}")
635
641
  # 1. Generate a unique document ID
636
642
  document_id = self._create_unique_gsuri_docid(gcs_uri)
637
643
 
@@ -662,7 +668,7 @@ class DiscoveryEngineClient:
662
668
  return self._import_document_request(request)
663
669
 
664
670
  except Exception as e:
665
- log.error(f"Error importing document with metadata: {e}")
671
+ log.error(f"Error importing document with metadata: {e} {traceback.format_exc()}")
666
672
  raise e
667
673
 
668
674
  def get_mime_type(self, uri:str):
@@ -6,7 +6,7 @@ from ..utils.mime import guess_mime_type
6
6
 
7
7
  from ..custom_logging import log
8
8
 
9
- def audit_metadata(metadata, chunk_length=None):
9
+ def audit_metadata(metadata:dict, chunk_length:int=None) -> dict:
10
10
 
11
11
  if 'eventTime' not in metadata:
12
12
  metadata['eventTime'] = datetime.datetime.now().isoformat(timespec='microseconds') + "Z"
@@ -112,18 +112,6 @@ class ConfigManager:
112
112
  """
113
113
  Helper function to load a config file and update the cache.
114
114
 
115
- Args:
116
- config_file (str): The path to the configuration file.
117
- filename (str): The name of the configuration file.
118
- is_local (bool): Indicates if the config file is from the local folder.
119
-
120
- Returns:
121
- dict: The loaded configuration.
122
- """
123
- def _reload_config_file(self, config_file, filename, is_local=False):
124
- """
125
- Helper function to load a config file and update the cache.
126
-
127
115
  Args:
128
116
  config_file (str): The path to the configuration file.
129
117
  filename (str): The name of the configuration file.
@@ -244,4 +232,23 @@ class ConfigManager:
244
232
  return agents[key]
245
233
  else:
246
234
  return agents.get("default")
235
+
236
+ def permissionConfig(self, key: str):
237
+ """
238
+ Fetch a key from 'permissionConfig' kind configuration.
247
239
 
240
+ Args:
241
+ key (str): The key to fetch from the configuration.
242
+
243
+ Returns:
244
+ str: The value associated with the specified key.
245
+ """
246
+ self._check_and_reload_configs()
247
+ config = self.configs_by_kind.get('permissionConfig')
248
+ if not config:
249
+ return None
250
+ agents = config.get('permissions')
251
+ if key in agents:
252
+ return agents[key]
253
+ else:
254
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.126.3
3
+ Version: 0.127.0
4
4
  Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
5
5
  Author-email: Holosun ApS <multivac@sunholo.com>
6
6
  License: Apache License, Version 2.0
@@ -142,6 +142,7 @@ Requires-Dist: google-cloud-discoveryengine>=0.13.4; extra == "gcp"
142
142
  Requires-Dist: google-cloud-texttospeech; extra == "gcp"
143
143
  Requires-Dist: google-genai>=0.2.2; extra == "gcp"
144
144
  Requires-Dist: google-generativeai>=0.8.3; extra == "gcp"
145
+ Requires-Dist: langchain; extra == "gcp"
145
146
  Requires-Dist: langchain-google-genai>=2.0.0; extra == "gcp"
146
147
  Requires-Dist: langchain_google_alloydb_pg>=0.2.2; extra == "gcp"
147
148
  Requires-Dist: langchain-google-vertexai; extra == "gcp"
@@ -164,6 +165,7 @@ Requires-Dist: flask; extra == "http"
164
165
  Requires-Dist: gunicorn; extra == "http"
165
166
  Requires-Dist: httpcore; extra == "http"
166
167
  Requires-Dist: httpx; extra == "http"
168
+ Requires-Dist: langchain; extra == "http"
167
169
  Requires-Dist: langfuse; extra == "http"
168
170
  Requires-Dist: python-socketio; extra == "http"
169
171
  Requires-Dist: requests; extra == "http"
@@ -117,6 +117,7 @@ google-cloud-discoveryengine>=0.13.4
117
117
  google-cloud-texttospeech
118
118
  google-genai>=0.2.2
119
119
  google-generativeai>=0.8.3
120
+ langchain
120
121
  langchain-google-genai>=2.0.0
121
122
  langchain_google_alloydb_pg>=0.2.2
122
123
  langchain-google-vertexai
@@ -128,6 +129,7 @@ flask
128
129
  gunicorn
129
130
  httpcore
130
131
  httpx
132
+ langchain
131
133
  langfuse
132
134
  python-socketio
133
135
  requests
File without changes
File without changes
File without changes
File without changes
File without changes