code: import os
  from dotenv import load_dotenv
  import streamlit as st
  from langchain.llms import OpenAI
  from langchain.chat_models import ChatOpenAI
  from langchain.embeddings.openai import OpenAIEmbeddings
  from langchain.text_splitter import RecursiveCharacterTextSplitter
  from langchain.chains import ConversationalRetrievalChain
  from langchain.agents.agent_toolkits import create_retriever_tool
  from langchain.agents.agent_toolkits import create_conversational_retrieval_agent
  from langchain.callbacks import StreamlitCallbackHandler
  from langchain.tools import BaseTool, Tool, tool
  from langchain.callbacks.base import BaseCallbackHandler
  from langchain.schema import ChatMessage
  from langchain.memory.chat_message_histories import StreamlitChatMessageHistory
  from langchain import PromptTemplate, LLMChain
  from langchain.vectorstores import LanceDB
  import lancedb
  import pandas as pd
  from langchain.chains import RetrievalQA
  
  st.set_page_config(page_title="GlobeBotter", page_icon="🎬")
  st.header('🎬 Welcome to MovieHarbor, your favourite movie recommender')
  
  load_dotenv()
  
  #os.environ["HUGGINGFACEHUB_API_TOKEN"]
  openai_api_key = os.environ['OPENAI_API_KEY']
  
  embeddings = OpenAIEmbeddings()
  uri = "data/sample-lancedb"
  db = lancedb.connect(uri)
  
  table = db.open_table('movies')
  docsearch = LanceDB(connection = table, embedding = embeddings)
  
  # Import the movie dataset
  md = pd.read_pickle('movies.pkl')
  
  # Create a sidebar for user input
  st.sidebar.title("Movie Recommendation System")
  st.sidebar.markdown("Please enter your details and preferences below:")
  
  # Ask the user for age, gender and favourite movie genre
  age = st.sidebar.slider("What is your age?", 1, 100, 25)
  gender = st.sidebar.radio("What is your gender?", ("Male", "Female", "Other"))
  genre = st.sidebar.selectbox("What is your favourite movie genre?", md.explode('genres')["genres"].unique())
  
  
  # Filter the movies based on the user input
  df_filtered = md[md['genres'].apply(lambda x: genre in x)]
  
  
  template_prefix = """You are a movie recommender system that help users to find movies that match their preferences. 
  Use the following pieces of context to answer the question at the end. 
  If you don't know the answer, just say that you don't know, don't try to make up an answer.
  
  {context}"""
  
  user_info = """This is what we know about the user, and you can use this information to better tune your research:
  Age: {age}
  Gender: {gender}"""
  
  template_suffix= """Question: {question}
  Your response:"""
  
  user_info = user_info.format(age = age, gender = gender)
  
  COMBINED_PROMPT = template_prefix +'\n'+ user_info +'\n'+ template_suffix
  print(COMBINED_PROMPT)
  
  #setting up the chain
  qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", 
      retriever=docsearch.as_retriever(search_kwargs={'data': df_filtered}), return_source_documents=True)
  
  
  query = st.text_input('Enter your question:', placeholder = 'What action movies do you suggest?')
  if query:
      result = qa({"query": query})
      st.write(result['result'])
  
  
apis: lancedb.connect
extract_api: [((924, 983), 'streamlit.set_page_config', 'st.set_page_config', ([], {'page_title': '"""GlobeBotter"""', 'page_icon': '"""🎬"""'}), "(page_title='GlobeBotter', page_icon='🎬')\n", (942, 983), True, 'import streamlit as st\n'), ((984, 1055), 'streamlit.header', 'st.header', (['"""🎬 Welcome to MovieHarbor, your favourite movie recommender"""'], {}), "('🎬 Welcome to MovieHarbor, your favourite movie recommender')\n", (993, 1055), True, 'import streamlit as st\n'), ((1057, 1070), 'dotenv.load_dotenv', 'load_dotenv', ([], {}), '()\n', (1068, 1070), False, 'from dotenv import load_dotenv\n'), ((1172, 1190), 'langchain.embeddings.openai.OpenAIEmbeddings', 'OpenAIEmbeddings', ([], {}), '()\n', (1188, 1190), False, 'from langchain.embeddings.openai import OpenAIEmbeddings\n'), ((1224, 1244), 'lancedb.connect', 'lancedb.connect', (['uri'], {}), '(uri)\n', (1239, 1244), False, 'import lancedb\n'), ((1290, 1337), 'langchain.vectorstores.LanceDB', 'LanceDB', ([], {'connection': 'table', 'embedding': 'embeddings'}), '(connection=table, embedding=embeddings)\n', (1297, 1337), False, 'from langchain.vectorstores import LanceDB\n'), ((1375, 1403), 'pandas.read_pickle', 'pd.read_pickle', (['"""movies.pkl"""'], {}), "('movies.pkl')\n", (1389, 1403), True, 'import pandas as pd\n'), ((1439, 1486), 'streamlit.sidebar.title', 'st.sidebar.title', (['"""Movie Recommendation System"""'], {}), "('Movie Recommendation System')\n", (1455, 1486), True, 'import streamlit as st\n'), ((1487, 1558), 'streamlit.sidebar.markdown', 'st.sidebar.markdown', (['"""Please enter your details and preferences below:"""'], {}), "('Please enter your details and preferences below:')\n", (1506, 1558), True, 'import streamlit as st\n'), ((1623, 1673), 'streamlit.sidebar.slider', 'st.sidebar.slider', (['"""What is your age?"""', '(1)', '(100)', '(25)'], {}), "('What is your age?', 1, 100, 25)\n", (1640, 1673), True, 'import streamlit as st\n'), ((1683, 1752), 'streamlit.sidebar.radio', 'st.sidebar.radio', (['"""What is your gender?"""', "('Male', 'Female', 'Other')"], {}), "('What is your gender?', ('Male', 'Female', 'Other'))\n", (1699, 1752), True, 'import streamlit as st\n'), ((2834, 2926), 'streamlit.text_input', 'st.text_input', (['"""Enter your question:"""'], {'placeholder': '"""What action movies do you suggest?"""'}), "('Enter your question:', placeholder=\n    'What action movies do you suggest?')\n", (2847, 2926), True, 'import streamlit as st\n'), ((2972, 2998), 'streamlit.write', 'st.write', (["result['result']"], {}), "(result['result'])\n", (2980, 2998), True, 'import streamlit as st\n'), ((2688, 2696), 'langchain.llms.OpenAI', 'OpenAI', ([], {}), '()\n', (2694, 2696), False, 'from langchain.llms import OpenAI\n')]