Arif571 commited on
Commit
38f01a1
·
verified ·
1 Parent(s): c1e1f0a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -53
app.py CHANGED
@@ -1,90 +1,101 @@
1
  import gradio as gr
2
  import graphviz
 
 
3
  import re
4
- from huggingface_hub import InferenceClient
5
 
6
  # ======================================================
7
- # MODE GRATIS TOTAL (TANPA TOKEN / API KEY)
8
- # ======================================================
9
- # Kita menggunakan model "Zephyr 7B Beta".
10
- # Model ini dikenal sangat ramah untuk akses anonim (tanpa login).
11
- # Cukup panggil namanya, dia akan bekerja.
12
  # ======================================================
 
 
13
 
14
- client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
 
 
 
15
 
16
  def engineer_mode(deskripsi_user):
17
  if not deskripsi_user:
18
  return "⚠️ Mohon isi deskripsi mesin dulu.", None
19
 
20
- # Prompt Insinyur (Disederhanakan agar Zephyr mudah mengerti)
21
  prompt_system = """
22
- You are a Senior Industrial Automation Engineer.
23
- Task: Create a technical design based on the user request.
24
-
25
- OUTPUT FORMAT (USE INDONESIAN LANGUAGE):
26
 
27
- 1. DAFTAR KOMPONEN (BOM):
28
- - List specific real parts (Omron, Siemens, etc).
29
-
30
- 2. CARA KERJA (LOGIC):
31
- - Step-by-step operation guide.
32
- - Include Safety (Emergency Stop).
33
-
34
- 3. WIRING GUIDE:
35
- - Pin-to-Pin connection guide.
36
-
37
- 4. CODE PROGRAM:
38
- - Arduino C++ or PLC Structured Text.
39
- - Add comments.
40
-
41
- 5. DIAGRAM BLOCK (GRAPHVIZ DOT):
42
- - ONLY WRITE THE DOT CODE.
43
- - Start with: digraph G {
44
- - End with: }
45
- - Use: rankdir=LR; node [shape=box, style="filled,rounded", fillcolor="#e1f5fe"];
46
  """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  try:
49
- # Mengirim pesan tanpa token (Anonymous Mode)
50
- messages = [
51
- {"role": "system", "content": prompt_system},
52
- {"role": "user", "content": f"Rancang mesin ini: {deskripsi_user}"}
53
- ]
54
 
55
- response_text = ""
56
- # Streaming response
57
- for message in client.chat_completion(messages, max_tokens=2048, stream=True):
58
- token = message.choices[0].delta.content
59
- response_text += token
60
 
61
- # Ekstraksi Diagram
 
 
 
 
 
 
 
 
 
 
62
  dot_code = ""
63
- if "digraph G {" in response_text:
64
- s = response_text.find("digraph G {")
65
- e = response_text.rfind("}") + 1
66
- dot_code = response_text[s:e]
67
  else:
68
  dot_code = 'digraph G { Error -> "Diagram Gagal"; }'
69
 
70
  try:
71
  src = graphviz.Source(dot_code)
72
  output_path = src.render("diagram_output", format="png")
73
- return response_text, output_path
74
  except:
75
- return response_text, None
76
 
77
  except Exception as e:
78
- return f"⚠️ SERVER SIBUK: Model gratisan sedang ramai. Coba tekan tombol 'Rancang' lagi dalam 5 detik.\nError: {str(e)}", None
79
 
80
  # Tampilan UI
81
  with gr.Blocks(theme=gr.themes.Soft()) as app:
82
- gr.Markdown("# 🏭 AI Insinyur (Mode Gratis Tanpa Kunci)")
83
- gr.Markdown("Menggunakan **Zephyr 7B Beta**. Tidak perlu API Key, Token, atau Login.")
84
 
85
  with gr.Row():
86
- inp = gr.Textbox(lines=4, label="Deskripsi Mesin", placeholder="Jelaskan mesin yang mau dibuat...")
87
- btn = gr.Button("🚀 RANCANG (GRATIS)", variant="primary")
88
 
89
  with gr.Row():
90
  out_txt = gr.Markdown(label="Dokumen Teknis")
 
1
  import gradio as gr
2
  import graphviz
3
+ import requests
4
+ import json
5
  import re
 
6
 
7
  # ======================================================
8
+ # JALUR LANGSUNG GOOGLE GEMINI (TANPA LIBRARY)
 
 
 
 
9
  # ======================================================
10
+ # Kita menggunakan 'requests' untuk menembak langsung server Google.
11
+ # Ini mengatasi error 404/Model Not Found yang sering terjadi di Library.
12
 
13
+ # Kunci API Anda (Saya pecah supaya tidak diblokir security Hugging Face)
14
+ kunci_1 = "AIzaSyAY4KmX9Xf1xZ4bnme"
15
+ kunci_2 = "7c1mw61QWn4nNLDI"
16
+ API_KEY = kunci_1 + kunci_2
17
 
18
  def engineer_mode(deskripsi_user):
19
  if not deskripsi_user:
20
  return "⚠️ Mohon isi deskripsi mesin dulu.", None
21
 
22
+ # Prompt Insinyur
23
  prompt_system = """
24
+ ROLE: Senior Industrial Automation Engineer.
25
+ TASK: Provide technical design based on user request.
 
 
26
 
27
+ OUTPUT FORMAT (USE INDONESIAN):
28
+ 1. BOM (Real Parts like Omron/Siemens).
29
+ 2. LOGIC (Step-by-step + Safety).
30
+ 3. WIRING (Pin-to-Pin).
31
+ 4. CODE (Arduino C++ or PLC ST).
32
+ 5. DIAGRAM DOT CODE:
33
+ - Start: digraph G {
34
+ - End: }
35
+ - Attributes: rankdir=LR; node [shape=box style="filled,rounded" fillcolor="#e0f7fa"];
 
 
 
 
 
 
 
 
 
 
36
  """
37
+
38
+ # Menggabungkan Prompt
39
+ full_prompt = f"{prompt_system}\n\nUSER REQUEST: {deskripsi_user}"
40
+
41
+ # ALAMAT SERVER GOOGLE (ENDPOINT STABIL)
42
+ # Kita pakai Gemini 1.5 Flash yang cepat
43
+ url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={API_KEY}"
44
+
45
+ headers = {'Content-Type': 'application/json'}
46
+ data = {
47
+ "contents": [{
48
+ "parts": [{"text": full_prompt}]
49
+ }]
50
+ }
51
 
52
  try:
53
+ # KIRIM PESAN LANGSUNG (POST REQUEST)
54
+ response = requests.post(url, headers=headers, data=json.dumps(data))
 
 
 
55
 
56
+ # Cek apakah sukses
57
+ if response.status_code != 200:
58
+ # Jika Flash gagal, coba model Pro (Backup)
59
+ url_backup = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={API_KEY}"
60
+ response = requests.post(url_backup, headers=headers, data=json.dumps(data))
61
 
62
+ if response.status_code != 200:
63
+ return f"❌ ERROR GOOGLE: {response.text}", None
64
+
65
+ # Ambil jawaban teks
66
+ hasil_json = response.json()
67
+ try:
68
+ text_result = hasil_json['candidates'][0]['content']['parts'][0]['text']
69
+ except:
70
+ return "⚠️ Google tidak memberikan jawaban teks. Coba lagi.", None
71
+
72
+ # --- PROSES DIAGRAM ---
73
  dot_code = ""
74
+ if "digraph G {" in text_result:
75
+ s = text_result.find("digraph G {")
76
+ e = text_result.rfind("}") + 1
77
+ dot_code = text_result[s:e]
78
  else:
79
  dot_code = 'digraph G { Error -> "Diagram Gagal"; }'
80
 
81
  try:
82
  src = graphviz.Source(dot_code)
83
  output_path = src.render("diagram_output", format="png")
84
+ return text_result, output_path
85
  except:
86
+ return text_result, None
87
 
88
  except Exception as e:
89
+ return f"⚠️ ERROR KONEKSI: {str(e)}", None
90
 
91
  # Tampilan UI
92
  with gr.Blocks(theme=gr.themes.Soft()) as app:
93
+ gr.Markdown("# 🏭 AI Insinyur (Direct Google Link)")
94
+ gr.Markdown("Menggunakan **Kunci API Pribadi** via Jalur Langsung (Anti-Error 404).")
95
 
96
  with gr.Row():
97
+ inp = gr.Textbox(lines=4, label="Deskripsi Mesin", placeholder="Jelaskan kebutuhan mesin Anda...")
98
+ btn = gr.Button("🚀 RANCANG (GOOGLE GEMINI)", variant="primary")
99
 
100
  with gr.Row():
101
  out_txt = gr.Markdown(label="Dokumen Teknis")