Spaces:
Running on Zero
Running on Zero
File size: 1,483 Bytes
0608d7d 97a30d4 0608d7d 97a30d4 2004048 0608d7d 29c2579 0608d7d 97a30d4 d635ce4 0608d7d 29c2579 0608d7d 97a30d4 9e3b93f 0608d7d 97a30d4 0608d7d 97a30d4 0608d7d 2004048 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | from fastapi import FastAPI
from pydantic import BaseModel
from transformers import pipeline
from glin_profanity import Filter
# Initialize your models
toxicity_pipe = pipeline("text-classification", model="textdetox/twitter-xlmr-toxicity-classifier")
detox_pipe = pipeline("text2text-generation", model="s-nlp/mt0-xl-detox-orpo")
profanity_filter = Filter({"languages": ["english", "spanish", "french"], "replace_with": "***"})
app = FastAPI(title="Multilingual Moderation API")
class TextRequest(BaseModel):
text: str
class ModerationResponse(BaseModel):
original_text: str
detected_categories: dict
is_flagged: bool
rewritten_text: str | None
@app.post("/moderate", response_model=ModerationResponse)
async def moderate_text(request: TextRequest):
text = request.text
profanity_result = profanity_filter.check_profanity(text)
toxicity_scores = toxicity_pipe(text)[0]
is_flagged = profanity_result["contains_profanity"] or toxicity_scores['score'] > 0.5
rewritten = None
if is_flagged:
rewritten = detox_pipe(text, max_length=100)[0]['generated_text']
return ModerationResponse(
original_text=text,
detected_categories={"profanity": profanity_result["contains_profanity"], "toxicity_model": toxicity_scores},
is_flagged=is_flagged,
rewritten_text=rewritten
)
@app.get("/health")
async def health_check():
return {"status": "ok"} |