llm-arch / pages /010_LLM_Architectures.py
alfraser's picture
Integrated the architecture page structure and code from the old codebase and integrated for hugging face deployment
cc9a95f
raw
history blame
3.03 kB
import pandas as pd
import streamlit as st
from src.st_helpers import st_setup
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)
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(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)