sunholo 0.116.1__tar.gz → 0.118.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 (170) hide show
  1. {sunholo-0.116.1 → sunholo-0.118.0}/PKG-INFO +27 -4
  2. {sunholo-0.116.1 → sunholo-0.118.0}/README.md +6 -0
  3. {sunholo-0.116.1 → sunholo-0.118.0}/setup.py +8 -3
  4. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/cli.py +3 -3
  5. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/cli_init.py +1 -1
  6. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/genai/__init__.py +2 -1
  7. sunholo-0.118.0/sunholo/genai/genaiv2.py +542 -0
  8. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/langfuse/evals.py +2 -1
  9. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/mcp/cli.py +19 -18
  10. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/big_context.py +11 -4
  11. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo.egg-info/PKG-INFO +27 -4
  12. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo.egg-info/SOURCES.txt +3 -0
  13. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo.egg-info/requires.txt +7 -1
  14. sunholo-0.118.0/tests/test_async_genai2.py +39 -0
  15. sunholo-0.118.0/tests/test_genai2.py +125 -0
  16. {sunholo-0.116.1 → sunholo-0.118.0}/LICENSE.txt +0 -0
  17. {sunholo-0.116.1 → sunholo-0.118.0}/MANIFEST.in +0 -0
  18. {sunholo-0.116.1 → sunholo-0.118.0}/setup.cfg +0 -0
  19. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/__init__.py +0 -0
  20. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/__init__.py +0 -0
  21. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/chat_history.py +0 -0
  22. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/dispatch_to_qa.py +0 -0
  23. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/fastapi/__init__.py +0 -0
  24. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/fastapi/base.py +0 -0
  25. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/fastapi/qna_routes.py +0 -0
  26. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/flask/__init__.py +0 -0
  27. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/flask/base.py +0 -0
  28. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/flask/qna_routes.py +0 -0
  29. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/flask/vac_routes.py +0 -0
  30. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/langserve.py +0 -0
  31. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/pubsub.py +0 -0
  32. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/route.py +0 -0
  33. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/special_commands.py +0 -0
  34. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/agents/swagger.py +0 -0
  35. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/archive/__init__.py +0 -0
  36. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/archive/archive.py +0 -0
  37. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/auth/__init__.py +0 -0
  38. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/auth/gcloud.py +0 -0
  39. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/auth/refresh.py +0 -0
  40. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/auth/run.py +0 -0
  41. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/azure/__init__.py +0 -0
  42. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/azure/auth.py +0 -0
  43. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/azure/blobs.py +0 -0
  44. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/azure/event_grid.py +0 -0
  45. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/bots/__init__.py +0 -0
  46. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/bots/discord.py +0 -0
  47. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/bots/github_webhook.py +0 -0
  48. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/bots/webapp.py +0 -0
  49. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/__init__.py +0 -0
  50. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/azure.py +0 -0
  51. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/doc_handling.py +0 -0
  52. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/encode_metadata.py +0 -0
  53. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/images.py +0 -0
  54. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/loaders.py +0 -0
  55. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/message_data.py +0 -0
  56. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/pdfs.py +0 -0
  57. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/process_chunker_data.py +0 -0
  58. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/publish.py +0 -0
  59. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/pubsub.py +0 -0
  60. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/chunker/splitter.py +0 -0
  61. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/__init__.py +0 -0
  62. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/chat_vac.py +0 -0
  63. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/configs.py +0 -0
  64. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/deploy.py +0 -0
  65. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/embedder.py +0 -0
  66. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/merge_texts.py +0 -0
  67. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/run_proxy.py +0 -0
  68. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/sun_rich.py +0 -0
  69. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/swagger.py +0 -0
  70. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/cli/vertex.py +0 -0
  71. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/components/__init__.py +0 -0
  72. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/components/llm.py +0 -0
  73. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/components/retriever.py +0 -0
  74. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/components/vectorstore.py +0 -0
  75. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/custom_logging.py +0 -0
  76. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/__init__.py +0 -0
  77. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/alloydb.py +0 -0
  78. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/alloydb_client.py +0 -0
  79. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/database.py +0 -0
  80. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/lancedb.py +0 -0
  81. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/sql/sb/create_function.sql +0 -0
  82. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  83. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/sql/sb/create_table.sql +0 -0
  84. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  85. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/sql/sb/return_sources.sql +0 -0
  86. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/sql/sb/setup.sql +0 -0
  87. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/static_dbs.py +0 -0
  88. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/database/uuid.py +0 -0
  89. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/discovery_engine/__init__.py +0 -0
  90. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/discovery_engine/chunker_handler.py +0 -0
  91. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/discovery_engine/create_new.py +0 -0
  92. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  93. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  94. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/embedder/__init__.py +0 -0
  95. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/embedder/embed_chunk.py +0 -0
  96. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/excel/__init__.py +0 -0
  97. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/excel/plugin.py +0 -0
  98. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/gcs/__init__.py +0 -0
  99. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/gcs/add_file.py +0 -0
  100. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/gcs/download_folder.py +0 -0
  101. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/gcs/download_url.py +0 -0
  102. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/gcs/extract_and_sign.py +0 -0
  103. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/gcs/metadata.py +0 -0
  104. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/genai/file_handling.py +0 -0
  105. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/genai/images.py +0 -0
  106. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/genai/init.py +0 -0
  107. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/genai/process_funcs_cls.py +0 -0
  108. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/genai/safety.py +0 -0
  109. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/invoke/__init__.py +0 -0
  110. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/invoke/async_class.py +0 -0
  111. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/invoke/direct_vac_func.py +0 -0
  112. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/invoke/invoke_vac_utils.py +0 -0
  113. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/langfuse/__init__.py +0 -0
  114. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/langfuse/callback.py +0 -0
  115. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/langfuse/prompts.py +0 -0
  116. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/llamaindex/__init__.py +0 -0
  117. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/llamaindex/get_files.py +0 -0
  118. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/llamaindex/import_files.py +0 -0
  119. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/llamaindex/llamaindex_class.py +0 -0
  120. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/llamaindex/user_history.py +0 -0
  121. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/lookup/__init__.py +0 -0
  122. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/lookup/model_lookup.yaml +0 -0
  123. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/mcp/__init__.py +0 -0
  124. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/pubsub/__init__.py +0 -0
  125. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/pubsub/process_pubsub.py +0 -0
  126. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/pubsub/pubsub_manager.py +0 -0
  127. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/qna/__init__.py +0 -0
  128. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/qna/parsers.py +0 -0
  129. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/qna/retry.py +0 -0
  130. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/senses/__init__.py +0 -0
  131. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/senses/stream_voice.py +0 -0
  132. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/streaming/__init__.py +0 -0
  133. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/streaming/content_buffer.py +0 -0
  134. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/streaming/langserve.py +0 -0
  135. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/streaming/stream_lookup.py +0 -0
  136. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/streaming/streaming.py +0 -0
  137. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/summarise/__init__.py +0 -0
  138. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/summarise/summarise.py +0 -0
  139. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/terraform/__init__.py +0 -0
  140. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/terraform/tfvars_editor.py +0 -0
  141. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/tools/__init__.py +0 -0
  142. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/tools/web_browser.py +0 -0
  143. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/types.py +0 -0
  144. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/__init__.py +0 -0
  145. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/api_key.py +0 -0
  146. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/config.py +0 -0
  147. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/config_class.py +0 -0
  148. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/config_schema.py +0 -0
  149. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/gcp.py +0 -0
  150. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/gcp_project.py +0 -0
  151. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/mime.py +0 -0
  152. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/parsers.py +0 -0
  153. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/timedelta.py +0 -0
  154. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/user_ids.py +0 -0
  155. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/utils/version.py +0 -0
  156. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/__init__.py +0 -0
  157. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/extensions_call.py +0 -0
  158. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/extensions_class.py +0 -0
  159. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/genai_functions.py +0 -0
  160. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/init.py +0 -0
  161. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/memory_tools.py +0 -0
  162. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/safety.py +0 -0
  163. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo/vertex/type_dict_to_json.py +0 -0
  164. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo.egg-info/dependency_links.txt +0 -0
  165. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo.egg-info/entry_points.txt +0 -0
  166. {sunholo-0.116.1 → sunholo-0.118.0}/sunholo.egg-info/top_level.txt +0 -0
  167. {sunholo-0.116.1 → sunholo-0.118.0}/tests/test_async.py +0 -0
  168. {sunholo-0.116.1 → sunholo-0.118.0}/tests/test_chat_history.py +0 -0
  169. {sunholo-0.116.1 → sunholo-0.118.0}/tests/test_config.py +0 -0
  170. {sunholo-0.116.1 → sunholo-0.118.0}/tests/test_unstructured.py +0 -0
@@ -1,9 +1,9 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sunholo
3
- Version: 0.116.1
3
+ Version: 0.118.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.116.1.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.118.0.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -47,6 +47,7 @@ Requires-Dist: google-cloud-pubsub; extra == "all"
47
47
  Requires-Dist: google-cloud-discoveryengine; extra == "all"
48
48
  Requires-Dist: google-cloud-texttospeech; extra == "all"
49
49
  Requires-Dist: google-generativeai>=0.7.1; extra == "all"
50
+ Requires-Dist: google-genai; extra == "all"
50
51
  Requires-Dist: gunicorn; extra == "all"
51
52
  Requires-Dist: httpcore; extra == "all"
52
53
  Requires-Dist: httpx; extra == "all"
@@ -64,6 +65,7 @@ Requires-Dist: langchain-unstructured; extra == "all"
64
65
  Requires-Dist: langfuse; extra == "all"
65
66
  Requires-Dist: mcp; extra == "all"
66
67
  Requires-Dist: numpy; extra == "all"
68
+ Requires-Dist: opencv-python; extra == "all"
67
69
  Requires-Dist: pg8000; extra == "all"
68
70
  Requires-Dist: pgvector; extra == "all"
69
71
  Requires-Dist: pillow; extra == "all"
@@ -118,9 +120,9 @@ Requires-Dist: unstructured[all-docs,local-inference]; extra == "pipeline"
118
120
  Provides-Extra: gcp
119
121
  Requires-Dist: anthropic[vertex]; extra == "gcp"
120
122
  Requires-Dist: google-api-python-client; extra == "gcp"
121
- Requires-Dist: google-cloud-alloydb-connector[pg8000]; extra == "gcp"
122
123
  Requires-Dist: google-auth-httplib2; extra == "gcp"
123
124
  Requires-Dist: google-auth-oauthlib; extra == "gcp"
125
+ Requires-Dist: google-cloud-alloydb-connector[pg8000]; extra == "gcp"
124
126
  Requires-Dist: google-cloud-aiplatform>=1.58.0; extra == "gcp"
125
127
  Requires-Dist: google-cloud-bigquery; extra == "gcp"
126
128
  Requires-Dist: google-cloud-build; extra == "gcp"
@@ -130,6 +132,7 @@ Requires-Dist: google-cloud-logging; extra == "gcp"
130
132
  Requires-Dist: google-cloud-pubsub; extra == "gcp"
131
133
  Requires-Dist: google-cloud-discoveryengine; extra == "gcp"
132
134
  Requires-Dist: google-cloud-texttospeech; extra == "gcp"
135
+ Requires-Dist: google-genai; extra == "gcp"
133
136
  Requires-Dist: google-generativeai>=0.8.3; extra == "gcp"
134
137
  Requires-Dist: langchain-google-genai>=2.0.0; extra == "gcp"
135
138
  Requires-Dist: langchain_google_alloydb_pg>=0.2.2; extra == "gcp"
@@ -164,6 +167,20 @@ Provides-Extra: tts
164
167
  Requires-Dist: google-cloud-texttospeech; extra == "tts"
165
168
  Requires-Dist: numpy; extra == "tts"
166
169
  Requires-Dist: sounddevice; extra == "tts"
170
+ Provides-Extra: video
171
+ Requires-Dist: opencv-python; extra == "video"
172
+ Dynamic: author
173
+ Dynamic: author-email
174
+ Dynamic: classifier
175
+ Dynamic: description
176
+ Dynamic: description-content-type
177
+ Dynamic: download-url
178
+ Dynamic: home-page
179
+ Dynamic: keywords
180
+ Dynamic: license
181
+ Dynamic: provides-extra
182
+ Dynamic: requires-dist
183
+ Dynamic: summary
167
184
 
168
185
  [![PyPi Version](https://img.shields.io/pypi/v/sunholo.svg)](https://pypi.python.org/pypi/sunholo/)
169
186
 
@@ -190,6 +207,12 @@ pip install . --use-feature=in-tree-build
190
207
  pytest tests
191
208
  ```
192
209
 
210
+ ## Local dev
211
+
212
+ ```sh
213
+ uv tool install --from "sunholo[cli]" sunholo --with ".[all]"
214
+ ```
215
+
193
216
  ## Demos
194
217
 
195
218
  Using https://github.com/charmbracelet/vhs
@@ -23,6 +23,12 @@ pip install . --use-feature=in-tree-build
23
23
  pytest tests
24
24
  ```
25
25
 
26
+ ## Local dev
27
+
28
+ ```sh
29
+ uv tool install --from "sunholo[cli]" sunholo --with ".[all]"
30
+ ```
31
+
26
32
  ## Demos
27
33
 
28
34
  Using https://github.com/charmbracelet/vhs
@@ -1,6 +1,6 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
- version = '0.116.1'
3
+ version = '0.118.0'
4
4
 
5
5
  setup(
6
6
  name='sunholo',
@@ -59,6 +59,7 @@ setup(
59
59
  "google-cloud-discoveryengine",
60
60
  "google-cloud-texttospeech",
61
61
  "google-generativeai>=0.7.1",
62
+ "google-genai",
62
63
  "gunicorn",
63
64
  "httpcore",
64
65
  "httpx",
@@ -76,6 +77,7 @@ setup(
76
77
  "langfuse",
77
78
  "mcp",
78
79
  "numpy",
80
+ "opencv-python",
79
81
  "pg8000",
80
82
  "pgvector",
81
83
  "pillow",
@@ -136,9 +138,9 @@ setup(
136
138
  'gcp': [
137
139
  "anthropic[vertex]",
138
140
  "google-api-python-client",
139
- "google-cloud-alloydb-connector[pg8000]",
140
141
  "google-auth-httplib2",
141
142
  "google-auth-oauthlib",
143
+ "google-cloud-alloydb-connector[pg8000]",
142
144
  "google-cloud-aiplatform>=1.58.0",
143
145
  "google-cloud-bigquery",
144
146
  "google-cloud-build",
@@ -148,12 +150,12 @@ setup(
148
150
  "google-cloud-pubsub",
149
151
  "google-cloud-discoveryengine",
150
152
  "google-cloud-texttospeech",
153
+ "google-genai",
151
154
  "google-generativeai>=0.8.3",
152
155
  "langchain-google-genai>=2.0.0",
153
156
  "langchain_google_alloydb_pg>=0.2.2",
154
157
  "langchain-google-vertexai",
155
158
  "pillow",
156
-
157
159
  ],
158
160
  'openai': [
159
161
  "langchain-openai==0.1.25",
@@ -191,6 +193,9 @@ setup(
191
193
  'numpy',
192
194
  'sounddevice',
193
195
  ],
196
+ 'video':[
197
+ 'opencv-python'
198
+ ]
194
199
 
195
200
 
196
201
  },
@@ -16,7 +16,6 @@ from ..terraform import setup_tfvarseditor_subparser
16
16
  from ..senses.stream_voice import setup_tts_subparser
17
17
  from ..mcp.cli import setup_mcp_subparser
18
18
 
19
-
20
19
  from ..utils import ConfigManager
21
20
  from ..utils.version import sunholo_version
22
21
 
@@ -24,7 +23,7 @@ from ..custom_logging import log
24
23
 
25
24
  from .sun_rich import console
26
25
  import sys
27
- from rich.panel import Panel
26
+
28
27
 
29
28
  def load_default_gcp_config():
30
29
  try:
@@ -43,6 +42,7 @@ class CustomHelpAction(argparse.Action):
43
42
  super().__init__(option_strings, dest, nargs=nargs, **kwargs)
44
43
 
45
44
  def __call__(self, parser, namespace, values, option_string=None):
45
+ from rich.panel import Panel
46
46
  console.print(
47
47
  Panel("Welcome to Sunholo Command Line Interface, your assistant to deploy GenAI Virtual Agent Computers (VACs) to Multivac or your own Cloud.",
48
48
  title="Sunholo GenAIOps Assistant CLI",
@@ -64,7 +64,7 @@ def main(args=None):
64
64
  """
65
65
  default_project, default_region = load_default_gcp_config()
66
66
 
67
- parser = argparse.ArgumentParser(description="sunholo CLI tool for deploying GenAI VACs 3", add_help=False)
67
+ parser = argparse.ArgumentParser(description=f"sunholo CLI tool for deploying GenAI VACs - [{sunholo_version()}]", add_help=False)
68
68
  parser.add_argument('-h', '--help', action=CustomHelpAction, help='Show this help message and exit')
69
69
  parser.add_argument('--debug', action='store_true', help='Enable debug output')
70
70
  parser.add_argument('--project', default=default_project, help='GCP project to list Cloud Run services from.')
@@ -200,7 +200,7 @@ def write_vac_config(project_dir: str, service_name: str):
200
200
 
201
201
  # Write the YAML configuration to the file
202
202
  with open(vac_config_path, 'w') as file:
203
- yaml.dump(vac_config_content, file, default_flow_style=False)
203
+ yaml.dump(vac_config_content, file)
204
204
 
205
205
  print(f"{vac_config_path} written successfully with service name '{service_name}'.")
206
206
 
@@ -1,4 +1,5 @@
1
1
  from .process_funcs_cls import GenAIFunctionProcessor
2
2
  from .safety import genai_safety
3
3
  from .init import init_genai
4
- from .file_handling import download_gcs_upload_genai, construct_file_content
4
+ from .file_handling import download_gcs_upload_genai, construct_file_content
5
+ from .genaiv2 import GoogleAI, GoogleAIConfig