vedaco commited on
Commit
8f5ff41
Β·
verified Β·
1 Parent(s): f799e18

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +346 -57
app.py CHANGED
@@ -1,70 +1,359 @@
1
  import gradio as gr
2
- from huggingface_hub import InferenceClient
 
 
 
 
 
 
3
 
 
 
 
 
4
 
5
- def respond(
6
- message,
7
- history: list[dict[str, str]],
8
- system_message,
9
- max_tokens,
10
- temperature,
11
- top_p,
12
- hf_token: gr.OAuthToken,
13
- ):
14
- """
15
- For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
16
- """
17
- client = InferenceClient(token=hf_token.token, model="openai/gpt-oss-20b")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
- messages = [{"role": "system", "content": system_message}]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
- messages.extend(history)
22
-
23
- messages.append({"role": "user", "content": message})
24
-
25
- response = ""
26
-
27
- for message in client.chat_completion(
28
- messages,
29
- max_tokens=max_tokens,
30
- stream=True,
31
- temperature=temperature,
32
- top_p=top_p,
33
- ):
34
- choices = message.choices
35
- token = ""
36
- if len(choices) and choices[0].delta.content:
37
- token = choices[0].delta.content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- response += token
40
- yield response
 
 
 
 
 
 
 
 
 
41
 
 
 
 
 
 
 
42
 
 
43
  """
44
- For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
45
- """
46
- chatbot = gr.ChatInterface(
47
- respond,
48
- type="messages",
49
- additional_inputs=[
50
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
51
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
52
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
53
- gr.Slider(
54
- minimum=0.1,
55
- maximum=1.0,
56
- value=0.95,
57
- step=0.05,
58
- label="Top-p (nucleus sampling)",
59
- ),
60
- ],
61
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
- with gr.Blocks() as demo:
64
- with gr.Sidebar():
65
- gr.LoginButton()
66
- chatbot.render()
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
 
69
  if __name__ == "__main__":
70
- demo.launch()
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ import tensorflow as tf
3
+ import numpy as np
4
+ import os
5
+ import json
6
+ from model import VedaProgrammingLLM, create_veda_model
7
+ from tokenizer import VedaTokenizer
8
+ from train import VedaTrainer
9
 
10
+ # Global variables for model and tokenizer
11
+ model = None
12
+ tokenizer = None
13
+ trainer = None
14
 
15
+ def load_or_create_model():
16
+ """Load existing model or create new one"""
17
+ global model, tokenizer, trainer
18
+
19
+ model_path = "veda_model"
20
+
21
+ if os.path.exists(os.path.join(model_path, "config.json")):
22
+ print("Loading existing model...")
23
+
24
+ # Load config
25
+ with open(os.path.join(model_path, "config.json"), 'r') as f:
26
+ config = json.load(f)
27
+
28
+ # Load tokenizer
29
+ tokenizer = VedaTokenizer()
30
+ tokenizer.load(os.path.join(model_path, "tokenizer.json"))
31
+
32
+ # Create model
33
+ model = create_veda_model(
34
+ vocab_size=tokenizer.vocabulary_size,
35
+ max_length=config.get('max_length', 256),
36
+ model_size="small"
37
+ )
38
+
39
+ # Build model
40
+ dummy_input = tf.zeros((1, config.get('max_length', 256)), dtype=tf.int32)
41
+ model(dummy_input)
42
+
43
+ # Load weights
44
+ model.load_weights(os.path.join(model_path, "model_weights.h5"))
45
+ print("Model loaded successfully!")
46
+ else:
47
+ print("No existing model found. Creating and training new model...")
48
+ trainer = VedaTrainer(
49
+ data_path="programming.txt",
50
+ vocab_size=5000,
51
+ max_length=256,
52
+ batch_size=8,
53
+ model_size="small"
54
+ )
55
+ trainer.train(epochs=5, save_path=model_path)
56
+ model = trainer.model
57
+ tokenizer = trainer.tokenizer
58
+ print("Model trained and ready!")
59
 
60
+ def generate_code(
61
+ prompt: str,
62
+ max_tokens: int,
63
+ temperature: float,
64
+ top_k: int,
65
+ top_p: float
66
+ ) -> str:
67
+ """Generate code based on prompt"""
68
+ global model, tokenizer
69
+
70
+ if model is None or tokenizer is None:
71
+ return "Error: Model not loaded. Please wait for initialization."
72
+
73
+ try:
74
+ # Encode prompt
75
+ prompt_tokens = tokenizer.encode(prompt)
76
+
77
+ if len(prompt_tokens) == 0:
78
+ return "Error: Could not tokenize prompt."
79
+
80
+ # Generate
81
+ generated_tokens = model.generate(
82
+ prompt_tokens,
83
+ max_new_tokens=int(max_tokens),
84
+ temperature=float(temperature),
85
+ top_k=int(top_k),
86
+ top_p=float(top_p)
87
+ )
88
+
89
+ # Decode
90
+ generated_text = tokenizer.decode(generated_tokens)
91
+
92
+ return generated_text
93
+
94
+ except Exception as e:
95
+ return f"Error generating code: {str(e)}"
96
 
97
+ def train_model(
98
+ training_data: str,
99
+ epochs: int,
100
+ learning_rate: float
101
+ ) -> str:
102
+ """Train or fine-tune the model"""
103
+ global model, tokenizer, trainer
104
+
105
+ try:
106
+ # Save training data
107
+ with open("programming.txt", 'w', encoding='utf-8') as f:
108
+ f.write(training_data)
109
+
110
+ # Create trainer
111
+ trainer = VedaTrainer(
112
+ data_path="programming.txt",
113
+ vocab_size=5000,
114
+ max_length=256,
115
+ batch_size=8,
116
+ model_size="small"
117
+ )
118
+
119
+ # Train
120
+ history = trainer.train(epochs=int(epochs), save_path="veda_model")
121
+
122
+ # Update global references
123
+ model = trainer.model
124
+ tokenizer = trainer.tokenizer
125
+
126
+ # Get final metrics
127
+ final_loss = history.history['loss'][-1]
128
+ final_acc = history.history.get('accuracy', [0])[-1]
129
+
130
+ return f"""Training completed successfully!
131
+
132
+ Final Loss: {final_loss:.4f}
133
+ Final Accuracy: {final_acc:.4f}
134
+ Epochs: {epochs}
135
+ Vocabulary Size: {tokenizer.vocabulary_size}
136
+ """
137
+
138
+ except Exception as e:
139
+ return f"Error during training: {str(e)}"
140
 
141
+ def get_model_info() -> str:
142
+ """Get information about the current model"""
143
+ global model, tokenizer
144
+
145
+ if model is None:
146
+ return "No model loaded."
147
+
148
+ config = model.get_config()
149
+
150
+ info = f"""
151
+ **Veda Programming LLM**
152
 
153
+ - Vocabulary Size: {config['vocab_size']}
154
+ - Max Sequence Length: {config['max_length']}
155
+ - Model Dimension: {config['d_model']}
156
+ - Number of Heads: {config['num_heads']}
157
+ - Number of Layers: {config['num_layers']}
158
+ - Feed Forward Dimension: {config['ff_dim']}
159
 
160
+ Total Parameters: {model.count_params():,}
161
  """
162
+ return info
163
+
164
+ # Create Gradio interface
165
+ def create_interface():
166
+ """Create the Gradio interface"""
167
+
168
+ with gr.Blocks(
169
+ title="Veda Programming LLM",
170
+ theme=gr.themes.Soft()
171
+ ) as demo:
172
+
173
+ gr.Markdown("""
174
+ # πŸ•‰οΈ Veda Programming LLM
175
+
176
+ A TensorFlow-based language model for code generation.
177
+
178
+ Train on your own code or use the pre-trained model to generate programming code.
179
+ """)
180
+
181
+ with gr.Tabs():
182
+ # Generation Tab
183
+ with gr.TabItem("πŸ’» Code Generation"):
184
+ with gr.Row():
185
+ with gr.Column(scale=1):
186
+ prompt_input = gr.Textbox(
187
+ label="Code Prompt",
188
+ placeholder="def fibonacci(",
189
+ lines=5,
190
+ value="def calculate_sum("
191
+ )
192
+
193
+ with gr.Row():
194
+ max_tokens = gr.Slider(
195
+ minimum=10,
196
+ maximum=500,
197
+ value=100,
198
+ step=10,
199
+ label="Max New Tokens"
200
+ )
201
+ temperature = gr.Slider(
202
+ minimum=0.1,
203
+ maximum=2.0,
204
+ value=0.7,
205
+ step=0.1,
206
+ label="Temperature"
207
+ )
208
+
209
+ with gr.Row():
210
+ top_k = gr.Slider(
211
+ minimum=1,
212
+ maximum=100,
213
+ value=50,
214
+ step=1,
215
+ label="Top-K"
216
+ )
217
+ top_p = gr.Slider(
218
+ minimum=0.1,
219
+ maximum=1.0,
220
+ value=0.9,
221
+ step=0.05,
222
+ label="Top-P (Nucleus)"
223
+ )
224
+
225
+ generate_btn = gr.Button(
226
+ "πŸš€ Generate Code",
227
+ variant="primary"
228
+ )
229
+
230
+ with gr.Column(scale=1):
231
+ output_code = gr.Code(
232
+ label="Generated Code",
233
+ language="python",
234
+ lines=15
235
+ )
236
+
237
+ generate_btn.click(
238
+ fn=generate_code,
239
+ inputs=[prompt_input, max_tokens, temperature, top_k, top_p],
240
+ outputs=output_code
241
+ )
242
+
243
+ # Training Tab
244
+ with gr.TabItem("πŸŽ“ Training"):
245
+ gr.Markdown("""
246
+ ### Train the Model
247
+
248
+ Paste your programming code below to train or fine-tune the model.
249
+ """)
250
+
251
+ training_data = gr.Textbox(
252
+ label="Training Data (Python Code)",
253
+ placeholder="Paste your Python code here...",
254
+ lines=15,
255
+ value='''def hello_world():
256
+ print("Hello, World!")
257
+ return True
258
 
259
+ def add_numbers(a, b):
260
+ return a + b
 
 
261
 
262
+ class MyClass:
263
+ def __init__(self, value):
264
+ self.value = value
265
+
266
+ def get_value(self):
267
+ return self.value
268
+ '''
269
+ )
270
+
271
+ with gr.Row():
272
+ epochs_input = gr.Slider(
273
+ minimum=1,
274
+ maximum=50,
275
+ value=10,
276
+ step=1,
277
+ label="Epochs"
278
+ )
279
+ lr_input = gr.Slider(
280
+ minimum=0.00001,
281
+ maximum=0.01,
282
+ value=0.0001,
283
+ step=0.00001,
284
+ label="Learning Rate"
285
+ )
286
+
287
+ train_btn = gr.Button(
288
+ "🎯 Start Training",
289
+ variant="primary"
290
+ )
291
+
292
+ training_output = gr.Textbox(
293
+ label="Training Output",
294
+ lines=10
295
+ )
296
+
297
+ train_btn.click(
298
+ fn=train_model,
299
+ inputs=[training_data, epochs_input, lr_input],
300
+ outputs=training_output
301
+ )
302
+
303
+ # Model Info Tab
304
+ with gr.TabItem("ℹ️ Model Info"):
305
+ model_info = gr.Markdown()
306
+ refresh_btn = gr.Button("πŸ”„ Refresh Info")
307
+ refresh_btn.click(
308
+ fn=get_model_info,
309
+ outputs=model_info
310
+ )
311
+
312
+ # Examples Tab
313
+ with gr.TabItem("πŸ“ Examples"):
314
+ gr.Markdown("""
315
+ ### Example Prompts
316
+
317
+ Try these prompts for code generation:
318
+
319
+ 1. `def fibonacci(`
320
+ 2. `class Calculator:`
321
+ 3. `def binary_search(arr, target):`
322
+ 4. `async def fetch_data(`
323
+ 5. `def quicksort(arr):`
324
+ 6. `class LinkedList:`
325
+ """)
326
+
327
+ gr.Examples(
328
+ examples=[
329
+ ["def fibonacci(", 100, 0.7, 50, 0.9],
330
+ ["class Calculator:", 150, 0.8, 40, 0.95],
331
+ ["def binary_search(arr, target):", 100, 0.6, 50, 0.9],
332
+ ["def bubble_sort(", 100, 0.7, 50, 0.9],
333
+ ],
334
+ inputs=[prompt_input, max_tokens, temperature, top_k, top_p],
335
+ outputs=output_code,
336
+ fn=generate_code
337
+ )
338
+
339
+ gr.Markdown("""
340
+ ---
341
+ **Veda Programming LLM** - Built with TensorFlow & Gradio
342
+
343
+ *Note: This is a demonstration model. For production use, train on larger datasets.*
344
+ """)
345
+
346
+ return demo
347
 
348
+ # Main execution
349
  if __name__ == "__main__":
350
+ print("Initializing Veda Programming LLM...")
351
+ load_or_create_model()
352
+
353
+ print("Starting Gradio interface...")
354
+ demo = create_interface()
355
+ demo.launch(
356
+ server_name="0.0.0.0",
357
+ server_port=7860,
358
+ share=False
359
+ )