|
|
import gradio as gr |
|
|
import tensorflow as tf |
|
|
import numpy as np |
|
|
from transformers import TFAutoModelForCausalLM, AutoTokenizer |
|
|
import os |
|
|
import json |
|
|
from datetime import datetime |
|
|
|
|
|
class VedaLLM: |
|
|
""" |
|
|
VEDA - A TensorFlow-based Large Language Model |
|
|
Created by VedaCo for Hugging Face Spaces |
|
|
""" |
|
|
|
|
|
def __init__(self): |
|
|
self.model = None |
|
|
self.tokenizer = None |
|
|
self.model_name = "veda-tf-llm" |
|
|
self.version = "1.0.0" |
|
|
self.load_model() |
|
|
|
|
|
def load_model(self): |
|
|
"""Load VEDA model with TensorFlow backend""" |
|
|
try: |
|
|
print(f"π€ Initializing VEDA v{self.version}...") |
|
|
|
|
|
|
|
|
base_model = "gpt2" |
|
|
self.tokenizer = AutoTokenizer.from_pretrained(base_model) |
|
|
self.model = TFAutoModelForCausalLM.from_pretrained(base_model) |
|
|
|
|
|
|
|
|
if self.tokenizer.pad_token is None: |
|
|
self.tokenizer.pad_token = self.tokenizer.eos_token |
|
|
|
|
|
|
|
|
special_tokens = { |
|
|
"pad_token": "[VEDA_PAD]", |
|
|
"bos_token": "[VEDA_START]", |
|
|
"eos_token": "[VEDA_END]", |
|
|
"unk_token": "[VEDA_UNK]" |
|
|
} |
|
|
|
|
|
self.tokenizer.add_special_tokens(special_tokens) |
|
|
self.model.resize_token_embeddings(len(self.tokenizer)) |
|
|
|
|
|
print("β
VEDA model loaded successfully!") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"β οΈ Error loading VEDA model: {e}") |
|
|
self.create_veda_custom_model() |
|
|
|
|
|
def create_veda_custom_model(self): |
|
|
"""Create custom VEDA model architecture""" |
|
|
print("π§ Creating custom VEDA architecture...") |
|
|
|
|
|
vocab_size = 50257 |
|
|
max_length = 256 |
|
|
|
|
|
|
|
|
self.model = self.build_veda_transformer(vocab_size, max_length) |
|
|
|
|
|
|
|
|
self.tokenizer = AutoTokenizer.from_pretrained("gpt2") |
|
|
self.tokenizer.pad_token = self.tokenizer.eos_token |
|
|
|
|
|
print("β
Custom VEDA model created!") |
|
|
|
|
|
def build_veda_transformer(self, vocab_size, max_length): |
|
|
"""Build VEDA's custom transformer architecture""" |
|
|
|
|
|
|
|
|
d_model = 512 |
|
|
num_heads = 8 |
|
|
dff = 1024 |
|
|
num_layers = 6 |
|
|
dropout_rate = 0.1 |
|
|
|
|
|
|
|
|
input_ids = tf.keras.layers.Input(shape=(max_length,), name='veda_input_ids') |
|
|
attention_mask = tf.keras.layers.Input(shape=(max_length,), name='veda_attention_mask') |
|
|
|
|
|
|
|
|
embedding = tf.keras.layers.Embedding(vocab_size, d_model, name='veda_embedding') |
|
|
positions = tf.range(start=0, limit=max_length, delta=1) |
|
|
pos_embedding = tf.keras.layers.Embedding(max_length, d_model, name='veda_pos_embedding')(positions) |
|
|
|
|
|
x = embedding(input_ids) + pos_embedding |
|
|
|
|
|
|
|
|
for i in range(num_layers): |
|
|
|
|
|
attn_output = tf.keras.layers.MultiHeadAttention( |
|
|
num_heads=num_heads, |
|
|
key_dim=d_model//num_heads, |
|
|
dropout=dropout_rate, |
|
|
name=f'veda_mha_{i}' |
|
|
)(x, x, attention_mask=attention_mask) |
|
|
|
|
|
|
|
|
x = tf.keras.layers.LayerNormalization(name=f'veda_ln1_{i}')(x + attn_output) |
|
|
|
|
|
|
|
|
ffn_output = tf.keras.Sequential([ |
|
|
tf.keras.layers.Dense(dff, activation='gelu', name=f'veda_ffn_dense1_{i}'), |
|
|
tf.keras.layers.Dropout(dropout_rate), |
|
|
tf.keras.layers.Dense(d_model, name=f'veda_ffn_dense2_{i}'), |
|
|
tf.keras.layers.Dropout(dropout_rate) |
|
|
], name=f'veda_ffn_{i}')(x) |
|
|
|
|
|
|
|
|
x = tf.keras.layers.LayerNormalization(name=f'veda_ln2_{i}')(x + ffn_output) |
|
|
|
|
|
|
|
|
outputs = tf.keras.layers.Dense(vocab_size, name='veda_output')(x) |
|
|
|
|
|
model = tf.keras.Model(inputs=[input_ids, attention_mask], outputs=outputs, name='VEDA') |
|
|
|
|
|
|
|
|
model.compile( |
|
|
optimizer=tf.keras.optimizers.Adam( |
|
|
learning_rate=3e-4, |
|
|
beta_1=0.9, |
|
|
beta_2=0.95, |
|
|
epsilon=1e-9 |
|
|
), |
|
|
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), |
|
|
metrics=['accuracy'] |
|
|
) |
|
|
|
|
|
return model |
|
|
|
|
|
def generate_text(self, prompt, max_length=200, temperature=0.8, top_p=0.95, top_k=50): |
|
|
"""Generate text with VEDA's unique capabilities""" |
|
|
|
|
|
try: |
|
|
|
|
|
enhanced_prompt = f"[VEDA] {prompt}" |
|
|
|
|
|
|
|
|
inputs = self.tokenizer( |
|
|
enhanced_prompt, |
|
|
return_tensors="tf", |
|
|
max_length=100, |
|
|
truncation=True, |
|
|
padding=True |
|
|
) |
|
|
|
|
|
|
|
|
generation_config = { |
|
|
'max_length': max_length, |
|
|
'temperature': temperature, |
|
|
'top_p': top_p, |
|
|
'top_k': top_k, |
|
|
'do_sample': True, |
|
|
'pad_token_id': self.tokenizer.pad_token_id, |
|
|
'eos_token_id': self.tokenizer.eos_token_id, |
|
|
'bos_token_id': self.tokenizer.bos_token_id, |
|
|
'repetition_penalty': 1.1, |
|
|
'length_penalty': 1.0, |
|
|
'num_return_sequences': 1, |
|
|
'early_stopping': True |
|
|
} |
|
|
|
|
|
|
|
|
with tf.device('/CPU:0'): |
|
|
outputs = self.model.generate( |
|
|
inputs['input_ids'], |
|
|
attention_mask=inputs['attention_mask'], |
|
|
**generation_config |
|
|
) |
|
|
|
|
|
|
|
|
generated_text = self.tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
|
|
|
|
|
veda_response = self.post_process_veda_output(generated_text) |
|
|
|
|
|
return veda_response |
|
|
|
|
|
except Exception as e: |
|
|
return f"π΄ VEDA Error: {str(e)}\nUsing fallback generation..." |
|
|
|
|
|
def post_process_veda_output(self, text): |
|
|
"""Post-process VEDA's generated text""" |
|
|
|
|
|
text = text.replace("[VEDA]", "").strip() |
|
|
|
|
|
|
|
|
sentences = text.split('.') |
|
|
if len(sentences) > 1: |
|
|
text = '. '.join(s.strip().capitalize() for s in sentences if s.strip()) |
|
|
|
|
|
return text |
|
|
|
|
|
|
|
|
print("π Initializing VEDA Large Language Model...") |
|
|
veda_llm = VedaLLM() |
|
|
|
|
|
def veda_generate(prompt, max_length, temperature, creativity, style): |
|
|
"""VEDA text generation interface""" |
|
|
|
|
|
if not prompt.strip(): |
|
|
return "β Please enter a prompt for VEDA!" |
|
|
|
|
|
|
|
|
top_p = 0.5 + (creativity * 0.4) |
|
|
|
|
|
|
|
|
style_prefixes = { |
|
|
"Creative": "Creatively, ", |
|
|
"Technical": "Technically speaking, ", |
|
|
"Conversational": "Let me explain: ", |
|
|
"Philosophical": "From a philosophical perspective, " |
|
|
} |
|
|
|
|
|
styled_prompt = style_prefixes.get(style, "") + prompt |
|
|
|
|
|
try: |
|
|
|
|
|
response = veda_llm.generate_text( |
|
|
prompt=styled_prompt, |
|
|
max_length=int(max_length), |
|
|
temperature=float(temperature), |
|
|
top_p=float(top_p) |
|
|
) |
|
|
|
|
|
|
|
|
timestamp = datetime.now().strftime("%H:%M:%S") |
|
|
veda_response = f"π€ VEDA Response ({timestamp}):\n\n{response}\n\n---\nGenerated by VEDA v{veda_llm.version} | Powered by TensorFlow" |
|
|
|
|
|
return veda_response |
|
|
|
|
|
except Exception as e: |
|
|
return f"π΄ VEDA Generation Error: {str(e)}" |
|
|
|
|
|
|
|
|
veda_interface = gr.Interface( |
|
|
fn=veda_generate, |
|
|
inputs=[ |
|
|
gr.Textbox( |
|
|
label="π― Prompt for VEDA", |
|
|
placeholder="Ask VEDA anything...", |
|
|
lines=3 |
|
|
), |
|
|
gr.Slider( |
|
|
minimum=50, |
|
|
maximum=400, |
|
|
value=150, |
|
|
step=10, |
|
|
label="π Response Length" |
|
|
), |
|
|
gr.Slider( |
|
|
minimum=0.1, |
|
|
maximum=2.0, |
|
|
value=0.8, |
|
|
step=0.1, |
|
|
label="π‘οΈ Temperature" |
|
|
), |
|
|
gr.Slider( |
|
|
minimum=0.0, |
|
|
maximum=1.0, |
|
|
value=0.5, |
|
|
step=0.1, |
|
|
label="π¨ Creativity Level" |
|
|
), |
|
|
gr.Radio( |
|
|
choices=["Creative", "Technical", "Conversational", "Philosophical"], |
|
|
value="Conversational", |
|
|
label="π Response Style" |
|
|
) |
|
|
], |
|
|
outputs=gr.Textbox( |
|
|
label="π€ VEDA's Response", |
|
|
lines=8 |
|
|
), |
|
|
title="π VEDA - TensorFlow LLM", |
|
|
description=""" |
|
|
**VEDA** - A sophisticated Large Language Model built with TensorFlow |
|
|
|
|
|
π§ **Features:** |
|
|
β’ Advanced transformer architecture |
|
|
β’ Custom TensorFlow implementation |
|
|
β’ Multiple generation styles |
|
|
β’ Real-time inference |
|
|
|
|
|
π― **How to use:** Enter your prompt and adjust parameters to see VEDA's capabilities! |
|
|
""", |
|
|
examples=[ |
|
|
["What is the meaning of artificial intelligence?"], |
|
|
["Explain quantum computing in simple terms"], |
|
|
["Write a creative story about a digital consciousness"], |
|
|
["How can machine learning help solve climate change?"] |
|
|
], |
|
|
theme="soft", |
|
|
css=""" |
|
|
.gradio-container { |
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
|
|
} |
|
|
.veda-header { |
|
|
color: #ffffff; |
|
|
text-shadow: 2px 2px 4px rgba(0,0,0,0.3); |
|
|
} |
|
|
""" |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
print("π Launching VEDA on Hugging Face Spaces...") |
|
|
veda_interface.launch() |