Spaces:
Sleeping
Sleeping
# app.py | |
import gradio as gr | |
from groq import Groq | |
# Groq API configuration | |
GROQ_API_KEY = "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" # Replace with your Groq API key | |
client = Groq(api_key=GROQ_API_KEY) | |
# Function to query Groq API | |
def query_groq(prompt): | |
try: | |
chat_completion = client.chat.completions.create( | |
messages=[ | |
{ | |
"role": "user", | |
"content": prompt, | |
} | |
], | |
model="llama-3.3-70b-versatile", # Use the correct model | |
) | |
return chat_completion.choices[0].message.content | |
except Exception as e: | |
return f"Error querying Groq API: {str(e)}" | |
# 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}" | |
# Use Groq API to generate code | |
generated_code = query_groq(prompt) | |
return generated_code | |
except Exception as e: | |
return f"Error generating smart contract: {str(e)}" | |
# Custom CSS for a dark box with green text | |
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 */ | |
} | |
""" | |
# 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.") | |
# Output box | |
output_box = gr.HTML(label="Generated Smart Contract", elem_classes="output-box") | |
# 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() |