| 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") |
|
|
| |
| MODEL_NAME = "qwen2.5:7b-instruct" |
| |
|
|
| def get_llm(): |
| callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]) |
| return OllamaLLM( |
| model=MODEL_NAME, |
| temperature=0.7, |
| num_ctx=8192, |
| 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))) |