vedaco commited on
Commit
d3e2cca
ยท
verified ยท
1 Parent(s): 85f3c75

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +143 -263
app.py CHANGED
@@ -3,357 +3,237 @@ 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
- )
 
3
  import numpy as np
4
  import os
5
  import json
6
+
7
+ from model import VedaProgrammingLLM
8
  from tokenizer import VedaTokenizer
9
+ from train import VedaTrainer, SAMPLE_CODE
10
 
11
+ # Global state
12
  model = None
13
  tokenizer = None
 
14
 
15
+ def initialize_model():
16
+ """Initialize or load model"""
17
+ global model, tokenizer
18
 
19
  model_path = "veda_model"
20
+ config_file = os.path.join(model_path, "config.json")
21
 
22
+ try:
23
+ if os.path.exists(config_file):
24
+ print("Loading saved model...")
25
+
26
+ with open(config_file, 'r') as f:
27
+ config = json.load(f)
28
+
29
+ tokenizer = VedaTokenizer()
30
+ tokenizer.load(os.path.join(model_path, "tokenizer.json"))
31
+
32
+ model = VedaProgrammingLLM(
33
+ vocab_size=config['vocab_size'],
34
+ max_length=config['max_length'],
35
+ d_model=config['d_model'],
36
+ num_heads=config['num_heads'],
37
+ num_layers=config['num_layers'],
38
+ ff_dim=config['ff_dim']
39
+ )
40
+
41
+ dummy = tf.zeros((1, config['max_length']), dtype=tf.int32)
42
+ model(dummy)
43
+ model.load_weights(os.path.join(model_path, "weights.h5"))
44
+ print("Model loaded!")
45
+ else:
46
+ print("Training new model...")
47
+ trainer = VedaTrainer(
48
+ data_path="programming.txt",
49
+ vocab_size=3000,
50
+ max_length=128,
51
+ batch_size=8
52
+ )
53
+ trainer.train(epochs=5, save_path=model_path)
54
+ model = trainer.model
55
+ tokenizer = trainer.tokenizer
56
+ print("Model trained!")
57
+
58
+ except Exception as e:
59
+ print(f"Error: {e}")
60
+ print("Creating fresh model...")
61
+ trainer = VedaTrainer()
62
+ trainer.train(epochs=5)
63
  model = trainer.model
64
  tokenizer = trainer.tokenizer
 
65
 
66
+ def generate_code(prompt: str, max_tokens: int, temperature: float, top_k: int) -> str:
67
+ """Generate code from prompt"""
 
 
 
 
 
 
68
  global model, tokenizer
69
 
70
  if model is None or tokenizer is None:
71
+ return "Model not loaded. Please wait..."
72
 
73
  try:
74
+ if not prompt.strip():
75
+ return "Please enter a prompt."
76
 
77
+ tokens = tokenizer.encode(prompt)
78
+ if len(tokens) == 0:
79
+ tokens = [2] # START token
80
 
81
+ generated = model.generate(
82
+ tokens,
 
83
  max_new_tokens=int(max_tokens),
84
  temperature=float(temperature),
85
+ top_k=int(top_k)
 
86
  )
87
 
88
+ result = tokenizer.decode(generated)
89
+ return result
90
 
 
 
91
  except Exception as e:
92
+ return f"Error: {str(e)}"
93
 
94
+ def train_on_data(training_data: str, epochs: int) -> str:
95
+ """Train model on provided data"""
96
+ global model, tokenizer
 
 
 
 
97
 
98
  try:
99
+ with open("programming.txt", 'w') as f:
 
100
  f.write(training_data)
101
 
 
102
  trainer = VedaTrainer(
103
  data_path="programming.txt",
104
+ vocab_size=3000,
105
+ max_length=128,
106
+ batch_size=8
 
107
  )
108
 
 
109
  history = trainer.train(epochs=int(epochs), save_path="veda_model")
110
 
 
111
  model = trainer.model
112
  tokenizer = trainer.tokenizer
113
 
 
114
  final_loss = history.history['loss'][-1]
115
  final_acc = history.history.get('accuracy', [0])[-1]
116
 
117
+ return f"""โœ… Training Complete!
118
+
119
+ Loss: {final_loss:.4f}
120
+ Accuracy: {final_acc:.4f}
121
  Epochs: {epochs}
122
+ Vocab Size: {tokenizer.vocabulary_size}
123
  """
 
124
  except Exception as e:
125
+ return f"โŒ Training Error: {str(e)}"
126
 
127
  def get_model_info() -> str:
128
+ """Get model information"""
129
  global model, tokenizer
130
 
131
  if model is None:
132
  return "No model loaded."
133
 
134
  config = model.get_config()
135
+ params = model.count_params()
136
 
137
+ return f"""## ๐Ÿ•‰๏ธ Veda Programming LLM
 
 
 
 
 
 
 
 
138
 
139
+ | Property | Value |
140
+ |----------|-------|
141
+ | Vocabulary Size | {config['vocab_size']} |
142
+ | Max Length | {config['max_length']} |
143
+ | Model Dimension | {config['d_model']} |
144
+ | Attention Heads | {config['num_heads']} |
145
+ | Transformer Layers | {config['num_layers']} |
146
+ | FFN Dimension | {config['ff_dim']} |
147
+ | **Total Parameters** | **{params:,}** |
148
  """
 
149
 
150
+ # Build interface
151
+ def create_app():
152
+ with gr.Blocks(title="Veda Programming", theme=gr.themes.Soft()) as app:
 
 
 
 
 
153
 
154
  gr.Markdown("""
155
  # ๐Ÿ•‰๏ธ Veda Programming LLM
156
+ ### TensorFlow-based Code Generation Model
 
 
 
157
  """)
158
 
159
  with gr.Tabs():
160
  # Generation Tab
161
+ with gr.TabItem("๐Ÿ’ป Generate Code"):
162
  with gr.Row():
163
+ with gr.Column():
164
+ prompt = gr.Textbox(
165
  label="Code Prompt",
166
  placeholder="def fibonacci(",
167
+ lines=3,
168
  value="def calculate_sum("
169
  )
170
 
171
  with gr.Row():
172
+ max_tokens = gr.Slider(10, 200, value=50, step=5, label="Max Tokens")
173
+ temperature = gr.Slider(0.1, 1.5, value=0.8, step=0.1, label="Temperature")
 
 
 
 
 
 
 
 
 
 
 
 
174
 
175
+ top_k = gr.Slider(1, 100, value=40, step=5, label="Top-K")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
+ gen_btn = gr.Button("๐Ÿš€ Generate", variant="primary")
 
 
 
178
 
179
+ with gr.Column():
180
+ output = gr.Code(label="Generated Code", language="python", lines=12)
181
+
182
+ gen_btn.click(
183
+ generate_code,
184
+ inputs=[prompt, max_tokens, temperature, top_k],
185
+ outputs=output
186
+ )
187
 
188
+ gr.Examples(
189
+ examples=[
190
+ ["def fibonacci(n):", 60, 0.7, 40],
191
+ ["def bubble_sort(arr):", 80, 0.8, 40],
192
+ ["class Calculator:", 100, 0.7, 50],
193
+ ["def binary_search(", 70, 0.8, 40],
194
+ ],
195
+ inputs=[prompt, max_tokens, temperature, top_k],
196
+ outputs=output,
197
+ fn=generate_code
198
  )
199
 
200
  # Training Tab
201
+ with gr.TabItem("๐ŸŽ“ Train Model"):
202
+ training_input = gr.Textbox(
203
+ label="Training Code",
204
+ placeholder="Paste Python code...",
205
+ lines=12,
206
+ value=SAMPLE_CODE[:1500]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  )
208
 
209
+ epochs_slider = gr.Slider(1, 20, value=5, step=1, label="Epochs")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
 
211
+ train_btn = gr.Button("๐ŸŽฏ Train Model", variant="primary")
212
+ train_output = gr.Textbox(label="Training Results", lines=8)
 
 
 
 
 
 
 
213
 
214
  train_btn.click(
215
+ train_on_data,
216
+ inputs=[training_input, epochs_slider],
217
+ outputs=train_output
218
  )
219
 
220
+ # Info Tab
221
  with gr.TabItem("โ„น๏ธ Model Info"):
222
+ info_output = gr.Markdown()
223
+ refresh_btn = gr.Button("๐Ÿ”„ Refresh")
224
+ refresh_btn.click(get_model_info, outputs=info_output)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
 
226
  gr.Markdown("""
227
  ---
228
+ **Veda Programming LLM** | Built with TensorFlow & Gradio
 
 
229
  """)
230
 
231
+ return app
232
 
233
+ # Main
234
+ print("๐Ÿ•‰๏ธ Initializing Veda Programming LLM...")
235
+ initialize_model()
236
+
237
+ print("๐Ÿš€ Starting Gradio...")
238
+ app = create_app()
239
+ app.launch(server_name="0.0.0.0", server_port=7860)