Spaces:
Sleeping
Sleeping
# app.py | |
from flask import Flask, render_template, request | |
import subprocess | |
import json | |
import os | |
import sys | |
from sentence_transformers import SentenceTransformer | |
from pinecone import Pinecone | |
app = Flask(__name__) | |
PINECONE_API_KEY = os.environ.get('PINECONE_API_KEY') | |
PINECONE_SPACE_NAME = os.environ.get('PINECONE_SPACE_NAME') | |
model = SentenceTransformer('paraphrase-MiniLM-L6-v2') | |
# Initialize Pinecone client | |
pc = Pinecone(api_key=PINECONE_API_KEY, environment='gcp-starter') | |
indexE = pc.Index(PINECONE_SPACE_NAME) | |
def index(): | |
return render_template('index.html') | |
def search(): | |
if request.method == 'POST': | |
query = request.form['query'] | |
youtube_links = [] | |
try: | |
# Encode the user-provided input | |
query_vector = model.encode(query) | |
# Convert the query vector to a list | |
query_vector_list = query_vector.tolist() | |
# Query Pinecone with the vector using the 'Index' object | |
results = indexE.query( | |
namespace='', | |
top_k=3, | |
include_values=True, | |
include_metadata=True, | |
vector=query_vector_list, | |
) | |
if results and 'matches' in results and results['matches']: | |
# Access metadata from each match | |
for match in results['matches']: | |
metadata = match.get('metadata', {}) | |
video_id = metadata.get('video_id') | |
start_time = metadata.get('start_time') | |
time = int(start_time) | |
# Create a clickable YouTube link | |
youtube_link = f'https://www.youtube.com/watch?v={video_id}&t={time}s' | |
youtube_links.append(youtube_link) | |
except Exception as e: | |
# Handle exceptions gracefully | |
error_message = str(e) | |
output = {'error': error_message} | |
print(json.dumps(output)) | |
else: | |
# No exceptions, render the template with results | |
if youtube_links: | |
return render_template('results.html', query=query, youtube_links=youtube_links) | |
else: | |
no_results_message = "No results found." | |
return render_template('results.html', query=query, no_results_message=no_results_message) | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860) |