SexBot / retrieval.py
Pew404's picture
Upload folder using huggingface_hub
13fbd2e verified
from llama_index.core import SimpleDirectoryReader
from llama_index.llms.ollama import Ollama
from llama_index.core.agent import ReActAgent
from llama_index.core import VectorStoreIndex, SummaryIndex
from langchain_community.embeddings.ollama import OllamaEmbeddings
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.tools import QueryEngineTool, ToolMetadata
from llama_index.core import Settings, PromptTemplate
from prompts.agent_prompts import DEFAULT_AGENT_PROMPT
import asyncio
from llama_index.core import Settings
# global
llm = Ollama(model="llama3")
embed_model = OllamaEmbeddings(model="llama3")
Settings.llm = llm
Settings.embed_model = embed_model
# load data
documents = SimpleDirectoryReader(input_files=["./alice.pdf"]).load_data()
# create index/load index
node_parser = SentenceSplitter()
nodes = node_parser.get_nodes_from_documents(documents)
vector_index = VectorStoreIndex(nodes=nodes, show_progress=True)
summary_index = SummaryIndex(nodes=nodes, show_progress=True)
# vector engine
vector_query_engine = vector_index.as_query_engine()
summary_query_engine = summary_index.as_query_engine()
# load data
react_documents = SimpleDirectoryReader(input_files=["./ReAct.pdf"]).load_data()
# create index/load index
nodes = node_parser.get_nodes_from_documents(react_documents)
react_vector_index = VectorStoreIndex(nodes=nodes, show_progress=True)
react_summary_index = SummaryIndex(nodes=nodes, show_progress=True)
# vector engine
react_vector_query_engine = react_vector_index.as_query_engine()
react_summary_query_engine = react_summary_index.as_query_engine()
# tool
vector_tool = QueryEngineTool(
query_engine=vector_query_engine,
metadata=ToolMetadata(
name="vector_tool",
description="Useful tool to get info about alice via vector index search"
),
)
summary_tool = QueryEngineTool(
query_engine=summary_query_engine,
metadata=ToolMetadata(
name="summary_tool",
description="Useful tool to get info about alice via summary index search"
),
)
alice_agent = ReActAgent.from_tools(
tools=[vector_tool, summary_tool],
llm=llm,
verbose=True,
)
react_vector_tool = QueryEngineTool(
query_engine=react_vector_query_engine,
metadata=ToolMetadata(
name="react_vector_tool",
description="Useful tool to get info about paper ReAct via vector index search"
),
)
react_summary_tool = QueryEngineTool(
query_engine=react_summary_query_engine,
metadata=ToolMetadata(
name="react_summary_tool",
description="Useful tool to get info about paper ReAct via summary index search"
),
)
react_agent = ReActAgent.from_tools(
tools=[react_vector_tool, react_summary_tool],
llm=llm,
verbose=True,
)
alice_doc_tool = QueryEngineTool(
query_engine=alice_agent,
metadata=ToolMetadata(
name="alice_doc_tool",
description="Useful tool to answer question related to Alice In Wonderland"
),
)
react_doc_tool = QueryEngineTool(
query_engine=react_agent,
metadata=ToolMetadata(
name="react_doc_tool",
description="Useful tool to answer question related to ReAct paper"
),
)
agent_tools = [alice_doc_tool, react_doc_tool]
from llama_index.core.objects import ObjectIndex
obj_index = ObjectIndex.from_objects(
agent_tools,
index_cls=VectorStoreIndex,
)
top_agent = ReActAgent.from_tools(
tool_retriever=obj_index.as_retriever(similarity_top_k=1),
verbose=True
)
# agent
# agent = ReActAgent.from_tools(
# tools=tools,
# llm=llm,
# verbose=True,
# )
# agent.update_prompts({"agent_worker:system_prompt": PromptTemplate(DEFAULT_AGENT_PROMPT)})
# query
response = asyncio.run(top_agent.astream_chat("Why Reason and Action work?"))
print(response)