Seunggg commited on
Commit
c80b246
·
verified ·
1 Parent(s): abc9568

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -23
app.py CHANGED
@@ -42,44 +42,67 @@ pipe = pipeline(
42
 
43
  from ask_api import ask_with_sensor # 引入调用函数
44
 
45
- def respond(user_input):
46
- if not user_input.strip():
47
- return "暂无传感器数据", "请输入植物相关的问题 😊"
48
-
49
- # 获取 Render 实时传感器数据
50
  try:
51
  sensor_response = requests.get("https://arduino-realtime.onrender.com/api/data", timeout=5)
52
  sensor_data = sensor_response.json().get("sensorData", None)
53
  sensor_display = json.dumps(sensor_data, ensure_ascii=False, indent=2) if sensor_data else "暂无传感器数据"
54
  except Exception as e:
55
  sensor_display = "⚠️ 获取失败:" + str(e)
56
- sensor_data = None
57
 
58
- # 构建提示词
59
- prompt = f"用户提问:{user_input}\n"
60
- if sensor_data:
61
- prompt += f"当前传感器数据:{json.dumps(sensor_data, ensure_ascii=False)}\n"
62
- prompt += "请用更人性化的语言生成建议,并推荐相关植物文献或资料。\n回答:"
 
 
63
 
64
- # 模型生成
65
  try:
 
 
 
 
 
 
66
  result = pipe(prompt)
67
- answer = result[0]["generated_text"]
 
68
  except Exception as e:
69
  answer = f"生成建议时出错:{str(e)}"
70
 
71
  return sensor_display, answer
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  # Gradio 界面
74
- gr.Interface(
75
- fn=respond,
76
- inputs=gr.Textbox(lines=4, label="植物问题"),
77
- outputs=[
78
- gr.Textbox(label="🧪 当前传感器数据", lines=6, interactive=False),
79
- gr.Textbox(label="🤖 回答建议", lines=8, interactive=False)
80
- ],
81
- title="🌱 植物助手 - 实时联动版",
82
- description="结合 Render 实时传感器数据 + 本地 LoRA 模型,生成更合理建议。"
83
- ).launch()
 
 
 
84
 
85
 
 
42
 
43
  from ask_api import ask_with_sensor # 引入调用函数
44
 
45
+ def get_sensor_data():
 
 
 
 
46
  try:
47
  sensor_response = requests.get("https://arduino-realtime.onrender.com/api/data", timeout=5)
48
  sensor_data = sensor_response.json().get("sensorData", None)
49
  sensor_display = json.dumps(sensor_data, ensure_ascii=False, indent=2) if sensor_data else "暂无传感器数据"
50
  except Exception as e:
51
  sensor_display = "⚠️ 获取失败:" + str(e)
52
+ return sensor_display
53
 
54
+ def show_sensor_data(_=None):
55
+ return get_sensor_data()
56
+
57
+ def respond(user_input):
58
+ sensor_display = get_sensor_data()
59
+ if not user_input.strip():
60
+ return sensor_display, "请输入植物相关的问题 😊"
61
 
62
+ prompt = f"用户提问:{user_input}\n"
63
  try:
64
+ sensor_response = requests.get("https://arduino-realtime.onrender.com/api/data", timeout=5)
65
+ sensor_data = sensor_response.json().get("sensorData", None)
66
+ if sensor_data:
67
+ prompt += f"当前传感器数据:{json.dumps(sensor_data, ensure_ascii=False)}\n"
68
+ prompt += "请用更人性化的语言生成建议,并推荐相关植物文献或资料。\n回答:"
69
+
70
  result = pipe(prompt)
71
+ full_output = result[0]["generated_text"]
72
+ answer = full_output.replace(prompt, "").strip()
73
  except Exception as e:
74
  answer = f"生成建议时出错:{str(e)}"
75
 
76
  return sensor_display, answer
77
 
78
+ # 构建提示词
79
+ prompt = f"用户提问:{user_input}\n"
80
+ if sensor_data:
81
+ prompt += f"当前传感器数据:{json.dumps(sensor_data, ensure_ascii=False)}\n"
82
+ prompt += "请用更人性化的语言生成建议,并推荐相关植物文献或资料。\n回答:"
83
+
84
+ # 模型生成
85
+ try:
86
+ result = pipe(prompt)
87
+ full_output = result[0]["generated_text"]
88
+ # 删除重复的提问部分,只保留回答段
89
+ answer = full_output.replace(prompt, "").strip()
90
+ except Exception as e:
91
+ answer = f"生成建议时出错:{str(e)}"
92
+
93
  # Gradio 界面
94
+ with gr.Blocks() as demo:
95
+ with gr.Row():
96
+ sensor_box = gr.Textbox(label="🧪 当前传感器数据", lines=6, interactive=False)
97
+ question_box = gr.Textbox(label="🌿 植物问题", lines=4)
98
+ answer_box = gr.Textbox(label="🤖 回答建议", lines=8, interactive=False)
99
+
100
+ # 实时轮询,每 2 秒自动更新
101
+ sensor_box.change(fn=show_sensor_data, inputs=None, outputs=sensor_box).every(2)
102
+
103
+ # 用户提问后,更新传感器 + 回答
104
+ question_box.submit(fn=respond, inputs=question_box, outputs=[sensor_box, answer_box])
105
+
106
+ demo.launch()
107
 
108