sunholo 0.143.11__tar.gz → 0.143.14__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.11/src/sunholo.egg-info → sunholo-0.143.14}/PKG-INFO +4 -3
  2. {sunholo-0.143.11 → sunholo-0.143.14}/README.md +1 -0
  3. {sunholo-0.143.11 → sunholo-0.143.14}/pyproject.toml +3 -3
  4. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/flask/vac_routes.py +24 -1
  5. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/mcp/cli.py +28 -0
  6. sunholo-0.143.14/src/sunholo/mcp/stdio_http_bridge.py +93 -0
  7. {sunholo-0.143.11 → sunholo-0.143.14/src/sunholo.egg-info}/PKG-INFO +4 -3
  8. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo.egg-info/SOURCES.txt +1 -0
  9. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo.egg-info/requires.txt +2 -2
  10. {sunholo-0.143.11 → sunholo-0.143.14}/LICENSE.txt +0 -0
  11. {sunholo-0.143.11 → sunholo-0.143.14}/MANIFEST.in +0 -0
  12. {sunholo-0.143.11 → sunholo-0.143.14}/setup.cfg +0 -0
  13. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/__init__.py +0 -0
  14. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/a2a/__init__.py +0 -0
  15. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/a2a/agent_card.py +0 -0
  16. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/a2a/task_manager.py +0 -0
  17. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/a2a/vac_a2a_agent.py +0 -0
  18. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/__init__.py +0 -0
  19. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/chat_history.py +0 -0
  20. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/dispatch_to_qa.py +0 -0
  21. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/fastapi/__init__.py +0 -0
  22. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/fastapi/base.py +0 -0
  23. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
  24. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/flask/__init__.py +0 -0
  25. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/flask/base.py +0 -0
  26. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/langserve.py +0 -0
  27. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/pubsub.py +0 -0
  28. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/route.py +0 -0
  29. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/special_commands.py +0 -0
  30. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/agents/swagger.py +0 -0
  31. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/archive/__init__.py +0 -0
  32. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/archive/archive.py +0 -0
  33. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/auth/__init__.py +0 -0
  34. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/auth/gcloud.py +0 -0
  35. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/auth/refresh.py +0 -0
  36. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/auth/run.py +0 -0
  37. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/azure/__init__.py +0 -0
  38. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/azure/auth.py +0 -0
  39. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/azure/blobs.py +0 -0
  40. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/azure/event_grid.py +0 -0
  41. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/bots/__init__.py +0 -0
  42. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/bots/discord.py +0 -0
  43. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/bots/github_webhook.py +0 -0
  44. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/bots/webapp.py +0 -0
  45. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/__init__.py +0 -0
  46. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/azure.py +0 -0
  47. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/doc_handling.py +0 -0
  48. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/encode_metadata.py +0 -0
  49. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/images.py +0 -0
  50. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/loaders.py +0 -0
  51. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/message_data.py +0 -0
  52. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/pdfs.py +0 -0
  53. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/process_chunker_data.py +0 -0
  54. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/publish.py +0 -0
  55. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/pubsub.py +0 -0
  56. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/chunker/splitter.py +0 -0
  57. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/__init__.py +0 -0
  58. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/chat_vac.py +0 -0
  59. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/cli.py +0 -0
  60. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/cli_init.py +0 -0
  61. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/configs.py +0 -0
  62. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/deploy.py +0 -0
  63. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/embedder.py +0 -0
  64. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/merge_texts.py +0 -0
  65. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/run_proxy.py +0 -0
  66. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/sun_rich.py +0 -0
  67. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/swagger.py +0 -0
  68. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/cli/vertex.py +0 -0
  69. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/components/__init__.py +0 -0
  70. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/components/llm.py +0 -0
  71. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/components/retriever.py +0 -0
  72. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/components/vectorstore.py +0 -0
  73. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/custom_logging.py +0 -0
  74. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/__init__.py +0 -0
  75. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/alloydb.py +0 -0
  76. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/alloydb_client.py +0 -0
  77. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/database.py +0 -0
  78. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/lancedb.py +0 -0
  79. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/sql/sb/create_function.sql +0 -0
  80. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
  81. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/sql/sb/create_table.sql +0 -0
  82. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  83. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
  84. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/sql/sb/setup.sql +0 -0
  85. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/static_dbs.py +0 -0
  86. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/database/uuid.py +0 -0
  87. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/discovery_engine/__init__.py +0 -0
  88. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
  89. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/discovery_engine/cli.py +0 -0
  90. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/discovery_engine/create_new.py +0 -0
  91. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  92. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  93. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/embedder/__init__.py +0 -0
  94. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/embedder/embed_chunk.py +0 -0
  95. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/embedder/embed_metadata.py +0 -0
  96. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/excel/__init__.py +0 -0
  97. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/excel/plugin.py +0 -0
  98. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/__init__.py +0 -0
  99. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/add_file.py +0 -0
  100. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/download_folder.py +0 -0
  101. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/download_gcs_text.py +0 -0
  102. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/download_url.py +0 -0
  103. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/extract_and_sign.py +0 -0
  104. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/gcs/metadata.py +0 -0
  105. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/__init__.py +0 -0
  106. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/file_handling.py +0 -0
  107. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/genaiv2.py +0 -0
  108. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/images.py +0 -0
  109. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/init.py +0 -0
  110. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/process_funcs_cls.py +0 -0
  111. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/genai/safety.py +0 -0
  112. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/invoke/__init__.py +0 -0
  113. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/invoke/async_class.py +0 -0
  114. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/invoke/direct_vac_func.py +0 -0
  115. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
  116. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/langchain_types.py +0 -0
  117. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/langfuse/__init__.py +0 -0
  118. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/langfuse/callback.py +0 -0
  119. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/langfuse/evals.py +0 -0
  120. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/langfuse/prompts.py +0 -0
  121. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/llamaindex/__init__.py +0 -0
  122. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/llamaindex/get_files.py +0 -0
  123. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/llamaindex/import_files.py +0 -0
  124. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
  125. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/llamaindex/user_history.py +0 -0
  126. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/lookup/__init__.py +0 -0
  127. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/lookup/model_lookup.yaml +0 -0
  128. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/mcp/__init__.py +0 -0
  129. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/mcp/mcp_manager.py +0 -0
  130. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/mcp/vac_mcp_server.py +0 -0
  131. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/ollama/__init__.py +0 -0
  132. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/ollama/ollama_images.py +0 -0
  133. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/pubsub/__init__.py +0 -0
  134. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/pubsub/process_pubsub.py +0 -0
  135. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/pubsub/pubsub_manager.py +0 -0
  136. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/qna/__init__.py +0 -0
  137. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/qna/parsers.py +0 -0
  138. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/qna/retry.py +0 -0
  139. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/senses/__init__.py +0 -0
  140. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/senses/stream_voice.py +0 -0
  141. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/streaming/__init__.py +0 -0
  142. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/streaming/content_buffer.py +0 -0
  143. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/streaming/langserve.py +0 -0
  144. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/streaming/stream_lookup.py +0 -0
  145. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/streaming/streaming.py +0 -0
  146. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/summarise/__init__.py +0 -0
  147. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/summarise/summarise.py +0 -0
  148. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/__init__.py +0 -0
  149. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/agent_service.py +0 -0
  150. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/app.py +0 -0
  151. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/my_log.py +0 -0
  152. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/tools/__init__.py +0 -0
  153. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
  154. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/agent/vac_service.py +0 -0
  155. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/project/__init__.py +0 -0
  156. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/project/app.py +0 -0
  157. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/project/my_log.py +0 -0
  158. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/project/vac_service.py +0 -0
  159. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/system_services/__init__.py +0 -0
  160. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/system_services/app.py +0 -0
  161. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/templates/system_services/my_log.py +0 -0
  162. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/terraform/__init__.py +0 -0
  163. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/terraform/tfvars_editor.py +0 -0
  164. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/tools/__init__.py +0 -0
  165. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/tools/web_browser.py +0 -0
  166. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/__init__.py +0 -0
  167. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/api_key.py +0 -0
  168. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/big_context.py +0 -0
  169. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/config.py +0 -0
  170. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/config_class.py +0 -0
  171. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/config_schema.py +0 -0
  172. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/gcp.py +0 -0
  173. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/gcp_project.py +0 -0
  174. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/mime.py +0 -0
  175. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/parsers.py +0 -0
  176. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/proto_convert.py +0 -0
  177. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/timedelta.py +0 -0
  178. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/user_ids.py +0 -0
  179. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/utils/version.py +0 -0
  180. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/__init__.py +0 -0
  181. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/extensions_call.py +0 -0
  182. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/extensions_class.py +0 -0
  183. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/genai_functions.py +0 -0
  184. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/init.py +0 -0
  185. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/memory_tools.py +0 -0
  186. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/safety.py +0 -0
  187. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo/vertex/type_dict_to_json.py +0 -0
  188. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo.egg-info/dependency_links.txt +0 -0
  189. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo.egg-info/entry_points.txt +0 -0
  190. {sunholo-0.143.11 → sunholo-0.143.14}/src/sunholo.egg-info/top_level.txt +0 -0
  191. {sunholo-0.143.11 → sunholo-0.143.14}/tests/test_async.py +0 -0
  192. {sunholo-0.143.11 → sunholo-0.143.14}/tests/test_async_genai2.py +0 -0
  193. {sunholo-0.143.11 → sunholo-0.143.14}/tests/test_chat_history.py +0 -0
  194. {sunholo-0.143.11 → sunholo-0.143.14}/tests/test_config.py +0 -0
  195. {sunholo-0.143.11 → sunholo-0.143.14}/tests/test_genai2.py +0 -0
  196. {sunholo-0.143.11 → sunholo-0.143.14}/tests/test_unstructured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.143.11
3
+ Version: 0.143.14
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"
@@ -288,6 +288,7 @@ sunholo deploy my-agent
288
288
 
289
289
  - **Web Frameworks**: Flask and FastAPI templates
290
290
  - **AI Frameworks**: LangChain and LlamaIndex integration
291
+ - **MCP Integration**: Model Context Protocol server and client support
291
292
  - **Observability**: Langfuse for tracing and monitoring
292
293
  - **API Standards**: OpenAI-compatible endpoints
293
294
 
@@ -99,6 +99,7 @@ sunholo deploy my-agent
99
99
 
100
100
  - **Web Frameworks**: Flask and FastAPI templates
101
101
  - **AI Frameworks**: LangChain and LlamaIndex integration
102
+ - **MCP Integration**: Model Context Protocol server and client support
102
103
  - **Observability**: Langfuse for tracing and monitoring
103
104
  - **API Standards**: OpenAI-compatible endpoints
104
105
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sunholo"
7
- version = "0.143.11"
7
+ version = "0.143.14"
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"
@@ -1036,7 +1036,30 @@ if __name__ == "__main__":
1036
1036
 
1037
1037
  try:
1038
1038
  # Handle different MCP methods
1039
- if method == "tools/list":
1039
+ if method == "initialize":
1040
+ # Handle MCP protocol initialization
1041
+ protocol_version = params.get("protocolVersion", "2025-06-18")
1042
+ capabilities = params.get("capabilities", {})
1043
+ client_info = params.get("clientInfo", {})
1044
+
1045
+ log.info(f"MCP client initializing: {client_info} with protocol version: {protocol_version}")
1046
+
1047
+ return {
1048
+ "jsonrpc": "2.0",
1049
+ "result": {
1050
+ "protocolVersion": "2025-06-18",
1051
+ "capabilities": {
1052
+ "tools": {}
1053
+ },
1054
+ "serverInfo": {
1055
+ "name": "sunholo-vac-server",
1056
+ "version": sunholo_version()
1057
+ }
1058
+ },
1059
+ "id": request_id
1060
+ }
1061
+
1062
+ elif method == "tools/list":
1040
1063
  # Create mock tools list based on VACMCPServer capabilities
1041
1064
  tools = [
1042
1065
  {
@@ -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.
@@ -296,3 +315,12 @@ def setup_mcp_subparser(subparsers):
296
315
  help='Start an Anthropic MCP server that wraps `sunholo` functionality')
297
316
 
298
317
  mcp_parser.set_defaults(func=cli_mcp)
318
+
319
+ # Add mcp-bridge subcommand
320
+ mcp_bridge_parser = subparsers.add_parser('mcp-bridge',
321
+ help='Start a stdio-to-HTTP bridge for MCP servers')
322
+ mcp_bridge_parser.add_argument('url',
323
+ nargs='?',
324
+ default='http://127.0.0.1:1956/mcp',
325
+ help='HTTP URL of the MCP server (default: http://127.0.0.1:1956/mcp)')
326
+ mcp_bridge_parser.set_defaults(func=cli_mcp_bridge)
@@ -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.11
3
+ Version: 0.143.14
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"
@@ -288,6 +288,7 @@ sunholo deploy my-agent
288
288
 
289
289
  - **Web Frameworks**: Flask and FastAPI templates
290
290
  - **AI Frameworks**: LangChain and LlamaIndex integration
291
+ - **MCP Integration**: Model Context Protocol server and client support
291
292
  - **Observability**: Langfuse for tracing and monitoring
292
293
  - **API Standards**: OpenAI-compatible endpoints
293
294
 
@@ -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