Spaces:
Runtime error
Runtime error
import pandas as pd | |
import streamlit as st | |
from src.st_helpers import st_setup | |
from src.common import img_dir, escape_dollars | |
from src.architectures import * | |
def show_architecture(architecture: str) -> None: | |
""" | |
Convenience wrapper for the streamlit rendering of an architecture details and the | |
ability to interact with the architecture | |
:param architecture: the name of the architecture to output | |
""" | |
arch = Architecture.get_architecture(architecture) | |
# Segment into two containers for organisation | |
arch_container = st.container() | |
chat_container = st.container() | |
with arch_container: | |
st.divider() | |
st.write(f'### {arch.name}') | |
st.write('#### Architecture description') | |
st.write(arch.description) | |
if arch.img is not None: | |
img = os.path.join(img_dir, arch.img) | |
st.image(img, caption=f'Protypical {arch.name} Under Test', width=1000) | |
table_data = [] | |
for j, s in enumerate(arch.steps, start=1): | |
table_data.append( | |
[j, s.__class__.__name__, s.description, s.config_description()] | |
) | |
table_cols = ['Step', 'Name', 'Description', 'Config details'] | |
st.write('#### Architecture pipeline steps') | |
st.table(pd.DataFrame(table_data, columns=table_cols)) | |
with chat_container: | |
st.write(f"### Chat with {arch.name}") | |
st.write("Note this is a simple single query through the relevant architecture. This is just a sample so you can interact with it and does not manage a chat session history.") | |
chat_col, trace_col, request_col = st.columns([3, 2, 2]) | |
with chat_col: | |
with st.chat_message("assistant"): | |
st.write("Chat with me in the box below") | |
if prompt := st.chat_input("Ask a question"): | |
with chat_col: | |
with st.chat_message("user"): | |
st.write(prompt) | |
request = ArchitectureRequest(query=prompt) | |
trace = arch(request) | |
with st.chat_message("assistant"): | |
st.write(escape_dollars(request.response)) | |
with trace_col: | |
st.write("#### Architecture Trace") | |
st.markdown(trace.as_markdown()) | |
with request_col: | |
st.write("#### Full Request/Response") | |
st.markdown(request.as_markdown()) | |
if st_setup('LLM Arch'): | |
st.write("# LLM Architectures") | |
Architecture.load_architectures() | |
# Display the available architectures | |
arch_count = len(Architecture.architectures) | |
if arch_count == 1: | |
st.write('### 1 Architecture available') | |
else: | |
st.write(f'### {arch_count} Architectures available') | |
if st.button("Force reload of architecture configs"): | |
Architecture.load_architectures(force_reload=True) | |
arch_names = [a.name for a in Architecture.architectures] | |
selected_arch = st.radio(label="Available architectures", label_visibility="hidden", options=arch_names, index=None) | |
if selected_arch is None: | |
st.info('Select an architecture from above to see details and interact with it') | |
else: | |
show_architecture(selected_arch) | |