insightflow / app.py
Yeetek's picture
Update app.py
542a9ad verified
import sys
sys.modules["bertopic.plotting"] = None # Blocks plotting from loading
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from bertopic._bertopic import BERTopic # internal module that avoids plotting
from sentence_transformers import SentenceTransformer
import uvicorn
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"]
)
# Czech-capable multilingual model
embedding_model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")
# 👇 THIS is the crucial fix: disable UMAP to avoid caching and plotting imports
topic_model = BERTopic(embedding_model=embedding_model, umap_model=None)
@app.post("/segment-topics")
async def segment_topics(request: Request):
payload = await request.json()
texts = payload.get("texts", [])
starts = payload.get("starts", [])
ends = payload.get("ends", [])
topics, _ = topic_model.fit_transform(texts)
output = []
for i, (text, topic, start, end) in enumerate(zip(texts, topics, starts, ends)):
output.append({
"text": text,
"topic": int(topic),
"start": start,
"end": end
})
return output