YchKhan commited on
Commit
21974f1
·
verified ·
1 Parent(s): 262f775

Update static/index.html

Browse files
Files changed (1) hide show
  1. static/index.html +48 -3
static/index.html CHANGED
@@ -55,6 +55,12 @@
55
  <h2>Client WebSocket pour API Mock</h2>
56
  <div id="status" class="disconnected">Déconnecté</div>
57
 
 
 
 
 
 
 
58
  <h3>Logs de Communication :</h3>
59
  <ul id="logs">
60
  <li>En attente de connexion...</li>
@@ -65,21 +71,30 @@
65
  const statusDiv = document.getElementById('status');
66
  const logsList = document.getElementById('logs');
67
  let ws;
 
68
  function addLog(message) {
69
  const li = document.createElement('li');
70
  li.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
71
  logsList.appendChild(li);
72
  logsList.scrollTop = logsList.scrollHeight; // Auto-scroll
73
  }
 
74
  // OpenAI API Call for private mode
75
  async function callOpenAI(prompt) {
76
  console.log('prompt:', prompt)
 
 
 
 
 
 
 
77
  try {
78
  const response = await fetch('https://llm.synapse.thalescloud.io/v1/chat/completions', {
79
  method: 'POST',
80
  headers: {
81
  'Content-Type': 'application/json',
82
- 'Authorization': `Bearer sk-WzlemPa1Od-gAFwALPbgDA`
83
  },
84
  body: JSON.stringify({
85
  model: 'gemini-2.5-pro',
@@ -92,6 +107,7 @@
92
  temperature: 0.7
93
  })
94
  });
 
95
  console.log('response:', response)
96
  if (!response.ok) {
97
  throw new Error(`OpenAI API error: ${response.status}`);
@@ -105,29 +121,56 @@
105
  throw error;
106
  }
107
  }
 
108
  function connect() {
109
  // Adapte le protocole (ws ou wss pour le sécurisé)
110
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
111
  const wsUrl = `${protocol}//${window.location.host}/ws`;
112
  ws = new WebSocket(wsUrl);
 
113
  ws.onopen = function() {
114
  statusDiv.textContent = 'Connecté';
115
  statusDiv.className = 'connected';
116
  addLog('Connexion WebSocket établie.');
117
  };
 
 
118
  ws.onmessage = async function(event) {
119
  const messageFromServer = event.data;
120
  console.log(`Message reçu du serveur : "${messageFromServer}"`)
121
  addLog(`Message reçu du serveur : "${messageFromServer}"`);
122
 
123
  try {
 
 
 
 
 
 
 
 
 
124
  const responsePhrase = await callOpenAI(messageFromServer);
125
- addLog(`Envoi de la réponse automatique : "${responsePhrase}"`);
126
- ws.send(responsePhrase);
 
 
 
 
 
 
 
127
  } catch (error) {
 
128
  addLog(`Erreur lors de l'appel API : ${error.message}`);
 
 
 
 
 
129
  }
130
  };
 
131
  ws.onclose = function() {
132
  statusDiv.textContent = 'Déconnecté';
133
  statusDiv.className = 'disconnected';
@@ -135,12 +178,14 @@
135
  // Tente de se reconnecter après 3 secondes
136
  setTimeout(connect, 3000);
137
  };
 
138
  ws.onerror = function(error) {
139
  addLog('Erreur WebSocket.');
140
  console.error('WebSocket Error:', error);
141
  ws.close();
142
  };
143
  }
 
144
  // Lance la connexion au chargement de la page
145
  connect();
146
  </script>
 
55
  <h2>Client WebSocket pour API Mock</h2>
56
  <div id="status" class="disconnected">Déconnecté</div>
57
 
58
+ <div style="margin-bottom: 20px;">
59
+ <label for="apiKey" style="display: block; margin-bottom: 5px; font-weight: bold;">Clé API :</label>
60
+ <input type="password" id="apiKey" placeholder="Entrez votre clé API..." style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; font-size: 14px;">
61
+ <small style="color: #666; font-size: 12px;">La clé est stockée uniquement dans votre navigateur pour cette session.</small>
62
+ </div>
63
+
64
  <h3>Logs de Communication :</h3>
65
  <ul id="logs">
66
  <li>En attente de connexion...</li>
 
71
  const statusDiv = document.getElementById('status');
72
  const logsList = document.getElementById('logs');
73
  let ws;
74
+
75
  function addLog(message) {
76
  const li = document.createElement('li');
77
  li.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
78
  logsList.appendChild(li);
79
  logsList.scrollTop = logsList.scrollHeight; // Auto-scroll
80
  }
81
+
82
  // OpenAI API Call for private mode
83
  async function callOpenAI(prompt) {
84
  console.log('prompt:', prompt)
85
+
86
+ // Récupérer la clé API depuis l'input
87
+ const apiKey = document.getElementById('apiKey').value.trim();
88
+ if (!apiKey) {
89
+ throw new Error('Clé API manquante. Veuillez la saisir dans le champ prévu.');
90
+ }
91
+
92
  try {
93
  const response = await fetch('https://llm.synapse.thalescloud.io/v1/chat/completions', {
94
  method: 'POST',
95
  headers: {
96
  'Content-Type': 'application/json',
97
+ 'Authorization': `Bearer ${apiKey}`
98
  },
99
  body: JSON.stringify({
100
  model: 'gemini-2.5-pro',
 
107
  temperature: 0.7
108
  })
109
  });
110
+
111
  console.log('response:', response)
112
  if (!response.ok) {
113
  throw new Error(`OpenAI API error: ${response.status}`);
 
121
  throw error;
122
  }
123
  }
124
+
125
  function connect() {
126
  // Adapte le protocole (ws ou wss pour le sécurisé)
127
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
128
  const wsUrl = `${protocol}//${window.location.host}/ws`;
129
  ws = new WebSocket(wsUrl);
130
+
131
  ws.onopen = function() {
132
  statusDiv.textContent = 'Connecté';
133
  statusDiv.className = 'connected';
134
  addLog('Connexion WebSocket établie.');
135
  };
136
+
137
+ // CORRECTION PRINCIPALE : Rendre onmessage async et ajouter gestion d'erreur
138
  ws.onmessage = async function(event) {
139
  const messageFromServer = event.data;
140
  console.log(`Message reçu du serveur : "${messageFromServer}"`)
141
  addLog(`Message reçu du serveur : "${messageFromServer}"`);
142
 
143
  try {
144
+ // Vérifier que la connexion est encore ouverte
145
+ if (ws.readyState !== WebSocket.OPEN) {
146
+ addLog('Erreur: WebSocket fermé, impossible de répondre');
147
+ return;
148
+ }
149
+
150
+ addLog('Appel API en cours...');
151
+
152
+ // CORRECTION : Utiliser await pour attendre la réponse
153
  const responsePhrase = await callOpenAI(messageFromServer);
154
+
155
+ // Vérifier à nouveau que la connexion est ouverte
156
+ if (ws.readyState === WebSocket.OPEN) {
157
+ addLog(`Envoi de la réponse automatique : "${responsePhrase}"`);
158
+ ws.send(responsePhrase);
159
+ } else {
160
+ addLog('Erreur: WebSocket fermé pendant l\'appel API');
161
+ }
162
+
163
  } catch (error) {
164
+ console.error('Erreur lors de l\'appel API:', error);
165
  addLog(`Erreur lors de l'appel API : ${error.message}`);
166
+
167
+ // Envoyer un message d'erreur au serveur pour éviter le timeout
168
+ if (ws.readyState === WebSocket.OPEN) {
169
+ ws.send(`Erreur: ${error.message}`);
170
+ }
171
  }
172
  };
173
+
174
  ws.onclose = function() {
175
  statusDiv.textContent = 'Déconnecté';
176
  statusDiv.className = 'disconnected';
 
178
  // Tente de se reconnecter après 3 secondes
179
  setTimeout(connect, 3000);
180
  };
181
+
182
  ws.onerror = function(error) {
183
  addLog('Erreur WebSocket.');
184
  console.error('WebSocket Error:', error);
185
  ws.close();
186
  };
187
  }
188
+
189
  // Lance la connexion au chargement de la page
190
  connect();
191
  </script>