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 | |
print(f"Invalid MULTIMODAL value Set to Default Value=False: 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( ssr_mode=False) |