sunholo 0.144.4__tar.gz → 0.144.6__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.
- {sunholo-0.144.4/src/sunholo.egg-info → sunholo-0.144.6}/PKG-INFO +1 -1
- {sunholo-0.144.4 → sunholo-0.144.6}/pyproject.toml +1 -1
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/fastapi/vac_routes.py +2 -2
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/vac_tools.py +46 -103
- {sunholo-0.144.4 → sunholo-0.144.6/src/sunholo.egg-info}/PKG-INFO +1 -1
- {sunholo-0.144.4 → sunholo-0.144.6}/LICENSE.txt +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/MANIFEST.in +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/README.md +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/setup.cfg +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/a2a/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/a2a/agent_card.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/a2a/task_manager.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/a2a/vac_a2a_agent.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/flask/vac_routes.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/langserve.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/route.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/agents/swagger.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/archive/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/archive/archive.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/auth/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/auth/gcloud.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/auth/refresh.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/auth/run.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/azure/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/azure/auth.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/azure/blobs.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/azure/event_grid.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/bots/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/bots/discord.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/bots/webapp.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/azure.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/encode_metadata.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/images.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/process_chunker_data.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/publish.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/pubsub.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/cli.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/configs.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/deploy.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/embedder.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/swagger.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/cli/vertex.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/components/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/components/llm.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/components/retriever.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/custom_logging.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/alloydb.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/alloydb_client.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/database.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/lancedb.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/database/uuid.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/discovery_engine/cli.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/discovery_engine/discovery_engine_client.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/embedder/embed_metadata.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/excel/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/excel/plugin.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/download_folder.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/download_gcs_text.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/extract_and_sign.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/file_handling.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/genaiv2.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/images.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/init.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/process_funcs_cls.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/genai/safety.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/invoke/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/invoke/async_class.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/invoke/direct_vac_func.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/langchain_types.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/langfuse/evals.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/llamaindex/user_history.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/cli.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/cli_fastmcp.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/extensible_mcp_server.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/mcp_manager.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/sse_utils.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/stdio_http_bridge.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/vac_mcp_server.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/mcp/vac_mcp_server_fastmcp.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/ollama/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/ollama/ollama_images.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/qna/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/qna/parsers.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/qna/retry.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/senses/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/senses/stream_voice.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/agent_service.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/app.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/my_log.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/tools/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/agent/vac_service.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/project/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/project/app.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/project/my_log.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/project/vac_service.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/system_services/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/system_services/app.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/templates/system_services/my_log.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/terraform/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/terraform/tfvars_editor.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/tools/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/tools/web_browser.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/api_key.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/big_context.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/config.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/config_class.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/gcp.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/mime.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/parsers.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/proto_convert.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/utils/version.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/extensions_call.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/genai_functions.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/init.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/safety.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo/vertex/type_dict_to_json.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/src/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_async.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_async_genai2.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_chat_history.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_config.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_genai2.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_unstructured.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_vac_routes_fastapi.py +0 -0
- {sunholo-0.144.4 → sunholo-0.144.6}/tests/test_vac_routes_mcp.py +0 -0
@@ -541,9 +541,9 @@ class VACRoutesFastAPI:
|
|
541
541
|
# Create MCP server directly to get its lifespan
|
542
542
|
mcp_server = FastMCP("sunholo-vac-fastapi-server")
|
543
543
|
|
544
|
-
# Register built-in VAC tools directly
|
544
|
+
# Register built-in VAC tools directly with the stream interpreter
|
545
545
|
from sunholo.mcp.vac_tools import register_vac_tools
|
546
|
-
register_vac_tools(mcp_server, None)
|
546
|
+
register_vac_tools(mcp_server, registry=None, stream_interpreter=stream_interpreter)
|
547
547
|
|
548
548
|
# Get the MCP app with path="" so when mounted at /mcp it's accessible at /mcp
|
549
549
|
mcp_app = mcp_server.http_app(path="", stateless_http=True)
|
@@ -20,6 +20,7 @@ Provides core Sunholo VAC functionality as MCP tools.
|
|
20
20
|
import asyncio
|
21
21
|
import os
|
22
22
|
import sys
|
23
|
+
import traceback
|
23
24
|
from typing import Dict, List, Optional, Any
|
24
25
|
|
25
26
|
try:
|
@@ -39,14 +40,6 @@ except ImportError:
|
|
39
40
|
ConfigManager = None
|
40
41
|
CONFIG_AVAILABLE = False
|
41
42
|
|
42
|
-
try:
|
43
|
-
from ..streaming import start_streaming_chat_async
|
44
|
-
STREAMING_AVAILABLE = True
|
45
|
-
except ImportError:
|
46
|
-
start_streaming_chat_async = None
|
47
|
-
STREAMING_AVAILABLE = False
|
48
|
-
|
49
|
-
|
50
43
|
def get_vac_config(vector_name: str = None) -> 'ConfigManager':
|
51
44
|
"""Get VAC configuration for the specified vector name."""
|
52
45
|
if not CONFIG_AVAILABLE:
|
@@ -59,107 +52,16 @@ def get_vac_config(vector_name: str = None) -> 'ConfigManager':
|
|
59
52
|
return ConfigManager(vac_name)
|
60
53
|
|
61
54
|
|
62
|
-
|
63
|
-
"""
|
64
|
-
Call VAC asynchronously using the streaming interface.
|
65
|
-
|
66
|
-
Args:
|
67
|
-
question: The user's question
|
68
|
-
vector_name: Name of the VAC to query
|
69
|
-
chat_history: Previous conversation history
|
70
|
-
|
71
|
-
Returns:
|
72
|
-
The VAC's response
|
73
|
-
"""
|
74
|
-
if not STREAMING_AVAILABLE:
|
75
|
-
raise ImportError("Streaming functionality not available. Install sunholo with streaming support.")
|
76
|
-
|
77
|
-
if chat_history is None:
|
78
|
-
chat_history = []
|
79
|
-
|
80
|
-
try:
|
81
|
-
config = get_vac_config(vector_name)
|
82
|
-
|
83
|
-
# Import the appropriate QNA function based on configuration
|
84
|
-
llm_str = config.vacConfig('llm')
|
85
|
-
|
86
|
-
if llm_str and 'anthropic' in llm_str.lower():
|
87
|
-
try:
|
88
|
-
from ..agents.langchain.vertex_genai2 import qna_async
|
89
|
-
except ImportError:
|
90
|
-
log.warning("Anthropic integration not available, falling back to default")
|
91
|
-
from ..agents.langchain.vertex_genai2 import qna_async
|
92
|
-
elif llm_str and 'openai' in llm_str.lower():
|
93
|
-
try:
|
94
|
-
from ..agents.langchain.vertex_genai2 import qna_async
|
95
|
-
except ImportError:
|
96
|
-
log.warning("OpenAI integration not available, falling back to default")
|
97
|
-
from ..agents.langchain.vertex_genai2 import qna_async
|
98
|
-
else:
|
99
|
-
# Default to vertex AI
|
100
|
-
from ..agents.langchain.vertex_genai2 import qna_async
|
101
|
-
|
102
|
-
# Use streaming interface to get response
|
103
|
-
full_response = ""
|
104
|
-
async for chunk in start_streaming_chat_async(
|
105
|
-
question=question,
|
106
|
-
vector_name=vector_name,
|
107
|
-
qna_func_async=qna_async,
|
108
|
-
chat_history=chat_history
|
109
|
-
):
|
110
|
-
if isinstance(chunk, dict) and 'answer' in chunk:
|
111
|
-
full_response = chunk['answer']
|
112
|
-
elif isinstance(chunk, str):
|
113
|
-
full_response += chunk
|
114
|
-
|
115
|
-
return full_response or "No response generated"
|
116
|
-
|
117
|
-
except Exception as e:
|
118
|
-
log.error(f"Error calling VAC {vector_name}: {str(e)}")
|
119
|
-
return f"Error: {str(e)}"
|
120
|
-
|
121
|
-
|
122
|
-
def register_vac_tools(server: 'FastMCP', registry: 'MCPToolRegistry' = None):
|
55
|
+
def register_vac_tools(server: 'FastMCP', registry: Optional[Any] = None, *, stream_interpreter: Optional[Any] = None):
|
123
56
|
"""
|
124
57
|
Register built-in VAC tools with a FastMCP server.
|
125
58
|
|
126
59
|
Args:
|
127
60
|
server: FastMCP server instance
|
128
61
|
registry: Optional registry to track tools
|
62
|
+
stream_interpreter: The stream interpreter function from VACRoutesFastAPI
|
129
63
|
"""
|
130
64
|
|
131
|
-
@server.tool
|
132
|
-
async def vac_stream(
|
133
|
-
vector_name: str,
|
134
|
-
user_input: str,
|
135
|
-
chat_history: Optional[List[Dict[str, str]]] = None,
|
136
|
-
stream_wait_time: float = 7,
|
137
|
-
stream_timeout: float = 120
|
138
|
-
) -> str:
|
139
|
-
"""
|
140
|
-
Stream responses from a Sunholo VAC (Virtual Agent Computer).
|
141
|
-
|
142
|
-
Args:
|
143
|
-
vector_name: Name of the VAC to interact with
|
144
|
-
user_input: The user's question or input
|
145
|
-
chat_history: Previous conversation history
|
146
|
-
stream_wait_time: Time to wait between stream chunks (default: 7)
|
147
|
-
stream_timeout: Maximum time to wait for response (default: 120)
|
148
|
-
|
149
|
-
Returns:
|
150
|
-
The streamed response from the VAC
|
151
|
-
"""
|
152
|
-
if chat_history is None:
|
153
|
-
chat_history = []
|
154
|
-
|
155
|
-
log.info(f"MCP streaming request for VAC '{vector_name}': {user_input}")
|
156
|
-
|
157
|
-
try:
|
158
|
-
return await call_vac_async(user_input, vector_name, chat_history)
|
159
|
-
except Exception as e:
|
160
|
-
log.error(f"Error in MCP VAC stream: {str(e)}")
|
161
|
-
return f"Error: {str(e)}"
|
162
|
-
|
163
65
|
@server.tool
|
164
66
|
async def vac_query(
|
165
67
|
vector_name: str,
|
@@ -183,9 +85,51 @@ def register_vac_tools(server: 'FastMCP', registry: 'MCPToolRegistry' = None):
|
|
183
85
|
log.info(f"MCP query request for VAC '{vector_name}': {user_input}")
|
184
86
|
|
185
87
|
try:
|
186
|
-
|
88
|
+
# If we have a stream_interpreter, use it directly
|
89
|
+
if stream_interpreter:
|
90
|
+
# Create a no-op callback for non-streaming
|
91
|
+
class NoOpCallback:
|
92
|
+
async def async_on_llm_new_token(self, token): pass
|
93
|
+
async def async_on_llm_end(self, response): pass
|
94
|
+
def on_llm_new_token(self, token): pass
|
95
|
+
def on_llm_end(self, response): pass
|
96
|
+
|
97
|
+
callback = NoOpCallback()
|
98
|
+
|
99
|
+
# Call the stream interpreter
|
100
|
+
import inspect
|
101
|
+
if inspect.iscoroutinefunction(stream_interpreter):
|
102
|
+
result = await stream_interpreter(
|
103
|
+
question=user_input,
|
104
|
+
vector_name=vector_name,
|
105
|
+
chat_history=chat_history,
|
106
|
+
callback=callback
|
107
|
+
)
|
108
|
+
else:
|
109
|
+
# Run sync function in executor
|
110
|
+
import asyncio
|
111
|
+
loop = asyncio.get_event_loop()
|
112
|
+
result = await loop.run_in_executor(
|
113
|
+
None,
|
114
|
+
stream_interpreter,
|
115
|
+
user_input,
|
116
|
+
vector_name,
|
117
|
+
chat_history,
|
118
|
+
callback
|
119
|
+
)
|
120
|
+
|
121
|
+
# Extract answer from result
|
122
|
+
if isinstance(result, dict):
|
123
|
+
return result.get('answer', str(result))
|
124
|
+
else:
|
125
|
+
return str(result)
|
126
|
+
else:
|
127
|
+
# Fallback to simple response if no interpreter provided
|
128
|
+
return f"VAC '{vector_name}' received: {user_input}"
|
129
|
+
|
187
130
|
except Exception as e:
|
188
131
|
log.error(f"Error in MCP VAC query: {str(e)}")
|
132
|
+
log.error(f"Traceback: {traceback.format_exc()}")
|
189
133
|
return f"Error: {str(e)}"
|
190
134
|
|
191
135
|
@server.tool
|
@@ -239,7 +183,6 @@ def register_vac_tools(server: 'FastMCP', registry: 'MCPToolRegistry' = None):
|
|
239
183
|
# Register tools in registry if provided
|
240
184
|
if registry:
|
241
185
|
# Extract the underlying function from FunctionTool objects
|
242
|
-
registry.register_tool("vac_stream", vac_stream.fn if hasattr(vac_stream, 'fn') else vac_stream)
|
243
186
|
registry.register_tool("vac_query", vac_query.fn if hasattr(vac_query, 'fn') else vac_query)
|
244
187
|
registry.register_tool("list_available_vacs", list_available_vacs.fn if hasattr(list_available_vacs, 'fn') else list_available_vacs)
|
245
188
|
registry.register_tool("get_vac_info", get_vac_info.fn if hasattr(get_vac_info, 'fn') else get_vac_info)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|