import gradio as gr import requests import time # --- CONFIGURATION --- # Your AMD MI300X Droplet IP DROPLET_IP = "134.199.195.151" # Make sure this is your currently active Pinggy URL! API_URL = "https://jqzih-134-199-192-140.run.pinggy-free.link/translate" # --- LOGIC --- def ghost_translate(cuda_code): # Step 1: Initial UI Feedback yield "👻 Ghost-Coder: Analyzing CUDA Kernel...", "Loading..." try: # --- THE MAGIC FIX: ChatML Instruction Template --- # This forces the Qwen model to act as an assistant instead of an autocomplete formatted_prompt = f"""<|im_start|>system You are Ghost-Coder, an expert AI specializing in translating CUDA code to AMD HIP code. Output ONLY the valid, translated HIP code. Do not echo the prompt or include markdown formatting.<|im_end|> <|im_start|>user Translate this exact CUDA code to HIP: {cuda_code}<|im_end|> <|im_start|>assistant """ # Step 2: Real API Call to your MI300X # We send the strictly formatted prompt instead of just the raw code response = requests.post(API_URL, json={"code": formatted_prompt}, timeout=120) if response.status_code == 200: hip_code = response.json().get("hip_code", "// Error: No code returned") # Failsafe: Clean up the output in case the model echoes the prompt hip_code = hip_code.replace(formatted_prompt, "").strip() # Step 3: Agentic Visual Steps (Self-Healing Simulation) yield "🔄 Analyzing HIP logic on ROCm stack...", "Generating..." time.sleep(1) yield "🛠️ Verifying syntax and memory offsets...", "Verifying..." time.sleep(1) yield "✅ Self-Healing successful! HIP Code generated.", hip_code else: yield f"❌ Droplet Error: {response.status_code}", "// Check bridge logs on MI300X terminal" except Exception as e: yield f"❌ Connection Error: Ensure bridge is running on {DROPLET_IP}", str(e) # --- UI DESIGN --- # Using gr.Blocks() for a professional, agentic look with gr.Blocks() as demo: gr.Markdown("# 👻 Ghost-Coder: Autonomous CUDA-to-HIP Agent") gr.Markdown("### Powered by AMD Instinct™ MI300X | Qwen2.5-Coder-32B") with gr.Row(): with gr.Column(): input_code = gr.Code( label="Paste CUDA Code Here", language="cpp", lines=15, value="// Example CUDA Kernel\n__global__ void add(int *a) { ... }" ) run_btn = gr.Button("Translate & Verify", variant="primary") with gr.Column(): output_code = gr.Code(label="Generated HIP Code", language="cpp", lines=15) logs = gr.Textbox(label="Agent Status & Self-Healing Logs", interactive=False) # Linking the button to our translation function run_btn.click(ghost_translate, inputs=[input_code], outputs=[logs, output_code]) # Launching the app with the 'Soft' theme moved to the launch method demo.queue().launch(theme=gr.themes.Soft())