text: import StringPromptTemplatefrom langchain import OpenAI, SerpAPIWrapper, LLMChainfrom typing import List, Unionfrom langchain.schema import AgentAction, AgentFinishfrom langchain.agents.agent_toolkits import NLAToolkitfrom langchain.tools.plugin import AIPluginimport reSetup LLMâ€‹llm = OpenAI(temperature=0)Set up pluginsâ€‹Load and index pluginsurls = [    "https://datasette.io/.well-known/ai-plugin.json",    "https://api.speak.com/.well-known/ai-plugin.json",    "https://www.wolframalpha.com/.well-known/ai-plugin.json",    "https://www.zapier.com/.well-known/ai-plugin.json",    "https://www.klarna.com/.well-known/ai-plugin.json",    "https://www.joinmilo.com/.well-known/ai-plugin.json",    "https://slack.com/.well-known/ai-plugin.json",    "https://schooldigger.com/.well-known/ai-plugin.json",]AI_PLUGINS = [AIPlugin.from_url(url) for url in urls]Tool Retrieverâ€‹We will use a vectorstore to create embeddings for each tool description. Then, for an incoming query we can create embeddings for that query and do a similarity search for relevant tools.from langchain.vectorstores import FAISSfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.schema import Documentembeddings = OpenAIEmbeddings()docs = [    Document(        page_content=plugin.description_for_model,        metadata={"plugin_name": plugin.name_for_model},    )    for plugin in AI_PLUGINS]vector_store = FAISS.from_documents(docs, embeddings)toolkits_dict = {