alexkueck commited on
Commit
d8e0ced
1 Parent(s): bd7312c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +170 -3
app.py CHANGED
@@ -80,6 +80,7 @@ os.environ["TAVILY_API_KEY"] = TAVILY_KEY
80
  #MODEL_NAME = "gpt-3.5-turbo-1106"
81
  MODEL_NAME= "gpt-4-1106-preview"
82
  MODEL_NAME_IMAGE = "gpt-4-vision-preview"
 
83
 
84
 
85
  #verfügbare Modelle anzeigen lassen
@@ -167,6 +168,12 @@ def clear_all(history, uploaded_file_paths, chats):
167
 
168
  return None, gr.Image(visible=False), uploaded_file_paths, [], gr.File(uploaded_file_paths, label="Download-Chatverläufe", visible=True, file_count="multiple", interactive = False), chats
169
 
 
 
 
 
 
 
170
 
171
 
172
 
@@ -198,6 +205,7 @@ def add_text2(chatbot, prompt):
198
  print("chatbot nach add_text............")
199
  print(chatbot)
200
  return chatbot, prompt, ""
 
201
 
202
  ############################################
203
  #nach dem Upload soll das zusätzliche Fenster mit dem image drinnen angezeigt werden
@@ -491,6 +499,81 @@ def generate_text (prompt, chatbot, history, rag_option, model_option, openai_ap
491
 
492
  return result, suche_im_Netz
493
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
494
 
495
 
496
  ################################################
@@ -531,16 +614,23 @@ with gr.Blocks(css=custom_css(), theme=themeAlex) as demo:
531
  # für die Übergabe an die ki aber der Pfad zum Bild behalten werden muss - was in der history der Fall ist!
532
  history = gr.State([])
533
  uploaded_file_paths= gr.State([])
 
 
534
  #alle chats einer Session sammeln
535
  chats = gr.State({})
536
  #damit der Prompt auch nach dem upload in die History noch für predicts_args verfügbar ist
537
  user_question = gr.State("")
 
538
  #damit der Prompt auch nach dem upload in die History noch für predicts_args verfügbar ist
539
  user_question2 = gr.State("")
 
540
  attached_file = gr.State(None)
541
  attached_file_history = gr.State(None)
 
 
542
  status_display = gr.State("")
543
  status_display2 = gr.State("")
 
544
  ################################################
545
  # Tab zum Chatbot mit Text oder Bildeingabe
546
  ################################################
@@ -637,8 +727,8 @@ with gr.Blocks(css=custom_css(), theme=themeAlex) as demo:
637
  # Tab zum Zeichnen mit Stable Diffusion
638
  ################################################
639
  with gr.Tab("LI Zeichnen"):
640
- with gr.Row():
641
- #gr.HTML("LI Zeichnen mit KI")
642
  status_display2 = gr.Markdown("Success", visible = False, elem_id="status_display")
643
  #gr.Markdown(description2)
644
  with gr.Row():
@@ -657,14 +747,47 @@ with gr.Blocks(css=custom_css(), theme=themeAlex) as demo:
657
  #cancelBtn2 = gr.Button("Stop")
658
  with gr.Row():
659
  emptyBtn2 = gr.ClearButton([user_input, chatbot_bild], value="🧹 Neue Session", scale=10)
660
- #additional_inputs_accordion = gr.Accordion(label="Weitere Eingaben...", open=False)
661
  with gr.Column():
662
  with gr.Column(min_width=50, scale=1):
663
  with gr.Tab(label="Parameter Einstellung"):
664
  #gr.Markdown("# Parameters")
665
  model_option_zeichnen = gr.Radio(["Stable Diffusion","DallE"], label="Modellauswahl", value = "Stable Diffusion")
666
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
667
 
 
 
668
  gr.Markdown(description)
669
 
670
  ######################################
@@ -740,6 +863,50 @@ with gr.Blocks(css=custom_css(), theme=themeAlex) as demo:
740
  #cancelBtn2.click(
741
  #cancels=[predict_event2_1,predict_event2_2 ]
742
  #)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
743
 
744
 
745
  demo.title = "LI-ChatBot"
 
80
  #MODEL_NAME = "gpt-3.5-turbo-1106"
81
  MODEL_NAME= "gpt-4-1106-preview"
82
  MODEL_NAME_IMAGE = "gpt-4-vision-preview"
83
+ MODEL_NAME_CODE = "code-davinci-002"
84
 
85
 
86
  #verfügbare Modelle anzeigen lassen
 
168
 
169
  return None, gr.Image(visible=False), uploaded_file_paths, [], gr.File(uploaded_file_paths, label="Download-Chatverläufe", visible=True, file_count="multiple", interactive = False), chats
170
 
171
+
172
+ #wenn löschen Button geklickt
173
+ def clear_all3(history):
174
+ #die session variable in gradio erweitern und alle fliepath neu in das gr.File hochladen
175
+ uploaded_file_paths= ""
176
+ return None, gr.Image(visible=False), [],
177
 
178
 
179
 
 
205
  print("chatbot nach add_text............")
206
  print(chatbot)
207
  return chatbot, prompt, ""
208
+
209
 
210
  ############################################
211
  #nach dem Upload soll das zusätzliche Fenster mit dem image drinnen angezeigt werden
 
499
 
500
  return result, suche_im_Netz
501
 
502
+
503
+ #Funktion wird direkt aufgerufen aus der GUI - von hier muss auch die Rückmeldung kommen....
504
+ #man kann einen Text-Prompt eingeben , dazu ein Image hochladen, und dann dazu code erzeugen lassen
505
+ def generate_code(prompt_in, file, chatbot, history, 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,top_k=35):
506
+ #prompt normalisieren bevor er an die KIs geht
507
+ prompt = normalise_prompt(prompt_in)
508
+
509
+ #kein Bild hochgeladen -> auf Text antworten...
510
+ status = "Antwort der KI ..."
511
+ if (file == None and file_history == None):
512
+ result, status = generate_code_antwort(prompt, chatbot, history, 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, top_k=35)
513
+ history = history + [[prompt, result]]
514
+ else:
515
+ #Es wurde ein File neu angehängt -> wenn prompt dazu, das Bild analysieren
516
+ #das history_fiel muss neu gesetzt werden
517
+ if (file != None):
518
+ # file_history wird neu gesetzt in der Rückgabe dieser Funktion...
519
+ neu_file = file
520
+
521
+ #herausfinden, ob Bild oder Dokument...
522
+ ext = analyze_file(neu_file)
523
+ if (ext == "png" or ext == "PNG" or ext == "jpg" or ext == "jpeg" or ext == "JPG" or ext == "JPEG"):
524
+ result= generate_text_zu_bild(neu_file, prompt, k, rag_option, chatbot, history, db)
525
+ else:
526
+ result = generate_text_zu_doc(neu_file, prompt, k, rag_option, chatbot, history, db)
527
+
528
+ #die history erweitern - abhängig davon, ob gerade ein file hochgeladen wurde oder nicht
529
+ if (file != None):
530
+ history = history + [[(file,), None],[prompt, result]]
531
+ else:
532
+ history = history + [[prompt, result]]
533
+
534
+ chatbot[-1][1] = ""
535
+ for character in result:
536
+ chatbot[-1][1] += character
537
+ time.sleep(0.03)
538
+ yield chatbot, history, None, neu_file, status
539
+ if shared_state.interrupted:
540
+ shared_state.recover()
541
+ try:
542
+ yield chatbot, history, None, neu_file, "Stop: Success"
543
+ except:
544
+ pass
545
+
546
+
547
+ ####################################################
548
+ #aus einem Text-Prompt die Antwort von KI bekommen
549
+ #mit oder ohne RAG möglich
550
+ def generate_code_antwort (prompt, chatbot, history, 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, top_k=35):
551
+ suche_im_Netz="Antwort der KI ..."
552
+ print("Text pur..............................")
553
+ if (openai_api_key == "" or openai_api_key == "sk-"):
554
+ #raise gr.Error("OpenAI API Key is required.")
555
+ #eigenen OpenAI key nutzen
556
+ openai_api_key= OAI_API_KEY
557
+ if (prompt == ""):
558
+ raise gr.Error("Prompt ist erforderlich.")
559
+
560
+
561
+ try:
562
+ ###########################
563
+ #LLM auswählen (OpenAI oder HF)
564
+ ###########################
565
+ if (model_option == "Davinci"):
566
+ #Anfrage an OpenAI ----------------------------
567
+ print("OpenAI Anfrage.......................")
568
+ llm = ChatOpenAI(model_name = MODEL_NAME_CODE, openai_api_key = openai_api_key, temperature=temperature)#, top_p = top_p)
569
+ #Prompt an history anhängen und einen Text daraus machen
570
+ history_text_und_prompt = generate_prompt_with_history_openai(prompt, history)
571
+ else:
572
+ #oder an Hugging Face --------------------------
573
+
574
+ print("LLM aufrufen ohne RAG: ...........")
575
+ resulti = llm_chain(llm, history_text_und_prompt)
576
+ result = resulti.strip()
577
 
578
 
579
  ################################################
 
614
  # für die Übergabe an die ki aber der Pfad zum Bild behalten werden muss - was in der history der Fall ist!
615
  history = gr.State([])
616
  uploaded_file_paths= gr.State([])
617
+ history3 = gr.State([])
618
+ uploaded_file_paths3= gr.State([])
619
  #alle chats einer Session sammeln
620
  chats = gr.State({})
621
  #damit der Prompt auch nach dem upload in die History noch für predicts_args verfügbar ist
622
  user_question = gr.State("")
623
+ #für die anderen Tabs auch...
624
  #damit der Prompt auch nach dem upload in die History noch für predicts_args verfügbar ist
625
  user_question2 = gr.State("")
626
+ user_question3 = gr.State("")
627
  attached_file = gr.State(None)
628
  attached_file_history = gr.State(None)
629
+ attached_file3 = gr.State(None)
630
+ attached_file_history3 = gr.State(None)
631
  status_display = gr.State("")
632
  status_display2 = gr.State("")
633
+ status_display3 = gr.State("")
634
  ################################################
635
  # Tab zum Chatbot mit Text oder Bildeingabe
636
  ################################################
 
727
  # Tab zum Zeichnen mit Stable Diffusion
728
  ################################################
729
  with gr.Tab("LI Zeichnen"):
730
+ with gr.Row():
731
+ gr.HTML("Lass den KI-Bot deine Ideen zeichnen...")
732
  status_display2 = gr.Markdown("Success", visible = False, elem_id="status_display")
733
  #gr.Markdown(description2)
734
  with gr.Row():
 
747
  #cancelBtn2 = gr.Button("Stop")
748
  with gr.Row():
749
  emptyBtn2 = gr.ClearButton([user_input, chatbot_bild], value="🧹 Neue Session", scale=10)
750
+ #additional_inputs_accordion = gr.Accordion(label="Weitere Eingaben...", open=False)
751
  with gr.Column():
752
  with gr.Column(min_width=50, scale=1):
753
  with gr.Tab(label="Parameter Einstellung"):
754
  #gr.Markdown("# Parameters")
755
  model_option_zeichnen = gr.Radio(["Stable Diffusion","DallE"], label="Modellauswahl", value = "Stable Diffusion")
756
 
757
+
758
+ with gr.Tab("LI Codebot"):
759
+ with gr.Row():
760
+ gr.HTML("Gib als textuelle Beschreibung ein, was in Programmcode übersetzt werden soll und in welcher Sprache...")
761
+ status_display3 = gr.Markdown("Success", visible = False, elem_id="status_display")
762
+ #gr.Markdown(description2)
763
+ with gr.Row():
764
+ with gr.Column(scale=5):
765
+ with gr.Row():
766
+ chatbot_code = gr.Chatbot(elem_id="li-zeichnen",show_copy_button=True, show_share_button=True)
767
+ with gr.Row():
768
+ with gr.Column(scale=12):
769
+ user_input3 = gr.Textbox(
770
+ show_label=False, placeholder="Gib hier deinen Prompt ein...",
771
+ container=False
772
+ )
773
+ with gr.Column(min_width=70, scale=1):
774
+ submitBtn3 = gr.Button("Senden")
775
+ with gr.Column(min_width=70, scale=1):
776
+ cancelBtn3 = gr.Button("Stop")
777
+ with gr.Row():
778
+ #file_display = gr.File(visible=False)
779
+ image_display3 = gr.Image( visible=False)
780
+ upload3 = gr.UploadButton("📁", file_types=["image", "pdf", "docx", "pptx", "xlsx"], scale = 10)
781
+ emptyBtn3 = gr.ClearButton([user_input, chatbot, history, attached_file, attached_file_history, image_display], value="🧹 Neue Session", scale=10)
782
+ with gr.Column():
783
+ with gr.Column(min_width=50, scale=1):
784
+ with gr.Tab(label="Parameter Einstellung"):
785
+ #gr.Markdown("# Parameters")
786
+ model_option_code3 = gr.Radio(["Davinci","kommt noch"], label="Modellauswahl", value = "Davinci")
787
+
788
 
789
+
790
+
791
  gr.Markdown(description)
792
 
793
  ######################################
 
863
  #cancelBtn2.click(
864
  #cancels=[predict_event2_1,predict_event2_2 ]
865
  #)
866
+
867
+
868
+ ######################################
869
+ # Für Tab 3: Codebot
870
+ #Argumente für generate Funktion als Input
871
+ predict_args = dict(
872
+ fn=generate_code,
873
+ inputs=[
874
+ user_question3,
875
+ attached_file3,
876
+ chatbot3,
877
+ history3,
878
+ model_option,
879
+ openai_key,
880
+ anzahl_docs3,
881
+ top_p,
882
+ temperature,
883
+ max_length_tokens,
884
+ max_context_length_tokens,
885
+ repetition_penalty,
886
+ top_k
887
+ ],
888
+ outputs=[chatbot_code, history3, attached_file3, status_display3],
889
+ show_progress=True,
890
+ )
891
+
892
+
893
+ reset_args3 = dict(
894
+ fn=reset_textbox, inputs=[], outputs=[user_input3, status_display3]
895
+ )
896
+
897
+ # Chatbot
898
+ transfer_input_args3 = dict(
899
+ fn=add_text, inputs=[chatbot_code, history3, user_input3, attached_file3], outputs=[chatbot_code, history3, user_question3, attached_file3, image_display3, user_input3], show_progress3=True
900
+ )
901
+
902
+ predict_event3_1 = user_input3.submit(**transfer_input_args3, queue=False,).then(**predict_args3)
903
+ predict_event3_2 = submitBtn3.click(**transfer_input_args3, queue=False,).then(**predict_args3)
904
+ predict_event3_3 = upload3.upload(file_anzeigen3, [upload3], [image_display3, image_display3, attached_file3] ) #.then(**predict_args)
905
+ emptyBtn3.click(clear_all3, [history3], [attached_file3, image_display3, history3])
906
+ #Bild Anzeige neben dem Button wieder entfernen oder austauschen..
907
+ image_display3.select(file_loeschen3, [], [attached_file3, image_display3])
908
+ #download_button.click(fn=download_chats, inputs=chat_selector, outputs=[file_download])
909
+
910
 
911
 
912
  demo.title = "LI-ChatBot"