|
import streamlit as st, time |
|
from utils import st_def, ut_openai |
|
|
|
st_def.st_logo(title = "Welcome ๐ to Summary!", page_title="Summary",) |
|
st_def.st_summary() |
|
openai_api_key= st_def.st_sidebar() |
|
|
|
def init(): |
|
if 'page_text' not in st.session_state: |
|
st.error('Read PDF before continue ... ') |
|
return False |
|
elif not openai_api_key: |
|
st.error("Please add your OpenAI API key to continue.") |
|
return False |
|
else: |
|
return True |
|
|
|
|
|
def combine_chunks(summaries): |
|
chunks = [] |
|
summary = "" |
|
|
|
for sum in summaries: |
|
if len(sum) + len(summary) > 4000: |
|
chunks.append(summary) |
|
summary = "" |
|
summary += sum |
|
|
|
if len(chunks) == 0: chunks.append(summary) |
|
return chunks |
|
|
|
|
|
def main(): |
|
if not init(): return |
|
|
|
page_text_array = st.session_state['page_text'] |
|
print("Summarizing text..."+str(len(page_text_array))) |
|
|
|
combined_summaries = combine_chunks(page_text_array) |
|
print("Found " + str(len(combined_summaries)) + " chunks to summarize.") |
|
|
|
iterations = 1 |
|
while True: |
|
if len(combined_summaries) <= 1: break |
|
|
|
summaries_of_summaries = [] |
|
|
|
for i, summary in enumerate(combined_summaries): |
|
prompt =f""" |
|
Your task is to extract relevant information from a text on the page of a book. This information will be used to create a book summary. |
|
Extract relevant information from the following text, which is delimited with triple backticks.\ |
|
Be sure to preserve the important details. |
|
Text: ```{combined_summaries[i]}``` |
|
""" |
|
|
|
st.markdown(f'<span style="color:blue">Summarizing {i + 1} of {len(combined_summaries)}, iteration {iterations}...</span>', unsafe_allow_html=True) |
|
sum_page = ut_openai.aichat(openai_api_key=openai_api_key, messages = [{"role": "user", "content": prompt},]) |
|
summaries_of_summaries.append(sum_page) |
|
st.text(sum_page) |
|
time.sleep(2) |
|
|
|
st.write('summaries_of_summaries') |
|
st.write(summaries_of_summaries) |
|
combined_summaries = combine_chunks(summaries_of_summaries) |
|
st.text('combined_summaries') |
|
st.text(combined_summaries) |
|
iterations += 1 |
|
|
|
|
|
|
|
with st.spinner("Summarizing last chunk..."): |
|
final_summary = ut_openai.aichat(openai_api_key=openai_api_key, messages = [{"role": "user", "content": combined_summaries[0]},]) |
|
st.header("Final Summary") |
|
st.write(final_summary) |
|
st.success("๐จCheers!") |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|
|
|