File size: 2,514 Bytes
8f835ef
 
90f787c
8f835ef
 
e2275e6
cacb7f3
47f7c8e
4056dee
 
 
e2275e6
 
8f835ef
 
 
 
 
 
 
cacb7f3
8f835ef
 
6d50512
 
4056dee
 
 
 
 
 
 
6d50512
 
 
 
 
8f835ef
 
ec6ee59
6d50512
 
 
 
 
 
4056dee
6d50512
 
 
 
1bd14b6
cacb7f3
8f835ef
1df8064
8f835ef
 
 
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
import time
import gradio as gr
import os
import asyncio
from pymongo import MongoClient
from langchain_community.vectorstores import MongoDBAtlasVectorSearch
from langchain_openai import OpenAIEmbeddings
from langchain_community.llms import OpenAI
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# from langchain_community.prompts import PromptTemplate
# from langchain.chains import LLMChain
import json


## Connect to MongoDB Atlas local cluster
MONGODB_ATLAS_CLUSTER_URI = os.getenv('MONGODB_ATLAS_CLUSTER_URI')
client = MongoClient(MONGODB_ATLAS_CLUSTER_URI)
db_name = 'sample_mflix'
collection_name = 'embedded_movies'
collection = client[db_name][collection_name]

try:
    vector_store = MongoDBAtlasVectorSearch(embedding=OpenAIEmbeddings(), collection=collection, index_name='vector_index', text_key='plot', embedding_key='plot_embedding')
    llm = ChatOpenAI()
    prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a movie recommendation engine please elaborate on movies."),
    ("user", "List of movies: {input}")
     ])
    chain = prompt | llm 


except:
    # If open ai key is wrong
    print ('Open AI key is wrong')
    vector_store = None

def get_movies(message, history):

    try:
        movies =  vector_store.similarity_search(message, 3)
        retrun_text = ''
        for movie in movies:
            retrun_text = retrun_text + 'Title : ' +  movie.metadata['title'] + '\n------------\n' + 'Plot: ' + movie.page_content + '\n\n'

        print_llm_text = chain.invoke({"input": retrun_text})
        for i in range(len(retrun_text)):
            time.sleep(0.05)
            yield "Found: " + "\n\n" + retrun_text[: i+1]
    except:
        yield "Please clone the repo and add your open ai key as well as your MongoDB Atlas UR in the Secret Section of you Space\n OPENAI_API_KEY (your Open AI key) and MONGODB_ATLAS_CLUSTER_URI (0.0.0.0/0 whitelisted instance with Vector index created) \n\n For more information : https://mongodb.com/products/platform/atlas-vector-search"
    

demo = gr.ChatInterface(get_movies, examples=["What movies are scary?", "Find me a comedy", "Movies for kids"], title="Movies Atlas Vector Search",description="This small chat uses a similarity search to find relevant movies, it uses an MongoDB Atlase Vector Search read more here: https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-tutorial",submit_btn="Search").queue()

if __name__ == "__main__":
    demo.launch()