shimaa22 commited on
Commit
a0e4100
·
verified ·
1 Parent(s): dba898b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -59
app.py CHANGED
@@ -1,11 +1,7 @@
1
- from fastapi import FastAPI, HTTPException
2
- from pydantic import BaseModel
3
- import torch
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
 
5
 
6
- app = FastAPI(title="Qwen API Server")
7
-
8
- # استخدام نسخة 1.5B لتجنب مشاكل الذاكرة والانهيار على الـ CPU
9
  MODEL_NAME = "Qwen/Qwen2.5-1.5B-Instruct"
10
 
11
  print(f"Loading Model: {MODEL_NAME} ...")
@@ -17,59 +13,43 @@ model = AutoModelForCausalLM.from_pretrained(
17
  )
18
  print("Model successfully loaded on CPU!")
19
 
20
- class ChatMessage(BaseModel):
21
- role: str
22
- content: str
23
-
24
- class ChatRequest(BaseModel):
25
- messages: list[ChatMessage]
26
- max_tokens: int = 512
27
- temperature: float = 0.7
28
-
29
- @app.get("/")
30
- def home():
31
- return {"status": "Running", "model": MODEL_NAME}
32
-
33
- @app.post("/v1/chat/completions")
34
- async def chat_completion(request: ChatRequest):
35
- try:
36
- formatted_messages = [{"role": m.role, "content": m.content} for m in request.messages]
37
-
38
- text = tokenizer.apply_chat_template(
39
- formatted_messages,
40
- tokenize=False,
41
- add_generation_prompt=True
 
42
  )
43
-
44
- inputs = tokenizer([text], return_tensors="pt")
45
-
46
- with torch.no_grad():
47
- outputs = model.generate(
48
- **inputs,
49
- max_new_tokens=request.max_tokens,
50
- temperature=request.temperature,
51
- do_sample=True,
52
- top_p=0.9
53
- )
54
-
55
- generated_ids = [
56
- output[len(input_ids):] for input_ids, output in zip(inputs.input_ids, outputs)
57
- ]
58
- response_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
59
-
60
- return {
61
- "choices": [
62
- {
63
- "message": {
64
- "role": "assistant",
65
- "content": response_text
66
- }
67
- }
68
- ]
69
- }
70
- except Exception as e:
71
- raise HTTPException(status_code=500, detail=str(e))
72
 
73
  if __name__ == "__main__":
74
- import uvicorn
75
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
1
+ import gradio as gr
 
 
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
+ import torch
4
 
 
 
 
5
  MODEL_NAME = "Qwen/Qwen2.5-1.5B-Instruct"
6
 
7
  print(f"Loading Model: {MODEL_NAME} ...")
 
13
  )
14
  print("Model successfully loaded on CPU!")
15
 
16
+ def generate_response(message, history):
17
+ # تجهيز الرسائل بالصيغة الصحيحة
18
+ messages = []
19
+ for human, assistant in history:
20
+ messages.append({"role": "user", "content": human})
21
+ messages.append({"role": "assistant", "content": assistant})
22
+ messages.append({"role": "user", "content": message})
23
+
24
+ text = tokenizer.apply_chat_template(
25
+ messages,
26
+ tokenize=False,
27
+ add_generation_prompt=True
28
+ )
29
+
30
+ inputs = tokenizer([text], return_tensors="pt")
31
+
32
+ with torch.no_grad():
33
+ outputs = model.generate(
34
+ **inputs,
35
+ max_new_tokens=512,
36
+ temperature=0.7,
37
+ do_sample=True,
38
+ top_p=0.9
39
  )
40
+
41
+ generated_ids = [
42
+ output[len(input_ids):] for input_ids, output in zip(inputs.input_ids, outputs)
43
+ ]
44
+ response_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
45
+ return response_text
46
+
47
+ # إنشاء واجهة Gradio التي تدعم الـ UI وفي نفس الوقت تتيح API جاهز لأي منصة خارجية
48
+ demo = gr.ChatInterface(
49
+ fn=generate_response,
50
+ title="Qwen 2.5 1.5B API & Chat",
51
+ description="هذا السيرفر يعمل بشكل دائم على Hugging Face ويمكنك التحدث معه هنا أو ربطه بأي تطبيق خارجي عبر الـ API."
52
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  if __name__ == "__main__":
55
+ demo.launch(server_name="0.0.0.0", server_port=7860, share=False)