File size: 1,881 Bytes
d68e65a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from fastapi.responses import JSONResponse
from google import genai

# from app.models.moderation_data import ModerationData
from app.models.moderation_response import ModerationResponse
from app.models.schemas import ModerationRequest
from app.models.standard_response import StandardResponse
from app.models.schemas import ModerationData


def to_json_response(data: StandardResponse) -> JSONResponse:
    return JSONResponse(content=data.model_dump(), status_code=data.status)


def moderate_content(request: ModerationRequest) -> ModerationResponse:
    flagged_for = {}
    scores = {}
    corrected_content = None
    original_content = request.content

    if "misinfo" in request.checkFor:
        correct_info = request.identify_misinfo()
        if correct_info.startswith("False"):
            flagged_for["misinfo"] = 1
            corrected_content = str(correct_info[6:])

    request.correct_typos()
    result = request.classify_moderation()
    result["misinfo"] = flagged_for.get("misinfo", 0)

    for category in request.checkFor:
        scores[category] = result[category]
        if result[category] > request.threshold:
            flagged_for[category] = result[category]

    cleaned_content = request.content
    if len(flagged_for) > 0:
        if list(flagged_for.keys()) == ["misinfo"]:
            # Do nothing
            pass
        else:
            gemini_response = request.cleanse_content()
            cleaned_content = gemini_response

    payload = ModerationData(
        flagged_for=flagged_for,
        cleaned_content=cleaned_content,
        corrected_content=corrected_content,
        original_content=original_content,
        scores=scores,
    )
    response = ModerationResponse(
        error=False, title="Cleaned", status=200, payload=payload
    )

    return response