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