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"}