Spaces:
Sleeping
Sleeping
# app.py | |
import requests | |
import gradio as gr | |
# Hugging Face Inference API configuration | |
HF_API_KEY = "your_huggingface_api_key" # Replace with your Hugging Face API key | |
HF_API_URL = f"https://api-inference.huggingface.co/models/codeparrot/codeparrot-small" | |
# Groq API configuration | |
GROQ_API_KEY = "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" | |
GROQ_API_URL = "https://api.groq.com/v1/completions" | |
# Function to query Hugging Face Inference API | |
def query_huggingface(prompt): | |
try: | |
headers = { | |
"Authorization": f"Bearer {HF_API_KEY}", | |
"Content-Type": "application/json" | |
} | |
data = { | |
"inputs": prompt, | |
"parameters": { | |
"max_length": 150 # Limit the length of the generated text | |
} | |
} | |
response = requests.post(HF_API_URL, headers=headers, json=data, timeout=30) # Add timeout | |
response.raise_for_status() # Raise an error for bad responses (4xx, 5xx) | |
return response.json()[0]["generated_text"] | |
except Exception as e: | |
return f"Error querying Hugging Face API: {str(e)}" | |
# Function to query Groq API | |
def query_groq(prompt): | |
try: | |
headers = { | |
"Authorization": f"Bearer {GROQ_API_KEY}", | |
"Content-Type": "application/json" | |
} | |
data = { | |
"prompt": prompt, | |
"max_tokens": 150 | |
} | |
response = requests.post(GROQ_API_URL, headers=headers, json=data, timeout=10) # Add timeout | |
response.raise_for_status() # Raise an error for bad responses (4xx, 5xx) | |
return response.json()["choices"][0]["text"] | |
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 Hugging Face Inference API to generate code | |
generated_code = query_huggingface(prompt) | |
# Enhance the code using Groq API | |
enhanced_code = query_groq(generated_code) | |
return enhanced_code | |
except Exception as e: | |
return f"Error generating smart contract: {str(e)}" | |
# Custom CSS for a 3D CGI Figma-like feel | |
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; | |
} | |
""" | |
# 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"] | |
interface = gr.Interface( | |
fn=generate_contract, | |
inputs=[ | |
gr.Dropdown(label="Programming Language", choices=languages, value="Solidity"), # Dropdown menu | |
gr.Textbox(label="Requirements", placeholder="e.g., ERC20 token with minting functionality") | |
], | |
outputs=gr.Textbox(label="Generated Smart Contract"), | |
title="Smart Contract Generator", | |
description="Generate smart contracts using AI.", | |
css=custom_css | |
) | |
# Launch the Gradio app | |
if __name__ == "__main__": | |
interface.launch() |