Maouu commited on
Commit
f9037f8
·
verified ·
1 Parent(s): a379324

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -0
app.py CHANGED
@@ -10,6 +10,11 @@ from config import cookies, headers, groqapi
10
  from prompts import ChiplingPrompts
11
  from groq import Groq
12
  import json
 
 
 
 
 
13
 
14
  app = FastAPI()
15
 
@@ -22,6 +27,45 @@ app.add_middleware(
22
  allow_headers=["*"],
23
  )
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  # Define request model
26
  class ChatRequest(BaseModel):
27
  message: str
@@ -176,6 +220,7 @@ async def chat(request: ChatRequest):
176
  }
177
 
178
  selected_generator = random.choice([groqgenerate, generate])
 
179
  return StreamingResponse(selected_generator(json_data), media_type='text/event-stream')
180
 
181
 
@@ -184,6 +229,9 @@ async def generate_modules(request: Request):
184
  data = await request.json()
185
  search_query = data.get("searchQuery")
186
 
 
 
 
187
  if not search_query:
188
  return {"error": "searchQuery is required"}
189
 
@@ -229,6 +277,9 @@ async def generate_topics(request: Request):
229
 
230
  if not search_query:
231
  return {"error": "searchQuery is required"}
 
 
 
232
 
233
  system_prompt = ChiplingPrompts.generateTopics(search_query)
234
 
 
10
  from prompts import ChiplingPrompts
11
  from groq import Groq
12
  import json
13
+ from fastapi.responses import HTMLResponse
14
+ from fastapi.templating import Jinja2Templates
15
+ from pathlib import Path
16
+ from collections import Counter, defaultdict
17
+ from utils.logger import log_request
18
 
19
  app = FastAPI()
20
 
 
27
  allow_headers=["*"],
28
  )
29
 
30
+ templates = Jinja2Templates(directory="templates")
31
+ LOG_FILE = Path("logs.json")
32
+
33
+ @app.get("/dashboard", response_class=HTMLResponse)
34
+ async def dashboard(request: Request, endpoint: str = None):
35
+ try:
36
+ with open("logs.json") as f:
37
+ logs = json.load(f)
38
+ except FileNotFoundError:
39
+ logs = []
40
+
41
+ # Filter logs
42
+ if endpoint:
43
+ logs = [log for log in logs if log["endpoint"] == endpoint]
44
+
45
+ # Summary stats
46
+ total_requests = len(logs)
47
+ endpoint_counts = Counter(log["endpoint"] for log in logs)
48
+ query_counts = Counter(log["query"] for log in logs)
49
+
50
+ # Requests per date
51
+ date_counts = defaultdict(int)
52
+ for log in logs:
53
+ date = log["timestamp"].split("T")[0]
54
+ date_counts[date] += 1
55
+
56
+ # Sort logs by timestamp (desc)
57
+ logs_sorted = sorted(logs, key=lambda x: x["timestamp"], reverse=True)
58
+
59
+ return templates.TemplateResponse("dashboard.html", {
60
+ "request": request,
61
+ "logs": logs_sorted[:100], # show top 100
62
+ "total_requests": total_requests,
63
+ "endpoint_counts": dict(endpoint_counts),
64
+ "query_counts": query_counts.most_common(5),
65
+ "date_counts": dict(date_counts),
66
+ "filter_endpoint": endpoint or "",
67
+ })
68
+
69
  # Define request model
70
  class ChatRequest(BaseModel):
71
  message: str
 
220
  }
221
 
222
  selected_generator = random.choice([groqgenerate, generate])
223
+ log_request("/chat", selected_generator.__name__)
224
  return StreamingResponse(selected_generator(json_data), media_type='text/event-stream')
225
 
226
 
 
229
  data = await request.json()
230
  search_query = data.get("searchQuery")
231
 
232
+ log_request("/generate-modules", search_query)
233
+
234
+
235
  if not search_query:
236
  return {"error": "searchQuery is required"}
237
 
 
277
 
278
  if not search_query:
279
  return {"error": "searchQuery is required"}
280
+
281
+ log_request("/generate-topics", search_query)
282
+
283
 
284
  system_prompt = ChiplingPrompts.generateTopics(search_query)
285