mann / app.py
gcharanteja
mcp integration
af49805
Raw
History Blame Contribute Delete
2.62 kB
import os
import logging
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from langchain_ollama import OllamaLLM
from langchain_core.callbacks.manager import CallbackManager
from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from jira_mcp_connector import JiraMCPConnector
from telegramchat import TelegramChatService
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI(title="Qwen2.5 7B on HF Space")
# ================== CHANGE HERE ==================
MODEL_NAME = "qwen2.5:7b-instruct" # Best chat version
# ================================================
def get_llm():
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
return OllamaLLM(
model=MODEL_NAME,
temperature=0.7,
num_ctx=8192, # Qwen supports bigger context
callback_manager=callback_manager,
)
class Question(BaseModel):
text: str
jira_connector = JiraMCPConnector(
llm_factory=get_llm,
logger=logger,
)
telegram_chat_service = TelegramChatService(
llm_factory=get_llm,
token=os.getenv("TELEGRAM_TOKEN", ""),
logger=logger,
jira_connector=jira_connector,
)
@app.get("/")
def read_root():
return {
"message": "✅ Qwen2.5 7B is running!",
"model": MODEL_NAME,
"endpoints": ["/ask", "/stream"]
}
@app.post("/ask")
async def ask(question: Question):
try:
logger.info(f"Question: {question.text[:100]}...")
llm = get_llm()
response = llm.invoke(question.text)
return {
"question": question.text,
"answer": response.strip()
}
except Exception as e:
logger.error(f"Error: {e}")
raise HTTPException(status_code=500, detail=str(e))
@app.post("/stream")
async def stream():
try:
jira_connector.ensure_services_started()
started = telegram_chat_service.start()
return {
"telegram_running": telegram_chat_service.is_running,
"jira_api_running": True,
"status": "started" if started else "already_running",
"message": "Telegram + Jira MCP flow is active. Open Telegram and message your bot.",
}
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
logger.error(f"Error starting Telegram chat: {e}")
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))