File size: 1,859 Bytes
25c6529
b23583b
25c6529
 
b23583b
 
 
 
 
 
 
 
 
 
 
 
 
 
f6041d9
b23583b
 
f6041d9
b23583b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25c6529
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
import pickle
import faiss
import numpy as np
import gradio as gr
import openai

# Initialize OpenAI API
openai.api_key = "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"  # Replace with your API key

# Function to embed text using OpenAI
def embed_text(text):
    response = openai.Embedding.create(
        input=text,
        model="text-embedding-ada-002"  # Use the appropriate model name here
    )
    return np.array(response['data'][0]['embedding'])

# Load the FAISS index
index = faiss.read_index("faiss_Recursive100_index.bin")

# Load metadata from the pickle file
with open("metadata_Recursive100.pkl", "rb") as f:
    metadata = pickle.load(f)

# Function to perform the search
def semantic_search(query, k=5):
    query_embedding = embed_text(query)
    distances, indices = index.search(np.array([query_embedding]), k)

    results_by_title = {}
    for idx in indices[0]:
        title = metadata[idx]['title']
        chunk = metadata[idx]['chunk']

        if title not in results_by_title:
            results_by_title[title] = []

        results_by_title[title].append(chunk)

    # Prepare the results for display
    results_text = ""
    for title, chunks in results_by_title.items():
        full_text = " ".join(chunks)
        results_text += f"**Title**: {title}\n\n**Full Text**: {full_text}\n\n{'-'*50}\n\n"

    return results_text

# Create the Gradio interface
interface = gr.Interface(
    fn=semantic_search,
    inputs=[gr.Textbox(label="Enter your query"), gr.Slider(1, 10, value=5, step=1, label="Number of Results")],
    outputs="markdown",
    title="Semantic Search with FAISS",
    description="Enter a query to search the indexed text using FAISS."
)

# Launch the interface
interface.launch()