mahin1234 commited on
Commit
266419b
·
verified ·
1 Parent(s): 18d9dd1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +119 -35
app.py CHANGED
@@ -1,44 +1,128 @@
1
  import gradio as gr
2
- from llama_cpp import Llama
 
3
  import os
4
 
5
- # ========== ১. GGUF মডেল ডাউনলোড (শুধু প্রথমবার) ==========
6
- model_path = "lychee-gpt-q4_k_m.gguf"
7
- if not os.path.exists(model_path):
8
- print("⏳ প্রথমবার GGUF ডাউনলোড হচ্ছে (৩-৪ মিনিট সময় নিবে)...")
9
- os.system("wget -q https://huggingface.co/mx-llms/Lychee-GPT-9B/resolve/main/lychee-gpt-q4_k_m.gguf -O lychee-gpt-q4_k_m.gguf")
10
- print("✅ ডাউনলোড শেষ!")
11
 
12
- # ========== ২. মডেল লোড (CPU-র জন্য মেইড) ==========
13
- print(" মডেল লোড হচছে (llama.cpp)...")
14
- llm = Llama(
15
- model_path=model_path,
16
- n_ctx=512,
17
- n_threads=2, # CPU থ্রেড
18
- n_gpu_layers=0, # CPU তে ফোর্স
19
- chat_format="chatml",
 
 
 
20
  )
21
- print("✅ লোড শেষ! এখন কথা বলুন।")
22
 
23
- # ========== ৩. চ্যাট ফাংশন ==========
24
- def chat_function(message, history):
25
- messages = []
26
- for user_msg, bot_msg in history:
27
- messages.append({"role": "user", "content": user_msg})
28
- messages.append({"role": "assistant", "content": bot_msg})
29
- messages.append({"role": "user", "content": message})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
- response = llm.create_chat_completion(
32
- messages=messages,
33
- max_tokens=100,
34
- temperature=0.6,
35
- stream=False,
36
  )
37
- return response["choices"][0]["message"]["content"]
38
 
39
- # ========== ৪. UI ==========
40
- gr.ChatInterface(
41
- fn=chat_function,
42
- title="🥭 Lychee GPT (Fast CPU - llama.cpp)",
43
- description="উত্তর আসতে ১৫-২০ সেকেন্ড সময় নিতে পারে (পুরনো ৩০০ সেকেন্ড থেকে অনেক কম.)।"
44
- ).launch()
 
1
  import gradio as gr
2
+ import torch
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import os
5
 
6
+ # Model configuration
7
+ MODEL_ID = "mx-llms/Lychee-GPT-9B"
8
+ MAX_NEW_TOKENS = 256
9
+ TEMPERATURE = 0.7
10
+ TOP_P = 0.9
 
11
 
12
+ # Load model and tokenizer
13
+ print("Loading model... (এটা রথমবার একটু সময় লাগবে)")
14
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
15
+
16
+ # CPU optimization - 8-bit quantization
17
+ model = AutoModelForCausalLM.from_pretrained(
18
+ MODEL_ID,
19
+ device_map="cpu", # CPU তে run করবে
20
+ load_in_8bit=False, # CPU তে 8bit সাপোর্ট নেই, তাই False
21
+ torch_dtype=torch.float32, # CPU তে float32 ব্যবহার করতে হয়
22
+ trust_remote_code=True,
23
  )
 
24
 
25
+ # Set to eval mode
26
+ model.eval()
27
+
28
+ def generate_response(user_message, temperature=0.7, top_p=0.9, max_tokens=256):
29
+ """Generate response from Lychee-GPT"""
30
+ try:
31
+ # Prepare input
32
+ inputs = tokenizer(user_message, return_tensors="pt")
33
+
34
+ # Generate
35
+ with torch.no_grad():
36
+ outputs = model.generate(
37
+ inputs.input_ids,
38
+ max_new_tokens=max_tokens,
39
+ temperature=temperature,
40
+ top_p=top_p,
41
+ do_sample=True,
42
+ pad_token_id=tokenizer.eos_token_id,
43
+ eos_token_id=tokenizer.eos_token_id,
44
+ )
45
+
46
+ # Decode
47
+ response = tokenizer.decode(outputs[0], skip_special_tokens=True)
48
+
49
+ # Remove the input from response
50
+ if user_message in response:
51
+ response = response.replace(user_message, "", 1).strip()
52
+
53
+ return response
54
+
55
+ except Exception as e:
56
+ return f"Error: {str(e)}"
57
+
58
+ # Gradio Interface
59
+ with gr.Blocks(title="Lychee-GPT-9B") as demo:
60
+ gr.Markdown("""
61
+ # 🎉 Lychee-GPT-9B
62
+ ### আপনার নিজস্ব LLM Model!
63
+
64
+ > ⚠️ **নোট:** CPU তে চলছে তাই response 30-90 সেকেন্ড লাগতে পারে।
65
+ """)
66
+
67
+ with gr.Row():
68
+ with gr.Column():
69
+ user_input = gr.Textbox(
70
+ label="আপনার প্রশ্ন/বার্তা",
71
+ placeholder="কিছু লিখুন...",
72
+ lines=3
73
+ )
74
+
75
+ with gr.Row():
76
+ temp_slider = gr.Slider(
77
+ label="Temperature",
78
+ minimum=0.0,
79
+ maximum=1.0,
80
+ value=0.7,
81
+ step=0.1,
82
+ info="বেশি = সৃজনশীল, কম = সুসংগত"
83
+ )
84
+
85
+ top_p_slider = gr.Slider(
86
+ label="Top P",
87
+ minimum=0.0,
88
+ maximum=1.0,
89
+ value=0.9,
90
+ step=0.05,
91
+ info="শব্দ নির্বাচন নিয়ন্ত্রণ"
92
+ )
93
+
94
+ submit_btn = gr.Button("✨ Generate Response", variant="primary", size="lg")
95
+
96
+ with gr.Column():
97
+ output_text = gr.Textbox(
98
+ label="Response",
99
+ lines=8,
100
+ interactive=False
101
+ )
102
+
103
+ # Examples
104
+ gr.Examples(
105
+ examples=[
106
+ ["বাংলা ভাষা কি?"],
107
+ ["আমাকে একটা গল্প বলো"],
108
+ ["পাইথন প্রোগ্রামিং কি?"],
109
+ ],
110
+ inputs=user_input,
111
+ )
112
+
113
+ # Button click handler
114
+ submit_btn.click(
115
+ fn=generate_response,
116
+ inputs=[user_input, temp_slider, top_p_slider],
117
+ outputs=output_text,
118
+ )
119
 
120
+ # Enter key handler
121
+ user_input.submit(
122
+ fn=generate_response,
123
+ inputs=[user_input, temp_slider, top_p_slider],
124
+ outputs=output_text,
125
  )
 
126
 
127
+ if __name__ == "__main__":
128
+ demo.launch()