Arif571 commited on
Commit
ce827f3
·
verified ·
1 Parent(s): 2645104

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -71
app.py CHANGED
@@ -1,101 +1,82 @@
1
- import os
2
- import re
3
- import google.generativeai as genai
4
  import gradio as gr
5
  import graphviz
 
 
6
 
7
- # --- SETUP API KEY ---
8
- MY_API_KEY = "AIzaSyAY4KmX9Xf1xZ4bnme7c1mw61QWn4nNLDI"
9
- genai.configure(api_key=MY_API_KEY)
10
-
11
- # --- FUNGSI AUTO-DETECT MODEL (Solusi Error 404) ---
12
- def get_working_model():
13
- # Daftar semua kemungkinan nama model dari Google
14
- daftar_model = [
15
- 'gemini-1.5-flash',
16
- 'gemini-1.5-pro',
17
- 'gemini-1.0-pro',
18
- 'gemini-pro',
19
- 'models/gemini-1.5-flash',
20
- 'models/gemini-pro'
21
- ]
22
-
23
- print("Sedang mencari model yang aktif...")
24
- for nama in daftar_model:
25
- try:
26
- # Test koneksi ringan
27
- model = genai.GenerativeModel(nama)
28
- model.generate_content("test")
29
- print(f"✅ BERHASIL! Menggunakan model: {nama}")
30
- return model
31
- except Exception as e:
32
- print(f"❌ {nama} gagal, mencoba yang lain...")
33
- continue
34
-
35
- return None
36
-
37
- # Inisialisasi Model saat aplikasi nyala
38
- model_aktif = get_working_model()
39
 
40
- # --- LOGIKA INSINYUR ---
41
  def engineer_mode(deskripsi_user):
42
- # Cek lagi jika model belum ketemu
43
- global model_aktif
44
- if model_aktif is None:
45
- model_aktif = get_working_model()
46
- if model_aktif is None:
47
- return "⚠️ SEMUA MODEL GAGAL DIHUBUNGI. Cek API Key atau Server Google sedang down.", None
48
-
49
  if not deskripsi_user:
50
  return "⚠️ Mohon isi deskripsi mesin dulu.", None
51
 
52
- final_prompt = f"""
53
- BERTINDAKLAH SEBAGAI: Senior Industrial Automation Engineer.
54
- TUGAS: Buatkan rancangan teknis detail untuk: "{deskripsi_user}"
 
55
 
56
- OUTPUT WAJIB (BAHASA INDONESIA):
57
- 1. DAFTAR KOMPONEN (Part Nyata & Merk)
58
- 2. CARA KERJA (Step-by-step Logika Safety)
59
- 3. WIRING GUIDE (Panduan Kabel Pin-to-Pin)
60
- 4. PROGRAM CODE (Arduino C++ / PLC)
61
- 5. DIAGRAM BLOK (HANYA KODE GRAPHVIZ DOT)
62
- - Mulai dengan: digraph G {{
63
- - Akhiri dengan: }}
64
  - Gunakan: rankdir=LR; node [shape=box, style=filled, fillcolor=lightblue];
 
65
  """
66
-
67
  try:
68
- response = model_aktif.generate_content(final_prompt)
69
- text = response.text
 
 
 
70
 
71
- # Ekstraksi Diagram
 
 
 
 
 
 
72
  dot_code = ""
73
- if "digraph G {" in text:
74
- s = text.find("digraph G {")
75
- e = text.rfind("}") + 1
76
- dot_code = text[s:e]
 
77
  else:
78
- dot_code = 'digraph G { Error -> "Diagram Gagal"; }'
 
 
 
 
 
 
79
 
80
  # Render Gambar
81
  try:
82
  src = graphviz.Source(dot_code)
83
  output_path = src.render("diagram_output", format="png")
84
- return text, output_path
85
  except:
86
- return text, None
87
 
88
  except Exception as e:
89
- return f"Error saat generate: {str(e)}", None
90
 
91
- # --- TAMPILAN (UI) ---
92
  with gr.Blocks(theme=gr.themes.Soft()) as app:
93
- gr.Markdown("# 🏭 AI Perancang Mesin (Auto-Fix Version)")
94
- gr.Markdown("Versi ini otomatis mencari jalur server Google yang aktif.")
95
 
96
  with gr.Row():
97
- inp = gr.Textbox(lines=4, label="Deskripsi Mesin", placeholder="Jelaskan mesin yang mau dibuat...")
98
- btn = gr.Button("🚀 RANCANG SEKARANG", variant="primary")
99
 
100
  with gr.Row():
101
  out_txt = gr.Markdown(label="Dokumen Teknis")
 
 
 
 
1
  import gradio as gr
2
  import graphviz
3
+ import re
4
+ from huggingface_hub import InferenceClient
5
 
6
+ # --- SETUP MODEL OPEN SOURCE (GRATIS & TANPA KUNCI) ---
7
+ # Kita menggunakan Qwen 2.5 - 72 Miliar Parameter (Sangat Cerdas)
8
+ # Model ini berjalan di server publik Hugging Face
9
+ client = InferenceClient("Qwen/Qwen2.5-72B-Instruct")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
 
11
  def engineer_mode(deskripsi_user):
 
 
 
 
 
 
 
12
  if not deskripsi_user:
13
  return "⚠️ Mohon isi deskripsi mesin dulu.", None
14
 
15
+ # Prompt Insinyur yang sama, tapi dioptimalkan untuk Qwen
16
+ prompt_system = """
17
+ Anda adalah Senior Industrial Automation Engineer (20+ Tahun Pengalaman).
18
+ Tugas Anda adalah merancang sistem mesin pabrik secara presisi, logis, dan aman.
19
 
20
+ OUTPUT WAJIB (DALAM BAHASA INDONESIA):
21
+ 1. DAFTAR KOMPONEN (PART LIST): Sebutkan merk nyata (Omron, Siemens, dll) dan tipe spesifik.
22
+ 2. CARA KERJA: Jelaskan logika urutan dan fitur Safety (Interlock/Emergency).
23
+ 3. WIRING GUIDE: Panduan koneksi kabel (Pin-to-Pin).
24
+ 4. PROGRAM CODE: Berikan kode C++ (Arduino) atau Structured Text (PLC) yang lengkap dengan komentar.
25
+ 5. DIAGRAM BLOK (HANYA KODE GRAPHVIZ DOT):
26
+ - Mulai dengan: digraph G {
27
+ - Akhiri dengan: }
28
  - Gunakan: rankdir=LR; node [shape=box, style=filled, fillcolor=lightblue];
29
+ - Pastikan sintaks valid.
30
  """
31
+
32
  try:
33
+ # Mengirim pesan ke Model Open Source
34
+ messages = [
35
+ {"role": "system", "content": prompt_system},
36
+ {"role": "user", "content": f"Rancang mesin ini: {deskripsi_user}"}
37
+ ]
38
 
39
+ # Streaming respons (agar tidak timeout)
40
+ response_text = ""
41
+ for message in client.chat_completion(messages, max_tokens=2000, stream=True):
42
+ token = message.choices[0].delta.content
43
+ response_text += token
44
+
45
+ # --- PROSES DIAGRAM (VISUALISASI) ---
46
  dot_code = ""
47
+ # Mencari pola kode DOT di dalam teks
48
+ match = re.search(r'digraph G \{.*\}', response_text, re.DOTALL)
49
+
50
+ if match:
51
+ dot_code = match.group(0)
52
  else:
53
+ # Fallback manual jika regex gagal
54
+ if "digraph G {" in response_text:
55
+ s = response_text.find("digraph G {")
56
+ e = response_text.rfind("}") + 1
57
+ dot_code = response_text[s:e]
58
+ else:
59
+ dot_code = 'digraph G { Error -> "Diagram Gagal Dibuat"; }'
60
 
61
  # Render Gambar
62
  try:
63
  src = graphviz.Source(dot_code)
64
  output_path = src.render("diagram_output", format="png")
65
+ return response_text, output_path
66
  except:
67
+ return response_text, None
68
 
69
  except Exception as e:
70
+ return f"⚠️ Terjadi Kepadatan Server (Busy). Coba tekan tombol Rancang lagi dalam beberapa detik.\nError: {str(e)}", None
71
 
72
+ # --- TAMPILAN APLIKASI ---
73
  with gr.Blocks(theme=gr.themes.Soft()) as app:
74
+ gr.Markdown("# 🏭 AI Insinyur (Open Source Qwen 2.5)")
75
+ gr.Markdown("Menggunakan model **Qwen-72B** yang gratis, tanpa API Key, dan presisi tinggi.")
76
 
77
  with gr.Row():
78
+ inp = gr.Textbox(lines=5, label="Deskripsi Mesin", placeholder="Contoh: Alat pres hidrolik otomatis...")
79
+ btn = gr.Button("🚀 RANCANG (GRATIS)", variant="primary")
80
 
81
  with gr.Row():
82
  out_txt = gr.Markdown(label="Dokumen Teknis")