Spaces:
Runtime error
Runtime error
| # ───────────────────────────────────────────────────────────── | |
| # FIXED APP.PY – PROPERLY RESOLVES UTILS IMPORTS ON HF SPACES | |
| # ───────────────────────────────────────────────────────────── | |
| import os | |
| import sys | |
| from fastapi import FastAPI, UploadFile, Form | |
| from fastapi.responses import JSONResponse | |
| # ─── Ensure /app/utils is visible as top-level modules ───────── | |
| BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
| UTILS_DIR = os.path.join(BASE_DIR, "utils") | |
| if UTILS_DIR not in sys.path: | |
| sys.path.insert(0, UTILS_DIR) | |
| print("DEBUG: Using UTILS_DIR:", UTILS_DIR) | |
| # ─── Correct imports based on actual filesystem ─────────────── | |
| from summarizer import summarize_text | |
| from file_utils import normalize_log_line, keyword_search | |
| from docgen import generate_doc | |
| # ─── FastAPI App Init ───────────────────────────────────────── | |
| app = FastAPI(title="Omniscient Backend API") | |
| # ─── Health Check ───────────────────────────────────────────── | |
| def health(): | |
| return JSONResponse({"ok": True, "message": "Omniscient backend alive"}) | |
| # ─── File Summarization ─────────────────────────────────────── | |
| async def summarize(file: UploadFile): | |
| try: | |
| content = (await file.read()).decode("utf-8", errors="ignore") | |
| summary = summarize_text(content) | |
| return {"file": file.filename, "summary": summary} | |
| except Exception as e: | |
| return {"error": str(e)} | |
| # ─── Log Normalization & Search ─────────────────────────────── | |
| async def analyze_log(file: UploadFile, query: str = Form(None)): | |
| try: | |
| raw = (await file.read()).decode("utf-8", errors="ignore") | |
| normalized = [normalize_log_line(line) for line in raw.splitlines()] | |
| result = { | |
| "total_lines": len(normalized), | |
| "unique_entries": len(set(normalized)), | |
| "preview": normalized[:50], | |
| } | |
| if query: | |
| matches = keyword_search("\n".join(normalized), query) | |
| result["matches"] = matches[:50] | |
| return {"file": file.filename, "analysis": result} | |
| except Exception as e: | |
| return {"error": str(e)} | |
| # ─── Script Documentation Generator ─────────────────────────── | |
| async def gen_doc(file: UploadFile): | |
| try: | |
| content = (await file.read()).decode("utf-8", errors="ignore") | |
| doc = generate_doc(file.filename, "uploaded", content) | |
| return {"file": file.filename, "doc": doc} | |
| except Exception as e: | |
| return {"error": str(e)} | |