chore: Änderungen commited
This commit is contained in:
33
app.py
33
app.py
@@ -1558,12 +1558,13 @@ def chat_with_assistant():
|
|||||||
import time
|
import time
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
|
# Erhöhtes Timeout für die API-Anfrage
|
||||||
response = client.chat.completions.create(
|
response = client.chat.completions.create(
|
||||||
model="gpt-4o-mini",
|
model="gpt-4o-mini",
|
||||||
messages=api_messages,
|
messages=api_messages,
|
||||||
max_tokens=1000, # Erhöht für ausführlichere Antworten und detaillierte Führungen
|
max_tokens=1000,
|
||||||
temperature=0.7,
|
temperature=0.7,
|
||||||
timeout=20 # 20 Sekunden Timeout
|
timeout=60 # Erhöht auf 60 Sekunden für bessere Zuverlässigkeit
|
||||||
)
|
)
|
||||||
|
|
||||||
print(f"OpenAI API-Antwortzeit: {time.time() - start_time:.2f} Sekunden")
|
print(f"OpenAI API-Antwortzeit: {time.time() - start_time:.2f} Sekunden")
|
||||||
@@ -1577,12 +1578,30 @@ def chat_with_assistant():
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
import traceback
|
import traceback
|
||||||
print(f"Fehler bei der OpenAI-Anfrage: {str(e)}")
|
error_message = str(e)
|
||||||
print(traceback.format_exc())
|
stack_trace = traceback.format_exc()
|
||||||
|
|
||||||
return jsonify({
|
print(f"Fehler bei der OpenAI-Anfrage: {error_message}")
|
||||||
'error': f'Fehler bei der OpenAI-Anfrage: {str(e)}'
|
print(f"Stack Trace: {stack_trace}")
|
||||||
}), 500
|
|
||||||
|
# Überprüfen auf spezifische Fehlertypen
|
||||||
|
if "timeout" in error_message.lower():
|
||||||
|
return jsonify({
|
||||||
|
'error': 'Die Anfrage hat zu lange gedauert. Bitte versuchen Sie es später erneut.'
|
||||||
|
}), 504
|
||||||
|
elif "rate limit" in error_message.lower():
|
||||||
|
return jsonify({
|
||||||
|
'error': 'API-Ratelimit erreicht. Bitte warten Sie einen Moment und versuchen Sie es erneut.'
|
||||||
|
}), 429
|
||||||
|
elif "internal server error" in error_message.lower() or "500" in error_message:
|
||||||
|
return jsonify({
|
||||||
|
'error': 'Es ist ein Serverfehler aufgetreten. Unser Team wurde benachrichtigt.'
|
||||||
|
}), 500
|
||||||
|
else:
|
||||||
|
# Allgemeine Fehlermeldung
|
||||||
|
return jsonify({
|
||||||
|
'error': 'Bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.'
|
||||||
|
}), 500
|
||||||
|
|
||||||
def check_database_query(user_message):
|
def check_database_query(user_message):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -342,14 +342,27 @@ class ChatGPTAssistant {
|
|||||||
messages: this.messages
|
messages: this.messages
|
||||||
}),
|
}),
|
||||||
cache: 'no-cache', // Kein Cache verwenden
|
cache: 'no-cache', // Kein Cache verwenden
|
||||||
credentials: 'same-origin' // Cookies senden
|
credentials: 'same-origin', // Cookies senden
|
||||||
|
timeout: 60000 // 60 Sekunden Timeout
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ladeindikator entfernen
|
// Ladeindikator entfernen
|
||||||
this.removeLoadingIndicator();
|
this.removeLoadingIndicator();
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(`Serverfehler: ${response.status} ${response.statusText}`);
|
const errorText = await response.text();
|
||||||
|
let errorMessage;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Versuche, die Fehlermeldung zu parsen
|
||||||
|
const errorData = JSON.parse(errorText);
|
||||||
|
errorMessage = errorData.error || `Serverfehler: ${response.status} ${response.statusText}`;
|
||||||
|
} catch {
|
||||||
|
// Bei Parsing-Fehler verwende Standardfehlermeldung
|
||||||
|
errorMessage = `Serverfehler: ${response.status} ${response.statusText}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
@@ -375,24 +388,45 @@ class ChatGPTAssistant {
|
|||||||
// Ladeindikator entfernen, falls noch vorhanden
|
// Ladeindikator entfernen, falls noch vorhanden
|
||||||
this.removeLoadingIndicator();
|
this.removeLoadingIndicator();
|
||||||
|
|
||||||
|
// Spezielle Fehlermeldungen für bestimmte Fehlertypen
|
||||||
|
const errorMessage = error.message || '';
|
||||||
|
let userFriendlyMessage = 'Es gab ein Problem mit der Anfrage.';
|
||||||
|
|
||||||
|
if (errorMessage.includes('timeout') || errorMessage.includes('Zeitüberschreitung')) {
|
||||||
|
userFriendlyMessage = 'Die Antwort hat zu lange gedauert. Der Server ist möglicherweise überlastet.';
|
||||||
|
} else if (errorMessage.includes('500') || errorMessage.includes('Internal Server Error')) {
|
||||||
|
userFriendlyMessage = 'Ein Serverfehler ist aufgetreten. Wir arbeiten an einer Lösung.';
|
||||||
|
} else if (errorMessage.includes('429') || errorMessage.includes('rate limit')) {
|
||||||
|
userFriendlyMessage = 'Die API-Anfragelimits wurden erreicht. Bitte warte einen Moment.';
|
||||||
|
}
|
||||||
|
|
||||||
// Fehlermeldung anzeigen oder Wiederholungsversuch starten
|
// Fehlermeldung anzeigen oder Wiederholungsversuch starten
|
||||||
if (this.retryCount < this.maxRetries) {
|
if (this.retryCount < this.maxRetries) {
|
||||||
this.retryCount++;
|
this.retryCount++;
|
||||||
this.addMessage('assistant', 'Es gab ein Problem mit der Anfrage. Ich versuche es erneut...');
|
this.addMessage('assistant', `${userFriendlyMessage} Ich versuche es erneut... (Versuch ${this.retryCount}/${this.maxRetries})`);
|
||||||
|
|
||||||
// Kurze Verzögerung vor dem erneuten Versuch
|
// Letzte Benutzernachricht speichern für den Wiederholungsversuch
|
||||||
setTimeout(() => {
|
const lastUserMessageIndex = this.messages.findLastIndex(msg => msg.role === 'user');
|
||||||
// Letzte Benutzernachricht aus dem Messages-Array entfernen
|
if (lastUserMessageIndex >= 0) {
|
||||||
const lastUserMessage = this.messages[this.messages.length - 2].content;
|
const lastUserMessage = this.messages[lastUserMessageIndex].content;
|
||||||
this.messages = this.messages.slice(0, -2); // Entferne Benutzernachricht und Fehlermeldung
|
|
||||||
|
|
||||||
// Erneuter Versand mit gleicher Nachricht
|
// Kurze Verzögerung vor dem erneuten Versuch mit exponentieller Backoff-Strategie
|
||||||
this.inputField.value = lastUserMessage;
|
const retryDelay = 1500 * Math.pow(2, this.retryCount - 1); // 1.5s, 3s, 6s, ...
|
||||||
this.sendMessage();
|
|
||||||
}, 1500);
|
setTimeout(() => {
|
||||||
|
// Entferne Fehlermeldung aus dem Messages-Array, behalte aber die Benutzernachricht
|
||||||
|
this.messages = this.messages.filter(msg =>
|
||||||
|
!(msg.role === 'assistant' && msg.content.includes('versuche es erneut'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// Erneuter Versand mit gleicher Nachricht
|
||||||
|
this.inputField.value = lastUserMessage;
|
||||||
|
this.sendMessage();
|
||||||
|
}, retryDelay);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Maximale Anzahl an Wiederholungsversuchen erreicht
|
// Maximale Anzahl an Wiederholungsversuchen erreicht
|
||||||
this.addMessage('assistant', 'Es tut mir leid, aber es gab ein Problem bei der Verarbeitung deiner Anfrage. Bitte versuche es später noch einmal.');
|
this.addMessage('assistant', 'Es tut mir leid, aber es gab ein Problem bei der Verarbeitung deiner Anfrage. Bitte versuche es später noch einmal oder kontaktiere den Support, falls das Problem weiterhin besteht.');
|
||||||
this.retryCount = 0; // Zurücksetzen für die nächste Anfrage
|
this.retryCount = 0; // Zurücksetzen für die nächste Anfrage
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in New Issue
Block a user