CoolFace
Apppublic

ekkeltd/trial

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py187 linesDownload Raw Back to root
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