JTh34 commited on
Commit
6e2a361
·
1 Parent(s): cb66cc9

🚀 DĂ©ploiement automatique RAG CHU 2025-06-30 23:18:48

Browse files
frontend/src/components/ChatInterface.js CHANGED
@@ -58,25 +58,19 @@ N'hĂ©sitez pas Ă  ĂȘtre prĂ©cis dans vos questions.`,
58
  setCurrentMessage('');
59
  setIsLoading(true);
60
 
61
- // ID pour le message assistant (créé seulement quand on a du contenu)
62
  const assistantMessageId = Date.now();
63
- let assistantMessageCreated = false;
64
 
65
  // Timeout de sĂ©curitĂ© pour Ă©viter les blocages
66
  const timeoutId = setTimeout(() => {
67
  console.warn('Timeout: RĂ©initialisation forcĂ©e de isLoading');
68
  setIsLoading(false);
69
- if (assistantMessageCreated) {
70
- setMessages(prev => prev.map(msg =>
71
- msg.id === assistantMessageId
72
- ? { ...msg, content: msg.content || "Timeout - Veuillez réessayer", isStreaming: false }
73
- : msg
74
- ));
75
- }
76
  }, 30000); // 30 secondes de timeout
77
 
78
  try {
79
- const response = await fetch('/api/chat/stream', {
 
 
80
  method: 'POST',
81
  headers: {
82
  'Content-Type': 'application/json',
@@ -100,128 +94,32 @@ N'hĂ©sitez pas Ă  ĂȘtre prĂ©cis dans vos questions.`,
100
  throw new Error(errorMessage);
101
  }
102
 
103
- const reader = response.body.getReader();
104
- const decoder = new TextDecoder();
105
- let buffer = '';
106
- let streamEnded = false;
107
 
108
- try {
109
- while (true) {
110
- const { done, value } = await reader.read();
111
- if (done) {
112
- streamEnded = true;
113
- break;
114
- }
115
-
116
- buffer += decoder.decode(value, { stream: true });
117
- const lines = buffer.split('\n');
118
- buffer = lines.pop();
119
-
120
- for (const line of lines) {
121
- if (line.startsWith('data: ')) {
122
- try {
123
- const data = JSON.parse(line.slice(6));
124
-
125
- switch (data.type) {
126
- case 'start':
127
- console.log('🚀 DĂ©but streaming:', data.message);
128
- break;
129
-
130
- case 'chunk':
131
- // Créer le message assistant au premier chunk seulement
132
- if (!assistantMessageCreated && data.content) {
133
- const initialAssistantMessage = {
134
- id: assistantMessageId,
135
- type: 'assistant',
136
- content: data.content,
137
- timestamp: new Date(),
138
- isStreaming: true
139
- };
140
- setMessages(prev => [...prev, initialAssistantMessage]);
141
- assistantMessageCreated = true;
142
- } else if (assistantMessageCreated) {
143
- // Mettre Ă  jour le message assistant avec le nouveau chunk
144
- setMessages(prev => prev.map(msg =>
145
- msg.id === assistantMessageId
146
- ? { ...msg, content: msg.content + data.content }
147
- : msg
148
- ));
149
- }
150
- break;
151
-
152
- case 'end':
153
- console.log('✅ Fin streaming:', data.message);
154
- streamEnded = true;
155
- if (assistantMessageCreated) {
156
- // Marquer le message comme terminé
157
- setMessages(prev => prev.map(msg =>
158
- msg.id === assistantMessageId
159
- ? { ...msg, isStreaming: false }
160
- : msg
161
- ));
162
- }
163
- break;
164
-
165
- case 'error':
166
- console.error('❌ Erreur streaming:', data.message);
167
- streamEnded = true;
168
- if (!assistantMessageCreated) {
169
- // Créer un message d'erreur
170
- const errorMessage = {
171
- id: assistantMessageId,
172
- type: 'assistant',
173
- content: `Erreur: ${data.message}`,
174
- timestamp: new Date(),
175
- isStreaming: false
176
- };
177
- setMessages(prev => [...prev, errorMessage]);
178
- assistantMessageCreated = true;
179
- } else {
180
- setMessages(prev => prev.map(msg =>
181
- msg.id === assistantMessageId
182
- ? { ...msg, content: `Erreur: ${data.message}`, isStreaming: false }
183
- : msg
184
- ));
185
- }
186
- break;
187
- }
188
- } catch (e) {
189
- console.error('Erreur parsing JSON:', e);
190
- }
191
- }
192
- }
193
- }
194
- } finally {
195
- // S'assurer que le stream est marqué comme terminé
196
- if (!streamEnded && assistantMessageCreated) {
197
- setMessages(prev => prev.map(msg =>
198
- msg.id === assistantMessageId
199
- ? { ...msg, isStreaming: false }
200
- : msg
201
- ));
202
- }
203
- }
204
 
205
  } catch (error) {
206
  console.error('Erreur chat:', error);
207
- if (!assistantMessageCreated) {
208
- // Créer un message d'erreur
209
- const errorMessage = {
210
- id: assistantMessageId,
211
- type: 'assistant',
212
- content: `Erreur : ${error.message}`,
213
- timestamp: new Date(),
214
- isStreaming: false
215
- };
216
- setMessages(prev => [...prev, errorMessage]);
217
- } else {
218
- // Remplacer le message assistant par l'erreur
219
- setMessages(prev => prev.map(msg =>
220
- msg.id === assistantMessageId
221
- ? { ...msg, content: `Erreur : ${error.message}`, isStreaming: false }
222
- : msg
223
- ));
224
- }
225
  } finally {
226
  clearTimeout(timeoutId);
227
  setIsLoading(false);
 
58
  setCurrentMessage('');
59
  setIsLoading(true);
60
 
61
+ // ID pour le message assistant
62
  const assistantMessageId = Date.now();
 
63
 
64
  // Timeout de sĂ©curitĂ© pour Ă©viter les blocages
65
  const timeoutId = setTimeout(() => {
66
  console.warn('Timeout: RĂ©initialisation forcĂ©e de isLoading');
67
  setIsLoading(false);
 
 
 
 
 
 
 
68
  }, 30000); // 30 secondes de timeout
69
 
70
  try {
71
+ // HF Spaces : utiliser directement l'endpoint normal (streaming problématique)
72
+ console.log('🌐 Mode HF Spaces - utilisation endpoint normal');
73
+ const response = await fetch('/api/chat', {
74
  method: 'POST',
75
  headers: {
76
  'Content-Type': 'application/json',
 
94
  throw new Error(errorMessage);
95
  }
96
 
97
+ // Récupérer la réponse complÚte
98
+ const result = await response.json();
 
 
99
 
100
+ // Afficher la réponse directement (mode normal)
101
+ const assistantMessage = {
102
+ id: assistantMessageId,
103
+ type: 'assistant',
104
+ content: result.response,
105
+ timestamp: new Date(),
106
+ isStreaming: false
107
+ };
108
+ setMessages(prev => [...prev, assistantMessage]);
109
+ clearTimeout(timeoutId);
110
+ setIsLoading(false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
  } catch (error) {
113
  console.error('Erreur chat:', error);
114
+ // Créer un message d'erreur
115
+ const errorMessage = {
116
+ id: assistantMessageId,
117
+ type: 'assistant',
118
+ content: `Erreur : ${error.message}`,
119
+ timestamp: new Date(),
120
+ isStreaming: false
121
+ };
122
+ setMessages(prev => [...prev, errorMessage]);
 
 
 
 
 
 
 
 
 
123
  } finally {
124
  clearTimeout(timeoutId);
125
  setIsLoading(false);