sunholo 0.144.8__tar.gz → 0.144.9__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 (204) hide show
  1. {sunholo-0.144.8/src/sunholo.egg-info → sunholo-0.144.9}/PKG-INFO +1 -1
  2. {sunholo-0.144.8 → sunholo-0.144.9}/pyproject.toml +1 -1
  3. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/fastapi/vac_routes.py +10 -17
  4. {sunholo-0.144.8 → sunholo-0.144.9/src/sunholo.egg-info}/PKG-INFO +1 -1
  5. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_vac_routes_mcp.py +58 -3
  6. {sunholo-0.144.8 → sunholo-0.144.9}/LICENSE.txt +0 -0
  7. {sunholo-0.144.8 → sunholo-0.144.9}/MANIFEST.in +0 -0
  8. {sunholo-0.144.8 → sunholo-0.144.9}/README.md +0 -0
  9. {sunholo-0.144.8 → sunholo-0.144.9}/setup.cfg +0 -0
  10. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/__init__.py +0 -0
  11. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/a2a/__init__.py +0 -0
  12. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/a2a/agent_card.py +0 -0
  13. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/a2a/task_manager.py +0 -0
  14. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/a2a/vac_a2a_agent.py +0 -0
  15. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/__init__.py +0 -0
  16. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/chat_history.py +0 -0
  17. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/dispatch_to_qa.py +0 -0
  18. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/fastapi/__init__.py +0 -0
  19. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/fastapi/base.py +0 -0
  20. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
  21. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/flask/__init__.py +0 -0
  22. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/flask/base.py +0 -0
  23. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/flask/vac_routes.py +0 -0
  24. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/langserve.py +0 -0
  25. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/pubsub.py +0 -0
  26. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/route.py +0 -0
  27. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/special_commands.py +0 -0
  28. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/agents/swagger.py +0 -0
  29. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/archive/__init__.py +0 -0
  30. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/archive/archive.py +0 -0
  31. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/auth/__init__.py +0 -0
  32. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/auth/gcloud.py +0 -0
  33. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/auth/refresh.py +0 -0
  34. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/auth/run.py +0 -0
  35. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/azure/__init__.py +0 -0
  36. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/azure/auth.py +0 -0
  37. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/azure/blobs.py +0 -0
  38. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/azure/event_grid.py +0 -0
  39. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/bots/__init__.py +0 -0
  40. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/bots/discord.py +0 -0
  41. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/bots/github_webhook.py +0 -0
  42. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/bots/webapp.py +0 -0
  43. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/__init__.py +0 -0
  44. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/azure.py +0 -0
  45. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/doc_handling.py +0 -0
  46. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/encode_metadata.py +0 -0
  47. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/images.py +0 -0
  48. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/loaders.py +0 -0
  49. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/message_data.py +0 -0
  50. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/pdfs.py +0 -0
  51. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/process_chunker_data.py +0 -0
  52. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/publish.py +0 -0
  53. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/pubsub.py +0 -0
  54. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/chunker/splitter.py +0 -0
  55. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/__init__.py +0 -0
  56. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/chat_vac.py +0 -0
  57. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/cli.py +0 -0
  58. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/cli_init.py +0 -0
  59. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/configs.py +0 -0
  60. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/deploy.py +0 -0
  61. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/embedder.py +0 -0
  62. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/merge_texts.py +0 -0
  63. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/run_proxy.py +0 -0
  64. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/sun_rich.py +0 -0
  65. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/swagger.py +0 -0
  66. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/cli/vertex.py +0 -0
  67. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/components/__init__.py +0 -0
  68. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/components/llm.py +0 -0
  69. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/components/retriever.py +0 -0
  70. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/components/vectorstore.py +0 -0
  71. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/custom_logging.py +0 -0
  72. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/__init__.py +0 -0
  73. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/alloydb.py +0 -0
  74. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/alloydb_client.py +0 -0
  75. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/database.py +0 -0
  76. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/lancedb.py +0 -0
  77. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/sql/sb/create_function.sql +0 -0
  78. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
  79. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/sql/sb/create_table.sql +0 -0
  80. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  81. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
  82. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/sql/sb/setup.sql +0 -0
  83. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/static_dbs.py +0 -0
  84. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/database/uuid.py +0 -0
  85. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/discovery_engine/__init__.py +0 -0
  86. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
  87. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/discovery_engine/cli.py +0 -0
  88. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/discovery_engine/create_new.py +0 -0
  89. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  90. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  91. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/embedder/__init__.py +0 -0
  92. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/embedder/embed_chunk.py +0 -0
  93. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/embedder/embed_metadata.py +0 -0
  94. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/excel/__init__.py +0 -0
  95. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/excel/plugin.py +0 -0
  96. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/__init__.py +0 -0
  97. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/add_file.py +0 -0
  98. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/download_folder.py +0 -0
  99. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/download_gcs_text.py +0 -0
  100. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/download_url.py +0 -0
  101. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/extract_and_sign.py +0 -0
  102. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/gcs/metadata.py +0 -0
  103. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/__init__.py +0 -0
  104. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/file_handling.py +0 -0
  105. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/genaiv2.py +0 -0
  106. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/images.py +0 -0
  107. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/init.py +0 -0
  108. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/process_funcs_cls.py +0 -0
  109. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/genai/safety.py +0 -0
  110. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/invoke/__init__.py +0 -0
  111. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/invoke/async_class.py +0 -0
  112. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/invoke/direct_vac_func.py +0 -0
  113. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
  114. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/langchain_types.py +0 -0
  115. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/langfuse/__init__.py +0 -0
  116. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/langfuse/callback.py +0 -0
  117. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/langfuse/evals.py +0 -0
  118. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/langfuse/prompts.py +0 -0
  119. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/llamaindex/__init__.py +0 -0
  120. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/llamaindex/get_files.py +0 -0
  121. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/llamaindex/import_files.py +0 -0
  122. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
  123. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/llamaindex/user_history.py +0 -0
  124. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/lookup/__init__.py +0 -0
  125. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/lookup/model_lookup.yaml +0 -0
  126. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/__init__.py +0 -0
  127. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/cli.py +0 -0
  128. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/cli_fastmcp.py +0 -0
  129. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/extensible_mcp_server.py +0 -0
  130. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/mcp_manager.py +0 -0
  131. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/sse_utils.py +0 -0
  132. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/stdio_http_bridge.py +0 -0
  133. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/vac_mcp_server.py +0 -0
  134. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/vac_mcp_server_fastmcp.py +0 -0
  135. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/mcp/vac_tools.py +0 -0
  136. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/ollama/__init__.py +0 -0
  137. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/ollama/ollama_images.py +0 -0
  138. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/pubsub/__init__.py +0 -0
  139. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/pubsub/process_pubsub.py +0 -0
  140. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/pubsub/pubsub_manager.py +0 -0
  141. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/qna/__init__.py +0 -0
  142. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/qna/parsers.py +0 -0
  143. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/qna/retry.py +0 -0
  144. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/senses/__init__.py +0 -0
  145. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/senses/stream_voice.py +0 -0
  146. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/streaming/__init__.py +0 -0
  147. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/streaming/content_buffer.py +0 -0
  148. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/streaming/langserve.py +0 -0
  149. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/streaming/stream_lookup.py +0 -0
  150. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/streaming/streaming.py +0 -0
  151. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/summarise/__init__.py +0 -0
  152. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/summarise/summarise.py +0 -0
  153. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/__init__.py +0 -0
  154. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/agent_service.py +0 -0
  155. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/app.py +0 -0
  156. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/my_log.py +0 -0
  157. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/tools/__init__.py +0 -0
  158. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
  159. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/agent/vac_service.py +0 -0
  160. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/project/__init__.py +0 -0
  161. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/project/app.py +0 -0
  162. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/project/my_log.py +0 -0
  163. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/project/vac_service.py +0 -0
  164. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/system_services/__init__.py +0 -0
  165. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/system_services/app.py +0 -0
  166. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/templates/system_services/my_log.py +0 -0
  167. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/terraform/__init__.py +0 -0
  168. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/terraform/tfvars_editor.py +0 -0
  169. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/tools/__init__.py +0 -0
  170. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/tools/web_browser.py +0 -0
  171. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/__init__.py +0 -0
  172. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/api_key.py +0 -0
  173. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/big_context.py +0 -0
  174. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/config.py +0 -0
  175. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/config_class.py +0 -0
  176. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/config_schema.py +0 -0
  177. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/gcp.py +0 -0
  178. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/gcp_project.py +0 -0
  179. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/mime.py +0 -0
  180. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/parsers.py +0 -0
  181. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/proto_convert.py +0 -0
  182. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/timedelta.py +0 -0
  183. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/user_ids.py +0 -0
  184. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/utils/version.py +0 -0
  185. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/__init__.py +0 -0
  186. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/extensions_call.py +0 -0
  187. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/extensions_class.py +0 -0
  188. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/genai_functions.py +0 -0
  189. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/init.py +0 -0
  190. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/memory_tools.py +0 -0
  191. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/safety.py +0 -0
  192. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo/vertex/type_dict_to_json.py +0 -0
  193. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo.egg-info/SOURCES.txt +0 -0
  194. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo.egg-info/dependency_links.txt +0 -0
  195. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo.egg-info/entry_points.txt +0 -0
  196. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo.egg-info/requires.txt +0 -0
  197. {sunholo-0.144.8 → sunholo-0.144.9}/src/sunholo.egg-info/top_level.txt +0 -0
  198. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_async.py +0 -0
  199. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_async_genai2.py +0 -0
  200. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_chat_history.py +0 -0
  201. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_config.py +0 -0
  202. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_genai2.py +0 -0
  203. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_unstructured.py +0 -0
  204. {sunholo-0.144.8 → sunholo-0.144.9}/tests/test_vac_routes_fastapi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.144.8
3
+ Version: 0.144.9
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sunholo"
7
- version = "0.144.8"
7
+ version = "0.144.9"
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"
@@ -353,7 +353,6 @@ class VACRoutesFastAPI:
353
353
  additional_routes: Optional[List[Dict]] = None,
354
354
  mcp_servers: Optional[List[Dict[str, Any]]] = None,
355
355
  add_langfuse_eval: bool = True,
356
- enable_mcp_server: bool = False,
357
356
  enable_a2a_agent: bool = False,
358
357
  a2a_vac_names: Optional[List[str]] = None
359
358
  ):
@@ -371,9 +370,6 @@ class VACRoutesFastAPI:
371
370
  mcp_servers: List of external MCP server configurations to connect to:
372
371
  [{"name": "server-name", "command": "python", "args": ["server.py"]}]
373
372
  add_langfuse_eval: Whether to enable Langfuse evaluation and tracing
374
- enable_mcp_server: Whether to enable the MCP server at /mcp endpoint for
375
- Claude Desktop/Code integration. When True, automatically
376
- includes built-in VAC tools and supports custom tool registration.
377
373
  enable_a2a_agent: Whether to enable A2A (Agent-to-Agent) protocol endpoints
378
374
  a2a_vac_names: List of VAC names available for A2A agent interactions
379
375
 
@@ -398,7 +394,7 @@ class VACRoutesFastAPI:
398
394
 
399
395
  ## MCP Server Integration
400
396
 
401
- When enable_mcp_server=True, the following happens:
397
+ When VACMCPServer is available, the following happens automatically:
402
398
  1. MCP server is mounted at /mcp endpoint
403
399
  2. Built-in VAC tools are automatically registered:
404
400
  - vac_stream, vac_query, list_available_vacs, get_vac_info
@@ -452,13 +448,13 @@ class VACRoutesFastAPI:
452
448
  self.mcp_client_manager = MCPClientManager() if MCPClientManager else None
453
449
  self._mcp_initialized = False
454
450
 
455
- # MCP server initialization
456
- self.enable_mcp_server = enable_mcp_server
451
+ # MCP server initialization - automatically enabled if VACMCPServer is available
457
452
  self.vac_mcp_server = None
458
453
  self._custom_mcp_tools = []
459
454
  self._custom_mcp_resources = []
460
455
 
461
- if self.enable_mcp_server and VACMCPServer:
456
+ # Enable MCP server if VACMCPServer is available
457
+ if VACMCPServer:
462
458
  self.vac_mcp_server = VACMCPServer(
463
459
  server_name="sunholo-vac-fastapi-server",
464
460
  include_vac_tools=True
@@ -497,7 +493,7 @@ class VACRoutesFastAPI:
497
493
  stream_interpreter: Streaming interpreter function
498
494
  vac_interpreter: Non-streaming interpreter function
499
495
  app_lifespan: Optional app lifespan context manager
500
- **kwargs: Additional arguments passed to VACRoutesFastAPI (except enable_mcp_server)
496
+ **kwargs: Additional arguments passed to VACRoutesFastAPI
501
497
 
502
498
  Returns:
503
499
  Tuple of (FastAPI app, VACRoutesFastAPI instance)
@@ -569,7 +565,6 @@ class VACRoutesFastAPI:
569
565
  app,
570
566
  stream_interpreter=stream_interpreter,
571
567
  vac_interpreter=vac_interpreter,
572
- enable_mcp_server=False, # Don't enable again since we manually mounted
573
568
  **kwargs
574
569
  )
575
570
 
@@ -589,7 +584,6 @@ class VACRoutesFastAPI:
589
584
  app,
590
585
  stream_interpreter=stream_interpreter,
591
586
  vac_interpreter=vac_interpreter,
592
- enable_mcp_server=False,
593
587
  **kwargs
594
588
  )
595
589
 
@@ -694,7 +688,7 @@ class VACRoutesFastAPI:
694
688
  self.app.post("/mcp/resources/read")(self.handle_mcp_read_resource)
695
689
 
696
690
  # MCP server endpoint - mount the FastMCP app
697
- if self.enable_mcp_server and self.vac_mcp_server:
691
+ if self.vac_mcp_server:
698
692
  try:
699
693
  mcp_app = self.vac_mcp_server.get_http_app()
700
694
 
@@ -713,8 +707,7 @@ class VACRoutesFastAPI:
713
707
  "The FastAPI app must be created with the MCP lifespan.\n\n"
714
708
  "Quick fix: Use the helper method:\n"
715
709
  " app, vac_routes = VACRoutesFastAPI.create_app_with_mcp(\n"
716
- " stream_interpreter=your_interpreter,\n"
717
- " enable_mcp_server=True\n"
710
+ " stream_interpreter=your_interpreter\n"
718
711
  " )\n\n"
719
712
  "Or manually configure the lifespan - see documentation for details."
720
713
  )
@@ -727,8 +720,8 @@ class VACRoutesFastAPI:
727
720
  log.error(f"Failed to mount MCP server: {e}")
728
721
  raise RuntimeError(f"MCP server initialization failed: {e}") from e
729
722
 
730
- # MCP debug endpoint - add after MCP server mounting
731
- if self.enable_mcp_server:
723
+ # MCP debug endpoint - add if we have a MCP server instance
724
+ if self.vac_mcp_server:
732
725
  self.app.get("/debug/mcp")(self.handle_mcp_debug)
733
726
 
734
727
  # A2A agent endpoints
@@ -1620,7 +1613,7 @@ class VACRoutesFastAPI:
1620
1613
  pending_tools = len(self._custom_mcp_tools) if hasattr(self, '_custom_mcp_tools') else 0
1621
1614
 
1622
1615
  return {
1623
- "mcp_enabled": self.enable_mcp_server or has_mcp,
1616
+ "mcp_enabled": has_mcp,
1624
1617
  "has_mcp_server": has_mcp,
1625
1618
  "mcp_tools_count": len(mcp_tools),
1626
1619
  "mcp_tools": [tool["name"] for tool in mcp_tools] if mcp_tools else [],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.144.8
3
+ Version: 0.144.9
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
@@ -214,7 +214,6 @@ def mcp_server_app():
214
214
  app,
215
215
  stream_interpreter=mock_async_stream_interpreter,
216
216
  vac_interpreter=mock_async_vac_interpreter,
217
- enable_mcp_server=False, # Disable initially
218
217
  add_langfuse_eval=False
219
218
  )
220
219
 
@@ -253,7 +252,6 @@ def mcp_client_app():
253
252
  stream_interpreter=mock_async_stream_interpreter,
254
253
  vac_interpreter=mock_async_vac_interpreter,
255
254
  mcp_servers=mcp_servers,
256
- enable_mcp_server=False,
257
255
  add_langfuse_eval=False
258
256
  )
259
257
  # Replace with mock MCP client manager
@@ -320,7 +318,6 @@ class TestMCPServer:
320
318
  vac_routes = VACRoutesFastAPI(
321
319
  app,
322
320
  stream_interpreter=mock_async_stream_interpreter,
323
- enable_mcp_server=False,
324
321
  add_langfuse_eval=False
325
322
  )
326
323
  client = TestClient(app)
@@ -331,6 +328,64 @@ class TestMCPServer:
331
328
 
332
329
 
333
330
 
331
+ class TestMCPDebugEndpoint:
332
+ """Test MCP debug endpoint functionality."""
333
+
334
+ def test_debug_endpoint_with_mcp_server(self):
335
+ """Test /debug/mcp endpoint when MCP server is enabled."""
336
+ app, vac_routes = VACRoutesFastAPI.create_app_with_mcp(
337
+ title="Test App",
338
+ stream_interpreter=mock_async_stream_interpreter
339
+ )
340
+
341
+ # Add a mock tool to test
342
+ @vac_routes.add_mcp_tool
343
+ async def test_tool(input: str) -> str:
344
+ """Test tool for MCP."""
345
+ return f"Test: {input}"
346
+
347
+ client = TestClient(app)
348
+ response = client.get("/debug/mcp")
349
+
350
+ assert response.status_code == 200
351
+ data = response.json()
352
+
353
+ # Check basic structure
354
+ assert "mcp_enabled" in data
355
+ assert "has_mcp_server" in data
356
+ assert "mcp_tools_count" in data
357
+ assert "mcp_tools" in data
358
+
359
+ # Check values
360
+ assert data["mcp_enabled"] is True
361
+ assert data["has_mcp_server"] is True
362
+ assert data["mcp_tools_count"] >= 5 # Built-in tools + test_tool
363
+
364
+ # Check that test_tool is in the list
365
+ tool_names = [tool["name"] for tool in data["mcp_tools"]]
366
+ assert "test_tool" in tool_names
367
+
368
+ # Check built-in tools are present
369
+ assert "vac_stream" in tool_names
370
+ assert "vac_query" in tool_names
371
+ assert "list_available_vacs" in tool_names
372
+ assert "get_vac_info" in tool_names
373
+
374
+ def test_debug_endpoint_without_mcp_server(self):
375
+ """Test /debug/mcp endpoint when MCP server is not present."""
376
+ app = FastAPI()
377
+ vac_routes = VACRoutesFastAPI(
378
+ app,
379
+ stream_interpreter=mock_async_stream_interpreter,
380
+ add_langfuse_eval=False
381
+ )
382
+
383
+ # Should not have debug endpoint if no MCP server
384
+ client = TestClient(app)
385
+ response = client.get("/debug/mcp")
386
+ assert response.status_code == 404
387
+
388
+
334
389
  class TestMCPErrorHandling:
335
390
  """Test MCP error handling."""
336
391
 
File without changes
File without changes
File without changes
File without changes
File without changes