mayacou commited on
Commit
efb198f
·
verified ·
1 Parent(s): 4b4b361

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -0
app.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, Request
2
+ from transformers import MarianMTModel, MarianTokenizer
3
+ import torch
4
+
5
+ app = FastAPI()
6
+
7
+ MODEL_MAP = {
8
+ "fr": "Helsinki-NLP/opus-mt-en-fr",
9
+ "de": "Helsinki-NLP/opus-mt-en-de"
10
+ }
11
+
12
+ MODEL_CACHE = {}
13
+
14
+ def load_model(model_id):
15
+ if model_id not in MODEL_CACHE:
16
+ tokenizer = MarianTokenizer.from_pretrained(model_id)
17
+ model = MarianMTModel.from_pretrained(model_id).to("cpu")
18
+ MODEL_CACHE[model_id] = (tokenizer, model)
19
+ return MODEL_CACHE[model_id]
20
+
21
+ @app.post("/translate")
22
+ async def translate(request: Request):
23
+ data = await request.json()
24
+ text = data.get("text")
25
+ target_lang = data.get("target_lang")
26
+
27
+ if not text or not target_lang:
28
+ return {"error": "Missing text or target_lang"}
29
+
30
+ model_id = MODEL_MAP.get(target_lang)
31
+ if not model_id:
32
+ return {"error": f"No model for '{target_lang}'"}
33
+
34
+ tokenizer, model = load_model(model_id)
35
+ inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True).to(model.device)
36
+ outputs = model.generate(**inputs)
37
+ return {"translation": tokenizer.decode(outputs[0], skip_special_tokens=True)}
38
+
39
+ # Required for FastAPI to run on HF Spaces
40
+ import uvicorn
41
+ if __name__ == "__main__":
42
+ uvicorn.run("app:app", host="0.0.0.0", port=7860)