android-coder / app.py
Arif571's picture
Update app.py
643949c verified
raw
history blame
3.33 kB
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()