Adam Helmi
Update second CORS policy
309a4e8
import uvicorn
import streamlit as st
import streamlit.components.v1 as components
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from transformers import MBartForConditionalGeneration, MBartTokenizer, MBartConfig
# Load and display index.html
html_string = open('index.html', 'r').read()
components.html(html_string, height=1200)
# Load model and tokenizer at startup
MODEL_PATH = "GobLyne/Rumi-Jawi-Translater" # Path to your model folder
tokenizer = MBartTokenizer.from_pretrained(MODEL_PATH)
model = MBartForConditionalGeneration.from_pretrained(MODEL_PATH)
app = FastAPI()
# List of allowed origins (the frontend URL you are serving the HTML from)
origins = [
"http://127.0.0.1:5500", # Your frontend origin (adjust port if needed)
"http://localhost:5500", # Another common frontend origin
"https://goblyne.github.io/Jawi-Baru-Transliteration/",
"http://35.175.72.198:8501",
"http://10.27.69.196:8501",
"http://localhost:8501",
"https://huggingface.co/spaces/GobLyne/Jawi-Translation",
"https://goblyne-jawi-translation.hf.space",
]
# Add CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=origins, # Allow these origins
allow_credentials=True,
allow_methods=["*"], # Allow all HTTP methods (GET, POST, etc.)
allow_headers=["*"], # Allow all headers
)
# Input model for translation
class TranslationRequest(BaseModel):
text: str
@app.get('/')
def index():
return {'message': 'Jawi Translater API'}
@app.post("/translate")
async def translate(data: TranslationRequest):
sentence = data.text.strip()
if not sentence:
raise HTTPException(status_code=400, detail="No text provided for translation")
try:
# Translate the text
inputs = tokenizer(sentence, return_tensors="pt")
translated_tokens = model.generate(**inputs, decoder_start_token_id=tokenizer.lang_code_to_id["ar_AR"], early_stopping=True, max_length=120)
pred = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
pred = pred.replace("ar_AR", "").strip()
return {"translated_text": pred}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# Run with this command inside terminal
# uvicorn main:app --reload