sunholo 0.143.12__tar.gz → 0.143.15__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 (196) hide show
  1. {sunholo-0.143.12/src/sunholo.egg-info → sunholo-0.143.15}/PKG-INFO +3 -3
  2. {sunholo-0.143.12 → sunholo-0.143.15}/pyproject.toml +3 -3
  3. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/mcp/cli.py +41 -1
  4. sunholo-0.143.15/src/sunholo/mcp/stdio_http_bridge.py +93 -0
  5. {sunholo-0.143.12 → sunholo-0.143.15/src/sunholo.egg-info}/PKG-INFO +3 -3
  6. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo.egg-info/SOURCES.txt +1 -0
  7. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo.egg-info/requires.txt +2 -2
  8. {sunholo-0.143.12 → sunholo-0.143.15}/LICENSE.txt +0 -0
  9. {sunholo-0.143.12 → sunholo-0.143.15}/MANIFEST.in +0 -0
  10. {sunholo-0.143.12 → sunholo-0.143.15}/README.md +0 -0
  11. {sunholo-0.143.12 → sunholo-0.143.15}/setup.cfg +0 -0
  12. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/__init__.py +0 -0
  13. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/a2a/__init__.py +0 -0
  14. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/a2a/agent_card.py +0 -0
  15. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/a2a/task_manager.py +0 -0
  16. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/a2a/vac_a2a_agent.py +0 -0
  17. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/__init__.py +0 -0
  18. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/chat_history.py +0 -0
  19. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/dispatch_to_qa.py +0 -0
  20. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/fastapi/__init__.py +0 -0
  21. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/fastapi/base.py +0 -0
  22. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
  23. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/flask/__init__.py +0 -0
  24. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/flask/base.py +0 -0
  25. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/flask/vac_routes.py +0 -0
  26. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/langserve.py +0 -0
  27. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/pubsub.py +0 -0
  28. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/route.py +0 -0
  29. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/special_commands.py +0 -0
  30. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/agents/swagger.py +0 -0
  31. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/archive/__init__.py +0 -0
  32. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/archive/archive.py +0 -0
  33. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/auth/__init__.py +0 -0
  34. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/auth/gcloud.py +0 -0
  35. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/auth/refresh.py +0 -0
  36. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/auth/run.py +0 -0
  37. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/azure/__init__.py +0 -0
  38. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/azure/auth.py +0 -0
  39. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/azure/blobs.py +0 -0
  40. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/azure/event_grid.py +0 -0
  41. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/bots/__init__.py +0 -0
  42. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/bots/discord.py +0 -0
  43. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/bots/github_webhook.py +0 -0
  44. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/bots/webapp.py +0 -0
  45. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/__init__.py +0 -0
  46. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/azure.py +0 -0
  47. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/doc_handling.py +0 -0
  48. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/encode_metadata.py +0 -0
  49. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/images.py +0 -0
  50. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/loaders.py +0 -0
  51. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/message_data.py +0 -0
  52. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/pdfs.py +0 -0
  53. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/process_chunker_data.py +0 -0
  54. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/publish.py +0 -0
  55. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/pubsub.py +0 -0
  56. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/chunker/splitter.py +0 -0
  57. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/__init__.py +0 -0
  58. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/chat_vac.py +0 -0
  59. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/cli.py +0 -0
  60. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/cli_init.py +0 -0
  61. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/configs.py +0 -0
  62. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/deploy.py +0 -0
  63. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/embedder.py +0 -0
  64. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/merge_texts.py +0 -0
  65. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/run_proxy.py +0 -0
  66. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/sun_rich.py +0 -0
  67. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/swagger.py +0 -0
  68. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/cli/vertex.py +0 -0
  69. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/components/__init__.py +0 -0
  70. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/components/llm.py +0 -0
  71. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/components/retriever.py +0 -0
  72. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/components/vectorstore.py +0 -0
  73. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/custom_logging.py +0 -0
  74. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/__init__.py +0 -0
  75. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/alloydb.py +0 -0
  76. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/alloydb_client.py +0 -0
  77. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/database.py +0 -0
  78. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/lancedb.py +0 -0
  79. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/sql/sb/create_function.sql +0 -0
  80. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
  81. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/sql/sb/create_table.sql +0 -0
  82. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  83. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
  84. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/sql/sb/setup.sql +0 -0
  85. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/static_dbs.py +0 -0
  86. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/database/uuid.py +0 -0
  87. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/discovery_engine/__init__.py +0 -0
  88. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
  89. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/discovery_engine/cli.py +0 -0
  90. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/discovery_engine/create_new.py +0 -0
  91. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  92. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  93. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/embedder/__init__.py +0 -0
  94. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/embedder/embed_chunk.py +0 -0
  95. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/embedder/embed_metadata.py +0 -0
  96. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/excel/__init__.py +0 -0
  97. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/excel/plugin.py +0 -0
  98. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/__init__.py +0 -0
  99. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/add_file.py +0 -0
  100. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/download_folder.py +0 -0
  101. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/download_gcs_text.py +0 -0
  102. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/download_url.py +0 -0
  103. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/extract_and_sign.py +0 -0
  104. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/gcs/metadata.py +0 -0
  105. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/__init__.py +0 -0
  106. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/file_handling.py +0 -0
  107. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/genaiv2.py +0 -0
  108. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/images.py +0 -0
  109. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/init.py +0 -0
  110. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/process_funcs_cls.py +0 -0
  111. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/genai/safety.py +0 -0
  112. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/invoke/__init__.py +0 -0
  113. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/invoke/async_class.py +0 -0
  114. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/invoke/direct_vac_func.py +0 -0
  115. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
  116. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/langchain_types.py +0 -0
  117. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/langfuse/__init__.py +0 -0
  118. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/langfuse/callback.py +0 -0
  119. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/langfuse/evals.py +0 -0
  120. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/langfuse/prompts.py +0 -0
  121. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/llamaindex/__init__.py +0 -0
  122. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/llamaindex/get_files.py +0 -0
  123. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/llamaindex/import_files.py +0 -0
  124. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
  125. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/llamaindex/user_history.py +0 -0
  126. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/lookup/__init__.py +0 -0
  127. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/lookup/model_lookup.yaml +0 -0
  128. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/mcp/__init__.py +0 -0
  129. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/mcp/mcp_manager.py +0 -0
  130. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/mcp/vac_mcp_server.py +0 -0
  131. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/ollama/__init__.py +0 -0
  132. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/ollama/ollama_images.py +0 -0
  133. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/pubsub/__init__.py +0 -0
  134. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/pubsub/process_pubsub.py +0 -0
  135. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/pubsub/pubsub_manager.py +0 -0
  136. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/qna/__init__.py +0 -0
  137. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/qna/parsers.py +0 -0
  138. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/qna/retry.py +0 -0
  139. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/senses/__init__.py +0 -0
  140. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/senses/stream_voice.py +0 -0
  141. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/streaming/__init__.py +0 -0
  142. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/streaming/content_buffer.py +0 -0
  143. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/streaming/langserve.py +0 -0
  144. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/streaming/stream_lookup.py +0 -0
  145. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/streaming/streaming.py +0 -0
  146. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/summarise/__init__.py +0 -0
  147. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/summarise/summarise.py +0 -0
  148. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/__init__.py +0 -0
  149. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/agent_service.py +0 -0
  150. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/app.py +0 -0
  151. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/my_log.py +0 -0
  152. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/tools/__init__.py +0 -0
  153. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
  154. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/agent/vac_service.py +0 -0
  155. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/project/__init__.py +0 -0
  156. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/project/app.py +0 -0
  157. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/project/my_log.py +0 -0
  158. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/project/vac_service.py +0 -0
  159. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/system_services/__init__.py +0 -0
  160. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/system_services/app.py +0 -0
  161. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/templates/system_services/my_log.py +0 -0
  162. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/terraform/__init__.py +0 -0
  163. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/terraform/tfvars_editor.py +0 -0
  164. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/tools/__init__.py +0 -0
  165. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/tools/web_browser.py +0 -0
  166. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/__init__.py +0 -0
  167. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/api_key.py +0 -0
  168. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/big_context.py +0 -0
  169. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/config.py +0 -0
  170. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/config_class.py +0 -0
  171. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/config_schema.py +0 -0
  172. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/gcp.py +0 -0
  173. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/gcp_project.py +0 -0
  174. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/mime.py +0 -0
  175. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/parsers.py +0 -0
  176. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/proto_convert.py +0 -0
  177. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/timedelta.py +0 -0
  178. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/user_ids.py +0 -0
  179. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/utils/version.py +0 -0
  180. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/__init__.py +0 -0
  181. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/extensions_call.py +0 -0
  182. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/extensions_class.py +0 -0
  183. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/genai_functions.py +0 -0
  184. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/init.py +0 -0
  185. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/memory_tools.py +0 -0
  186. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/safety.py +0 -0
  187. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo/vertex/type_dict_to_json.py +0 -0
  188. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo.egg-info/dependency_links.txt +0 -0
  189. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo.egg-info/entry_points.txt +0 -0
  190. {sunholo-0.143.12 → sunholo-0.143.15}/src/sunholo.egg-info/top_level.txt +0 -0
  191. {sunholo-0.143.12 → sunholo-0.143.15}/tests/test_async.py +0 -0
  192. {sunholo-0.143.12 → sunholo-0.143.15}/tests/test_async_genai2.py +0 -0
  193. {sunholo-0.143.12 → sunholo-0.143.15}/tests/test_chat_history.py +0 -0
  194. {sunholo-0.143.12 → sunholo-0.143.15}/tests/test_config.py +0 -0
  195. {sunholo-0.143.12 → sunholo-0.143.15}/tests/test_genai2.py +0 -0
  196. {sunholo-0.143.12 → sunholo-0.143.15}/tests/test_unstructured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.143.12
3
+ Version: 0.143.15
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
@@ -70,7 +70,7 @@ Requires-Dist: langchain_google_alloydb_pg; extra == "all"
70
70
  Requires-Dist: langchain-anthropic>=0.1.23; extra == "all"
71
71
  Requires-Dist: langchain-google-vertexai; extra == "all"
72
72
  Requires-Dist: langchain-unstructured; extra == "all"
73
- Requires-Dist: langfuse; extra == "all"
73
+ Requires-Dist: langfuse==2.60.9; extra == "all"
74
74
  Requires-Dist: mcp>=1.1.1; extra == "all"
75
75
  Requires-Dist: numpy; extra == "all"
76
76
  Requires-Dist: opencv-python; extra == "all"
@@ -169,7 +169,7 @@ Requires-Dist: gunicorn; extra == "http"
169
169
  Requires-Dist: httpcore; extra == "http"
170
170
  Requires-Dist: httpx; extra == "http"
171
171
  Requires-Dist: langchain; extra == "http"
172
- Requires-Dist: langfuse; extra == "http"
172
+ Requires-Dist: langfuse==2.60.9; extra == "http"
173
173
  Requires-Dist: python-socketio; extra == "http"
174
174
  Requires-Dist: requests; extra == "http"
175
175
  Requires-Dist: tenacity; extra == "http"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sunholo"
7
- version = "0.143.12"
7
+ version = "0.143.15"
8
8
  description = "AI DevOps - a package to help deploy GenAI to the Cloud."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -101,7 +101,7 @@ all = [
101
101
  "langchain-anthropic>=0.1.23",
102
102
  "langchain-google-vertexai",
103
103
  "langchain-unstructured",
104
- "langfuse",
104
+ "langfuse==2.60.9",
105
105
  "mcp>=1.1.1",
106
106
  "numpy",
107
107
  "opencv-python",
@@ -211,7 +211,7 @@ http = [
211
211
  "httpcore",
212
212
  "httpx",
213
213
  "langchain",
214
- "langfuse",
214
+ "langfuse==2.60.9",
215
215
  "python-socketio",
216
216
  "requests",
217
217
  "tenacity"
@@ -281,6 +281,25 @@ def cli_mcp(args):
281
281
  logger.error(f"Error running MCP server: {str(e)}")
282
282
  raise
283
283
 
284
+ def cli_mcp_bridge(args):
285
+ """CLI handler for the MCP bridge command"""
286
+ try:
287
+ from .stdio_http_bridge import run_bridge
288
+
289
+ http_url = args.url
290
+ logger.info(f"Starting MCP stdio-to-HTTP bridge for {http_url}")
291
+
292
+ if console:
293
+ console.print(f"Starting MCP bridge to {http_url}...")
294
+
295
+ asyncio.run(run_bridge(http_url))
296
+
297
+ except KeyboardInterrupt:
298
+ logger.info("Bridge stopped by user")
299
+ except Exception as e:
300
+ logger.error(f"Error running MCP bridge: {str(e)}")
301
+ raise
302
+
284
303
  def setup_mcp_subparser(subparsers):
285
304
  """
286
305
  Sets up an argparse subparser for the 'mcp' command 3.
@@ -293,6 +312,27 @@ def setup_mcp_subparser(subparsers):
293
312
  ```
294
313
  """
295
314
  mcp_parser = subparsers.add_parser('mcp',
296
- help='Start an Anthropic MCP server that wraps `sunholo` functionality')
315
+ help='MCP (Model Context Protocol) commands')
316
+
317
+ # Create subcommands for mcp
318
+ mcp_subparsers = mcp_parser.add_subparsers(title='mcp commands',
319
+ description='MCP subcommands',
320
+ help='MCP subcommands',
321
+ dest='mcp_command')
322
+
323
+ # mcp server command (default)
324
+ server_parser = mcp_subparsers.add_parser('server',
325
+ help='Start an Anthropic MCP server that wraps sunholo functionality')
326
+ server_parser.set_defaults(func=cli_mcp)
327
+
328
+ # mcp bridge command
329
+ bridge_parser = mcp_subparsers.add_parser('bridge',
330
+ help='Start a stdio-to-HTTP bridge for MCP servers')
331
+ bridge_parser.add_argument('url',
332
+ nargs='?',
333
+ default='http://127.0.0.1:1956/mcp',
334
+ help='HTTP URL of the MCP server (default: http://127.0.0.1:1956/mcp)')
335
+ bridge_parser.set_defaults(func=cli_mcp_bridge)
297
336
 
337
+ # Set default behavior when no subcommand is provided
298
338
  mcp_parser.set_defaults(func=cli_mcp)
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ MCP stdio-to-HTTP bridge for Sunholo VAC server.
4
+ This script translates between stdio (used by Claude Desktop) and HTTP (used by Sunholo).
5
+ """
6
+
7
+ import sys
8
+ import json
9
+ import asyncio
10
+ import aiohttp
11
+ from typing import Optional
12
+
13
+ from ..custom_logging import setup_logging
14
+ logger = setup_logging("mcp-bridge")
15
+
16
+ class MCPStdioHttpBridge:
17
+ def __init__(self, http_url: str):
18
+ self.http_url = http_url
19
+ self.session: Optional[aiohttp.ClientSession] = None
20
+
21
+ async def start(self):
22
+ """Start the bridge."""
23
+ self.session = aiohttp.ClientSession()
24
+
25
+ # Send initialization success to stderr for debugging
26
+ logger.info(f"MCP stdio-to-HTTP bridge started, forwarding to: {self.http_url}")
27
+
28
+ try:
29
+ await self.process_messages()
30
+ finally:
31
+ await self.session.close()
32
+
33
+ async def process_messages(self):
34
+ """Process messages from stdin and forward to HTTP server."""
35
+ loop = asyncio.get_event_loop()
36
+ reader = asyncio.StreamReader()
37
+ protocol = asyncio.StreamReaderProtocol(reader)
38
+ await loop.connect_read_pipe(lambda: protocol, sys.stdin)
39
+
40
+ while True:
41
+ try:
42
+ # Read line from stdin
43
+ line = await reader.readline()
44
+ if not line:
45
+ break
46
+
47
+ line = line.decode().strip()
48
+ if not line:
49
+ continue
50
+
51
+ # Parse JSON-RPC message
52
+ try:
53
+ message = json.loads(line)
54
+ logger.debug(f"Received from stdin: {message}")
55
+ except json.JSONDecodeError as e:
56
+ logger.error(f"Invalid JSON: {e}")
57
+ continue
58
+
59
+ # Forward to HTTP server
60
+ try:
61
+ async with self.session.post(
62
+ self.http_url,
63
+ json=message,
64
+ headers={"Content-Type": "application/json"}
65
+ ) as response:
66
+ result = await response.json()
67
+ logger.debug(f"Received from HTTP: {result}")
68
+
69
+ # Send response back to stdout
70
+ print(json.dumps(result))
71
+ sys.stdout.flush()
72
+
73
+ except aiohttp.ClientError as e:
74
+ logger.error(f"HTTP error: {e}")
75
+ error_response = {
76
+ "jsonrpc": "2.0",
77
+ "error": {
78
+ "code": -32603,
79
+ "message": f"HTTP error: {str(e)}"
80
+ },
81
+ "id": message.get("id")
82
+ }
83
+ print(json.dumps(error_response))
84
+ sys.stdout.flush()
85
+
86
+ except Exception as e:
87
+ logger.error(f"Bridge error: {e}")
88
+ continue
89
+
90
+ async def run_bridge(http_url: str):
91
+ """Run the stdio-to-HTTP bridge."""
92
+ bridge = MCPStdioHttpBridge(http_url)
93
+ await bridge.start()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.143.12
3
+ Version: 0.143.15
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
@@ -70,7 +70,7 @@ Requires-Dist: langchain_google_alloydb_pg; extra == "all"
70
70
  Requires-Dist: langchain-anthropic>=0.1.23; extra == "all"
71
71
  Requires-Dist: langchain-google-vertexai; extra == "all"
72
72
  Requires-Dist: langchain-unstructured; extra == "all"
73
- Requires-Dist: langfuse; extra == "all"
73
+ Requires-Dist: langfuse==2.60.9; extra == "all"
74
74
  Requires-Dist: mcp>=1.1.1; extra == "all"
75
75
  Requires-Dist: numpy; extra == "all"
76
76
  Requires-Dist: opencv-python; extra == "all"
@@ -169,7 +169,7 @@ Requires-Dist: gunicorn; extra == "http"
169
169
  Requires-Dist: httpcore; extra == "http"
170
170
  Requires-Dist: httpx; extra == "http"
171
171
  Requires-Dist: langchain; extra == "http"
172
- Requires-Dist: langfuse; extra == "http"
172
+ Requires-Dist: langfuse==2.60.9; extra == "http"
173
173
  Requires-Dist: python-socketio; extra == "http"
174
174
  Requires-Dist: requests; extra == "http"
175
175
  Requires-Dist: tenacity; extra == "http"
@@ -127,6 +127,7 @@ src/sunholo/lookup/model_lookup.yaml
127
127
  src/sunholo/mcp/__init__.py
128
128
  src/sunholo/mcp/cli.py
129
129
  src/sunholo/mcp/mcp_manager.py
130
+ src/sunholo/mcp/stdio_http_bridge.py
130
131
  src/sunholo/mcp/vac_mcp_server.py
131
132
  src/sunholo/ollama/__init__.py
132
133
  src/sunholo/ollama/ollama_images.py
@@ -48,7 +48,7 @@ langchain_google_alloydb_pg
48
48
  langchain-anthropic>=0.1.23
49
49
  langchain-google-vertexai
50
50
  langchain-unstructured
51
- langfuse
51
+ langfuse==2.60.9
52
52
  mcp>=1.1.1
53
53
  numpy
54
54
  opencv-python
@@ -133,7 +133,7 @@ gunicorn
133
133
  httpcore
134
134
  httpx
135
135
  langchain
136
- langfuse
136
+ langfuse==2.60.9
137
137
  python-socketio
138
138
  requests
139
139
  tenacity
File without changes
File without changes
File without changes
File without changes