ChatFilter / main.py
John Doe
Deploy my chat filter app
73df9d6
# # from fastapi import FastAPI, UploadFile, File
# # from pydantic import BaseModel
# # from image_moderator import ImageContentModerator, smart_censor
# # from PIL import Image
# # import shutil
# # import os
# # app = FastAPI()
# # # Load models once when server starts
# # moderator = ImageContentModerator()
# # # Input schema for text
# # class TextRequest(BaseModel):
# # text: str
# # @app.get("/")
# # def root():
# # return {"message": "Chat Moderation API is running"}
# # @app.post("/moderate-text")
# # async def moderate_text(req: TextRequest):
# # result = smart_censor(req.text)
# # return {"moderated_text": result}
# # @app.post("/moderate-image")
# # async def moderate_image(file: UploadFile = File(...)):
# # temp_path = f"temp_{file.filename}"
# # # Save uploaded image to disk
# # with open(temp_path, "wb") as buffer:
# # shutil.copyfileobj(file.file, buffer)
# # output_path = f"blurred_{file.filename}"
# # moderated_path = moderator.process_image(temp_path, output_path)
# # # Read the moderated image and return as base64
# # with open(moderated_path, "rb") as img_file:
# # image_bytes = img_file.read()
# # import base64
# # encoded_image = base64.b64encode(image_bytes).decode()
# # # Clean up temp files
# # os.remove(temp_path)
# # os.remove(moderated_path)
# # return {
# # "blurred_image_base64": encoded_image
# # }
from fastapi import FastAPI
from pydantic import BaseModel
from image_moderator import ImageContentModerator, smart_censor
from PIL import Image
import base64
import os
app = FastAPI()
# Load models once when server starts
moderator = ImageContentModerator()
# Schemas
class TextRequest(BaseModel):
text: str
class ImageRequest(BaseModel):
image: str # base64 string
@app.get("/")
def root():
return {"message": "Chat Moderation API is running"}
# ✅ IMAGE MODERATION ENDPOINT
@app.post("/moderate-image")
async def moderate_image(req: ImageRequest):
try:
# Decode base64 image
image_data = base64.b64decode(req.image.split(",")[-1])
temp_path = "temp_input.png"
output_path = "temp_blurred.png"
# Save temp image
with open(temp_path, "wb") as f:
f.write(image_data)
# Process image
moderated_path = moderator.process_image(temp_path, output_path)
# Encode result
with open(moderated_path, "rb") as f:
encoded = base64.b64encode(f.read()).decode()
# Cleanup
os.remove(temp_path)
os.remove(output_path)
return {"blurred_image_base64": encoded}
except Exception as e:
return {"error": str(e)}
# ✅ TEXT MODERATION ENDPOINT
@app.post("/moderate-text")
async def moderate_text(req: TextRequest):
try:
result = smart_censor(req.text)
return {"moderated_text": result}
except Exception as e:
return {"error": str(e)}