Spaces:
Running
Running
import gradio as gr | |
from bedrock_client import claude_llm | |
from utils import load_users | |
AUTHS = load_users('user.csv') | |
# somewhere near the top of app.py: | |
SYSTEM_PROMPT = ( | |
"Du bist DevalBot, ein konversationeller Assistent des Deutschen Evaluierungsinstituts " | |
"für Entwicklungsbewertung (DEval). DEval bietet staatlichen und zivilgesellschaftlichen " | |
"Organisationen in der Entwicklungszusammenarbeit unabhängige und wissenschaftlich fundierte " | |
"Evaluierungen. Deine Hauptsprache ist Deutsch; antworte daher standardmäßig auf Deutsch. " | |
"Du kannst zudem bei statistischen Analysen und Programmierung in Stata und R unterstützen." | |
) | |
def chat(user_message, history): | |
# 1) ignore empty | |
if not user_message or not user_message.strip(): | |
return | |
# 2) build the UI history (what Gradio shows) | |
ui_history = history + [{"role":"user","content":user_message}] | |
# 3) build the actual text prompt we’ll send to Claude | |
prompt_lines = [SYSTEM_PROMPT] | |
for msg in history: | |
# capitalize role for clarity | |
role = msg["role"].capitalize() | |
prompt_lines.append(f"{role}: {msg['content']}") | |
prompt_lines.append(f"User: {user_message}") | |
prompt_lines.append("Assistant:") # Claude will continue from here | |
full_prompt = "\n".join(prompt_lines) | |
# 4) stream from the LLM | |
full_resp = "" | |
for token in claude_llm.stream(full_prompt): | |
full_resp += token | |
yield ui_history + [{"role":"assistant","content": full_resp}] | |
# 5) final append | |
ui_history.append({"role":"assistant","content": full_resp}) | |
yield ui_history | |
with gr.Blocks(css_paths=["static/deval.css"],theme = gr.themes.Default(primary_hue="blue", secondary_hue="yellow"),) as demo: | |
# ── Logo + Header + Logout ──────────────────────────────── | |
gr.Image( | |
value="static/logo.png", | |
show_label=False, | |
interactive=False, | |
show_download_button=False, | |
show_fullscreen_button=False, | |
elem_id="logo-primary", # matches the CSS above | |
) | |
#logout_btn = gr.Button("Logout", elem_id="logout-btn") | |
# 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", | |
editable=True, | |
concurrency_limit=200, | |
save_history=True, | |
) | |
demo.queue().launch(auth=AUTHS) |