File size: 4,154 Bytes
7bbf2a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import streamlit as st
import tempfile
import os
import shutil
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain_community.document_loaders import WebBaseLoader
from langchain.chains.question_answering import load_qa_chain
from langchain_openai import ChatOpenAI
import os
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

# Hardcoded OpenAI API Key
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')

# Streamlit UI
st.title("🔍 AI Benefits Analysis for Any Company")

# User input: Only Website URL (with placeholder)
website_url = st.text_input("Enter Website URL", placeholder="e.g., https://www.companywebsite.com")

# Fixed question for AI analysis
fixed_question = (
    "Analyze how Artificial Intelligence (AI) can benefit this company based on its industry, "
    "key operations, and challenges. Provide insights on AI-driven improvements in customer experience, "
    "automation, sales, risk management, decision-making, and innovation. Include an AI implementation roadmap, "
    "challenges, solutions, and future opportunities with real-world examples."
)

# Temporary directory to store FAISS index
temp_dir = tempfile.gettempdir()
faiss_db_path = os.path.join(temp_dir, "faiss_index_dir")

# Function to fetch and process website data
def build_embeddings(url):
    st.info("Fetching and processing website data...")

    # Load website data
    loader = WebBaseLoader(url)
    raw_text = loader.load()

    # Chunking the fetched text
    text_splitter = CharacterTextSplitter(separator='\n', chunk_size=500, chunk_overlap=50)
    docs = text_splitter.split_documents(raw_text)

    # Creating embeddings
    embeddings = OpenAIEmbeddings()
    docsearch = FAISS.from_documents(docs, embeddings)

    # Save FAISS index
    if os.path.exists(faiss_db_path):
        shutil.rmtree(faiss_db_path)
    os.makedirs(faiss_db_path)
    docsearch.save_local(faiss_db_path)

    return docsearch

# Function to save text to a .txt file
def save_text_to_file(text, file_path):
    with open(file_path, "w") as f:
        f.write(text)

# Function to generate PDF from text file
def generate_pdf_from_txt(txt_file, pdf_file):
    with open(txt_file, "r") as f:
        lines = f.readlines()

    c = canvas.Canvas(pdf_file, pagesize=letter)
    c.setFont("Helvetica", 12)
    width, height = letter
    y_position = height - 40  # Start from top of the page

    # Add title to the PDF
    c.setFont("Helvetica-Bold", 16)
    c.drawString(40, y_position, "AI Benefits Analysis Report")
    y_position -= 30

    # Reset font for text content
    c.setFont("Helvetica", 12)

    # Write each line of the text to the PDF
    for line in lines:
        if y_position < 40:  # If near the bottom, create a new page
            c.showPage()
            c.setFont("Helvetica", 12)
            y_position = height - 40
        c.drawString(40, y_position, line.strip())
        y_position -= 14

    c.showPage()
    c.save()

# Run everything in one click
if st.button("Get AI Insights") and website_url:
    docsearch = build_embeddings(website_url)

    # AI Benefits Analysis
    st.subheader("💬 AI Benefits Analysis")

    chain = load_qa_chain(ChatOpenAI(model="gpt-4o"), chain_type="stuff")
    docs = docsearch.similarity_search(fixed_question)
    response = chain.run(input_documents=docs, question=fixed_question)

    st.write("**AI Insights:**", response)

    # Save the AI insights as a .txt file
    txt_file = tempfile.NamedTemporaryFile(delete=False, suffix=".txt")
    save_text_to_file(response, txt_file.name)

    # Generate PDF from the .txt file
    pdf_file = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf")
    generate_pdf_from_txt(txt_file.name, pdf_file.name)

    # Provide download link for the generated PDF
    with open(pdf_file.name, "rb") as f:
        st.download_button(
            label="Download AI Insights as PDF",
            data=f,
            file_name="ai_benefits_analysis_report.pdf",
            mime="application/pdf"
        )