SentimentScope / main.py
Jodinho's picture
refactor(core): reduce cyclomatic complexity to <=10, enforce <=500 lines per file, apply comment discipline, and add 22-tool test suite
76398fd
Raw History Blame Contribute Delete
1.51 kB
"""
Application entry point for the Joule Dynamics Intelligence API.
"""
import os
import uvicorn
from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
from dotenv import load_dotenv
load_dotenv()
from langfuse import get_client
from openinference.instrumentation.groq import GroqInstrumentor
langfuse = get_client()
if not langfuse.auth_check():
print("WARNING: Langfuse auth failed - check your keys ✋")
GroqInstrumentor().instrument()
from services.observability import setup_logger
logger = setup_logger(__name__)
app = FastAPI(
title="Joule Dynamics Intelligence API",
description="Real Estate Rate Monitor + RAG Customer Support",
version="1.0.0",
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["POST", "GET"],
allow_headers=["*"],
)
import unified_ingest
unified_ingest.ensure_ingested()
from services.market_registry import market_registry
market_registry.refresh()
logger.info(f"Market registry initialized: {market_registry.get_markets()}")
from routes import v1_router
app.include_router(v1_router)
from routes.v1.rag import router as _rag_router, rag_chat, RagChatRequest
_compat = APIRouter(tags=["Deprecated — use /api/v1/rag/chat"])
@_compat.post("/api/rag/chat", deprecated=True, include_in_schema=False)
def rag_chat_compat(req: RagChatRequest):
"""Deprecated: forwards to /api/v1/rag/chat for backwards compatibility."""
return rag_chat(req)
app.include_router(_compat)