Spaces:
Build error
Build error
| import gradio as gr | |
| import graphviz | |
| import re | |
| from huggingface_hub import InferenceClient | |
| # ====================================================== | |
| # MODE GRATIS TOTAL (TANPA TOKEN / API KEY) | |
| # ====================================================== | |
| # Kita menggunakan model "Zephyr 7B Beta". | |
| # Model ini dikenal sangat ramah untuk akses anonim (tanpa login). | |
| # Cukup panggil namanya, dia akan bekerja. | |
| # ====================================================== | |
| client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") | |
| def engineer_mode(deskripsi_user): | |
| if not deskripsi_user: | |
| return "⚠️ Mohon isi deskripsi mesin dulu.", None | |
| # Prompt Insinyur (Disederhanakan agar Zephyr mudah mengerti) | |
| prompt_system = """ | |
| You are a Senior Industrial Automation Engineer. | |
| Task: Create a technical design based on the user request. | |
| OUTPUT FORMAT (USE INDONESIAN LANGUAGE): | |
| 1. DAFTAR KOMPONEN (BOM): | |
| - List specific real parts (Omron, Siemens, etc). | |
| 2. CARA KERJA (LOGIC): | |
| - Step-by-step operation guide. | |
| - Include Safety (Emergency Stop). | |
| 3. WIRING GUIDE: | |
| - Pin-to-Pin connection guide. | |
| 4. CODE PROGRAM: | |
| - Arduino C++ or PLC Structured Text. | |
| - Add comments. | |
| 5. DIAGRAM BLOCK (GRAPHVIZ DOT): | |
| - ONLY WRITE THE DOT CODE. | |
| - Start with: digraph G { | |
| - End with: } | |
| - Use: rankdir=LR; node [shape=box, style="filled,rounded", fillcolor="#e1f5fe"]; | |
| """ | |
| try: | |
| # Mengirim pesan tanpa token (Anonymous Mode) | |
| messages = [ | |
| {"role": "system", "content": prompt_system}, | |
| {"role": "user", "content": f"Rancang mesin ini: {deskripsi_user}"} | |
| ] | |
| response_text = "" | |
| # Streaming response | |
| for message in client.chat_completion(messages, max_tokens=2048, stream=True): | |
| token = message.choices[0].delta.content | |
| response_text += token | |
| # Ekstraksi Diagram | |
| dot_code = "" | |
| if "digraph G {" in response_text: | |
| s = response_text.find("digraph G {") | |
| e = response_text.rfind("}") + 1 | |
| dot_code = response_text[s:e] | |
| else: | |
| dot_code = 'digraph G { Error -> "Diagram Gagal"; }' | |
| try: | |
| src = graphviz.Source(dot_code) | |
| output_path = src.render("diagram_output", format="png") | |
| return response_text, output_path | |
| except: | |
| return response_text, None | |
| except Exception as e: | |
| return f"⚠️ SERVER SIBUK: Model gratisan sedang ramai. Coba tekan tombol 'Rancang' lagi dalam 5 detik.\nError: {str(e)}", None | |
| # Tampilan UI | |
| with gr.Blocks(theme=gr.themes.Soft()) as app: | |
| gr.Markdown("# 🏭 AI Insinyur (Mode Gratis Tanpa Kunci)") | |
| gr.Markdown("Menggunakan **Zephyr 7B Beta**. Tidak perlu API Key, Token, atau Login.") | |
| with gr.Row(): | |
| inp = gr.Textbox(lines=4, label="Deskripsi Mesin", placeholder="Jelaskan mesin yang mau dibuat...") | |
| btn = gr.Button("🚀 RANCANG (GRATIS)", 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() |