Spaces:
Build error
Build error
| import streamlit as st | |
| import os | |
| import tempfile | |
| from llama_index import ( | |
| ServiceContext, | |
| SimpleDirectoryReader, | |
| VectorStoreIndex, | |
| ) | |
| from llama_index.llms import OpenAI | |
| import openai | |
| st.title("Grounded Generation") | |
| uploaded_files = st.file_uploader("Choose PDF files", type="pdf", accept_multiple_files=True) | |
| def load_data(uploaded_files): | |
| with st.spinner('Indexing documents...'): | |
| temp_dir = tempfile.mkdtemp() # Create temporary directory | |
| file_paths = [] # List to store paths of saved files | |
| # Save the uploaded files temporarily | |
| for i, uploaded_file in enumerate(uploaded_files): | |
| temp_path = os.path.join(temp_dir, f"temp_{i}.pdf") | |
| with open(temp_path, "wb") as f: | |
| f.write(uploaded_file.read()) | |
| file_paths.append(temp_path) | |
| # Read and index documents using SimpleDirectoryReader | |
| reader = SimpleDirectoryReader(input_dir=temp_dir, recursive=False) | |
| docs = reader.load_data() | |
| service_context = ServiceContext.from_defaults( | |
| llm=OpenAI( | |
| model="gpt-3.5-turbo-16k", | |
| temperature=0.1, | |
| ), | |
| system_prompt="You are an AI assistant that uses context from PDFs to assist the user in generating text." | |
| ) | |
| index = VectorStoreIndex.from_documents(docs, service_context=service_context) | |
| # Clean up temporary files and directory | |
| for file_path in file_paths: | |
| os.remove(file_path) | |
| os.rmdir(temp_dir) | |
| return index | |
| if uploaded_files: | |
| index = load_data(uploaded_files) | |
| user_query = st.text_input("Search for the products/info you want to use to ground your generated text content:") | |
| if 'retrieved_text' not in st.session_state: | |
| st.session_state['retrieved_text'] = '' | |
| if st.button("Retrieve"): | |
| with st.spinner('Retrieving text...'): | |
| query_engine = index.as_query_engine(similarity_top_k=1) | |
| st.session_state['retrieved_text'] = query_engine.query(user_query) | |
| st.write(f"Retrieved Text: {st.session_state['retrieved_text']}") | |
| content_type = st.selectbox("Select content type:", ["Blog", "Tweet"]) | |
| if st.button("Generate") and content_type: | |
| with st.spinner('Generating text...'): | |
| openai.api_key = os.getenv("OPENAI_API_KEY") | |
| try: | |
| if content_type == "Blog": | |
| prompt = f"Write a blog about 500 words in length using the {st.session_state['retrieved_text']}" | |
| elif content_type == "Tweet": | |
| prompt = f"Compose a tweet using the {st.session_state['retrieved_text']}" | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo-16k", | |
| messages=[ | |
| {"role": "system", "content": "You are a helpful assistant."}, | |
| {"role": "user", "content": prompt} | |
| ] | |
| ) | |
| generated_text = response['choices'][0]['message']['content'] | |
| st.write(f"Generated Text: {generated_text}") | |
| except Exception as e: | |
| st.write(f"An error occurred: {e}") | |