Spaces:
Build error
Build error
| import os | |
| import re | |
| import google.generativeai as genai | |
| import gradio as gr | |
| import graphviz | |
| # --- SETUP API KEY --- | |
| # Menggunakan API Key Anda | |
| MY_API_KEY = "AIzaSyAY4KmX9Xf1xZ4bnme7c1mw61QWn4nNLDI" | |
| # --- PERBAIKAN DI SINI --- | |
| # Kita gunakan 'gemini-pro' karena lebih stabil dan pasti ada. | |
| try: | |
| genai.configure(api_key=MY_API_KEY) | |
| model = genai.GenerativeModel('gemini-pro') | |
| except Exception as e: | |
| print(f"Error Setup: {e}") | |
| # --- LOGIKA INSINYUR --- | |
| def engineer_mode(deskripsi_user): | |
| if not deskripsi_user: | |
| return "⚠️ Mohon isi deskripsi mesin dulu.", None | |
| final_prompt = f""" | |
| BERTINDAKLAH SEBAGAI: Senior Industrial Automation Engineer. | |
| TUGAS: Buatkan rancangan teknis detail untuk: "{deskripsi_user}" | |
| OUTPUT WAJIB (BAHASA INDONESIA): | |
| 1. DAFTAR KOMPONEN (Part Nyata & Merk) | |
| 2. CARA KERJA (Step-by-step Logika Safety) | |
| 3. WIRING GUIDE (Panduan Kabel Pin-to-Pin) | |
| 4. PROGRAM CODE (Arduino C++ / PLC) | |
| 5. DIAGRAM BLOK (HANYA KODE GRAPHVIZ DOT) | |
| - Mulai dengan: digraph G {{ | |
| - Akhiri dengan: }} | |
| - Gunakan: rankdir=LR; node [shape=box, style=filled, fillcolor=lightblue]; | |
| """ | |
| try: | |
| # Generate konten | |
| response = model.generate_content(final_prompt) | |
| text = response.text | |
| # Ekstraksi Diagram | |
| dot_code = "" | |
| # Mencari pola digraph G { ... } | |
| if "digraph G {" in text: | |
| s = text.find("digraph G {") | |
| e = text.rfind("}") + 1 | |
| dot_code = text[s:e] | |
| else: | |
| dot_code = 'digraph G { Error -> "Diagram Gagal"; }' | |
| # Render Gambar | |
| try: | |
| src = graphviz.Source(dot_code) | |
| output_path = src.render("diagram_output", format="png") | |
| return text, output_path | |
| except: | |
| return text, None | |
| except Exception as e: | |
| return f"Error AI: {str(e)}", None | |
| # --- TAMPILAN (UI) --- | |
| with gr.Blocks(theme=gr.themes.Soft()) as app: | |
| gr.Markdown("# 🏭 AI Perancang Mesin (Versi Stabil)") | |
| with gr.Row(): | |
| inp = gr.Textbox(lines=4, label="Deskripsi Mesin", placeholder="Jelaskan mesin yang mau dibuat...") | |
| btn = gr.Button("🚀 RANCANG (GEMINI PRO)", variant="primary") | |
| with gr.Row(): | |
| out_txt = gr.Markdown(label="Dokumen Teknis") | |
| out_img = gr.Image(label="Diagram Sistem") | |
| btn.click(engineer_mode, inputs=inp, outputs=[out_txt, out_img]) | |
| app.launch() |