Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
import torch | |
# Initialize model and tokenizer | |
tokenizer = AutoTokenizer.from_pretrained("diabolic6045/ELN-Llama-1B-base") | |
model = AutoModelForCausalLM.from_pretrained("diabolic6045/ELN-Llama-1B-base") | |
def generate_response(message, temperature, max_length): | |
# Tokenize input | |
inputs = tokenizer(message, return_tensors="pt", truncation=True, max_length=512) | |
input_ids = inputs["input_ids"] | |
current_text = message | |
# Generate response token by token | |
for _ in range(max_length - input_ids.shape[1]): | |
with torch.no_grad(): | |
outputs = model(input_ids) | |
next_token_logits = outputs.logits[:, -1, :] | |
# Apply temperature | |
next_token_logits = next_token_logits / temperature | |
# Sample from the distribution | |
probs = torch.softmax(next_token_logits, dim=-1) | |
next_token = torch.multinomial(probs, num_samples=1) | |
# Stop if we generate an EOS token | |
if next_token.item() == tokenizer.eos_token_id: | |
break | |
# Append the new token to input_ids | |
input_ids = torch.cat([input_ids, next_token], dim=-1) | |
# Decode only the new token and add it to current text | |
new_token_text = tokenizer.decode(next_token[0], skip_special_tokens=True) | |
current_text += new_token_text | |
yield current_text | |
# Create the Gradio interface | |
demo = gr.Interface( | |
fn=generate_response, | |
inputs=[ | |
gr.Textbox(label="Input Text", lines=4, placeholder="Enter your text here and the model will complete it..."), | |
gr.Slider(minimum=0.1, maximum=1.0, value=0.7, label="Temperature (higher = more creative, lower = more focused)"), | |
gr.Slider(minimum=50, maximum=500, value=200, step=50, label="Max Length (longer text = more completion)"), | |
], | |
outputs=gr.Textbox(label="Generated Completion", lines=4), | |
title="Llama 3.2 1B Finetuned With Evolution Learning Network (ELN) Text Completion Demo", | |
description= """ | |
> This project implements an Evolution Learning Network (ELN) to fine-tune transformer-based models like LLaMA using a combination of Quantized Low-Rank Adaptation (QLoRA) and Genetic Algorithms (GA). The primary objective is to evolve a population of models across multiple generations to optimize for performance (fitness) and specialization, while maintaining diversity. | |
This is a demo of [`diabolic6045/ELN-Llama-1B-base`](https://huggingface.co/diabolic6045/ELN-Llama-1B-base). | |
""", | |
examples=[ | |
["Once upon a time in a magical forest", 0.7, 50], | |
["The recipe for making the perfect chocolate cake requires", 0.7, 50], | |
["In the year 2150, humanity had finally achieved", 0.7, 50], | |
["The most important principles of effective programming are", 0.8, 50], | |
], | |
article=""" | |
## Tips for better completions: | |
- Start with a clear and detailed prompt | |
- Adjust temperature: Higher for creative writing, lower for factual completion | |
- Adjust max length based on how much text you want to generate | |
""" | |
) | |
if __name__ == "__main__": | |
demo.launch(share=True) |