| import os |
| import time |
| import gradio as gr |
| from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, StorageContext, load_index_from_storage, PromptTemplate |
| from llama_index.core import Settings |
| from llama_index.llms.openai import OpenAI |
| from llama_index.core.llms import ChatMessage, MessageRole |
| from llama_index.core.chat_engine.types import ChatMode |
| import base64 |
|
|
| |
|
|
| |
| path_modulhandbuch = "./hm_daten" |
| path_persist = os.path.join(path_modulhandbuch, "persist") |
|
|
| Settings.llm = OpenAI(temperature=0.1, model="gpt-4o-mini") |
|
|
| if not os.path.exists(path_persist): |
| documents = SimpleDirectoryReader("./hm_daten/").load_data() |
| index = VectorStoreIndex.from_documents(documents) |
| index.storage_context.persist(persist_dir=path_persist) |
| else: |
| storage_context = StorageContext.from_defaults(persist_dir=path_persist) |
| index = load_index_from_storage(storage_context) |
|
|
|
|
|
|
| |
| custom_system_prompt = """ |
| "We have provided context information below. \n" |
| # "---------------------\n" |
| # "{context_str}" |
| # "\n---------------------\n" |
| You are an expert assistant providing detailed and accurate information. |
| You help students finding important infromation about their university. |
| You always answer professional but friendly, encouraging, youthful und funny. |
| If the question is in german give answer in german , else give answer in english: {query_str} |
| """ |
|
|
| chat_engine = index.as_chat_engine( |
| chat_mode=ChatMode.CONDENSE_PLUS_CONTEXT, |
| system_prompt=custom_system_prompt, |
| streaming=True |
| ) |
|
|
|
|
| def response(message, history): |
| chat_history = [] |
| for i, msg in enumerate(history): |
| if i % 2 == 0: |
| history_message = ChatMessage(role=MessageRole.ASSISTANT, content=msg["content"]) |
| else: |
| history_message = ChatMessage(role=MessageRole.USER, content=msg["content"]) |
| chat_history.append(history_message) |
|
|
| streaming_response = chat_engine.stream_chat(message, chat_history=chat_history) |
|
|
| answer = "" |
| for text in streaming_response.response_gen: |
| time.sleep(0.05) |
| answer += text |
| yield answer |
|
|
|
|
| |
|
|
| |
| with open("./images/bg_hell.jpg", "rb") as image_file: |
| encoded_string = base64.b64encode(image_file.read()).decode() |
|
|
|
|
| custom_css = f""" |
| .gradio-container {{ |
| background: url("data:image/jpeg;base64,{encoded_string}") !important; |
| background-size: cover !important; |
| background-position: center !important; |
| max-width: 100% !important; |
| height: auto !important; |
| }} |
| """ |
| |
|
|
| def main(): |
| with gr.Blocks(css = custom_css, css_paths = "./style.css") as demo: |
| with gr.Row(equal_height=True): |
| with gr.Column(scale=1): |
| gr.Image("./images/hochi6.JPG", show_label = False, show_download_button = False, show_share_button = False, show_fullscreen_button = False) |
| with gr.Column(scale=8): |
| gr.Markdown("") |
| with gr.Row(equal_height=True): |
| with gr.Column(scale=1, variant = "default"): |
| gr.Markdown("") |
| with gr.Column(scale=1): |
| gr.Image("./images/scroll_test.jpg", show_label = False, show_download_button = False, show_share_button = False, show_fullscreen_button = False) |
| with gr.Column(scale=3): |
| chatbot = gr.Chatbot( |
| value=[{"role": "assistant", "content": "Hi. Du schon wieder. wie kann ich dir helfen?"}], |
| type="messages", |
| show_label=False, |
| avatar_images=("./images/avatar_images/human_2.png", "./images/avatar_images/hochi.PNG"), |
| elem_id="CHATBOT" |
| ) |
| chat_interface = gr.ChatInterface( |
| fn=response, |
| chatbot=chatbot, |
| type="messages" |
| ) |
| with gr.Column(scale=1, variant = "default"): |
| gr.Markdown("") |
| |
| |
| demo.launch(inbrowser= True) |
|
|
| main() |
|
|