abdullahalioo commited on
Commit
95a5f88
·
verified ·
1 Parent(s): 8a645dd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -143
app.py CHANGED
@@ -1,153 +1,34 @@
1
- import gradio as gr
 
2
  from datetime import datetime
3
  import pytz
4
- import json
5
 
6
  # Pakistan timezone
7
  pakistan_tz = pytz.timezone("Asia/Karachi")
8
 
9
- def chatbot(message):
10
- # Handle JSON input from ESP8266
11
- try:
12
- # Parse the JSON input
13
- data = json.loads(message)
14
-
15
- # Extract the actual message from the "data" array
16
- if "data" in data and isinstance(data["data"], list) and len(data["data"]) > 0:
17
- user_message = data["data"][0].lower()
18
- else:
19
- return json.dumps({"data": ["I can only tell you the current time in Pakistan. Try asking: 'What is the time?'"]})
20
- except:
21
- # If it's not JSON, treat it as a regular string (for direct Gradio interface testing)
22
- user_message = message.lower()
23
-
24
- # Process the message
25
- if "time" in user_message:
26
- now_pk = datetime.now(pakistan_tz)
27
- time_str = f"{now_pk.strftime('%I:%M %p')}"
28
- # Return in the expected JSON format
29
- return json.dumps({"data": [time_str]})
30
- else:
31
- return json.dumps({"data": ["I can only tell you the current time in Pakistan. Try asking: 'What is the time?'"]})
32
-
33
- # Create a more comprehensive interface
34
- with gr.Blocks(title="Pakistan Time Bot", theme=gr.themes.Soft()) as demo:
35
- gr.Markdown("# 🇵🇰 Pakistan Time Bot")
36
- gr.Markdown("This bot tells you the current time in Pakistan. It's designed to work with both direct queries and ESP8266 devices.")
37
-
38
- with gr.Tab("Chat Interface"):
39
- gr.Markdown("### Talk to the Time Bot")
40
- with gr.Row():
41
- with gr.Column():
42
- input_text = gr.Textbox(label="Your Message", placeholder="Ask me about the time in Pakistan...")
43
- text_button = gr.Button("Get Time")
44
- with gr.Column():
45
- output_text = gr.Textbox(label="Bot Response", interactive=False)
46
-
47
- examples = gr.Examples(
48
- examples=["What's the time?", "Time please", "Current time in Pakistan"],
49
- inputs=input_text
50
- )
51
-
52
- with gr.Tab("ESP8266 Integration"):
53
- gr.Markdown("### ESP8266 Integration")
54
- gr.Markdown("""
55
- This bot is designed to work with ESP8266 microcontrollers. Here's how to set it up:
56
-
57
- 1. Use the code below in your Arduino IDE
58
- 2. Replace `YOUR_WIFI_SSID` and `YOUR_WIFI_PASSWORD` with your WiFi credentials
59
- 3. Update the `serverName` to point to your deployed Hugging Face Space
60
- 4. Upload the code to your ESP8266
61
- """)
62
-
63
- esp_code = """
64
- #include <ESP8266WiFi.h>
65
- #include <ESP8266HTTPClient.h>
66
-
67
- const char* ssid = "YOUR_WIFI_SSID";
68
- const char* password = "YOUR_WIFI_PASSWORD";
69
-
70
- // Hugging Face Space API endpoint
71
- String serverName = "https://your-username-time-bot.hf.space/run/predict";
72
-
73
- WiFiClientSecure client; // use WiFiClientSecure for HTTPS
74
-
75
- void setup() {
76
- Serial.begin(115200);
77
- WiFi.begin(ssid, password);
78
-
79
- Serial.print("Connecting to WiFi...");
80
- while (WiFi.status() != WL_CONNECTED) {
81
- delay(500);
82
- Serial.print(".");
83
- }
84
- Serial.println(" Connected!");
85
 
86
- // For HTTPS: skip certificate verification
87
- client.setInsecure();
88
- }
89
 
90
- void loop() {
91
- if (WiFi.status() == WL_CONNECTED) {
92
- HTTPClient http;
93
 
94
- http.begin(client, serverName);
95
- http.addHeader("Content-Type", "application/json");
96
-
97
- // Sending request
98
- String jsonData = "{\\"data\\":[\\"time\\"]}";
99
- int httpResponseCode = http.POST(jsonData);
100
-
101
- if (httpResponseCode > 0) {
102
- String response = http.getString();
103
- Serial.println("Response:");
104
- Serial.println(response);
105
- } else {
106
- Serial.print("Error code: ");
107
- Serial.println(httpResponseCode);
108
- }
109
-
110
- http.end();
111
- } else {
112
- Serial.println("WiFi Disconnected");
113
- }
114
-
115
- delay(10000); // request every 10 seconds
116
- }
117
- """
118
-
119
- gr.Code(value=esp_code, language="cpp", label="ESP8266 Code")
120
-
121
- gr.Markdown("### Test ESP8266 Request")
122
- gr.Markdown("Click the button below to simulate the JSON request that an ESP8266 would send:")
123
- test_button = gr.Button("Test ESP8266 Request")
124
- test_output = gr.Textbox(label="JSON Response", interactive=False)
125
-
126
- with gr.Tab("API Info"):
127
- gr.Markdown("### API Information")
128
- gr.Markdown("""
129
- The bot accepts two types of requests:
130
-
131
- 1. **Direct text input**: Simply send a text message containing the word "time"
132
- 2. **JSON API** (for ESP8266): Send a JSON object in the format `{"data": ["time"]}`
133
-
134
- The response will always be a JSON object with the format:
135
- ```json
136
- {"data": ["08:45 PM"]}
137
- ```
138
- """)
139
-
140
- gr.Markdown("### Direct API Testing")
141
- with gr.Row():
142
- api_input = gr.Textbox(value='{"data": ["time"]}', label="JSON Input")
143
- api_button = gr.Button("Send API Request")
144
- api_output = gr.Textbox(label="API Response")
145
-
146
- # Set up event handlers
147
- text_button.click(chatbot, inputs=input_text, outputs=output_text)
148
- input_text.submit(chatbot, inputs=input_text, outputs=output_text)
149
- test_button.click(chatbot, inputs=gr.Textbox(value='{"data": ["time"]}'), outputs=test_output)
150
- api_button.click(chatbot, inputs=api_input, outputs=api_output)
151
 
152
- if __name__ == "__main__":
153
- demo.launch()
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
  from datetime import datetime
4
  import pytz
 
5
 
6
  # Pakistan timezone
7
  pakistan_tz = pytz.timezone("Asia/Karachi")
8
 
9
+ # FastAPI app
10
+ app = FastAPI(title="Pakistan Time Bot API")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ # Schema for ESP8266 request
13
+ class RequestData(BaseModel):
14
+ data: list[str]
15
 
16
+ @app.get("/")
17
+ def home():
18
+ return {"message": "🇵🇰 Pakistan Time Bot API is running!"}
19
 
20
+ @app.post("/run/predict")
21
+ async def get_time(request: RequestData):
22
+ # Validate and extract message
23
+ if request.data and isinstance(request.data, list):
24
+ user_message = request.data[0].lower()
25
+ else:
26
+ return {"data": ["Invalid input. Use: {\"data\": [\"time\"]}"]}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
+ # Handle time request
29
+ if "time" in user_message:
30
+ now_pk = datetime.now(pakistan_tz)
31
+ time_str = now_pk.strftime("%I:%M %p")
32
+ return {"data": [time_str]}
33
+ else:
34
+ return {"data": ["I can only tell you the current time in Pakistan. Try asking: 'What is the time?'"]}