Spaces:
Sleeping
Sleeping
File size: 4,486 Bytes
af8b301 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | """
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)
|