sunholo 0.140.13__tar.gz → 0.141.1__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 (189) hide show
  1. {sunholo-0.140.13/src/sunholo.egg-info → sunholo-0.141.1}/PKG-INFO +18 -12
  2. {sunholo-0.140.13 → sunholo-0.141.1}/README.md +17 -11
  3. {sunholo-0.140.13 → sunholo-0.141.1}/pyproject.toml +1 -1
  4. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/discovery_engine/discovery_engine_client.py +1 -1
  5. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/mime.py +14 -2
  6. sunholo-0.141.1/src/sunholo/utils/proto_convert.py +25 -0
  7. {sunholo-0.140.13 → sunholo-0.141.1/src/sunholo.egg-info}/PKG-INFO +18 -12
  8. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo.egg-info/SOURCES.txt +1 -0
  9. {sunholo-0.140.13 → sunholo-0.141.1}/LICENSE.txt +0 -0
  10. {sunholo-0.140.13 → sunholo-0.141.1}/MANIFEST.in +0 -0
  11. {sunholo-0.140.13 → sunholo-0.141.1}/setup.cfg +0 -0
  12. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/__init__.py +0 -0
  13. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/__init__.py +0 -0
  14. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/chat_history.py +0 -0
  15. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/dispatch_to_qa.py +0 -0
  16. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/fastapi/__init__.py +0 -0
  17. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/fastapi/base.py +0 -0
  18. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
  19. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/flask/__init__.py +0 -0
  20. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/flask/base.py +0 -0
  21. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/flask/vac_routes.py +0 -0
  22. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/langserve.py +0 -0
  23. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/pubsub.py +0 -0
  24. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/route.py +0 -0
  25. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/special_commands.py +0 -0
  26. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/agents/swagger.py +0 -0
  27. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/archive/__init__.py +0 -0
  28. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/archive/archive.py +0 -0
  29. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/auth/__init__.py +0 -0
  30. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/auth/gcloud.py +0 -0
  31. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/auth/refresh.py +0 -0
  32. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/auth/run.py +0 -0
  33. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/azure/__init__.py +0 -0
  34. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/azure/auth.py +0 -0
  35. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/azure/blobs.py +0 -0
  36. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/azure/event_grid.py +0 -0
  37. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/bots/__init__.py +0 -0
  38. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/bots/discord.py +0 -0
  39. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/bots/github_webhook.py +0 -0
  40. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/bots/webapp.py +0 -0
  41. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/__init__.py +0 -0
  42. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/azure.py +0 -0
  43. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/doc_handling.py +0 -0
  44. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/encode_metadata.py +0 -0
  45. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/images.py +0 -0
  46. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/loaders.py +0 -0
  47. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/message_data.py +0 -0
  48. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/pdfs.py +0 -0
  49. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/process_chunker_data.py +0 -0
  50. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/publish.py +0 -0
  51. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/pubsub.py +0 -0
  52. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/chunker/splitter.py +0 -0
  53. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/__init__.py +0 -0
  54. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/chat_vac.py +0 -0
  55. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/cli.py +0 -0
  56. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/cli_init.py +0 -0
  57. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/configs.py +0 -0
  58. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/deploy.py +0 -0
  59. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/embedder.py +0 -0
  60. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/merge_texts.py +0 -0
  61. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/run_proxy.py +0 -0
  62. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/sun_rich.py +0 -0
  63. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/swagger.py +0 -0
  64. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/cli/vertex.py +0 -0
  65. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/components/__init__.py +0 -0
  66. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/components/llm.py +0 -0
  67. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/components/retriever.py +0 -0
  68. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/components/vectorstore.py +0 -0
  69. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/custom_logging.py +0 -0
  70. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/__init__.py +0 -0
  71. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/alloydb.py +0 -0
  72. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/alloydb_client.py +0 -0
  73. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/database.py +0 -0
  74. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/lancedb.py +0 -0
  75. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/sql/sb/create_function.sql +0 -0
  76. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
  77. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/sql/sb/create_table.sql +0 -0
  78. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  79. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
  80. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/sql/sb/setup.sql +0 -0
  81. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/static_dbs.py +0 -0
  82. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/database/uuid.py +0 -0
  83. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/discovery_engine/__init__.py +0 -0
  84. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
  85. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/discovery_engine/cli.py +0 -0
  86. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/discovery_engine/create_new.py +0 -0
  87. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  88. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/embedder/__init__.py +0 -0
  89. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/embedder/embed_chunk.py +0 -0
  90. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/embedder/embed_metadata.py +0 -0
  91. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/excel/__init__.py +0 -0
  92. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/excel/plugin.py +0 -0
  93. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/__init__.py +0 -0
  94. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/add_file.py +0 -0
  95. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/download_folder.py +0 -0
  96. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/download_gcs_text.py +0 -0
  97. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/download_url.py +0 -0
  98. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/extract_and_sign.py +0 -0
  99. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/gcs/metadata.py +0 -0
  100. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/__init__.py +0 -0
  101. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/file_handling.py +0 -0
  102. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/genaiv2.py +0 -0
  103. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/images.py +0 -0
  104. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/init.py +0 -0
  105. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/process_funcs_cls.py +0 -0
  106. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/genai/safety.py +0 -0
  107. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/invoke/__init__.py +0 -0
  108. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/invoke/async_class.py +0 -0
  109. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/invoke/direct_vac_func.py +0 -0
  110. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
  111. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/langchain_types.py +0 -0
  112. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/langfuse/__init__.py +0 -0
  113. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/langfuse/callback.py +0 -0
  114. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/langfuse/evals.py +0 -0
  115. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/langfuse/prompts.py +0 -0
  116. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/llamaindex/__init__.py +0 -0
  117. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/llamaindex/get_files.py +0 -0
  118. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/llamaindex/import_files.py +0 -0
  119. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
  120. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/llamaindex/user_history.py +0 -0
  121. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/lookup/__init__.py +0 -0
  122. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/lookup/model_lookup.yaml +0 -0
  123. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/mcp/__init__.py +0 -0
  124. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/mcp/cli.py +0 -0
  125. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/ollama/__init__.py +0 -0
  126. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/ollama/ollama_images.py +0 -0
  127. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/pubsub/__init__.py +0 -0
  128. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/pubsub/process_pubsub.py +0 -0
  129. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/pubsub/pubsub_manager.py +0 -0
  130. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/qna/__init__.py +0 -0
  131. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/qna/parsers.py +0 -0
  132. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/qna/retry.py +0 -0
  133. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/senses/__init__.py +0 -0
  134. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/senses/stream_voice.py +0 -0
  135. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/streaming/__init__.py +0 -0
  136. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/streaming/content_buffer.py +0 -0
  137. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/streaming/langserve.py +0 -0
  138. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/streaming/stream_lookup.py +0 -0
  139. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/streaming/streaming.py +0 -0
  140. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/summarise/__init__.py +0 -0
  141. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/summarise/summarise.py +0 -0
  142. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/__init__.py +0 -0
  143. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/agent_service.py +0 -0
  144. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/app.py +0 -0
  145. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/my_log.py +0 -0
  146. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/tools/__init__.py +0 -0
  147. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
  148. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/agent/vac_service.py +0 -0
  149. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/project/__init__.py +0 -0
  150. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/project/app.py +0 -0
  151. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/project/my_log.py +0 -0
  152. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/project/vac_service.py +0 -0
  153. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/system_services/__init__.py +0 -0
  154. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/system_services/app.py +0 -0
  155. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/templates/system_services/my_log.py +0 -0
  156. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/terraform/__init__.py +0 -0
  157. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/terraform/tfvars_editor.py +0 -0
  158. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/tools/__init__.py +0 -0
  159. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/tools/web_browser.py +0 -0
  160. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/__init__.py +0 -0
  161. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/api_key.py +0 -0
  162. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/big_context.py +0 -0
  163. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/config.py +0 -0
  164. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/config_class.py +0 -0
  165. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/config_schema.py +0 -0
  166. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/gcp.py +0 -0
  167. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/gcp_project.py +0 -0
  168. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/parsers.py +0 -0
  169. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/timedelta.py +0 -0
  170. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/user_ids.py +0 -0
  171. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/utils/version.py +0 -0
  172. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/__init__.py +0 -0
  173. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/extensions_call.py +0 -0
  174. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/extensions_class.py +0 -0
  175. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/genai_functions.py +0 -0
  176. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/init.py +0 -0
  177. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/memory_tools.py +0 -0
  178. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/safety.py +0 -0
  179. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo/vertex/type_dict_to_json.py +0 -0
  180. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo.egg-info/dependency_links.txt +0 -0
  181. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo.egg-info/entry_points.txt +0 -0
  182. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo.egg-info/requires.txt +0 -0
  183. {sunholo-0.140.13 → sunholo-0.141.1}/src/sunholo.egg-info/top_level.txt +0 -0
  184. {sunholo-0.140.13 → sunholo-0.141.1}/tests/test_async.py +0 -0
  185. {sunholo-0.140.13 → sunholo-0.141.1}/tests/test_async_genai2.py +0 -0
  186. {sunholo-0.140.13 → sunholo-0.141.1}/tests/test_chat_history.py +0 -0
  187. {sunholo-0.140.13 → sunholo-0.141.1}/tests/test_config.py +0 -0
  188. {sunholo-0.140.13 → sunholo-0.141.1}/tests/test_genai2.py +0 -0
  189. {sunholo-0.140.13 → sunholo-0.141.1}/tests/test_unstructured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.140.13
3
+ Version: 0.141.1
4
4
  Summary: AI DevOps - a package to help deploy GenAI to the Cloud.
5
5
  Author-email: Holosun ApS <multivac@sunholo.com>
6
6
  License: Apache License, Version 2.0
@@ -255,7 +255,7 @@ vac:
255
255
  sunholo vac chat my-agent
256
256
  ```
257
257
 
258
- 4. **Deploy to Google Cloud Run:**
258
+ 4. **Run your agent as a local Flask app:**
259
259
  ```bash
260
260
  sunholo deploy my-agent
261
261
  ```
@@ -369,26 +369,32 @@ vac:
369
369
 
370
370
  ```bash
371
371
  # Project Management
372
- sunholo init <project-name> # Create new project
372
+ sunholo init <project-name> # Create new project from template
373
373
  sunholo list-configs # List all configurations
374
- sunholo list-configs --validate # Validate configs
374
+ sunholo list-configs --validate # Validate configurations
375
375
 
376
376
  # Development
377
377
  sunholo vac chat <vac-name> # Chat with a VAC locally
378
- sunholo vac list # List available VACs
378
+ sunholo vac list # List available VACs
379
+ sunholo vac get-url <vac-name> # Get Cloud Run URL for a VAC
379
380
  sunholo proxy start <service> # Start local proxy to cloud service
380
-
381
- # Deployment
382
- sunholo deploy <vac-name> # Deploy to Cloud Run
383
- sunholo deploy <vac-name> --dev # Deploy to dev environment
381
+ sunholo proxy list # List running proxies
382
+ sunholo deploy <vac-name> # Run Flask app locally
384
383
 
385
384
  # Document Processing
386
- sunholo embed <vac-name> # Embed documents
385
+ sunholo embed <vac-name> # Process and embed documents
387
386
  sunholo merge-text <folder> <output> # Merge files for context
388
387
 
389
388
  # Cloud Services
390
- sunholo discovery-engine create <name> # Create Discovery Engine
391
- sunholo proxy list # List running proxies
389
+ sunholo discovery-engine create <name> # Create Discovery Engine instance
390
+ sunholo vertex list-extensions # List Vertex AI extensions
391
+ sunholo swagger <vac-name> # Generate OpenAPI spec
392
+
393
+ # Integration Tools
394
+ sunholo excel-init # Initialize Excel plugin
395
+ sunholo llamaindex <query> # Query with LlamaIndex
396
+ sunholo mcp list-tools # List MCP tools
397
+ sunholo tts <text> # Text-to-speech synthesis
392
398
  ```
393
399
 
394
400
  ## 📝 Examples
@@ -69,7 +69,7 @@ vac:
69
69
  sunholo vac chat my-agent
70
70
  ```
71
71
 
72
- 4. **Deploy to Google Cloud Run:**
72
+ 4. **Run your agent as a local Flask app:**
73
73
  ```bash
74
74
  sunholo deploy my-agent
75
75
  ```
@@ -183,26 +183,32 @@ vac:
183
183
 
184
184
  ```bash
185
185
  # Project Management
186
- sunholo init <project-name> # Create new project
186
+ sunholo init <project-name> # Create new project from template
187
187
  sunholo list-configs # List all configurations
188
- sunholo list-configs --validate # Validate configs
188
+ sunholo list-configs --validate # Validate configurations
189
189
 
190
190
  # Development
191
191
  sunholo vac chat <vac-name> # Chat with a VAC locally
192
- sunholo vac list # List available VACs
192
+ sunholo vac list # List available VACs
193
+ sunholo vac get-url <vac-name> # Get Cloud Run URL for a VAC
193
194
  sunholo proxy start <service> # Start local proxy to cloud service
194
-
195
- # Deployment
196
- sunholo deploy <vac-name> # Deploy to Cloud Run
197
- sunholo deploy <vac-name> --dev # Deploy to dev environment
195
+ sunholo proxy list # List running proxies
196
+ sunholo deploy <vac-name> # Run Flask app locally
198
197
 
199
198
  # Document Processing
200
- sunholo embed <vac-name> # Embed documents
199
+ sunholo embed <vac-name> # Process and embed documents
201
200
  sunholo merge-text <folder> <output> # Merge files for context
202
201
 
203
202
  # Cloud Services
204
- sunholo discovery-engine create <name> # Create Discovery Engine
205
- sunholo proxy list # List running proxies
203
+ sunholo discovery-engine create <name> # Create Discovery Engine instance
204
+ sunholo vertex list-extensions # List Vertex AI extensions
205
+ sunholo swagger <vac-name> # Generate OpenAPI spec
206
+
207
+ # Integration Tools
208
+ sunholo excel-init # Initialize Excel plugin
209
+ sunholo llamaindex <query> # Query with LlamaIndex
210
+ sunholo mcp list-tools # List MCP tools
211
+ sunholo tts <text> # Text-to-speech synthesis
206
212
  ```
207
213
 
208
214
  ## 📝 Examples
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sunholo"
7
- version = "0.140.13"
7
+ version = "0.141.1"
8
8
  description = "AI DevOps - a package to help deploy GenAI to the Cloud."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -280,7 +280,7 @@ class DiscoveryEngineClient:
280
280
  # Use async_search_with_filters with filter_str=None to perform a regular search
281
281
  return await self.async_search_with_filters(
282
282
  query=query,
283
- filter_str=None,
283
+ filter_str=filter_str,
284
284
  num_previous_chunks=num_previous_chunks,
285
285
  num_next_chunks=num_next_chunks,
286
286
  page_size=page_size,
@@ -83,7 +83,6 @@ def get_mime_type_gemini(file_path:str) -> str:
83
83
 
84
84
  # Define the mapping of extensions to MIME types
85
85
  mime_types = {
86
-
87
86
  # Images
88
87
  'png': 'image/png',
89
88
  'jpg': 'image/jpeg',
@@ -111,7 +110,20 @@ def get_mime_type_gemini(file_path:str) -> str:
111
110
  'rtf': 'text/rtf',
112
111
 
113
112
  # Special case: JSON files are treated as plain text
114
- 'json': 'text/plain'
113
+ 'json': 'text/plain',
114
+
115
+ # Audio
116
+ 'mp3': 'audio/mp3',
117
+ 'mpeg': 'audio/mpeg',
118
+ 'wav': 'audio/wav',
119
+
120
+ # Video
121
+ 'mov': 'video/mov',
122
+ 'mp4': 'video/mp4',
123
+ 'mpg': 'video/mpeg',
124
+ 'avi': 'video/avi',
125
+ 'wmv': 'video/wmv',
126
+ 'flv': 'video/flv'
115
127
  }
116
128
 
117
129
  # Return the appropriate MIME type, defaulting to None if unknown
@@ -0,0 +1,25 @@
1
+
2
+
3
+ def convert_composite_to_native(value):
4
+ """
5
+ Recursively converts a proto MapComposite or RepeatedComposite object to native Python types.
6
+
7
+ Args:
8
+ value: The proto object, which could be a MapComposite, RepeatedComposite, or a primitive.
9
+
10
+ Returns:
11
+ The equivalent Python dictionary, list, or primitive type.
12
+ """
13
+ import proto
14
+
15
+ if isinstance(value, proto.marshal.collections.maps.MapComposite):
16
+ # Convert MapComposite to a dictionary, recursively processing its values
17
+ return {key: convert_composite_to_native(val) for key, val in value.items()}
18
+ elif isinstance(value, proto.marshal.collections.repeated.RepeatedComposite):
19
+ # Convert RepeatedComposite to a list, recursively processing its elements
20
+ return [convert_composite_to_native(item) for item in value]
21
+ else:
22
+ # If it's a primitive value, return it as is
23
+ return value
24
+
25
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.140.13
3
+ Version: 0.141.1
4
4
  Summary: AI DevOps - a package to help deploy GenAI to the Cloud.
5
5
  Author-email: Holosun ApS <multivac@sunholo.com>
6
6
  License: Apache License, Version 2.0
@@ -255,7 +255,7 @@ vac:
255
255
  sunholo vac chat my-agent
256
256
  ```
257
257
 
258
- 4. **Deploy to Google Cloud Run:**
258
+ 4. **Run your agent as a local Flask app:**
259
259
  ```bash
260
260
  sunholo deploy my-agent
261
261
  ```
@@ -369,26 +369,32 @@ vac:
369
369
 
370
370
  ```bash
371
371
  # Project Management
372
- sunholo init <project-name> # Create new project
372
+ sunholo init <project-name> # Create new project from template
373
373
  sunholo list-configs # List all configurations
374
- sunholo list-configs --validate # Validate configs
374
+ sunholo list-configs --validate # Validate configurations
375
375
 
376
376
  # Development
377
377
  sunholo vac chat <vac-name> # Chat with a VAC locally
378
- sunholo vac list # List available VACs
378
+ sunholo vac list # List available VACs
379
+ sunholo vac get-url <vac-name> # Get Cloud Run URL for a VAC
379
380
  sunholo proxy start <service> # Start local proxy to cloud service
380
-
381
- # Deployment
382
- sunholo deploy <vac-name> # Deploy to Cloud Run
383
- sunholo deploy <vac-name> --dev # Deploy to dev environment
381
+ sunholo proxy list # List running proxies
382
+ sunholo deploy <vac-name> # Run Flask app locally
384
383
 
385
384
  # Document Processing
386
- sunholo embed <vac-name> # Embed documents
385
+ sunholo embed <vac-name> # Process and embed documents
387
386
  sunholo merge-text <folder> <output> # Merge files for context
388
387
 
389
388
  # Cloud Services
390
- sunholo discovery-engine create <name> # Create Discovery Engine
391
- sunholo proxy list # List running proxies
389
+ sunholo discovery-engine create <name> # Create Discovery Engine instance
390
+ sunholo vertex list-extensions # List Vertex AI extensions
391
+ sunholo swagger <vac-name> # Generate OpenAPI spec
392
+
393
+ # Integration Tools
394
+ sunholo excel-init # Initialize Excel plugin
395
+ sunholo llamaindex <query> # Query with LlamaIndex
396
+ sunholo mcp list-tools # List MCP tools
397
+ sunholo tts <text> # Text-to-speech synthesis
392
398
  ```
393
399
 
394
400
  ## 📝 Examples
@@ -167,6 +167,7 @@ src/sunholo/utils/gcp.py
167
167
  src/sunholo/utils/gcp_project.py
168
168
  src/sunholo/utils/mime.py
169
169
  src/sunholo/utils/parsers.py
170
+ src/sunholo/utils/proto_convert.py
170
171
  src/sunholo/utils/timedelta.py
171
172
  src/sunholo/utils/user_ids.py
172
173
  src/sunholo/utils/version.py
File without changes
File without changes
File without changes