sunholo 0.144.7__tar.gz → 0.144.8__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.7/src/sunholo.egg-info → sunholo-0.144.8}/PKG-INFO +1 -1
  2. {sunholo-0.144.7 → sunholo-0.144.8}/pyproject.toml +1 -1
  3. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/fastapi/vac_routes.py +117 -1
  4. {sunholo-0.144.7 → sunholo-0.144.8/src/sunholo.egg-info}/PKG-INFO +1 -1
  5. {sunholo-0.144.7 → sunholo-0.144.8}/LICENSE.txt +0 -0
  6. {sunholo-0.144.7 → sunholo-0.144.8}/MANIFEST.in +0 -0
  7. {sunholo-0.144.7 → sunholo-0.144.8}/README.md +0 -0
  8. {sunholo-0.144.7 → sunholo-0.144.8}/setup.cfg +0 -0
  9. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/__init__.py +0 -0
  10. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/a2a/__init__.py +0 -0
  11. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/a2a/agent_card.py +0 -0
  12. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/a2a/task_manager.py +0 -0
  13. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/a2a/vac_a2a_agent.py +0 -0
  14. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/__init__.py +0 -0
  15. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/chat_history.py +0 -0
  16. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/dispatch_to_qa.py +0 -0
  17. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/fastapi/__init__.py +0 -0
  18. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/fastapi/base.py +0 -0
  19. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
  20. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/flask/__init__.py +0 -0
  21. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/flask/base.py +0 -0
  22. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/flask/vac_routes.py +0 -0
  23. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/langserve.py +0 -0
  24. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/pubsub.py +0 -0
  25. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/route.py +0 -0
  26. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/special_commands.py +0 -0
  27. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/agents/swagger.py +0 -0
  28. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/archive/__init__.py +0 -0
  29. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/archive/archive.py +0 -0
  30. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/auth/__init__.py +0 -0
  31. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/auth/gcloud.py +0 -0
  32. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/auth/refresh.py +0 -0
  33. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/auth/run.py +0 -0
  34. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/azure/__init__.py +0 -0
  35. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/azure/auth.py +0 -0
  36. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/azure/blobs.py +0 -0
  37. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/azure/event_grid.py +0 -0
  38. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/bots/__init__.py +0 -0
  39. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/bots/discord.py +0 -0
  40. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/bots/github_webhook.py +0 -0
  41. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/bots/webapp.py +0 -0
  42. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/__init__.py +0 -0
  43. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/azure.py +0 -0
  44. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/doc_handling.py +0 -0
  45. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/encode_metadata.py +0 -0
  46. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/images.py +0 -0
  47. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/loaders.py +0 -0
  48. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/message_data.py +0 -0
  49. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/pdfs.py +0 -0
  50. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/process_chunker_data.py +0 -0
  51. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/publish.py +0 -0
  52. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/pubsub.py +0 -0
  53. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/chunker/splitter.py +0 -0
  54. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/__init__.py +0 -0
  55. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/chat_vac.py +0 -0
  56. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/cli.py +0 -0
  57. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/cli_init.py +0 -0
  58. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/configs.py +0 -0
  59. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/deploy.py +0 -0
  60. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/embedder.py +0 -0
  61. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/merge_texts.py +0 -0
  62. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/run_proxy.py +0 -0
  63. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/sun_rich.py +0 -0
  64. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/swagger.py +0 -0
  65. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/cli/vertex.py +0 -0
  66. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/components/__init__.py +0 -0
  67. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/components/llm.py +0 -0
  68. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/components/retriever.py +0 -0
  69. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/components/vectorstore.py +0 -0
  70. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/custom_logging.py +0 -0
  71. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/__init__.py +0 -0
  72. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/alloydb.py +0 -0
  73. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/alloydb_client.py +0 -0
  74. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/database.py +0 -0
  75. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/lancedb.py +0 -0
  76. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/sql/sb/create_function.sql +0 -0
  77. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
  78. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/sql/sb/create_table.sql +0 -0
  79. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  80. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
  81. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/sql/sb/setup.sql +0 -0
  82. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/static_dbs.py +0 -0
  83. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/database/uuid.py +0 -0
  84. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/discovery_engine/__init__.py +0 -0
  85. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
  86. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/discovery_engine/cli.py +0 -0
  87. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/discovery_engine/create_new.py +0 -0
  88. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  89. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  90. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/embedder/__init__.py +0 -0
  91. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/embedder/embed_chunk.py +0 -0
  92. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/embedder/embed_metadata.py +0 -0
  93. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/excel/__init__.py +0 -0
  94. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/excel/plugin.py +0 -0
  95. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/__init__.py +0 -0
  96. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/add_file.py +0 -0
  97. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/download_folder.py +0 -0
  98. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/download_gcs_text.py +0 -0
  99. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/download_url.py +0 -0
  100. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/extract_and_sign.py +0 -0
  101. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/gcs/metadata.py +0 -0
  102. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/__init__.py +0 -0
  103. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/file_handling.py +0 -0
  104. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/genaiv2.py +0 -0
  105. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/images.py +0 -0
  106. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/init.py +0 -0
  107. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/process_funcs_cls.py +0 -0
  108. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/genai/safety.py +0 -0
  109. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/invoke/__init__.py +0 -0
  110. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/invoke/async_class.py +0 -0
  111. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/invoke/direct_vac_func.py +0 -0
  112. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
  113. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/langchain_types.py +0 -0
  114. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/langfuse/__init__.py +0 -0
  115. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/langfuse/callback.py +0 -0
  116. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/langfuse/evals.py +0 -0
  117. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/langfuse/prompts.py +0 -0
  118. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/llamaindex/__init__.py +0 -0
  119. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/llamaindex/get_files.py +0 -0
  120. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/llamaindex/import_files.py +0 -0
  121. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
  122. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/llamaindex/user_history.py +0 -0
  123. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/lookup/__init__.py +0 -0
  124. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/lookup/model_lookup.yaml +0 -0
  125. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/__init__.py +0 -0
  126. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/cli.py +0 -0
  127. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/cli_fastmcp.py +0 -0
  128. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/extensible_mcp_server.py +0 -0
  129. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/mcp_manager.py +0 -0
  130. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/sse_utils.py +0 -0
  131. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/stdio_http_bridge.py +0 -0
  132. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/vac_mcp_server.py +0 -0
  133. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/vac_mcp_server_fastmcp.py +0 -0
  134. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/mcp/vac_tools.py +0 -0
  135. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/ollama/__init__.py +0 -0
  136. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/ollama/ollama_images.py +0 -0
  137. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/pubsub/__init__.py +0 -0
  138. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/pubsub/process_pubsub.py +0 -0
  139. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/pubsub/pubsub_manager.py +0 -0
  140. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/qna/__init__.py +0 -0
  141. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/qna/parsers.py +0 -0
  142. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/qna/retry.py +0 -0
  143. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/senses/__init__.py +0 -0
  144. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/senses/stream_voice.py +0 -0
  145. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/streaming/__init__.py +0 -0
  146. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/streaming/content_buffer.py +0 -0
  147. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/streaming/langserve.py +0 -0
  148. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/streaming/stream_lookup.py +0 -0
  149. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/streaming/streaming.py +0 -0
  150. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/summarise/__init__.py +0 -0
  151. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/summarise/summarise.py +0 -0
  152. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/__init__.py +0 -0
  153. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/agent_service.py +0 -0
  154. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/app.py +0 -0
  155. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/my_log.py +0 -0
  156. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/tools/__init__.py +0 -0
  157. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
  158. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/agent/vac_service.py +0 -0
  159. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/project/__init__.py +0 -0
  160. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/project/app.py +0 -0
  161. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/project/my_log.py +0 -0
  162. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/project/vac_service.py +0 -0
  163. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/system_services/__init__.py +0 -0
  164. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/system_services/app.py +0 -0
  165. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/templates/system_services/my_log.py +0 -0
  166. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/terraform/__init__.py +0 -0
  167. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/terraform/tfvars_editor.py +0 -0
  168. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/tools/__init__.py +0 -0
  169. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/tools/web_browser.py +0 -0
  170. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/__init__.py +0 -0
  171. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/api_key.py +0 -0
  172. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/big_context.py +0 -0
  173. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/config.py +0 -0
  174. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/config_class.py +0 -0
  175. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/config_schema.py +0 -0
  176. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/gcp.py +0 -0
  177. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/gcp_project.py +0 -0
  178. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/mime.py +0 -0
  179. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/parsers.py +0 -0
  180. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/proto_convert.py +0 -0
  181. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/timedelta.py +0 -0
  182. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/user_ids.py +0 -0
  183. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/utils/version.py +0 -0
  184. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/__init__.py +0 -0
  185. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/extensions_call.py +0 -0
  186. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/extensions_class.py +0 -0
  187. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/genai_functions.py +0 -0
  188. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/init.py +0 -0
  189. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/memory_tools.py +0 -0
  190. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/safety.py +0 -0
  191. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo/vertex/type_dict_to_json.py +0 -0
  192. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo.egg-info/SOURCES.txt +0 -0
  193. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo.egg-info/dependency_links.txt +0 -0
  194. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo.egg-info/entry_points.txt +0 -0
  195. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo.egg-info/requires.txt +0 -0
  196. {sunholo-0.144.7 → sunholo-0.144.8}/src/sunholo.egg-info/top_level.txt +0 -0
  197. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_async.py +0 -0
  198. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_async_genai2.py +0 -0
  199. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_chat_history.py +0 -0
  200. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_config.py +0 -0
  201. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_genai2.py +0 -0
  202. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_unstructured.py +0 -0
  203. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_vac_routes_fastapi.py +0 -0
  204. {sunholo-0.144.7 → sunholo-0.144.8}/tests/test_vac_routes_mcp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.144.7
3
+ Version: 0.144.8
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.7"
7
+ version = "0.144.8"
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"
@@ -727,6 +727,10 @@ class VACRoutesFastAPI:
727
727
  log.error(f"Failed to mount MCP server: {e}")
728
728
  raise RuntimeError(f"MCP server initialization failed: {e}") from e
729
729
 
730
+ # MCP debug endpoint - add after MCP server mounting
731
+ if self.enable_mcp_server:
732
+ self.app.get("/debug/mcp")(self.handle_mcp_debug)
733
+
730
734
  # A2A agent endpoints
731
735
  if self.enable_a2a_agent:
732
736
  self.app.get("/.well-known/agent.json")(self.handle_a2a_agent_card)
@@ -1516,4 +1520,116 @@ class VACRoutesFastAPI:
1516
1520
  """
1517
1521
  if self.vac_mcp_server:
1518
1522
  return self.vac_mcp_server.list_resources()
1519
- return []
1523
+ return []
1524
+
1525
+ async def handle_mcp_debug(self):
1526
+ """
1527
+ Debug endpoint to check MCP server status and list tools.
1528
+
1529
+ Returns:
1530
+ JSON with MCP server status, tools list, and diagnostic information
1531
+ """
1532
+ import json
1533
+
1534
+ has_mcp = self.vac_mcp_server is not None
1535
+ mcp_tools = []
1536
+ mcp_response = None
1537
+
1538
+ # Try to call the MCP endpoint the same way clients do
1539
+ if has_mcp:
1540
+ try:
1541
+ # Make internal request to MCP server to get tools
1542
+ import httpx
1543
+
1544
+ # Get the base URL from the current request
1545
+ from fastapi import Request
1546
+ from starlette.requests import Request as StarletteRequest
1547
+
1548
+ # Try common ports since we don't have request context
1549
+ ports_to_try = [8000, 8001, 8080, 3000, 1956]
1550
+ successful_response = None
1551
+
1552
+ for port in ports_to_try:
1553
+ try:
1554
+ base_url = f"http://localhost:{port}"
1555
+ async with httpx.AsyncClient(timeout=2.0) as client:
1556
+ response = await client.post(
1557
+ f"{base_url}/mcp/mcp",
1558
+ json={
1559
+ "jsonrpc": "2.0",
1560
+ "id": 1,
1561
+ "method": "tools/list"
1562
+ },
1563
+ headers={
1564
+ "Content-Type": "application/json",
1565
+ "Accept": "application/json, text/event-stream"
1566
+ }
1567
+ )
1568
+
1569
+ if response.status_code == 200:
1570
+ successful_response = response
1571
+ break # Found working port
1572
+ except (httpx.ConnectError, httpx.TimeoutException):
1573
+ continue # Try next port
1574
+ except Exception:
1575
+ continue # Try next port
1576
+
1577
+ if successful_response:
1578
+ # Parse SSE (Server-Sent Events) response
1579
+ text = successful_response.text
1580
+ for line in text.split('\n'):
1581
+ if line.startswith('data: '):
1582
+ # Extract JSON from the data line
1583
+ json_str = line[6:] # Remove 'data: ' prefix
1584
+ try:
1585
+ mcp_response = json.loads(json_str)
1586
+ if "result" in mcp_response and "tools" in mcp_response["result"]:
1587
+ for tool in mcp_response["result"]["tools"]:
1588
+ mcp_tools.append({
1589
+ "name": tool.get("name"),
1590
+ "description": tool.get("description", "No description")[:100] + "..." if len(tool.get("description", "")) > 100 else tool.get("description", "No description")
1591
+ })
1592
+ break # We found the data we need
1593
+ except json.JSONDecodeError:
1594
+ continue
1595
+ else:
1596
+ mcp_response = {
1597
+ "error": "Could not connect to MCP server on any common port",
1598
+ "ports_tried": ports_to_try
1599
+ }
1600
+
1601
+ except Exception as e:
1602
+ log.error(f"Error calling MCP endpoint in debug: {e}")
1603
+ mcp_response = {"error": str(e)}
1604
+
1605
+ # Fallback: try to get tools from internal MCP server state
1606
+ try:
1607
+ # Get tools from the FastMCP server directly
1608
+ if hasattr(self.vac_mcp_server, 'server'):
1609
+ mcp_server = self.vac_mcp_server.server
1610
+ if hasattr(mcp_server, '_tools'):
1611
+ for tool_name, tool_func in mcp_server._tools.items():
1612
+ mcp_tools.append({
1613
+ "name": tool_name,
1614
+ "description": getattr(tool_func, '__doc__', 'No description') or 'No description'
1615
+ })
1616
+ except Exception as inner_e:
1617
+ log.error(f"Error getting MCP tools from internal state: {inner_e}")
1618
+
1619
+ # Check for pending tools that haven't been registered yet
1620
+ pending_tools = len(self._custom_mcp_tools) if hasattr(self, '_custom_mcp_tools') else 0
1621
+
1622
+ return {
1623
+ "mcp_enabled": self.enable_mcp_server or has_mcp,
1624
+ "has_mcp_server": has_mcp,
1625
+ "mcp_tools_count": len(mcp_tools),
1626
+ "mcp_tools": [tool["name"] for tool in mcp_tools] if mcp_tools else [],
1627
+ "tool_details": mcp_tools,
1628
+ "pending_tools": pending_tools,
1629
+ "message": f"MCP server is available at /mcp endpoint with {len(mcp_tools)} tools" if has_mcp and mcp_tools else "MCP server is available at /mcp endpoint" if has_mcp else "MCP server not configured",
1630
+ "debug_info": {
1631
+ "mcp_server_type": type(self.vac_mcp_server).__name__ if self.vac_mcp_server else None,
1632
+ "has_custom_tools": len(self._custom_mcp_tools) > 0 if hasattr(self, '_custom_mcp_tools') else False,
1633
+ "has_custom_resources": len(self._custom_mcp_resources) > 0 if hasattr(self, '_custom_mcp_resources') else False
1634
+ }
1635
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sunholo
3
- Version: 0.144.7
3
+ Version: 0.144.8
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
File without changes
File without changes
File without changes
File without changes
File without changes