fix(sql-formatting): Fix SQL code formatting

Fixed SQL code formatting errors by:
- catching both single and double backslashes in the formatting
- explicitly telling LLM how to format linebreaks

Also did some changes to the UI and allowed general questions
about the database content to be asked.
This commit is contained in:
2024-10-06 11:59:45 +02:00
parent 76a7168aa3
commit 5cec810947
2 changed files with 44 additions and 25 deletions

View File

@@ -42,11 +42,6 @@ app.index_string = header_style
notification_md = """
**Hinweise:**
Aufgrund des sparsamen pricing Tiers kann es einige Sekunden dauern, bis die
Verbindung zur Datenbank hergestellt wird. Im Falle eines Fehlers oder langer Ladedauer
(> 2 min.) gern ein-zwei mal erneut versuchen (die Seite neu Laden). Sobald die Verbindung
einmal hergestellt wurde, geht es schnell.
GPT-4o kann einige Fehler machen. Sollte dies passieren wird eine Fehlermeldung angezeigt.
In diesem Fall lohnt es sich oft, die Anfrage leicht verändert erneut zu stellen und evtl
zusätzliche Informationen zu geben.
@@ -55,7 +50,12 @@ Das Modell ist dazu aufgefordert, den Output stets auf 100 Zeilen zu begrenzen.
Alle Daten sind komplett zufällig generiert und haben keine Beziehung zu realen Personen.
**Beispielfragen**:
Es können sowohl allgemeine Fragen gestellt werden, als auch Fragen, die eine SQL-Abfrage erfordern.
Beispiel für allgemeine Frage: 'Nenne mir alle Tabellen in der Datenbank, sowie die entsprechenden
Spalten und eine kurze Erklärung über deren Inhalt.'
**SQL-Beispielfragen**:
- Wie viele Kunden haben wir in Hannover?
- Zeige alle Kunden in Bremen.
- Berechne den gesamten Stromverbrauch aller Kunden in Magdeburg.
@@ -163,7 +163,10 @@ def get_layout() -> html.Div:
className="header-container",
), # Header
html.Div(
"Ganz ohne SQL-Kenntnisse Daten zu Zählerstandmessungen unserer Kunden abrufen!",
(
"Chatte mit unserer SQL-Datenbank, die Daten zu Zählerstandmessungen der "
"KundInnen enthält!"
),
style={"margin-left": "20px", "font-weight": "bold", "font-size": "20px"},
),
dcc.Store(
@@ -222,7 +225,7 @@ def get_layout() -> html.Div:
html.Div(
(
"Hier kann der ausgegebene SQL-Code getestet oder mit selbst"
"geschriebenen Code verglichen werden."
"geschriebenem Code verglichen werden."
),
style={"margin-left": "20px", "font-weight": "bold", "font-size": "16px"},
),
@@ -294,17 +297,26 @@ def update_output(n_clicks: int, value: str, data: str) -> Tuple[Any, Any, Dict[
# parse LLM response to dict, then try to execute the query
try:
parsed_result = json.loads(result, strict=False)
result_table = execute_query(parsed_result["query"])
children = [
html.P([html.B("Zusammenfassung: "), f"{parsed_result['summary']}"]),
html.P([html.B("SQL Abfrage: "), f"{parsed_result['query']}"]),
render_table(result_table),
]
if parsed_result["query"] == "NA":
children = [
html.P([html.B("Zusammenfassung: "), f"{parsed_result['summary']}"]),
]
else:
result_table = execute_query(parsed_result["query"])
children = [
html.P([html.B("Zusammenfassung:\n"), f"{parsed_result['summary']}"]),
html.P([html.B("SQL Abfrage:\n"), f"{parsed_result['query']}"]),
render_table(result_table),
]
return children, value, err_style, html.P("")
except Exception as e:
err_style["height"] = "400px"
err_child = html.Div(f"Folgender Fehler ist aufgetreten: {e}.LLM Output: {result}.")
except Exception:
err_style["height"] = "50px"
err_child = html.Div(
(
"Ein Fehler ist aufgetreten. Versuchen Sie, "
"die Anfrage genauer zu beschreiben und versuchen Sie es erneut."
)
)
return no_update, value, err_style, err_child