Spaces:
Running
Running
| import gradio as gr | |
| from bedrock_client import bedrock_llm | |
| from langchain.schema import SystemMessage, HumanMessage, AIMessage | |
| import os | |
| from distutils.util import strtobool | |
| MULTIMODAL = os.environ.get("MULTIMODAL", "false") | |
| # 1) convert common truthy/falsy strings to bool | |
| try: | |
| MULTIMODAL = bool(strtobool(MULTIMODAL)) | |
| except ValueError: | |
| # catch unrecognized values | |
| raise ValueError(f"Invalid MULTIMODAL value: Use true/false, 1/0, yes/no.") | |
| AUTHS = [(os.environ.get('USER'), os.environ.get('PW'))] | |
| SYSTEM_PROMPT = os.environ.get('SYSTEM_PROMPT', '') | |
| def chat(message, history): | |
| # 1) start with the system prompt | |
| history_langchain_format: list = [SystemMessage(content=SYSTEM_PROMPT)] | |
| # 2) replay the user/assistant turns | |
| for msg in history: | |
| if msg["role"] == "user": | |
| history_langchain_format.append(HumanMessage(content=msg["content"])) | |
| elif msg["role"] == "assistant": | |
| history_langchain_format.append(AIMessage(content=msg["content"])) | |
| # 3) append the new user message | |
| history_langchain_format.append(HumanMessage(content=message)) | |
| stream =bedrock_llm.stream(history_langchain_format) | |
| full = next(stream) | |
| for chunk in stream: | |
| full +=chunk | |
| yield full.content | |
| with gr.Blocks(css_paths=["static/deval.css"],theme = gr.themes.Default(primary_hue="blue", secondary_hue="yellow"),) as demo: | |
| # ββ Logo + Header + Logout ββββββββββββββββββββββββββββββββ | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Image( | |
| value="static/logo.png", | |
| height=50, | |
| show_label=False, | |
| interactive=False, | |
| show_download_button=False, | |
| show_fullscreen_button=False, | |
| elem_id="logo-primary", # matches the CSS above | |
| ) | |
| with gr.Column(scale=10): | |
| gr.Markdown( | |
| "# DEvalBot\n\n" | |
| "**Hinweis:** Bitte gebe keine vertraulichen Informationen ein. " | |
| "Dazu zΓ€hlen u.a. sensible personenbezogene Daten, institutsinterne " | |
| "Informationen oder Dokumente, unverΓΆffentlichte Berichtsinhalte, " | |
| "vertrauliche Informationen oder Dokumente externer Organisationen " | |
| "sowie sensible erhobene Daten (wie etwa Interviewtranskripte).", elem_id="header-text" | |
| ) | |
| # inject auto-reload script | |
| gr.HTML( | |
| """ | |
| <script> | |
| // Reload the page after 1 minutes (300β000 ms) | |
| setTimeout(() => { | |
| window.location.reload(); | |
| }, 1000); | |
| </script> | |
| """ | |
| ) | |
| gr.ChatInterface( | |
| chat, | |
| type="messages", | |
| multimodal=MULTIMODAL, | |
| editable=True, | |
| concurrency_limit=20, | |
| save_history=True, | |
| ) | |
| demo.queue().launch(auth=AUTHS, share=True, ssr_mode=False) |