| 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 |
|
|