""" Gradio Documentation MCP Server Integration DEVELOPMENT ONLY - DO NOT IMPORT IN MAIN APPLICATION This module provides access to live Gradio documentation via MCP server for local development assistance. It should NOT be imported in app.py or support_docs.py as it's not needed for the deployed application. Usage: python -c "from gradio_docs import gradio_docs; print(gradio_docs.search_docs('ChatInterface'))" """ import requests import json from typing import Optional, Dict, Any class GradioDocsClient: """Client for accessing Gradio documentation via MCP server""" def __init__(self, base_url: str = "https://gradio-docs-mcp.hf.space"): self.base_url = base_url.rstrip('/') self.session = requests.Session() self.session.headers.update({ 'User-Agent': 'ChatUI-Helper/1.0' }) def search_docs(self, query: str, limit: int = 5) -> Optional[Dict[str, Any]]: """ Search Gradio documentation for relevant information Args: query: Search query string limit: Maximum number of results to return Returns: Dictionary with search results or None if error """ try: # Try to use the API endpoint for search search_url = f"{self.base_url}/gradio_api" response = self.session.post( search_url, json={"query": query, "limit": limit}, timeout=10 ) if response.status_code == 200: return response.json() else: print(f"Gradio docs search failed: {response.status_code}") return None except requests.RequestException as e: print(f"Error connecting to Gradio docs server: {e}") return None def get_component_info(self, component_name: str) -> Optional[str]: """ Get information about a specific Gradio component Args: component_name: Name of the Gradio component (e.g., 'ChatInterface', 'Textbox') Returns: Documentation string or None if not found """ result = self.search_docs(f"gr.{component_name}") if result and "results" in result: # Extract relevant documentation from results docs = [] for item in result["results"][:3]: # Top 3 results if "content" in item: docs.append(item["content"]) return "\n\n".join(docs) if docs else None return None def get_latest_changes(self) -> Optional[str]: """ Get information about latest Gradio changes and updates Returns: Latest changes information or None if not available """ result = self.search_docs("changelog updates latest version") if result and "results" in result: changes = [] for item in result["results"][:2]: # Top 2 results if "content" in item: changes.append(item["content"]) return "\n\n".join(changes) if changes else None return None def is_available(self) -> bool: """ Check if the Gradio docs server is available Returns: True if server is accessible, False otherwise """ try: response = self.session.get(self.base_url, timeout=5) return response.status_code == 200 except requests.RequestException: return False # Global instance for easy access gradio_docs = GradioDocsClient()