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) |