mahin1234 commited on
Commit
e577b23
·
verified ·
1 Parent(s): 9909fc7

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +19 -0
  2. app.py +175 -0
  3. requirements.txt +5 -0
Dockerfile ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ WORKDIR /app
4
+
5
+ RUN apt-get update && apt-get install -y \
6
+ git \
7
+ git-lfs \
8
+ curl \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ COPY requirements.txt .
12
+
13
+ RUN pip install --no-cache-dir -r requirements.txt
14
+
15
+ COPY app.py .
16
+
17
+ EXPOSE 7860
18
+
19
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import gradio as gr
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM
4
+ import torch
5
+ import os
6
+
7
+ # Model configuration
8
+ MODEL_ID = "mx-llms/Lychee-GPT-9B"
9
+
10
+ # Get HF token from environment
11
+ HF_TOKEN = os.getenv("HF_TOKEN")
12
+
13
+ print("🚀 Loading Lychee-GPT-9B model...")
14
+ print("⏱️ This may take a few minutes...")
15
+
16
+ try:
17
+ # Load tokenizer with token
18
+ tokenizer = AutoTokenizer.from_pretrained(
19
+ MODEL_ID,
20
+ trust_remote_code=True,
21
+ token=HF_TOKEN
22
+ )
23
+
24
+ # Load model with optimizations
25
+ model = AutoModelForCausalLM.from_pretrained(
26
+ MODEL_ID,
27
+ torch_dtype=torch.float32,
28
+ device_map="cpu",
29
+ trust_remote_code=True,
30
+ token=HF_TOKEN,
31
+ )
32
+
33
+ model.eval()
34
+ print("✅ Model loaded successfully!")
35
+
36
+ except Exception as e:
37
+ print(f"❌ Error loading model: {e}")
38
+ print("\n⚠️ Make sure:")
39
+ print("1. Model is not gated OR")
40
+ print("2. HF_TOKEN environment variable is set")
41
+ model = None
42
+ tokenizer = None
43
+
44
+ def generate_text(prompt, max_length=256, temperature=0.7, top_p=0.9):
45
+ """Generate text using Lychee-GPT-9B"""
46
+ if model is None or tokenizer is None:
47
+ return "❌ Model failed to load. Check that you have access to mx-llms/Lychee-GPT-9B model."
48
+
49
+ try:
50
+ # Tokenize input
51
+ inputs = tokenizer(prompt, return_tensors="pt")
52
+
53
+ # Generate with torch.no_grad for memory efficiency
54
+ with torch.no_grad():
55
+ output = model.generate(
56
+ inputs["input_ids"],
57
+ max_new_tokens=int(max_length),
58
+ temperature=float(temperature),
59
+ top_p=float(top_p),
60
+ do_sample=True,
61
+ pad_token_id=tokenizer.eos_token_id,
62
+ )
63
+
64
+ # Decode output
65
+ response = tokenizer.decode(output[0], skip_special_tokens=True)
66
+
67
+ # Remove input prompt from response
68
+ if prompt in response:
69
+ response = response.replace(prompt, "", 1).strip()
70
+
71
+ return response if response else "No response generated"
72
+
73
+ except Exception as e:
74
+ return f"❌ Error: {str(e)}"
75
+
76
+ # Create Gradio interface
77
+ def create_interface():
78
+ with gr.Blocks(title="Lychee-GPT-9B", theme=gr.themes.Soft()) as demo:
79
+ gr.Markdown("""
80
+ # 🎉 Lychee-GPT-9B Demo
81
+
82
+ আপনার নিজস্ব LLM Model!
83
+
84
+ ⏱️ **নোট:**
85
+ - প্রথম load: 2-3 মিনিট
86
+ - Response time: 30-90 সেকেন্ড (CPU তে)
87
+ """)
88
+
89
+ with gr.Row():
90
+ with gr.Column(scale=1):
91
+ prompt = gr.Textbox(
92
+ label="প্রশ্ন/Prompt",
93
+ placeholder="কিছু লিখুন...",
94
+ lines=4,
95
+ info="আপনার প্রশ্ন বা prompt দিন"
96
+ )
97
+
98
+ with gr.Row():
99
+ max_len = gr.Slider(
100
+ label="Max Length",
101
+ minimum=10,
102
+ maximum=512,
103
+ value=256,
104
+ step=10,
105
+ info="Response এর সর্বোচ্চ length"
106
+ )
107
+
108
+ with gr.Row():
109
+ temp = gr.Slider(
110
+ label="Temperature",
111
+ minimum=0.0,
112
+ maximum=1.0,
113
+ value=0.7,
114
+ step=0.1,
115
+ info="কম = সুসংগত, বেশি = সৃজনশীল"
116
+ )
117
+
118
+ top_p = gr.Slider(
119
+ label="Top P",
120
+ minimum=0.0,
121
+ maximum=1.0,
122
+ value=0.9,
123
+ step=0.05,
124
+ info="শব্দ নির্বাচন নিয়ন্ত্রণ"
125
+ )
126
+
127
+ submit_btn = gr.Button("🚀 Generate", variant="primary", size="lg")
128
+
129
+ with gr.Column(scale=1):
130
+ output = gr.Textbox(
131
+ label="Response",
132
+ lines=10,
133
+ interactive=False,
134
+ info="Model এর response এখানে দেখা যাবে"
135
+ )
136
+
137
+ # Examples
138
+ gr.Examples(
139
+ examples=[
140
+ ["বাংলা ভাষা সম্পর্কে বলুন"],
141
+ ["পাইথন প্রোগ্রামিং কি?"],
142
+ ["একটি সংক্ষিপ্ত গল্প বলুন"],
143
+ ["কৃত্রিম বুদ্ধিমত্তা কি?"],
144
+ ],
145
+ inputs=prompt,
146
+ label="উদাহরণ প্রশ্ন"
147
+ )
148
+
149
+ # Connect button click
150
+ submit_btn.click(
151
+ fn=generate_text,
152
+ inputs=[prompt, max_len, temp, top_p],
153
+ outputs=output,
154
+ api_name="generate"
155
+ )
156
+
157
+ # Allow Enter key
158
+ prompt.submit(
159
+ fn=generate_text,
160
+ inputs=[prompt, max_len, temp, top_p],
161
+ outputs=output,
162
+ api_name="generate"
163
+ )
164
+
165
+ return demo
166
+
167
+ if __name__ == "__main__":
168
+ demo = create_interface()
169
+ # Launch with share=True for HF Spaces (they handle public URL)
170
+ demo.launch(
171
+ server_name="0.0.0.0",
172
+ server_port=7860,
173
+ share=True, # Important for Docker!
174
+ show_error=True,
175
+ )
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ torch==2.12.1
2
+ transformers==4.35.0
3
+ accelerate>=0.29.0
4
+ safetensors>=0.4.2
5
+ gradio>=4.0