ModelArena / apps /frontier_assistant.py
vedanshmathur7's picture
Sync from GitHub via hub-sync
af8b301 verified
Raw History Blame Contribute Delete
4.49 kB
"""
Frontier Assistant — Streamlit app backed by Groq API (Llama 3.1-8B-Instant).
Run with:
streamlit run apps/frontier_assistant.py
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
# Ensure project root is on path
sys.path.insert(0, str(Path(__file__).parent.parent))
# Load .env if present
try:
from dotenv import load_dotenv
load_dotenv()
except ImportError:
pass
import streamlit as st
from apps.shared_ui import (
configure_page,
handle_chat_turn,
render_chat_history,
render_observability_dashboard,
render_sidebar_info,
)
from core.memory import ConversationMemory
from core.model_router import create_assistant
from core.observability import ObservabilityManager
from core.prompts import FRONTIER_SYSTEM_PROMPT, PromptBuilder
from core.safety import SafetyFilter
from core.utils import setup_logging
setup_logging()
# ---------------------------------------------------------------------------
# Configuration
# ---------------------------------------------------------------------------
FRONTIER_BACKEND = os.getenv("FRONTIER_BACKEND", "openai")
FRONTIER_MODEL = os.getenv("FRONTIER_MODEL", "llama-3.1-8b-instant")
MAX_EXCHANGES = int(os.getenv("MAX_EXCHANGES", "8"))
# ---------------------------------------------------------------------------
# Page setup
# ---------------------------------------------------------------------------
configure_page("Frontier Assistant — Llama 3.1-8B (Groq)", icon="🚀")
st.title("🚀 Frontier Assistant")
st.caption(f"Powered by **{FRONTIER_MODEL}** via **{FRONTIER_BACKEND} API**")
# ---------------------------------------------------------------------------
# API key check
# ---------------------------------------------------------------------------
api_key = os.getenv("OPENAI_API_KEY", "")
if not api_key:
st.warning(
"⚠️ **OPENAI_API_KEY not set.** "
"Add it to your `.env` file or set it as an environment variable. "
"The assistant will not work without it."
)
# ---------------------------------------------------------------------------
# Session state initialization
# ---------------------------------------------------------------------------
if "frontier_memory" not in st.session_state:
st.session_state.frontier_memory = ConversationMemory(
max_exchanges=MAX_EXCHANGES,
system_prompt=FRONTIER_SYSTEM_PROMPT,
)
if "frontier_obs" not in st.session_state:
st.session_state.frontier_obs = ObservabilityManager()
if "frontier_safety" not in st.session_state:
st.session_state.frontier_safety = SafetyFilter(strict_mode=True)
if "frontier_assistant" not in st.session_state:
try:
st.session_state.frontier_assistant = create_assistant(
backend=FRONTIER_BACKEND,
model_name=FRONTIER_MODEL,
)
except Exception as e:
st.error(f"Failed to initialize Frontier assistant: {e}")
st.stop()
memory: ConversationMemory = st.session_state.frontier_memory
obs_manager: ObservabilityManager = st.session_state.frontier_obs
safety_filter: SafetyFilter = st.session_state.frontier_safety
assistant = st.session_state.frontier_assistant
# ---------------------------------------------------------------------------
# Sidebar
# ---------------------------------------------------------------------------
settings = render_sidebar_info(
model_name=FRONTIER_MODEL,
backend=FRONTIER_BACKEND,
memory=memory,
obs_manager=obs_manager,
safety_filter=safety_filter,
)
safety_filter.strict_mode = settings["strict_mode"]
# ---------------------------------------------------------------------------
# Main chat area
# ---------------------------------------------------------------------------
tab_chat, tab_obs = st.tabs(["💬 Chat", "📊 Observability"])
with tab_chat:
render_chat_history(memory)
if user_input := st.chat_input("Ask me anything..."):
with st.chat_message("user"):
st.markdown(user_input)
prompt_builder = PromptBuilder(system_prompt=FRONTIER_SYSTEM_PROMPT)
handle_chat_turn(
user_input=user_input,
memory=memory,
prompt_builder=prompt_builder,
assistant=assistant,
safety_filter=safety_filter,
obs_manager=obs_manager,
backend=FRONTIER_BACKEND,
stream=True,
)
with tab_obs:
render_observability_dashboard(obs_manager)