ekkeltd/trial
0
1import streamlit as st2import pandas as pd3from openai import OpenAI4from PyPDF2 import PdfReader5import requests6from youtube_transcript_api import YouTubeTranscriptApi7from urllib.parse import urlparse, parse_qs8from pinecone import Pinecone9import uuid10import os11from dotenv import load_dotenv12 13load_dotenv()14 15# Initialize OpenAI client16client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))17 18# Initialize Pinecone client (with error handling)19pinecone_index = None20try:21 pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY"))22 index_name = "indexsp"23 pinecone_index = pc.Index(index_name)24except Exception as e:25 st.warning(f"Failed to initialize Pinecone: {str(e)}. Some features may be limited.")26 27# Set page config28st.set_page_config(layout="wide", page_title="Content Interaction Hub")29 30# Custom CSS31st.markdown("""32<style>33 body {34 color: white;35 background-color: black;36 }37 .stButton>button {38 color: black;39 background-color: yellow;40 border: none;41 }42 .stTextInput>div>div>input {43 color: white;44 background-color: black;45 border-color: yellow;46 }47 .stTextArea>div>div>textarea {48 color: white;49 background-color: black;50 border-color: yellow;51 }52</style>53""", unsafe_allow_html=True)54 55# Initialize session state56if 'screen' not in st.session_state:57 st.session_state.screen = 'main'58if 'sources' not in st.session_state:59 st.session_state.sources = {'Books': False, 'Weblinks': False, 'YouTube Playlists': False}60if 'current_source' not in st.session_state:61 st.session_state.current_source = None62if 'chat_history' not in st.session_state:63 st.session_state.chat_history = []64 65def toggle_source(source):66 st.session_state.sources[source] = not st.session_state.sources[source]67 68def set_screen(screen):69 st.session_state.screen = screen70 71def set_current_source(source):72 st.session_state.current_source = source73 set_screen('upload')74 75def process_content(content_type, content):76 # Implement content processing logic here77 # This is a placeholder function78 return f"Processed {content_type}: {content[:100]}..."79 80def query_content(query):81 # Implement querying logic here82 # This is a placeholder function83 if pinecone_index:84 # Use Pinecone for querying if available85 # This is a simplified example and needs to be implemented properly86 results = pinecone_index.query(vector=[0.1]*1536, top_k=1, include_metadata=True)87 return f"Pinecone query result: {results}"88 else:89 # Fallback to a simple response if Pinecone is not available90 return f"Query response for: {query}"91 92def chat_with_ai(message):93 # Implement chat logic here using OpenAI94 try:95 response = client.chat.completions.create(96 model="gpt-3.5-turbo",97 messages=[{"role": "user", "content": message}]98 )99 return response.choices[0].message.content100 except Exception as e:101 return f"Error in AI response: {str(e)}"102 103def generate_notes():104 # Implement note generation logic here105 # This is a placeholder function106 return "Generated notes based on the conversation."107 108# Main screen109def main_screen():110 st.title("Content Interaction Hub")111 for source in st.session_state.sources:112 col1, col2 = st.columns([3, 1])113 with col1:114 st.write(source)115 with col2:116 st.button("ON" if st.session_state.sources[source] else "OFF",117 key=f"toggle_{source}",118 on_click=toggle_source,119 args=(source,))120 121 if any(st.session_state.sources.values()):122 st.button("Continue", on_click=set_screen, args=('source_selection',))123 124# Source selection screen125def source_selection_screen():126 st.title("Select Source")127 for source, enabled in st.session_state.sources.items():128 if enabled:129 if st.button(source):130 set_current_source(source)131 132# Upload screen133def upload_screen():134 st.title(f"Upload {st.session_state.current_source}")135 if st.session_state.current_source == 'Books':136 uploaded_file = st.file_uploader("Upload a PDF", type="pdf")137 if uploaded_file:138 content = process_content('pdf', uploaded_file)139 st.write(content)140 elif st.session_state.current_source == 'Weblinks':141 url = st.text_input("Enter a URL")142 if url:143 content = process_content('url', url)144 st.write(content)145 elif st.session_state.current_source == 'YouTube Playlists':146 playlist_url = st.text_input("Enter a YouTube playlist URL")147 if playlist_url:148 content = process_content('youtube', playlist_url)149 st.write(content)150 151 query = st.text_input("Enter your query")152 if query:153 response = query_content(query)154 st.text_area("Response", response, height=200)155 if st.button("Chat with Response"):156 set_screen('chat')157 158# Chat screen159def chat_screen():160 st.title("Chat with AI")161 for message in st.session_state.chat_history:162 st.text(f"{'You' if message['role'] == 'user' else 'AI'}: {message['content']}")163 164 user_input = st.text_input("Your message")165 if user_input:166 ai_response = chat_with_ai(user_input)167 st.session_state.chat_history.append({"role": "user", "content": user_input})168 st.session_state.chat_history.append({"role": "ai", "content": ai_response})169 170 if st.button("Generate Notes"):171 notes = generate_notes()172 st.text_area("Generated Notes", notes, height=200)173 174# Main app logic175def main():176 if st.session_state.screen == 'main':177 main_screen()178 elif st.session_state.screen == 'source_selection':179 source_selection_screen()180 elif st.session_state.screen == 'upload':181 upload_screen()182 elif st.session_state.screen == 'chat':183 chat_screen()184 185if __name__ == "__main__":186 main()187 