ChatData / callbacks /arxiv_callbacks.py
Fangrui Liu
add wikipedia
45180a0
raw
history blame
3.7 kB
import streamlit as st
from typing import Dict, Any
from sql_formatter.core import format_sql
from langchain.callbacks.streamlit.streamlit_callback_handler import StreamlitCallbackHandler
from langchain.schema.output import LLMResult
class ChatDataSelfSearchCallBackHandler(StreamlitCallbackHandler):
def __init__(self) -> None:
self.progress_bar = st.progress(value=0.0, text="Working...")
self.tokens_stream = ""
def on_llm_start(self, serialized, prompts, **kwargs) -> None:
pass
def on_text(self, text: str, **kwargs) -> None:
self.progress_bar.progress(value=0.2, text="Asking LLM...")
def on_chain_end(self, outputs, **kwargs) -> None:
self.progress_bar.progress(value=0.6, text='Searching in DB...')
st.markdown('### Generated Filter')
st.write(outputs['text'], unsafe_allow_html=True)
def on_chain_start(self, serialized, inputs, **kwargs) -> None:
pass
class ChatDataSelfAskCallBackHandler(StreamlitCallbackHandler):
def __init__(self) -> None:
self.progress_bar = st.progress(value=0.0, text='Searching DB...')
self.status_bar = st.empty()
self.prog_value = 0.0
self.prog_map = {
'langchain.chains.qa_with_sources.retrieval.RetrievalQAWithSourcesChain': 0.2,
'langchain.chains.combine_documents.map_reduce.MapReduceDocumentsChain': 0.4,
'langchain.chains.combine_documents.stuff.StuffDocumentsChain': 0.8
}
def on_llm_start(self, serialized, prompts, **kwargs) -> None:
pass
def on_text(self, text: str, **kwargs) -> None:
pass
def on_chain_start(self, serialized, inputs, **kwargs) -> None:
cid = '.'.join(serialized['id'])
if cid != 'langchain.chains.llm.LLMChain':
self.progress_bar.progress(value=self.prog_map[cid], text=f'Running Chain `{cid}`...')
self.prog_value = self.prog_map[cid]
else:
self.prog_value += 0.1
self.progress_bar.progress(value=self.prog_value, text=f'Running Chain `{cid}`...')
def on_chain_end(self, outputs, **kwargs) -> None:
pass
class ChatDataSQLSearchCallBackHandler(StreamlitCallbackHandler):
def __init__(self) -> None:
self.progress_bar = st.progress(value=0.0, text='Writing SQL...')
self.status_bar = st.empty()
self.prog_value = 0
self.prog_interval = 0.2
def on_llm_start(self, serialized, prompts, **kwargs) -> None:
pass
def on_llm_end(
self,
response: LLMResult,
*args,
**kwargs,
):
text = response.generations[0][0].text
if text.replace(' ', '').upper().startswith('SELECT'):
st.write('We generated Vector SQL for you:')
st.markdown(f'''```sql\n{format_sql(text, max_len=80)}\n```''')
print(f"Vector SQL: {text}")
self.prog_value += self.prog_interval
self.progress_bar.progress(value=self.prog_value, text="Searching in DB...")
def on_chain_start(self, serialized, inputs, **kwargs) -> None:
cid = '.'.join(serialized['id'])
self.prog_value += self.prog_interval
self.progress_bar.progress(value=self.prog_value, text=f'Running Chain `{cid}`...')
def on_chain_end(self, outputs, **kwargs) -> None:
pass
class ChatDataSQLAskCallBackHandler(ChatDataSQLSearchCallBackHandler):
def __init__(self) -> None:
self.progress_bar = st.progress(value=0.0, text='Writing SQL...')
self.status_bar = st.empty()
self.prog_value = 0
self.prog_interval = 0.1