Spaces:
Running
Running
| from fastapi import FastAPI, Request | |
| import src.Paraphrase as Paraphrase | |
| import src.Translate as Translate | |
| from typing import Optional | |
| from fastapi_mcp import FastApiMCP | |
| app = FastAPI() | |
| # app = FastAPI(docs_url="/docs") | |
| MTMODELS = {'enro': 'BlackKakapo/opus-mt-en-ro', | |
| 'roen': 'BlackKakapo/opus-mt-ro-en', | |
| 'gemma': 'Gargaz/gemma-2b-romanian-better'} | |
| def index(request: Request): | |
| from fastapi.responses import HTMLResponse | |
| host_url = "https://" + request.url.netloc | |
| html_content = f''' | |
| <html> | |
| <head> | |
| <title>FastAPI with MCP</title> | |
| </head> | |
| <body> | |
| <h2>FastAPI URLS</h2> | |
| <p><a href="{host_url}" target="_blank">Host URL:</a></p> | |
| <p><a href="{host_url}/docs" target="_blank">DOCS</a></p> | |
| <p><a href="{host_url}/redoc" target="_blank">REDOC</a></p> | |
| <p><a href="{host_url}/openapi.json" target="_blank">openapi.json</a></p> | |
| <p><a href="{host_url}/mcp" target="_blank">MCP</a></p> | |
| <p>MCP configuration: {"mcpServers": {"fastapi-mcp": {"url": "https://tiberiucristianleon-fastapimt.hf.space/mcp"}}}</a></p> | |
| <p>MTMODELS: {list(MTMODELS.values())}"</p> | |
| </body> | |
| </html> | |
| ''' | |
| return HTMLResponse(content=html_content) | |
| # @app.get("/") | |
| # async def get_host_url(request: Request): | |
| # host_url = request.url.scheme + "://" + request.url.netloc | |
| # return {"host_url": host_url, 'endpoints': ['/paraphrase', '/translate', f'{host_url}/docs', f'{host_url}/redoc', f'{host_url}/openapi.json'], 'mtmodels': MTMODELS} | |
| def paraphrase(text: str, model: str): | |
| resultValue, exception = Paraphrase.paraphraseParaphraseMethod(text, model) | |
| return {"input": text, "translation": resultValue, "exception": exception} | |
| def translate(text: str, model: Optional[str] = MTMODELS['enro']): | |
| if 'BlackKakapo' in model: | |
| translation = Translate.paraphraseTranslateMethod(text, model) | |
| else: | |
| translation: str = Translate.gemma_direct(text, model) | |
| return {"input": text, "translation": translation, "model": model} | |
| # Create an MCP server based on this app | |
| mcp = FastApiMCP( | |
| app, | |
| name="FASTAPI translate and paraphrase MCP", | |
| description="MCP server to translate and paraphrase text", | |
| describe_all_responses=True, | |
| describe_full_response_schema=True, | |
| include_operations=["get_translate", "get_paraphrase"], | |
| include_tags=["paraphrase", "translate"] | |
| ) | |
| # Mount the MCP server directly to the FASTAPI app | |
| mcp.mount() |