vrsen commited on
Commit
271d8f5
1 Parent(s): 02dd06c

direct links

Browse files
Files changed (1) hide show
  1. app.py +43 -23
app.py CHANGED
@@ -24,9 +24,11 @@ class Bot():
24
  self.df = None
25
  self.available_car_models = None
26
  self.set_prompts()
 
 
27
 
28
  def set_prompts(self):
29
- self.eng_system_prompt = f"""You are a virtual car salesman salesman assistant for an online car dealership. You only recommend cars that are currently in your inventory.
30
  To access your inventory return dataframe query method like this:
31
 
32
  ```
@@ -34,29 +36,31 @@ df.query("brand.str.contains('ford')")
34
  ```
35
 
36
  The dataframe has the following columns: ["brand", "model", "category", "kilometer", "price"], with all values in lowercase.
37
- The available car categories are: limousine, offroad, estatecar, smallcar, othercar, and carbo. The available car brands are: {self.available_car_models}.
 
38
  To search for specific car information, use the contains() method instead of equals().
39
 
40
- Do not say that any models in your inventory or that any models are available - if the user asks for specific information about a car like model that can be found in one of the columns of the dataframe, show how you would query the dataframe first.
41
- Do not ask the user if you need to check the inventory. Users should not know that you are using a dataframe. They should think that you are using a database, show them how to do it.
42
- Do not ask about their location.
43
- If you need to check the inventory to answer the user's question, only show how you would query the dataframe."""
44
-
45
- self.ger_system_prompt = f"""Sie sind ein virtueller Autoverkäufer-Assistent für eine Online-Autohandelsfirma. Sie empfehlen nur Autos, die sich derzeit in Ihrem Inventar befinden.
46
- Um auf Ihr Inventar zuzugreifen, geben Sie die Datenrahmenabfrage-Methode wie folgt zurück:
47
 
 
 
 
48
  ```
49
- df.query("brand.str.contains('ford')")
50
  ```
51
 
52
- Der Datenrahmen hat die folgenden Spalten: ["Marke", "Modell", "Kategorie", "Kilometer", "Preis"], mit allen Werten in Kleinbuchstaben.
53
- Die verfügbaren Fahrzeugkategorien sind: Limousine, Geländewagen, Kombi, Kleinwagen, Sonstiges Auto und Carbo. Die verfügbaren Automarken sind: {self.available_car_models}.
54
- Um nach bestimmten Fahrzeuginformationen zu suchen, verwenden Sie die Methode contains() anstelle von equals().
 
55
 
56
- Sagen Sie nicht, dass Sie irgendwelche Modelle in Ihrem Inventar haben oder dass irgendwelche Modelle verfügbar sind - wenn der Benutzer nach spezifischen Informationen zu einem Auto wie Modell fragt, das sich in einer der Spalten des Datenrahmens befindet, zeigen Sie, wie Sie den Datenrahmen abfragen würden.
57
- Fragen Sie nicht, ob Sie das Inventar überprüfen müssen. Benutzer sollten nicht wissen, dass Sie einen Datenrahmen verwenden. Sie sollten denken, dass Sie eine Datenbank verwenden, zeigen Sie ihnen, wie es geht.
58
- Fragen Sie nicht nach ihrem Standort.
59
- Wenn Sie das Inventar überprüfen müssen, um die Frage des Benutzers zu beantworten, zeigen Sie nur, wie Sie den Datenrahmen abfragen würden."""
60
 
61
  def change_language(self, lang, history):
62
  self.lang = lang if lang in ["English", "German"] else "English"
@@ -95,7 +99,8 @@ Wenn Sie das Inventar überprüfen müssen, um die Frage des Benutzers zu beantw
95
  df = pd.read_csv(filename)
96
  # drop all rows with at least one NaN value
97
  # only use columns marke modell kategorie kilomeret preis
98
- df = df[["marke", "modell2", "kategorie", "kilometer", "preis", "grundfarbe"]]
 
99
  df = df.rename(columns={"modell2": "modell"})
100
  df = df.dropna()
101
  # convert price and kilometer to int
@@ -126,6 +131,18 @@ Wenn Sie das Inventar überprüfen müssen, um die Frage des Benutzers zu beantw
126
  history = []
127
  return history
128
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  def check_requirements(self, query, history):
130
  if query.startswith("sk-"):
131
  self.api_key = query.strip("\n").strip()
@@ -215,11 +232,14 @@ Wenn Sie das Inventar überprüfen müssen, um die Frage des Benutzers zu beantw
215
  messages.insert(-1, {"role": "system",
216
  "content": "Sie sind ein virtueller Autohändler-Assistent in einem Online-Autohaus. Keine Ergebnisse für diese Abfrage. Benutzer bei der Anpassung ihrer Präferenzen oder Empfehlung anderer Marken unterstützen"})
217
  else:
218
- # take only 50 random rows
219
- if len(result) > 50:
220
- result = result.sample(n=10)
221
  # check if result is a dataframe
222
  if isinstance(result, pd.DataFrame):
 
 
 
 
 
 
223
  result = result.to_string(index=False).replace("<br>", "")
224
  elif isinstance(result, pd.Series):
225
  result = result.to_string(index=False).replace("<br>", "")
@@ -231,11 +251,11 @@ Wenn Sie das Inventar überprüfen müssen, um die Frage des Benutzers zu beantw
231
  # add message to history 1 before last
232
  if self.lang == "English":
233
  messages.insert(-1, {"role": "system",
234
- "content": f"You are a virtual car salesman salesman assistant for an online car dealership. You only recommend cars that are currently in stock. Advice cars from this list that are currently in stock:\n\n{result}\n\n" + "Include links to cars in your recommendation in the following way: \"https://www.hugopfohe.de/gebrauchtwagen/?marken={brand}&model={model}&etcc_cmp=consultant\", replacing {brand} and {model} accordingly."})
235
  else:
236
  messages.insert(-1,
237
  {"role": "system",
238
- "content": f"Sie sind ein virtueller Autohändler-Assistent in einem Online-Autohaus. Sie empfehlen nur Autos, die derzeit auf Lager sind. Beraten Sie Autos aus dieser Liste, die derzeit auf Lager sind:\n\n{result}\n\n" + "Fügen Sie in Ihrer Empfehlung Links zu den Autos wie folgt ein: \"https://www.hugopfohe.de/gebrauchtwagen/?marken={brand}&model={model}&etcc_cmp=consultant\"\n, ersetzen Sie {brand} und {model} entsprechend."})
239
 
240
  response = openai.ChatCompletion.create(
241
  model="gpt-3.5-turbo",
 
24
  self.df = None
25
  self.available_car_models = None
26
  self.set_prompts()
27
+ self.columns_in_response = ["marke", "modell", "kategorie", "kilometer", "preis", "grundfarbe"]
28
+ self.columns_in_response_eng = ["brand", "model", "category", "kilometer", "price", "color"]
29
 
30
  def set_prompts(self):
31
+ self.eng_system_prompt = f"""You are a virtual car salesman salesman assistant for an online German car dealership. You only recommend cars that are currently in your inventory.
32
  To access your inventory return dataframe query method like this:
33
 
34
  ```
 
36
  ```
37
 
38
  The dataframe has the following columns: ["brand", "model", "category", "kilometer", "price"], with all values in lowercase.
39
+ The available car categories are: limousine, offroad, estatecar, smallcar, othercar, and carbo.
40
+ The available car brands are: {self.available_car_models}.
41
  To search for specific car information, use the contains() method instead of equals().
42
 
43
+ Do not say that any models in your inventory or that any models are available, show the query instead.
44
+ Do not ask the user if you need to check the inventory, show them how to query the dataframe.
45
+ Users should not know that you are using a dataframe. They should think that you are using a database.
46
+ If you need to check the inventory to answer the user's question, only show the query and nothing else."""
 
 
 
47
 
48
+ self.ger_system_prompt = f"""Du bist ein virtueller Autoverkäufer für einen deutschen Online-Autohändler. Du empfiehlst nur Autos, die derzeit in deinem Inventar sind.
49
+ Um auf dein Inventar zuzugreifen, gibst du die Datenbankabfrage-Methode wie folgt ein:
50
+
51
  ```
52
+ df.query("marke.str.contains('ford')")
53
  ```
54
 
55
+ Die Datenbank hat die folgenden Spalten: ["marke", "modell", "kategorie", "kilometer", "preis"], mit allen Werten in Kleinbuchstaben.
56
+ Die verfügbaren Autokategorien sind: limousine, offroad, estatecar, smallcar, othercar und carbo.
57
+ Die verfügbaren Automarken sind: {self.available_car_models}.
58
+ Um nach bestimmten Fahrzeuginformationen zu suchen, verwende die contains() -Methode anstelle der equals() -Methode.
59
 
60
+ Sage nicht, dass irgendeine Modelle in deinem Inventar sind oder dass irgendeine Modelle verfügbar sind, zeige die Abfrage an.
61
+ Frag den Benutzer nicht, ob du das Inventar überprüfen musst, zeige ihm, wie du die Datenbankabfrage durchführst.
62
+ Benutzer sollten nicht wissen, dass du eine Datenbank verwendest. Sie sollten denken, dass du eine Datenbank verwendest.
63
+ Wenn du das Inventar überprüfen musst, um die Frage des Benutzers zu beantworten, zeige nur die Abfrage und nichts anderes an."""
64
 
65
  def change_language(self, lang, history):
66
  self.lang = lang if lang in ["English", "German"] else "English"
 
99
  df = pd.read_csv(filename)
100
  # drop all rows with at least one NaN value
101
  # only use columns marke modell kategorie kilomeret preis
102
+ df = df[self.columns_in_response + ["interne_nummer", "Modellbasis"]]
103
+ df = self._construct_urls(df)
104
  df = df.rename(columns={"modell2": "modell"})
105
  df = df.dropna()
106
  # convert price and kilometer to int
 
131
  history = []
132
  return history
133
 
134
+ def _construct_urls(self, df):
135
+ for index, row in df.iterrows():
136
+ # check if all values are not na
137
+ if row.isna().any():
138
+ continue
139
+ marke = row['marke']
140
+ modellbasis = row['Modellbasis']
141
+ interne_nummer = row['interne_nummer']
142
+ base_url = f"https://www.hugopfohe.de/gebrauchtwagen/details/"
143
+ df.at[index, 'url'] = f"{base_url}{marke}_{modellbasis}_{interne_nummer}/"
144
+ return df
145
+
146
  def check_requirements(self, query, history):
147
  if query.startswith("sk-"):
148
  self.api_key = query.strip("\n").strip()
 
232
  messages.insert(-1, {"role": "system",
233
  "content": "Sie sind ein virtueller Autohändler-Assistent in einem Online-Autohaus. Keine Ergebnisse für diese Abfrage. Benutzer bei der Anpassung ihrer Präferenzen oder Empfehlung anderer Marken unterstützen"})
234
  else:
 
 
 
235
  # check if result is a dataframe
236
  if isinstance(result, pd.DataFrame):
237
+ if len(result) > 5:
238
+ result = result.sample(n=5)
239
+ if self.lang == "English":
240
+ result = result[self.columns_in_response_eng + ['url']]
241
+ else:
242
+ result = result[self.columns_in_response + ['url']]
243
  result = result.to_string(index=False).replace("<br>", "")
244
  elif isinstance(result, pd.Series):
245
  result = result.to_string(index=False).replace("<br>", "")
 
251
  # add message to history 1 before last
252
  if self.lang == "English":
253
  messages.insert(-1, {"role": "system",
254
+ "content": f"You are a virtual car salesman salesman assistant for an online car dealership. You only recommend cars that are currently in stock. Advice cars from this list that are currently in stock:\n\n{result}\n\n" + "Include links to cars in your recommendation from the url column."})
255
  else:
256
  messages.insert(-1,
257
  {"role": "system",
258
+ "content": f"Sie sind ein virtueller Autohändler-Assistent in einem Online-Autohaus. Sie empfehlen nur Autos, die derzeit auf Lager sind. Beraten Sie Autos aus dieser Liste, die derzeit auf Lager sind:\n\n{result}\n\n" + "Fügen Sie Links zu Autos in Ihrer Empfehlung aus der Spalte url hinzu."})
259
 
260
  response = openai.ChatCompletion.create(
261
  model="gpt-3.5-turbo",