ziixh's picture
Update app.py
84f793e verified
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# Load the CodeParrot model and tokenizer
model_name = "codeparrot/codeparrot-small" # Replace with your desired model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Function to generate smart contract code
def generate_smart_contract(language, requirements):
try:
# Create a prompt for the model
prompt = f"Generate a {language} smart contract with the following requirements: {requirements}"
# Tokenize the input
inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")
# Generate code
outputs = model.generate(**inputs, max_length=500) # Adjust max_length as needed
generated_code = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_code
except Exception as e:
return f"Error generating smart contract: {str(e)}"
# Custom CSS for a dark box with green text and copy button
custom_css = """
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
color: #fff;
perspective: 1000px;
overflow: hidden;
}
.gradio-container {
background: rgba(255, 255, 255, 0.1);
border-radius: 15px;
padding: 20px;
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.3);
transform-style: preserve-3d;
transform: rotateY(0deg) rotateX(0deg);
transition: transform 0.5s ease;
}
.gradio-container:hover {
transform: rotateY(10deg) rotateX(10deg);
}
.gradio-input, .gradio-output {
background: rgba(255, 255, 255, 0.2);
border: none;
border-radius: 10px;
padding: 10px;
color: #fff;
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.gradio-input:focus, .gradio-output:focus {
background: rgba(255, 255, 255, 0.3);
outline: none;
transform: translateZ(20px);
}
.gradio-button {
background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
border: none;
border-radius: 10px;
color: #fff;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
transition: background 0.3s ease, transform 0.3s ease;
transform-style: preserve-3d;
}
.gradio-button:hover {
background: linear-gradient(135deg, #2575fc 0%, #6a11cb 100%);
transform: translateZ(10px);
}
h1 {
text-align: center;
font-size: 2.5em;
margin-bottom: 20px;
color: white; /* White title color */
transform-style: preserve-3d;
transform: translateZ(30px);
}
@keyframes float {
0% {
transform: translateY(0) translateZ(0);
}
50% {
transform: translateY(-10px) translateZ(10px);
}
100% {
transform: translateY(0) translateZ(0);
}
}
.gradio-container {
animation: float 4s ease-in-out infinite;
}
/* Dark box with green text for output */
.output-box {
background: #1e1e1e; /* Dark background */
padding: 15px;
border-radius: 10px;
color: #00ff00; /* Green text */
font-family: 'Courier New', Courier, monospace;
font-size: 14px;
line-height: 1.5;
overflow-x: auto;
white-space: pre-wrap; /* Preserve formatting */
position: relative;
}
/* Copy button */
.copy-button {
position: absolute;
top: 10px;
right: 10px;
background: #2575fc;
border: none;
border-radius: 5px;
color: #fff;
padding: 5px 10px;
font-size: 12px;
cursor: pointer;
transition: background 0.3s ease;
}
.copy-button:hover {
background: #6a11cb;
}
"""
# JavaScript for the copy button
copy_js = """
<script>
function copyCode() {
const codeElement = document.querySelector('.output-box pre');
const codeText = codeElement.innerText;
navigator.clipboard.writeText(codeText).then(() => {
alert('Code copied to clipboard!');
});
}
</script>
"""
# Gradio interface for the app
def generate_contract(language, requirements):
return generate_smart_contract(language, requirements)
# Dropdown options for programming languages
languages = ["Solidity", "Vyper", "Rust", "JavaScript", "Python"]
# Create a custom layout
with gr.Blocks(css=custom_css) as demo:
gr.Markdown("# Smart Contract Generator")
gr.Markdown("Generate smart contracts using AI.")
# Inject JavaScript
gr.HTML(copy_js)
# Output box with copy button
with gr.Column():
output_box = gr.HTML(label="Generated Smart Contract", elem_classes="output-box")
copy_button = gr.Button("Copy Code", elem_classes="copy-button")
# Input row
with gr.Row(equal_height=True, variant="panel"):
language_dropdown = gr.Dropdown(label="Programming Language", choices=languages, value="Solidity")
requirements_input = gr.Textbox(label="Requirements", placeholder="e.g., ERC20 token with minting functionality")
submit_button = gr.Button("Generate", variant="primary")
# Link the function to the inputs and output
submit_button.click(
generate_contract,
inputs=[language_dropdown, requirements_input],
outputs=output_box
)
# Launch the Gradio app
demo.launch()