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