Adam Helmi
no message
efc909f
raw
history blame
2.58 kB
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=600)
# # Load JavaScript and CSS files using Streamlit
# with open("styles.css", "r") as css_file:
# css = css_file.read()
# st.markdown(f"<style>{css}</style>", unsafe_allow_html=True)
# with open("script.js", "r") as js_file:
# js = js_file.read()
# st.markdown(f"<script>{js}</script>", unsafe_allow_html=True)
# 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",
]
# 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