# 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()