| from typing import Dict | |
| import langchain_community | |
| from langchain.agents import AgentExecutor | |
| from langchain_core.prompts import PromptTemplate | |
| from langchain_core.output_parsers import JsonOutputParser, StrOutputParser | |
| from langchain_community.chat_models import ChatOllama | |
| from agents.functions_agent.base import create_functions_agent | |
| from functions import tools, get_openai_tools | |
| from config import config | |
| from prompts.prompt import ( | |
| rag_agent_prompt, | |
| doc_grader_agent_prompt, | |
| router_agent_prompt, | |
| hallucination_grader_agent_prompt, | |
| rephrase_agent_prompt, | |
| output_agent_prompt, | |
| ) | |
| tools_dict = get_openai_tools() | |
| def get_agents(llm: langchain_community.chat_models.ChatOllama) -> Dict[str, AgentExecutor]: | |
| """Returns all available agents.""" | |
| functions_agent = create_functions_agent(llm=llm, prompt=rag_agent_prompt) | |
| functions_agent_executor = AgentExecutor(agent=functions_agent, tools=tools, verbose=True, return_intermediate_steps=True) | |
| rephrase_agent = rephrase_agent_prompt | llm | StrOutputParser() | |
| router_agent = router_agent_prompt | llm | JsonOutputParser() | |
| hallucination_grader_agent = hallucination_grader_agent_prompt | llm | JsonOutputParser() | |
| doc_grader_agent = doc_grader_agent_prompt | llm | JsonOutputParser() | |
| output_agent = output_agent_prompt | llm | StrOutputParser() | |
| return { | |
| "function_agent": functions_agent_executor, | |
| "doc_grader_agent": doc_grader_agent, | |
| "hallucination_grader_agent": hallucination_grader_agent, | |
| "router_agent": router_agent, | |
| "rephrase_agent": rephrase_agent, | |
| "output_agent": output_agent, | |
| } | |
| if __name__ == "__main__": | |
| from langchain.memory import ChatMessageHistory | |
| history = ChatMessageHistory() | |
| llm = ChatOllama(model = config.ollama_model, temperature = 0.55) | |
| function_agent = get_agents(llm)["function_agent"] | |
| while True: | |
| try: | |
| inp = input("User:") | |
| if inp == "/bye": | |
| break | |
| response = function_agent.invoke({"input": inp, "chat_history": history, "tools" : tools_dict}) | |
| response['output'] = response['output'].replace("<|im_end|>", "") | |
| history.add_user_message(inp) | |
| history.add_ai_message(response['output']) | |
| print(response['output']) | |
| except Exception as e: | |
| print(e) | |
| continue | |