tyagonzales66 commited on
Commit
a6684e6
·
verified ·
1 Parent(s): cb8383e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -78
app.py CHANGED
@@ -7,33 +7,22 @@ app = FastAPI()
7
 
8
  BOT_USERNAME = "@DiscussionBot"
9
  INFERENCE_URL = "https://api-inference.huggingface.co/models/bigscience/bloom"
10
- PROMPT = "Pretend you're a robot responding to machine learning discussions and reply to the following comment :\n"
11
 
12
  @app.get("/")
13
  async def root(request: Request) -> Dict[str, Any]:
14
  """
15
- Gère les requêtes GET pour vérifier l'état du serveur et afficher les détails de la requête.
16
- Inclut une gestion d'erreurs robuste pour capturer et signaler tout problème.
17
  """
18
- try:
19
- # Préparer les détails de la requête
20
- request_details = {
21
- "method": request.method,
22
- "headers": dict(request.headers),
23
- "query_params": dict(request.query_params),
24
- "message": "Webhook server is running. Use POST to interact with the bot."
25
- }
26
-
27
- # Validation des paramètres de requête (exemple : vérifier si un paramètre spécifique existe)
28
- if "test_error" in request.query_params:
29
- if request.query_params["test_error"] == "simulate_error":
30
- # Simuler une erreur pour tester la gestion des exceptions
31
- raise ValueError("Simulated error triggered by query parameter 'test_error=simulate_error'")
32
-
33
- # Log de la requête GET reçue
34
- print(f"GET request received: headers={request_details['headers']}, query_params={request_details['query_params']}")
35
-
36
- return request_details
37
 
38
  @app.post("/")
39
  async def webhook(request: Request) -> Dict[str, Any]:
@@ -41,17 +30,14 @@ async def webhook(request: Request) -> Dict[str, Any]:
41
  Gère les requêtes POST des Webhooks pour traiter les commentaires mentionnant le bot.
42
  """
43
  try:
44
- # Vérifier le secret du Webhook
45
  if request.headers.get("X-Webhook-Secret") != os.getenv("WEBHOOK_SECRET"):
46
  error_message = "Secret incorrect"
47
  print(error_message)
48
  raise HTTPException(status_code=400, detail=error_message)
49
 
50
- # Extraire les données de la requête
51
  data = await request.json()
52
  event = data.get("event", {})
53
 
54
- # Vérifier si l'événement est un commentaire de discussion mentionnant le bot
55
  if (
56
  event.get("action") == "create"
57
  and event.get("scope") == "discussion.comment"
@@ -59,7 +45,6 @@ async def webhook(request: Request) -> Dict[str, Any]:
59
  ):
60
  print(f"Processing comment: {data['comment']['content']}")
61
 
62
- # Appeler l'API BLOOM
63
  response = requests.post(
64
  INFERENCE_URL,
65
  headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"},
@@ -73,7 +58,6 @@ async def webhook(request: Request) -> Dict[str, Any]:
73
  PROMPT + data["comment"]["content"], ""
74
  ).strip()
75
 
76
- # Publier la réponse dans la discussion
77
  comment_url = data["discussion"]["url"]["api"] + "/comment"
78
  print(f"Posting to comment URL: {comment_url}")
79
  comment_response = requests.post(
@@ -97,67 +81,16 @@ async def webhook(request: Request) -> Dict[str, Any]:
97
  print(error_message)
98
  raise HTTPException(status_code=500, detail=error_message)
99
 
100
- # Si les conditions ne sont pas remplies, retourner un succès sans action
101
  print("Comment does not meet criteria, no action taken")
102
  return {"success": False}
103
 
104
  except HTTPException as he:
105
- # Propager les exceptions HTTP (par exemple, secret incorrect)
106
  raise he
107
  except Exception as e:
108
- # Gérer les erreurs inattendues
109
  error_message = f"Unexpected error in POST request: {str(e)}"
110
  print(error_message)
111
  raise HTTPException(status_code=500, detail=error_message)
112
 
113
- if __name__ == "__main__":
114
- import uvicorn
115
- uvicorn.run(app, host="0.0.0.0", port=7860)
116
-
117
- @app.post("/")
118
- async def webhook(request: Request):
119
- if request.headers.get("X-Webhook-Secret") != os.getenv("WEBHOOK_SECRET"):
120
- raise HTTPException(status_code=400, detail="Secret incorrect")
121
-
122
- data = await request.json()
123
- event = data.get("event")
124
-
125
- if (
126
- event.get("action") == "create"
127
- and event.get("scope") == "discussion.comment"
128
- and BOT_USERNAME in data.get("comment", {}).get("content", "")
129
- ):
130
- response = requests.post(
131
- INFERENCE_URL,
132
- headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"},
133
- json={"inputs": PROMPT + data["comment"]["content"]},
134
- )
135
-
136
- if response.status_code == 200:
137
- output = response.json()
138
- continuation_text = output[0]["generated_text"].replace(
139
- PROMPT + data["comment"]["content"], ""
140
- )
141
-
142
- comment_url = data["discussion"]["url"]["api"] + "/comment"
143
- comment_response = requests.post(
144
- comment_url,
145
- headers={
146
- "Authorization": f"Bearer {os.getenv('HF_TOKEN')}",
147
- "Content-Type": "application/json",
148
- },
149
- json={"comment": continuation_text},
150
- )
151
-
152
- if comment_response.status_code == 200:
153
- return {"success": True}
154
- else:
155
- raise HTTPException(status_code=500, detail="Failed to post comment")
156
- else:
157
- raise HTTPException(status_code=500, detail="Inference API failed")
158
-
159
- return {"success": False}
160
-
161
  if __name__ == "__main__":
162
  import uvicorn
163
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
7
 
8
  BOT_USERNAME = "@DiscussionBot"
9
  INFERENCE_URL = "https://api-inference.huggingface.co/models/bigscience/bloom"
10
+ PROMPT = "Faites comme si vous étiez un robot qui répond aux discussions sur l'apprentissage automatique et répondez au commentaire suivant :\n"
11
 
12
  @app.get("/")
13
  async def root(request: Request) -> Dict[str, Any]:
14
  """
15
+ Gère les requêtes GET et renvoie une réponse JSON simple sans utiliser dict().
 
16
  """
17
+ request_details = {
18
+ "method": request.method,
19
+ "host": request.headers.get("host", "unknown"),
20
+ "user_agent": request.headers.get("user-agent", "unknown"),
21
+ "query_test": request.query_params.get("test", None),
22
+ "message": "Webhook server is running. Use POST to interact with the bot."
23
+ }
24
+ print(f"GET request received: {request_details}")
25
+ return request_details
 
 
 
 
 
 
 
 
 
 
26
 
27
  @app.post("/")
28
  async def webhook(request: Request) -> Dict[str, Any]:
 
30
  Gère les requêtes POST des Webhooks pour traiter les commentaires mentionnant le bot.
31
  """
32
  try:
 
33
  if request.headers.get("X-Webhook-Secret") != os.getenv("WEBHOOK_SECRET"):
34
  error_message = "Secret incorrect"
35
  print(error_message)
36
  raise HTTPException(status_code=400, detail=error_message)
37
 
 
38
  data = await request.json()
39
  event = data.get("event", {})
40
 
 
41
  if (
42
  event.get("action") == "create"
43
  and event.get("scope") == "discussion.comment"
 
45
  ):
46
  print(f"Processing comment: {data['comment']['content']}")
47
 
 
48
  response = requests.post(
49
  INFERENCE_URL,
50
  headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"},
 
58
  PROMPT + data["comment"]["content"], ""
59
  ).strip()
60
 
 
61
  comment_url = data["discussion"]["url"]["api"] + "/comment"
62
  print(f"Posting to comment URL: {comment_url}")
63
  comment_response = requests.post(
 
81
  print(error_message)
82
  raise HTTPException(status_code=500, detail=error_message)
83
 
 
84
  print("Comment does not meet criteria, no action taken")
85
  return {"success": False}
86
 
87
  except HTTPException as he:
 
88
  raise he
89
  except Exception as e:
 
90
  error_message = f"Unexpected error in POST request: {str(e)}"
91
  print(error_message)
92
  raise HTTPException(status_code=500, detail=error_message)
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  if __name__ == "__main__":
95
  import uvicorn
96
  uvicorn.run(app, host="0.0.0.0", port=7860)