alexkueck commited on
Commit
7d84973
1 Parent(s): 1e683e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -140
app.py CHANGED
@@ -147,26 +147,34 @@ def add_text(chatbot, history, prompt, file):
147
  print(chatbot)
148
  return chatbot, history, prompt, "", gr.File( label=None, interactive=False, height=20, min_width=20, visible=False, scale=2) #gr.Textbox(value="", interactive=False)
149
 
150
-
 
151
  def file_anzeigen(file):
152
  return gr.File(visible=True), file
153
 
 
 
154
  def umwandeln_fuer_anzeige(image):
155
  buffer = io.BytesIO()
156
  image.save(buffer, format='PNG')
157
  return buffer.getvalue()
158
 
159
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  def process_image(image_path, prompt):
161
- #Bild aus tmp in Space ablegen
162
- #temp_image_path = "/tmp/gradio/01834b95fcf793903d65ab947cc410dc1600d0df/bbb 1.png"
163
- # Zielverzeichnis für das dauerhafte Bild
164
- #target_directory = HISTORY_PFAD
165
- # Ziel-Pfad für das dauerhafte Bild
166
- #target_image_path = os.path.join(target_directory, "bbb 1.png")
167
- # Kopieren Sie das temporäre Bild in das Zielverzeichnis
168
- #shutil.copy(temp_image_path, target_image_path)
169
-
170
  # Convert image to base64
171
  with open(image_path, "rb") as image_file:
172
  encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
@@ -201,7 +209,8 @@ def process_image(image_path, prompt):
201
  }
202
  return headers, payload
203
 
204
-
 
205
  def transfer_input(inputs):
206
  textbox = reset_textbox()
207
  return (
@@ -210,6 +219,9 @@ def transfer_input(inputs):
210
  gr.Button.update(visible=True),
211
  )
212
  ##################################################
 
 
 
213
  # Funktion, um für einen best. File-typ ein directory-loader zu definieren
214
  def create_directory_loader(file_type, directory_path):
215
  #verscheidene Dokument loaders:
@@ -222,7 +234,7 @@ def create_directory_loader(file_type, directory_path):
222
  glob=f"**/*{file_type}",
223
  loader_cls=loaders[file_type],
224
  )
225
-
226
  #die Inhalte splitten, um in Vektordatenbank entsprechend zu laden als Splits
227
  def document_loading_splitting():
228
  global splittet
@@ -262,6 +274,7 @@ def document_loading_splitting():
262
  splittet = True
263
  return splits
264
 
 
265
  #Chroma DB die splits ablegen - vektorisiert...
266
  def document_storage_chroma(splits):
267
  #OpenAi embeddings----------------------------------
@@ -276,7 +289,7 @@ def document_storage_mongodb(splits):
276
  embedding = OpenAIEmbeddings(disallowed_special = ()),
277
  collection = MONGODB_COLLECTION,
278
  index_name = MONGODB_INDEX_NAME)
279
-
280
  #dokumente in chroma db vektorisiert ablegen können - die Db vorbereiten daüfur
281
  def document_retrieval_chroma(llm, prompt):
282
  #OpenAI embeddings -------------------------------
@@ -291,7 +304,7 @@ def document_retrieval_chroma(llm, prompt):
291
  #ChromaDb um die embedings zu speichern
292
  db = Chroma(embedding_function = embeddings, persist_directory = PATH_WORK + CHROMA_DIR)
293
  return db
294
-
295
  #dokumente in mongo db vektorisiert ablegen können - die Db vorbereiten daüfür
296
  def document_retrieval_mongodb(llm, prompt):
297
  db = MongoDBAtlasVectorSearch.from_connection_string(MONGODB_URI,
@@ -302,13 +315,14 @@ def document_retrieval_mongodb(llm, prompt):
302
 
303
  ###############################################
304
  #Langchain anlegen
305
-
306
  #langchain nutzen, um prompt an LLM zu leiten - llm und prompt sind austauschbar
307
  def llm_chain(llm, prompt):
308
  llm_chain = LLMChain(llm = llm, prompt = LLM_CHAIN_PROMPT)
309
  result = llm_chain.run({"question": prompt})
310
  return result
311
 
 
312
  #langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
313
  def rag_chain(llm, prompt, db):
314
  rag_chain = RetrievalQA.from_chain_type(llm,
@@ -340,24 +354,7 @@ def generate_prompt_with_history(text, history, max_length=4048):
340
  else:
341
  return None
342
 
343
- def generate_prompt_and_file_with_history(text, history, file):
344
- #prompt = "The following is a conversation between a human and an AI assistant named Baize (named after a mythical creature in Chinese folklore). Baize is an open-source AI assistant developed by UCSD and Sun Yat-Sen University. The human and the AI assistant take turns chatting. Human statements start with [|Human|] and AI assistant statements start with [|AI|]. The AI assistant always provides responses in as much detail as possible, and in Markdown format. The AI assistant always declines to engage with topics, questions and instructions related to unethical, controversial, or sensitive issues. Complete the transcript in exactly that format.\n[|Human|]Hello!\n[|AI|]Hi!"
345
- #prompt = "Das folgende ist eine Unterhaltung in deutsch zwischen einem Menschen und einem KI-Assistenten, der Baize genannt wird. Baize ist ein open-source KI-Assistent, der von UCSD entwickelt wurde. Der Mensch und der KI-Assistent chatten abwechselnd miteinander in deutsch. Die Antworten des KI Assistenten sind immer so ausführlich wie möglich und in Markdown Schreibweise und in deutscher Sprache. Wenn nötig übersetzt er sie ins Deutsche. Die Antworten des KI-Assistenten vermeiden Themen und Antworten zu unethischen, kontroversen oder sensiblen Themen. Die Antworten sind immer sehr höflich formuliert..\n[|Human|]Hallo!\n[|AI|]Hi!"
346
- prompt=""
347
- history = ["\n{}\n{}".format(x[0],x[1]) for x in history]
348
- history.append("\n{}\n".format(text))
349
- history_text = ""
350
- flag = False
351
- for x in history[::-1]:
352
- history_text = x + history_text
353
- flag = True
354
- print ("Prompt: ..........................")
355
- print(prompt+history_text)
356
- if flag:
357
- return prompt+history_text
358
- else:
359
- return None
360
-
361
  #Prompt und History für OPenAi Schnittstelle
362
  def generate_prompt_with_history_openai(prompt, history):
363
  history_openai_format = []
@@ -370,6 +367,7 @@ def generate_prompt_with_history_openai(prompt, history):
370
  print(history_openai_format)
371
  return history_openai_format
372
 
 
373
  #Prompt und History für Hugging Face Schnittstelle
374
  def generate_prompt_with_history_hf(prompt, history):
375
  history_transformer_format = history + [[prompt, ""]]
@@ -378,6 +376,7 @@ def generate_prompt_with_history_hf(prompt, history):
378
  messages = "".join(["".join(["\n<human>:"+item[0], "\n<bot>:"+item[1]]) #curr_system_message +
379
  for item in history_transformer_format])
380
 
 
381
  #Prompt und History für Langchain Schnittstelle
382
  def generate_prompt_with_history_langchain(prompt, history):
383
  history_langchain_format = []
@@ -391,37 +390,12 @@ def generate_prompt_with_history_langchain(prompt, history):
391
 
392
  ###################################################
393
  #Funktion von Gradio aus, die den dort eingegebenen Prompt annimmt und weiterverarbeitet
394
- #erstmal gucken, ob text oder Bild angekommen ist
395
- def chatbot_response(messages):
396
- print("messages.......................")
397
- print(messages)
398
- responses = []
399
- for message in messages:
400
- if message['type'] == 'text':
401
- #invoke(message['data'], history, rag_option, model_option, openai_api_key, temperature=0.5, max_new_tokens=4048, top_p=0.6, repetition_penalty=1.3,)
402
- responses.append({'type': 'text', 'data': f"Echo: {message['data']}"})
403
- else:
404
- print("Bild.............................")
405
- return responses
406
-
407
- def create_picture(history, prompt):
408
- client = OpenAI()
409
- response = client.images.generate(model="dall-e-3", prompt=prompt,size="1024x1024",quality="standard",n=1,)
410
- image_url = response.data[0].url
411
- return image_url
412
-
413
- # prompt describing the desired image
414
- #text = "batman art in red and blue color"
415
- # calling the custom function "generate"
416
- # saving the output in "url1"
417
- #url1 = create_picture(text)
418
- # using requests library to get the image in bytes
419
- #response = requests.get(url1)
420
- # using the Image module from PIL library to view the image
421
- #Image.open(response.raw)
422
-
423
 
424
 
 
 
 
425
  def generate_auswahl(prompt, file, chatbot, history, rag_option, model_option, openai_api_key, k=3, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3,):
426
  #Bild nach Anweisung zeichnen und in History darstellen...
427
  if (prompt.find('zeichnen') != -1):
@@ -432,7 +406,7 @@ def generate_auswahl(prompt, file, chatbot, history, rag_option, model_option, o
432
  image_64 = umwandeln_fuer_anzeige(image)
433
  chatbot[-1][1] = "<img src='data:image/png;base64,{0}'/>".format(b64encode(image_64).decode('utf-8'))
434
  history = history + [(prompt, result)]
435
- return chatbot, history, "Success"
436
  else:
437
  #kein Bild hochgeladen -> auf Text antworten...
438
  if (file == None):
@@ -442,19 +416,12 @@ def generate_auswahl(prompt, file, chatbot, history, rag_option, model_option, o
442
  else:
443
  #Es wurde ein Bild angehängt -> wenn prompt dazu, das Bild analysieren
444
  #geht nur über spezielle OpenAI-Schnittstelle...
445
- headers, payload = process_image(file, prompt)
446
- response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
447
- #als json ausgeben
448
- data = response.json()
449
- #in Wörterbuch umwandeln
450
- #data = json.loads(j_string)
451
- # Den "content" auswählen, da dort die Antwort der Ki enthalten ist
452
- result = data['choices'][0]['message']['content']
453
  history = history + [((file,), None),(prompt, result)]
454
 
455
  chatbot[-1][1] = result
456
 
457
- return chatbot, history, "Success"
458
  """
459
  for character in result:
460
  history[-1][1] += character
@@ -467,13 +434,28 @@ def generate_auswahl(prompt, file, chatbot, history, rag_option, model_option, o
467
  except:
468
  pass
469
  """
470
-
 
471
  def generate_bild(prompt):
472
  data = {"inputs": prompt}
473
  response = requests.post(API_URL, headers=HEADERS, json=data)
474
  print("fertig Bild")
475
  return response
476
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
  def generate_text (prompt, file, chatbot, history, rag_option, model_option, openai_api_key, k=3, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3,):
478
  global splittet
479
  print(splittet)
@@ -506,7 +488,6 @@ def generate_text (prompt, file, chatbot, history, rag_option, model_option, ope
506
  #Anfrage an OpenAI ----------------------------
507
  print("OpenAI normal.......................")
508
  llm = ChatOpenAI(model_name = MODEL_NAME, openai_api_key = openai_api_key, temperature=temperature)#, top_p = top_p)
509
- print("openAI")
510
  else:
511
  #oder an Hugging Face --------------------------
512
  llm = HuggingFaceHub(repo_id=repo_id, model_kwargs={"temperature": 0.5, "max_length": 128})
@@ -522,6 +503,7 @@ def generate_text (prompt, file, chatbot, history, rag_option, model_option, ope
522
  splits = document_loading_splitting()
523
  document_storage_chroma(splits)
524
  db = document_retrieval_chroma(llm, history_text_und_prompt)
 
525
  result = rag_chain(llm, history_text_und_prompt, db)
526
  elif (rag_option == "MongoDB"):
527
  #splits = document_loading_splitting()
@@ -532,7 +514,6 @@ def generate_text (prompt, file, chatbot, history, rag_option, model_option, ope
532
  print("LLM aufrufen ohne RAG: ...........")
533
  result = llm_chain(llm, history_text_und_prompt)
534
 
535
-
536
  except Exception as e:
537
  raise gr.Error(e)
538
 
@@ -585,7 +566,7 @@ with gr.Blocks(css=customCSS, theme=small_and_beautiful_theme) as demo:
585
  with gr.Row():
586
  emptyBtn = gr.ClearButton( [user_input, chatbot], value="🧹 Neue Session", scale=3)
587
  upload = gr.UploadButton("📁", file_types=["image", "video", "audio"], scale=3)
588
- file_display = gr.File( label=None, interactive=False, height=50, min_width=30, visible=False, scale=2)
589
 
590
  with gr.Column():
591
  with gr.Column(min_width=50, scale=1):
@@ -649,7 +630,7 @@ with gr.Blocks(css=customCSS, theme=small_and_beautiful_theme) as demo:
649
  max_context_length_tokens,
650
  repetition_penalty
651
  ],
652
- outputs=[chatbot, history, status_display], #[chatbot, history, status_display]
653
  show_progress=True,
654
  )
655
 
@@ -678,65 +659,3 @@ demo.queue().launch(debug=True)
678
 
679
 
680
 
681
- """
682
- additional_inputs = [
683
- #gr.Radio(["Off", "Chroma", "MongoDB"], label="Retrieval Augmented Generation", value = "Off"),
684
- gr.Radio(["Aus", "An"], label="RAG - LI Erweiterungen", value = "Aus"),
685
- gr.Radio(["OpenAI", "HuggingFace"], label="Modellauswahl", value = "HuggingFace"),
686
- gr.Textbox(label = "OpenAI API Key", value = "sk-", lines = 1),
687
- gr.Slider(label="Temperature", value=0.65, minimum=0.0, maximum=1.0, step=0.05, interactive=True, info="Höhere Werte erzeugen diversere Antworten", visible=True),
688
- gr.Slider(label="Max new tokens", value=1024, minimum=0, maximum=4096, step=64, interactive=True, info="Maximale Anzahl neuer Tokens", visible=True),
689
- gr.Slider(label="Top-p (nucleus sampling)", value=0.6, minimum=0.0, maximum=1, step=0.05, interactive=True, info="Höhere Werte verwenden auch Tokens mit niedrigerer Wahrscheinlichkeit.", visible=True),
690
- gr.Slider(label="Repetition penalty", value=1.2, minimum=1.0, maximum=2.0, step=0.05, interactive=True, info="Strafe für wiederholte Tokens", visible=True)
691
- ]
692
-
693
- with gr.Blocks() as demo:
694
- reference_image = gr.Image(label="Reference Image")
695
-
696
- chatbot_stream = gr.Chatbot()
697
-
698
- chat_interface_stream = gr.ChatInterface(fn=invoke,
699
- additional_inputs = additional_inputs,
700
- additional_inputs_accordion = gr.Accordion(label="Weitere Eingaben...", open=False),
701
- title = "ChatGPT vom LI",
702
- theme="soft",
703
- chatbot=chatbot_stream,
704
- retry_btn="🔄 Wiederholen",
705
- undo_btn="↩️ Letztes löschen",
706
- clear_btn="🗑️ Verlauf löschen",
707
- submit_btn = "Abschicken",
708
- description = description,
709
- )
710
-
711
- gr.HTML(
712
-
713
- <div style="display: flex; justify-content: center; align-items: center; text-align: center;">
714
- <a href="https://github.com/magic-research/magic-animate" style="margin-right: 20px; text-decoration: none; display: flex; align-items: center;">
715
- </a>
716
- <div>
717
- <h1 >Chatbot des LI - hier im Test mit Image Eingabe</h1>
718
- <div style="display: flex; justify-content: center; align-items: center; text-align: center;>
719
- <a href="https://arxiv.org/abs/2311.16498"><img src="https://img.shields.io/badge/Arxiv-2311.16498-red"></a>
720
- </div>
721
- </div>
722
- </div>
723
- )
724
-
725
- with gr.Row():
726
- prompt = gr.Textbox(
727
- scale=4,
728
- show_label=False,
729
- placeholder="Gib einen Text ein oder lade eine Datei (Bild, File, Audio) hoch",
730
- container=False,
731
- )
732
- btn = gr.UploadButton("📁", file_types=["image", "video", "audio"])
733
-
734
- txt_msg = txt.submit(invoke, [chat_interface_stream, prompt], [chat_interface_stream, prompt], queue=False).then(bot, chat_interface_stream, chat_interface_stream, api_name="bot_response")
735
- txt_msg.then(lambda: gr.Textbox(interactive=True), None, [prompt], queue=False)
736
- file_msg = btn.upload(add_file, [chat_interface_stream, btn], [chat_interface_stream], queue=False).then(bot, chat_interface_stream, chat_interface_stream)
737
-
738
- #chatbot_stream.like(print_like_dislike, None, None)
739
-
740
-
741
- demo.queue().launch()
742
- """
 
147
  print(chatbot)
148
  return chatbot, history, prompt, "", gr.File( label=None, interactive=False, height=20, min_width=20, visible=False, scale=2) #gr.Textbox(value="", interactive=False)
149
 
150
+ ############################################
151
+ #nach dem Upload soll das zusätzliche Fenster mit dem image drinnen angezeigt werden
152
  def file_anzeigen(file):
153
  return gr.File(visible=True), file
154
 
155
+ ##########################################
156
+ #Hilfsfunktion, um ein von Stable Diffusion erzeugtes Bild für die Ausgabe in der History vorzubereiten
157
  def umwandeln_fuer_anzeige(image):
158
  buffer = io.BytesIO()
159
  image.save(buffer, format='PNG')
160
  return buffer.getvalue()
161
 
162
+ #########################################
163
+ #nicht im Einsatz, da Stable Diffusion die Bilder erzeugt
164
+ def create_picture(history, prompt):
165
+ client = OpenAI()
166
+ response = client.images.generate(model="dall-e-3", prompt=prompt,size="1024x1024",quality="standard",n=1,)
167
+ image_url = response.data[0].url
168
+ # using requests library to get the image in bytes
169
+ response2 = requests.get(image_url)
170
+ # using the Image module from PIL library to view the image
171
+ image = Image.open(response2.raw)
172
+ return image
173
+
174
+ ##########################################
175
+ #ein hochgeladenes Bild so vorbereiten, dass OpenAI API es annehmen kann und bearbeiten
176
+ #muss ein base64 Bils sein und header und payload entsprechend konfigurieren
177
  def process_image(image_path, prompt):
 
 
 
 
 
 
 
 
 
178
  # Convert image to base64
179
  with open(image_path, "rb") as image_file:
180
  encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
 
209
  }
210
  return headers, payload
211
 
212
+ ###################################################
213
+ #zur Zeit nicht im Gebrauch
214
  def transfer_input(inputs):
215
  textbox = reset_textbox()
216
  return (
 
219
  gr.Button.update(visible=True),
220
  )
221
  ##################################################
222
+ #RAG Hilfsfunktionen - Dokumenten bearbeiten für Vektorstore
223
+ ##################################################
224
+ ##################################################
225
  # Funktion, um für einen best. File-typ ein directory-loader zu definieren
226
  def create_directory_loader(file_type, directory_path):
227
  #verscheidene Dokument loaders:
 
234
  glob=f"**/*{file_type}",
235
  loader_cls=loaders[file_type],
236
  )
237
+ ################################################
238
  #die Inhalte splitten, um in Vektordatenbank entsprechend zu laden als Splits
239
  def document_loading_splitting():
240
  global splittet
 
274
  splittet = True
275
  return splits
276
 
277
+ ###########################################
278
  #Chroma DB die splits ablegen - vektorisiert...
279
  def document_storage_chroma(splits):
280
  #OpenAi embeddings----------------------------------
 
289
  embedding = OpenAIEmbeddings(disallowed_special = ()),
290
  collection = MONGODB_COLLECTION,
291
  index_name = MONGODB_INDEX_NAME)
292
+ ############################################
293
  #dokumente in chroma db vektorisiert ablegen können - die Db vorbereiten daüfur
294
  def document_retrieval_chroma(llm, prompt):
295
  #OpenAI embeddings -------------------------------
 
304
  #ChromaDb um die embedings zu speichern
305
  db = Chroma(embedding_function = embeddings, persist_directory = PATH_WORK + CHROMA_DIR)
306
  return db
307
+ ###########################################
308
  #dokumente in mongo db vektorisiert ablegen können - die Db vorbereiten daüfür
309
  def document_retrieval_mongodb(llm, prompt):
310
  db = MongoDBAtlasVectorSearch.from_connection_string(MONGODB_URI,
 
315
 
316
  ###############################################
317
  #Langchain anlegen
318
+ ###############################################
319
  #langchain nutzen, um prompt an LLM zu leiten - llm und prompt sind austauschbar
320
  def llm_chain(llm, prompt):
321
  llm_chain = LLMChain(llm = llm, prompt = LLM_CHAIN_PROMPT)
322
  result = llm_chain.run({"question": prompt})
323
  return result
324
 
325
+ #############################################
326
  #langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
327
  def rag_chain(llm, prompt, db):
328
  rag_chain = RetrievalQA.from_chain_type(llm,
 
354
  else:
355
  return None
356
 
357
+ ##############################################
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  #Prompt und History für OPenAi Schnittstelle
359
  def generate_prompt_with_history_openai(prompt, history):
360
  history_openai_format = []
 
367
  print(history_openai_format)
368
  return history_openai_format
369
 
370
+ #############################################
371
  #Prompt und History für Hugging Face Schnittstelle
372
  def generate_prompt_with_history_hf(prompt, history):
373
  history_transformer_format = history + [[prompt, ""]]
 
376
  messages = "".join(["".join(["\n<human>:"+item[0], "\n<bot>:"+item[1]]) #curr_system_message +
377
  for item in history_transformer_format])
378
 
379
+ ##############################################
380
  #Prompt und History für Langchain Schnittstelle
381
  def generate_prompt_with_history_langchain(prompt, history):
382
  history_langchain_format = []
 
390
 
391
  ###################################################
392
  #Funktion von Gradio aus, die den dort eingegebenen Prompt annimmt und weiterverarbeitet
393
+ ###################################################
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
 
395
 
396
+ #########################################################
397
+ #Funktion wird direkt aufgerufen aus der GUI - von hier muss auch die Rückmeldung kommen....
398
+ #man kann einen Text-Prompt eingeben (mit oder ohne RAG), dazu ein Image hochladen, ein Bild zu einem reinen textprompt erzeugen lassen
399
  def generate_auswahl(prompt, file, chatbot, history, rag_option, model_option, openai_api_key, k=3, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3,):
400
  #Bild nach Anweisung zeichnen und in History darstellen...
401
  if (prompt.find('zeichnen') != -1):
 
406
  image_64 = umwandeln_fuer_anzeige(image)
407
  chatbot[-1][1] = "<img src='data:image/png;base64,{0}'/>".format(b64encode(image_64).decode('utf-8'))
408
  history = history + [(prompt, result)]
409
+ return chatbot, history, gr.File(visible=False), "Success"
410
  else:
411
  #kein Bild hochgeladen -> auf Text antworten...
412
  if (file == None):
 
416
  else:
417
  #Es wurde ein Bild angehängt -> wenn prompt dazu, das Bild analysieren
418
  #geht nur über spezielle OpenAI-Schnittstelle...
419
+ result= generate_text_zu_bild(file, prompt)
 
 
 
 
 
 
 
420
  history = history + [((file,), None),(prompt, result)]
421
 
422
  chatbot[-1][1] = result
423
 
424
+ return chatbot, history, gr.File(visible=False), "Success"
425
  """
426
  for character in result:
427
  history[-1][1] += character
 
434
  except:
435
  pass
436
  """
437
+ ##################################################
438
+ #zu einem Text-Prompt ein Bild via Stable Diffusion generieren
439
  def generate_bild(prompt):
440
  data = {"inputs": prompt}
441
  response = requests.post(API_URL, headers=HEADERS, json=data)
442
  print("fertig Bild")
443
  return response
444
 
445
+ ##################################################
446
+ #zu einem Bild und Text-Prompt eine Analyse generieren
447
+ def generate_text_zu_bild(file, prompt):
448
+ headers, payload = process_image(file, prompt)
449
+ response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
450
+ #als json ausgeben
451
+ data = response.json()
452
+ # Den "content" auswählen, da dort die Antwort der Ki enthalten ist
453
+ result = data['choices'][0]['message']['content']
454
+ return result
455
+
456
+ ####################################################
457
+ #aus einem Text-Prompt die Antwort von KI bekommen
458
+ #mit oder ohne RAG möglich
459
  def generate_text (prompt, file, chatbot, history, rag_option, model_option, openai_api_key, k=3, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3,):
460
  global splittet
461
  print(splittet)
 
488
  #Anfrage an OpenAI ----------------------------
489
  print("OpenAI normal.......................")
490
  llm = ChatOpenAI(model_name = MODEL_NAME, openai_api_key = openai_api_key, temperature=temperature)#, top_p = top_p)
 
491
  else:
492
  #oder an Hugging Face --------------------------
493
  llm = HuggingFaceHub(repo_id=repo_id, model_kwargs={"temperature": 0.5, "max_length": 128})
 
503
  splits = document_loading_splitting()
504
  document_storage_chroma(splits)
505
  db = document_retrieval_chroma(llm, history_text_und_prompt)
506
+ print("LLM aufrufen mit RAG: ...........")
507
  result = rag_chain(llm, history_text_und_prompt, db)
508
  elif (rag_option == "MongoDB"):
509
  #splits = document_loading_splitting()
 
514
  print("LLM aufrufen ohne RAG: ...........")
515
  result = llm_chain(llm, history_text_und_prompt)
516
 
 
517
  except Exception as e:
518
  raise gr.Error(e)
519
 
 
566
  with gr.Row():
567
  emptyBtn = gr.ClearButton( [user_input, chatbot], value="🧹 Neue Session", scale=3)
568
  upload = gr.UploadButton("📁", file_types=["image", "video", "audio"], scale=3)
569
+ file_display = gr.File( label=None, interactive=False, height=30, min_width=30, visible=False, scale=2)
570
 
571
  with gr.Column():
572
  with gr.Column(min_width=50, scale=1):
 
630
  max_context_length_tokens,
631
  repetition_penalty
632
  ],
633
+ outputs=[chatbot, history, file_display, status_display], #[chatbot, history, status_display]
634
  show_progress=True,
635
  )
636
 
 
659
 
660
 
661