YuuVx commited on
Commit
7c8a26f
·
1 Parent(s): 71966a2

Update Space

Browse files
Files changed (2) hide show
  1. requirements.txt +5 -0
  2. yuuvx_server.py +50 -0
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ torch
2
+ transformers
3
+ flax
4
+ duckduckgo-search
5
+ flask
yuuvx_server.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ from duckduckgo_search import DDGS
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM
4
+ import torch
5
+
6
+ app = Flask(__name__)
7
+
8
+ MODEL_NAME = "flax-community/gpt2-medium-indonesian"
9
+ WEB_RESULTS_TO_USE = 2
10
+
11
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
12
+ model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
13
+ device = "cuda" if torch.cuda.is_available() else "cpu"
14
+ model.to(device)
15
+
16
+ def web_search_snippets(query,max_results=WEB_RESULTS_TO_USE):
17
+ snippets=[]
18
+ try:
19
+ with DDGS() as ddgs:
20
+ results=list(ddgs.text(query,max_results=max_results))
21
+ for r in results:
22
+ body=r.get("body","").strip()
23
+ title=r.get("title","").strip()
24
+ if body:
25
+ snippets.append(f"{title}. {body}" if title else body)
26
+ except:
27
+ snippets.append("(gagal ambil web)")
28
+ if not snippets:
29
+ snippets=["(tidak ada info web)"]
30
+ return snippets
31
+
32
+ def generate_reply(user_input):
33
+ web_snippets = web_search_snippets(user_input)
34
+ prompt=f"Aku YuuVx Ai, asisten bahasa Indonesia. Gunakan info web jika relevan.\n{''.join(web_snippets)}\nPertanyaan: {user_input}\nJawab singkat, jelas.\n"
35
+ input_ids = tokenizer.encode(prompt+tokenizer.eos_token,return_tensors="pt").to(device)
36
+ out = model.generate(input_ids,max_new_tokens=200,do_sample=True,temperature=0.7,top_p=0.9,pad_token_id=tokenizer.eos_token_id)
37
+ full = tokenizer.decode(out[0],skip_special_tokens=True)
38
+ answer = full.split(prompt)[-1].strip() if prompt in full else full
39
+ return answer
40
+
41
+ @app.route("/ask",methods=["POST"])
42
+ def ask():
43
+ data=request.json
44
+ user_input=data.get("question","")
45
+ reply=generate_reply(user_input)
46
+ return jsonify({"reply":reply})
47
+
48
+ if __name__=="__main__":
49
+ app.run(host="0.0.0.0",port=5000)
50
+