rahmanansah commited on
Commit
4599ca4
·
verified ·
1 Parent(s): 46c1dc4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -57
app.py CHANGED
@@ -1,62 +1,62 @@
1
- from fastapi import FastAPI
2
- from pydantic import BaseModel
3
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
4
- import torch
5
-
6
- # Daftar model yang dipakai
7
- MODELS = {
8
- "in2bg": "rahmanansah/t5-id-bugis",
9
- "bg2id": "rahmanansah/t5-bugis-id"
10
- }
11
-
12
- # Simpan tokenizer & model yang sudah diload
13
- loaded_models = {}
14
-
15
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
16
-
17
- def load_model(model_id):
18
- tokenizer = AutoTokenizer.from_pretrained(model_id)
19
- model = AutoModelForSeq2SeqLM.from_pretrained(model_id).to(device)
20
- return tokenizer, model
21
-
22
- # Preload semua model
23
- for key, model_id in MODELS.items():
24
- print(f"🔄 Loading {key} -> {model_id}")
25
- loaded_models[key] = load_model(model_id)
26
- print(" Semua model sudah diload")
27
-
28
- app = FastAPI()
29
-
30
- class InputText(BaseModel):
31
- text: str
32
- model: str # "in2bg" atau "bg2id"
33
-
34
- @app.post("/translate")
35
- def translate(input: InputText):
36
- if input.model not in loaded_models:
37
- return {"error": f"Model '{input.model}' tidak tersedia. Pilihan: {list(loaded_models.keys())}"}
38
-
39
- tokenizer, model = loaded_models[input.model]
40
-
41
- if not input.text.strip():
42
- return {"result": ""}
43
-
44
- text = input.text.strip()
45
-
46
- # Tambahkan prefix sesuai arah model
47
- if input.model == "in2bg":
48
- prefixed_text = f"translate id2bg: {text}"
49
- elif input.model == "bg2id":
50
- prefixed_text = f"translate bg2id: {text}"
51
  else:
52
- prefixed_text = text
 
 
 
 
 
53
 
54
- inputs = tokenizer(prefixed_text, return_tensors="pt").to(device)
55
- outputs = model.generate(**inputs, max_length=64)
56
- decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
57
 
58
- return {"result": decoded}
59
 
60
  if __name__ == "__main__":
61
- import uvicorn
62
- uvicorn.run("app:app", host="0.0.0.0", port=7860)
 
1
+ from flask import Flask, request, jsonify
2
+ import requests
3
+ import os
4
+
5
+ app = Flask(__name__)
6
+
7
+ # Token Hugging Face dari environment
8
+ HF_TOKEN = os.getenv("HF_TOKEN")
9
+
10
+ # Endpoint untuk model
11
+ QWEN_MODEL = "Qwen/Qwen2.5-1.5B-Instruct"
12
+ TRANS_MODEL = "rahmanansah/t5-id-bugis" # ganti sesuai repo kamu
13
+
14
+ HEADERS = {"Authorization": f"Bearer {HF_TOKEN}"}
15
+
16
+ def query_hf(model_id, inputs, parameters=None):
17
+ """Panggil Hugging Face Inference API"""
18
+ url = f"https://api-inference.huggingface.co/models/{model_id}"
19
+ payload = {"inputs": inputs}
20
+ if parameters:
21
+ payload["parameters"] = parameters
22
+ response = requests.post(url, headers=HEADERS, json=payload)
23
+ if response.status_code == 200:
24
+ return response.json()
25
+ else:
26
+ return {"error": f"{response.status_code}: {response.text}"}
27
+
28
+
29
+ @app.route("/chat", methods=["POST"])
30
+ def chat():
31
+ data = request.json
32
+ user_input = data.get("text", "").strip()
33
+
34
+ if not user_input:
35
+ return jsonify({"reply": "Teks kosong, silakan masukkan sesuatu."})
36
+
37
+ # --- Logika Pemisah ---
38
+ if user_input.lower().startswith("terjemahkan:"):
39
+ # Hapus prefix "terjemahkan:" → ambil teks mentah
40
+ clean_text = user_input[len("terjemahkan:"):].strip()
41
+ if not clean_text:
42
+ return jsonify({"reply": "Silakan masukkan teks setelah 'terjemahkan:'"})
43
+
44
+ # Panggil model translator
45
+ result = query_hf(TRANS_MODEL, f"translate id2bg: {clean_text}")
46
+ if isinstance(result, list) and "generated_text" in result[0]:
47
+ reply = result[0]["generated_text"]
48
+ else:
49
+ reply = result.get("error", "Terjadi kesalahan pada model terjemahan.")
 
50
  else:
51
+ # Panggil Qwen sebagai chatbot interaktif
52
+ result = query_hf(QWEN_MODEL, user_input, parameters={"max_new_tokens": 200})
53
+ if isinstance(result, list) and "generated_text" in result[0]:
54
+ reply = result[0]["generated_text"]
55
+ else:
56
+ reply = result.get("error", "Terjadi kesalahan pada model interaktif.")
57
 
58
+ return jsonify({"reply": reply})
 
 
59
 
 
60
 
61
  if __name__ == "__main__":
62
+ app.run(host="0.0.0.0", port=5000)