Spaces:
Running
Running
| """ | |
| BrainWatches Python Analysis Service | |
| ==================================== | |
| FastAPI microservice untuk analisis NLP lanjutan. | |
| Jalankan: | |
| uvicorn app.main:app --host 0.0.0.0 --port 7860 | |
| """ | |
| from fastapi import FastAPI, Header, HTTPException, Depends | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from app.config import settings | |
| from app.schemas import ( | |
| SentimentRequest, SentimentResponse, | |
| SummarizeRequest, SummarizeResponse, | |
| TopicRequest, TopicResponse, | |
| SimilarityRequest, SimilarityResponse, | |
| TextItemsRequest, EmotionResponse, | |
| FramingResponse, FakeScoreResponse, OpinionFactResponse, | |
| KeywordsResponse, NerResponse, DigestRequest, DigestResponse, | |
| ) | |
| from app.analyzers import sentiment, topics, summary, similarity, emotion, framing, fakescore, opinionfact | |
| from app.analyzers import keywords as kw_module, ner as ner_module, digest as digest_module | |
| app = FastAPI(title="BrainWatches Analysis Service", version="1.1.0") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| def verify_token(x_service_token: str = Header(default="")): | |
| if x_service_token != settings.API_TOKEN: | |
| raise HTTPException(status_code=401, detail="Invalid service token") | |
| return True | |
| def health(): | |
| return {"status": "ok", "model_mode": settings.MODEL_MODE, "version": "1.1.0"} | |
| def sentiment_endpoint(req: SentimentRequest): | |
| results = sentiment.analyze_batch(req.items) | |
| return {"results": results, "model_mode": settings.MODEL_MODE} | |
| def summarize_endpoint(req: SummarizeRequest): | |
| return summary.summarize(req.text, req.sentences) | |
| def topics_endpoint(req: TopicRequest): | |
| result = topics.discover_topics(req.items, req.num_topics) | |
| return {"topics": result, "model_mode": settings.MODEL_MODE} | |
| def similarity_endpoint(req: SimilarityRequest): | |
| pairs = similarity.find_similar_pairs(req.items, req.threshold) | |
| return {"pairs": pairs} | |
| def emotion_endpoint(req: TextItemsRequest): | |
| results = emotion.analyze_batch(req.items) | |
| return {"results": results} | |
| def framing_endpoint(req: TextItemsRequest): | |
| results = framing.analyze_batch(req.items) | |
| return {"results": results} | |
| def fake_score_endpoint(req: TextItemsRequest): | |
| results = fakescore.analyze_batch(req.items) | |
| return {"results": results} | |
| def opinion_fact_endpoint(req: TextItemsRequest): | |
| results = opinionfact.analyze_batch(req.items) | |
| return {"results": results} | |
| def keywords_endpoint(req: TextItemsRequest): | |
| results = kw_module.extract_keywords_batch(req.items) | |
| return {"results": results} | |
| def ner_endpoint(req: TextItemsRequest): | |
| results = ner_module.extract_batch(req.items) | |
| return {"results": results} | |
| def digest_endpoint(req: DigestRequest): | |
| result = digest_module.generate_digest(req.items, req.project_name) | |
| return result | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run("app.main:app", host=settings.HOST, port=settings.PORT, reload=True) | |