From bd44bb61380cd132f97dfeda0555679b0cdc10b3 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Tue, 3 Dec 2024 15:17:21 -0800 Subject: [PATCH 01/29] initial code for sql agent llama Signed-off-by: minmin-intel --- comps/agent/langchain/src/agent.py | 5 + .../langchain/src/strategy/base_agent.py | 33 ++- .../src/strategy/sqlagent/__init__.py | 4 + .../langchain/src/strategy/sqlagent/hint.py | 75 +++++++ .../src/strategy/sqlagent/planner.py | 159 ++++++++++++++ .../langchain/src/strategy/sqlagent/prompt.py | 156 ++++++++++++++ .../src/strategy/sqlagent/sql_tools.py | 28 +++ .../langchain/src/strategy/sqlagent/utils.py | 203 ++++++++++++++++++ 8 files changed, 662 insertions(+), 1 deletion(-) create mode 100644 comps/agent/langchain/src/strategy/sqlagent/__init__.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/hint.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/planner.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/prompt.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/sql_tools.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/utils.py diff --git a/comps/agent/langchain/src/agent.py b/comps/agent/langchain/src/agent.py index 0533826c5..25e0c57ea 100644 --- a/comps/agent/langchain/src/agent.py +++ b/comps/agent/langchain/src/agent.py @@ -33,5 +33,10 @@ def instantiate_agent(args, strategy="react_langchain", with_memory=False): from .strategy.ragagent import RAGAgent return RAGAgent(args, with_memory, custom_prompt=custom_prompt) + elif strategy == "sql_agent_llama": + print("Initializing SQL Agent Llama") + from .strategy.sqlagent import SQLAgentLlama + + return SQLAgentLlama(args, with_memory, custom_prompt=custom_prompt) else: raise ValueError(f"Agent strategy: {strategy} not supported!") diff --git a/comps/agent/langchain/src/strategy/base_agent.py b/comps/agent/langchain/src/strategy/base_agent.py index beb4fa9f8..8cf629d61 100644 --- a/comps/agent/langchain/src/strategy/base_agent.py +++ b/comps/agent/langchain/src/strategy/base_agent.py @@ -36,5 +36,36 @@ def compile(self): def execute(self, state: dict): pass - def non_streaming_run(self, query, config): + def prepare_initial_state(self, query): raise NotImplementedError + + async def stream_generator(self, query, config): + initial_state = self.prepare_initial_state(query) + try: + async for event in self.app.astream(initial_state, config=config): + for node_name, node_state in event.items(): + yield f"--- CALL {node_name} ---\n" + for k, v in node_state.items(): + if v is not None: + yield f"{k}: {v}\n" + + yield f"data: {repr(event)}\n\n" + yield "data: [DONE]\n\n" + except Exception as e: + yield str(e) + + async def non_streaming_run(self, query, config): + initial_state = self.prepare_initial_state(query) + try: + async for s in self.app.astream(initial_state, config=config, stream_mode="values"): + message = s["messages"][-1] + if isinstance(message, tuple): + print(message) + else: + message.pretty_print() + + last_message = s["messages"][-1] + print("******Response: ", last_message.content) + return last_message.content + except Exception as e: + return str(e) diff --git a/comps/agent/langchain/src/strategy/sqlagent/__init__.py b/comps/agent/langchain/src/strategy/sqlagent/__init__.py new file mode 100644 index 000000000..cc8a59e69 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +from .planner import SQLAgentLlama diff --git a/comps/agent/langchain/src/strategy/sqlagent/hint.py b/comps/agent/langchain/src/strategy/sqlagent/hint.py new file mode 100644 index 000000000..e7c3814b8 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/hint.py @@ -0,0 +1,75 @@ +import pandas as pd +import os +import glob + +def generate_column_descriptions(db_name): + output = [] + decriptions_only = [] + working_dir = os.getenv("WORKDIR") + assert working_dir is not None, "WORKDIR environment variable is not set." + DESCRIPTION_FOLDER=os.path.join(working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/") + table_files = glob.glob(os.path.join(DESCRIPTION_FOLDER, "*.csv")) + for table_file in table_files: + table_name = os.path.basename(table_file).split(".")[0] + print("Table name: ", table_name) + df = pd.read_csv(table_file) + for _, row in df.iterrows(): + col_name = row["original_column_name"] + if not pd.isnull(row["value_description"]): + description = str(row["value_description"]) + if description.lower() in col_name.lower(): + print("Description {} is same as column name {}".format(description, col_name)) + pass + else: + description = description.replace("\n", " ") + description = " ".join(description.split()) + output.append(f"{table_name}.{col_name}: {description}") + # decriptions_only.append(description) + decriptions_only.append(f"{col_name}: {description}") + return output, decriptions_only + +def read_hints(hints_file): + """ + hints_file: csv with columns: table_name, column_name, description + """ + hints_df = pd.read_csv(hints_file) + cols_descriptions = [] + values_descriptions = [] + for _, row in hints_df.iterrows(): + table_name = row["table_name"] + col_name = row["column_name"] + description = row["description"] + if not pd.isnull(description): + cols_descriptions.append(f"{table_name}.{col_name}: {description}") + values_descriptions.append(f"{col_name}: {description}") + return cols_descriptions, values_descriptions + + +def sort_list(list1, list2): + import numpy as np + # Use numpy's argsort function to get the indices that would sort the second list + idx = np.argsort(list2)# ascending order + return np.array(list1)[idx].tolist()[::-1], np.array(list2)[idx].tolist()[::-1]# descending order + +def get_topk_cols(topk, cols_descriptions, similarities): + sorted_cols, similarities = sort_list(cols_descriptions, similarities) + top_k_cols = sorted_cols[:topk] + output = [] + for col, sim in zip(top_k_cols, similarities[:topk]): + # print(f"{col}: {sim}") + if sim > 0.5: + output.append(col) + return output + + +def pick_hints(query, model, column_embeddings, complete_descriptions, topk=5): + # use similarity to get the topk columns + query_embedding = model.encode(query, convert_to_tensor=True) + similarities = model.similarity(query_embedding, column_embeddings).flatten() + + topk_cols_descriptions = get_topk_cols(topk, complete_descriptions, similarities) + + hint = "" + for col in topk_cols_descriptions: + hint += (col +'\n') + return hint \ No newline at end of file diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py new file mode 100644 index 000000000..5cde96ca4 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -0,0 +1,159 @@ +from typing import Annotated, Sequence, TypedDict +import json +import os + +from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, ToolMessage, SystemMessage +from langchain_core.runnables import RunnableLambda +from langchain_core.prompts import PromptTemplate +from langgraph.graph import END, StateGraph +from langgraph.graph.message import add_messages +from langgraph.managed import IsLastStep +from langgraph.prebuilt import ToolNode + +from ..base_agent import BaseAgent +from ...utils import setup_chat_model, tool_renderer + +from .prompt import AGENT_NODE_TEMPLATE +from .hint import read_hints, pick_hints +from .utils import convert_json_to_tool_call, assemble_history, remove_repeated_tool_calls +from .utils import LlamaOutputParserAndQueryFixer +from .sql_tools import get_table_schema, get_sql_query_tool + + +class AgentState(TypedDict): + """The state of the agent.""" + messages: Annotated[Sequence[BaseMessage], add_messages] + is_last_step: IsLastStep + hint: str + + +class AgentNodeLlama: + def __init__(self, args, tools): + self.llm = setup_chat_model(args) + self.args = args + # two types of tools: + # sql_db_query - always available, no need to specify + # other tools - user defined + # here, self.tools is a list of user defined tools + self.tools = tool_renderer(tools) + print("@@@@ Tools: ", self.tools) + + self.chain = self.llm + + self.output_parser = LlamaOutputParserAndQueryFixer(chat_model = self.llm) + + if args.use_hints: + from sentence_transformers import SentenceTransformer + self.cols_descriptions, self.values_descriptions = read_hints(args.hints_file) + self.embed_model = SentenceTransformer('BAAI/bge-large-en-v1.5') + self.column_embeddings = self.embed_model.encode(self.values_descriptions) + + def __call__(self, state): + print("----------Call Agent Node----------") + question = state["messages"][0].content + table_schema, num_tables = get_table_schema(self.args.db_path) + if self.args.use_hints: + if not state["hint"]: + hints = pick_hints(question, self.embed_model,self.column_embeddings,self.cols_descriptions) + else: + hints = state["hint"] + print("@@@ Hints: ", hints) + + history = assemble_history(state["messages"]) + print("@@@ History: ", history) + + prompt = AGENT_NODE_TEMPLATE.format( + domain=self.args.db_name, + tools = self.tools, + num_tables=num_tables, + tables_schema=table_schema, + question=question, + hints=hints, + history=history, + ) + + output = self.chain.invoke(prompt) + output = self.output_parser.parse(output.content, history, table_schema, hints, question, state["messages"]) #text: str, history: str, db_schema: str, hint: str + print("@@@@@ Agent output:\n", output) + + # convert output to tool calls + tool_calls = [] + for res in output: + if "tool" in res: + tool_call = convert_json_to_tool_call(res) + tool_calls.append(tool_call) + + # check if same tool calls have been made before + # if yes, then remove the repeated tool calls + if tool_calls: + new_tool_calls = remove_repeated_tool_calls(tool_calls, state["messages"]) + print("@@@@ New Tool Calls:\n", new_tool_calls) + else: + new_tool_calls = [] + + if new_tool_calls: + ai_message = AIMessage(content="", tool_calls=new_tool_calls) + elif tool_calls: + ai_message = AIMessage(content="Repeated previous steps.", tool_calls=tool_calls) + elif "answer" in output[0]: + ai_message = AIMessage(content=str(output[0]["answer"])) + else: + ai_message = AIMessage(content=str(output)) + + return {"messages": [ai_message], "hint": hints} + + +class SQLAgentLlama(BaseAgent): + # need new args: + # # db_name and db_path + # # use_hints, hints_file + def __init__(self, args, with_memory=False, **kwargs): + super().__init__(args, local_vars=globals(), **kwargs) + # note: here tools only include user defined tools + # we need to add the sql query tool as well + agent = AgentNodeLlama(args, self.tools_descriptions) + + tools = self.tools_descriptions.append(get_sql_query_tool(args.db_path)) + tool_node = ToolNode(tools) + + workflow = StateGraph(AgentState) + + # Define the nodes we will cycle between + workflow.add_node("agent", agent) + workflow.add_node("tools", tool_node) + + workflow.set_entry_point("agent") + + workflow.add_conditional_edges( + "agent", + self.decide_next_step, + { + # If `tools`, then we call the tool node. + "tools": "tools", + "agent": "agent", + "end": END, + }, + ) + + # We now add a normal edge from `tools` to `agent`. + # This means that after `tools` is called, `agent` node is called next. + workflow.add_edge("tools", "agent") + + self.app = workflow.compile() + + def decide_next_step(self, state: AgentState): + messages = state["messages"] + last_message = messages[-1] + if last_message.tool_calls and last_message.content == "Repeated previous steps.": + print("@@@@ Repeated tool calls from previous steps, go back to agent") + return "agent" + elif last_message.tool_calls and last_message.content != "Repeated previous steps.": + print("@@@@ New Tool calls, go to tools") + return "tools" + else: + return "end" + + def prepare_initial_state(self, query): + return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} + + \ No newline at end of file diff --git a/comps/agent/langchain/src/strategy/sqlagent/prompt.py b/comps/agent/langchain/src/strategy/sqlagent/prompt.py new file mode 100644 index 000000000..875f7ee44 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/prompt.py @@ -0,0 +1,156 @@ +AGENT_NODE_TEMPLATE = """\ +You are an SQL expert tasked with answering questions about {domain}. +In addition to the database, you have the following tools to gather information: +{tools} + +You can access a database that has {num_tables} tables. The schema of the tables is as follows. Read the schema carefully. +**Table Schema:** +{tables_schema} + +**Hints:** +{hints} + +When querying the database, remember the following: +1. Unless the user specifies a specific number of examples they wish to obtain, always limit your query to no more than 20 results. +2. Only query columns that are relevant to the question. Remember to also fetch the ranking or filtering columns to check if they contain nulls. +3. DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. + +**Output format:** +1. Write down your thinking process. +2. When querying the database, write your SQL query in the following format: +```sql +SELECT column1, column2, ... +``` +3. When making tool calls, you must use the following format. Make ONLY one tool call at a time. +TOOL CALL: {{"tool": "tool1", "args": {{"arg1": "value1", "arg2": "value2", ...}}}} + +4. After you have arrived at the answer with data and reasoning, write your final answer after "FINAL ANSWER". + +You have done the following steps so far: +**Your previous steps:** +{history} + +**IMPORTANT:** +* Review your previous steps carefully and utilize them to answer the question. Do not repeat your previous steps. +* The database may not have all the information needed to answer the question. Use the additional tools provided if necessary. +* If you did not get the answer at first, do not give up. Reflect on the steps that you have taken and try a different way. Think out of the box. + +Now take a deep breath and think step by step to answeer the following question. +Question: +{question} +""" + + +ANSWER_PARSER_PROMPT = """\ +Review the output from an SQL agent and determine if a correct answer has been provided and grounded on real data. + +Say "yes" when all the following conditions are met: +1. The answer is complete and does not require additional steps to be taken. +2. The answer does not have placeholders that need to be filled in. +3. The agent has acquired data from database and its execution history is Not empty. +4. If agent made mistakes in its execution history, the agent has corrected them. +5. If agent has tried to get data several times but cannot get all the data needed, the agent has come up with an answer based on available data and reasonable assumptions. + +If the conditions above are not met, say "no". + +Here is the output from the SQL agent: +{output} +====================== +Here is the agent execution history: +{history} +====================== + +Has a final answer been provided based on real data? Analyze the agent output and make your judgement "yes" or "no". +""" + + +SQL_QUERY_FIXER_PROMPT = """\ +You are an SQL database expert tasked with reviewing a SQL query written by an agent. +**Procedure:** +1. Review Database Schema: +- Examine the table creation statements to understand the database structure. +2. Review the Hint provided. +- Use the provided hints to understand the domain knowledge relevant to the query. +3. Check against the following common errors: +- Failure to exclude null values, ranking or filtering columns have nulls, syntax errors, incorrect table references, incorrect column references, logical mistakes. +4. Check if aggregation should be used: +- Read the user question, and determine if user is asking for specific instances or aggregated info. If aggregation is needed, check if the original SQL query has used appropriate functions like COUNT and SUM. +5. Correct the Query only when Necessary: +- If issues were identified, modify the SQL query to address the identified issues, ensuring it correctly fetches the requested data according to the database schema and query requirements. + +======= Your task ======= +************************** +Table creation statements +{DATABASE_SCHEMA} +************************** +Hint: +{HINT} +************************** +The SQL query to review: +{QUERY} +************************** +User question: +{QUESTION} +************************** + +Now analyze the SQL query step by step. Present your reasonings. + +If you identified issues in the original query, write down the corrected SQL query in the format below: +```sql +SELECT column1, column2, ... +``` + +If the original SQL query is correct, just say the query is correct. + +Note: Some user questions can only be answered partially with the database. This is OK. The agent may use other tools in subsequent steps to get additional info. In some cases, the agent may have got additional info with other tools and have incorporated those in its query. Your goal is to review the SQL query and fix it when necessary. +Only use the tables provided in the database schema in your corrected query. Do not join tables that are not present in the schema. Do not create any new tables. +If you cannot do better than the original query, just say the query is correct. +""" + +SQL_QUERY_FIXER_PROMPT_with_result = """\ +You are an SQL database expert tasked with reviewing a SQL query. +**Procedure:** +1. Review Database Schema: +- Examine the table creation statements to understand the database structure. +2. Review the Hint provided. +- Use the provided hints to understand the domain knowledge relevant to the query. +3. Analyze Query Requirements: +- User Question: Consider what information the query is supposed to retrieve. Decide if aggregation like COUNT or SUM is needed. +- Executed SQL Query: Review the SQL query that was previously executed. +- Execution Result: Analyze the outcome of the executed query. Think carefully if the result makes sense. +4. Check against the following common errors: +- Failure to exclude null values, ranking or filtering columns have nulls, syntax errors, incorrect table references, incorrect column references, logical mistakes. +5. Correct the Query only when Necessary: +- If issues were identified, modify the SQL query to address the identified issues, ensuring it correctly fetches the requested data according to the database schema and query requirements. + +======= Your task ======= +************************** +Table creation statements +{DATABASE_SCHEMA} +************************** +Hint: +{HINT} +************************** +User Question: +{QUESTION} +************************** +The SQL query executed was: +{QUERY} +************************** +The execution result: +{RESULT} +************************** + +Now analyze the SQL query step by step. Present your reasonings. + +If you identified issues in the original query, write down the corrected SQL query in the format below: +```sql +SELECT column1, column2, ... +``` + +If the original SQL query is correct, just say the query is correct. + +Note: Some user questions can only be answered partially with the database. This is OK. The agent may use other tools in subsequent steps to get additional info. In some cases, the agent may have got additional info with other tools and have incorporated those in its query. Your goal is to review the SQL query and fix it when necessary. +Only use the tables provided in the database schema in your corrected query. Do not join tables that are not present in the schema. Do not create any new tables. +If you cannot do better than the original query, just say the query is correct. +""" \ No newline at end of file diff --git a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py new file mode 100644 index 000000000..df010fd81 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py @@ -0,0 +1,28 @@ +from langchain_community.utilities import SQLDatabase +from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool + + +def connect_to_db(db_path): + uri= "sqlite:///{path}".format(path=db_path) + db = SQLDatabase.from_uri(uri) + return db + +def get_table_schema(db_path): + db = connect_to_db(db_path) + table_names = ", ".join(db.get_usable_table_names()) + num_tables = len(table_names.split(",")) + schema = db.get_table_info_no_throw([t.strip() for t in table_names.split(",")]) + return schema, num_tables + + +def get_sql_query_tool(db_path): + db = connect_to_db(db_path) + query_sql_database_tool_description = ( + "Input to this tool is a detailed and correct SQL query, output is a " + "result from the database. If the query is not correct, an error message " + "will be returned. If an error is returned, rewrite the query, check the " + "query, and try again. " + ) + db_query_tool = QuerySQLDataBaseTool(db=db, description=query_sql_database_tool_description) + return db_query_tool + diff --git a/comps/agent/langchain/src/strategy/sqlagent/utils.py b/comps/agent/langchain/src/strategy/sqlagent/utils.py new file mode 100644 index 000000000..b11fc1633 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/utils.py @@ -0,0 +1,203 @@ +import uuid +import json +from langchain_core.messages.tool import ToolCall +from langchain_core.messages import AIMessage, ToolMessage +from prompt import ANSWER_PARSER_PROMPT, SQL_QUERY_FIXER_PROMPT, SQL_QUERY_FIXER_PROMPT_with_result + + +def parse_answer_with_llm(text, history, chat_model): + if "FINAL ANSWER:" in text.upper(): + if history == "": + history = "The agent execution history is empty." + + prompt = ANSWER_PARSER_PROMPT.format(output=text, history=history) + response = chat_model.invoke(prompt).content + print("@@@ Answer parser response: ", response) + + temp = response[:5] + if "yes" in temp.lower(): + return text.split("FINAL ANSWER:")[-1] + else: + temp = response.split("\n")[0] + if "yes" in temp.lower(): + return text.split("FINAL ANSWER:")[-1] + return None + else: + return None + +def get_tool_calls_other_than_sql(text): + """ + get the tool calls other than sql_db_query + """ + tool_calls = [] + text = text.replace("assistant", "") + json_lines = text.split("\n") + # only get the unique lines + json_lines = list(set(json_lines)) + for line in json_lines: + if "TOOL CALL:" in line: + if "sql_db_query" not in line: + line = line.replace("TOOL CALL:", "") + if "assistant" in line: + line = line.replace("assistant", "") + if "\\" in line: + line = line.replace("\\", "") + try: + parsed_line = json.loads(line) + if isinstance(parsed_line, dict): + if "tool" in parsed_line: + tool_calls.append(parsed_line) + + except: + pass + return tool_calls + +def get_all_sql_queries(text): + queries = [] + if "```sql" in text: + temp = text.split("```sql") + for t in temp: + if "```" in t: + query = t.split("```")[0] + if "SELECT" in query.upper() and "TOOL CALL" not in query.upper(): + queries.append(query) + + return queries + +def get_the_last_sql_query(text): + queries = get_all_sql_queries(text) + if queries: + return queries[-1] + else: + return None + +def check_query_if_executed_and_result(query, messages): + # get previous sql_db_query tool calls + previous_tool_calls = [] + for m in messages: + if isinstance(m, AIMessage) and m.tool_calls: + for tc in m.tool_calls: + if tc["name"] == "sql_db_query": + previous_tool_calls.append(tc) + for tc in previous_tool_calls: + if query == tc["args"]["query"]: + return get_tool_output(messages, tc["id"]) + + return None + + +def parse_and_fix_sql_query_v2(text, chat_model, db_schema, hint, question, messages): + chosen_query = get_the_last_sql_query(text) + if chosen_query: + # check if the query has been executed before + # if yes, pass execution result to the fixer + # if not, pass only the query to the fixer + result = check_query_if_executed_and_result(chosen_query, messages) + if result: + prompt = SQL_QUERY_FIXER_PROMPT_with_result.format(DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question, RESULT=result) + else: + prompt = SQL_QUERY_FIXER_PROMPT.format(DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question) + + response = chat_model.invoke(prompt).content + print("@@@ SQL query fixer response: ", response) + if "query is correct" in response.lower(): + return chosen_query + else: + # parse the fixed query + fixed_query = get_the_last_sql_query(response) + return fixed_query + else: + return None + +class LlamaOutputParserAndQueryFixer: + def __init__(self, chat_model): + self.chat_model = chat_model + + def parse(self, text: str, history: str, db_schema: str, hint: str, question: str, messages: list): + print("@@@ Raw output from llm:\n", text) + answer = parse_answer_with_llm(text, history, self.chat_model) + if answer: + print("Final answer exists.") + return answer + else: + tool_calls = get_tool_calls_other_than_sql(text) + sql_query = parse_and_fix_sql_query_v2(text, self.chat_model, db_schema, hint, question, messages) + if sql_query: + sql_tool_call = [{"tool": "sql_db_query", "args": {"query": sql_query}}] + tool_calls.extend(sql_tool_call) + if tool_calls: + return tool_calls + else: + return text + + +def convert_json_to_tool_call(json_str): + tool_name = json_str["tool"] + tool_args = json_str["args"] + tcid = str(uuid.uuid4()) + tool_call = ToolCall(name=tool_name, args=tool_args, id=tcid) + return tool_call + + +def get_tool_output(messages, id): + tool_output = "" + for msg in reversed(messages): + if isinstance(msg, ToolMessage): + if msg.tool_call_id == id: + tool_output = msg.content + tool_output = tool_output[:1000] # limit to 1000 characters + break + return tool_output + + +def assemble_history(messages): + """ + messages: AI, TOOL, AI, TOOL, etc. + """ + query_history = "" + breaker = "-" * 10 + n = 1 + for m in messages[1:]: # exclude the first message + if isinstance(m, AIMessage): + # if there is tool call + if hasattr(m, "tool_calls") and len(m.tool_calls) > 0 and m.content != "Repeated previous steps.": + for tool_call in m.tool_calls: + tool = tool_call["name"] + tc_args = tool_call["args"] + id = tool_call["id"] + tool_output = get_tool_output(messages, id) + if tool == "sql_db_query": + sql_query = tc_args["query"] + query_history += f"Step {n}. Executed SQL query: {sql_query}\nQuery Result: {tool_output}\n{breaker}\n" + else: + query_history += f"Step {n}. Called tool: {tool} - {tc_args}\nTool Output: {tool_output}\n{breaker}\n" + n += 1 + elif m.content == "Repeated previous steps.": # repeated steps + query_history += f"Step {n}. Repeated tool calls from previous steps.\n{breaker}\n" + n += 1 + else: + # did not make tool calls + query_history += f"Assistant Output: {m.content}\n" + + return query_history + + +def remove_repeated_tool_calls(tool_calls, messages): + """ + Remove repeated tool calls in the messages. + tool_calls: list of tool calls: ToolCall(name=tool_name, args=tool_args, id=tcid) + messages: list of messages: AIMessage, ToolMessage, HumanMessage + """ + # first get all the previous tool calls in messages + previous_tool_calls = [] + for m in messages: + if isinstance(m, AIMessage) and m.tool_calls and m.content != "Repeated previous steps.": + for tc in m.tool_calls: + previous_tool_calls.append({"tool": tc["name"], "args": tc["args"]}) + + unique_tool_calls = [] + for tc in tool_calls: + if {"tool": tc["name"], "args": tc["args"]} not in previous_tool_calls: + unique_tool_calls.append(tc) + + return unique_tool_calls \ No newline at end of file From 26d7964737cc67086ad49c2aaedab266c790763e Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Tue, 3 Dec 2024 16:15:29 -0800 Subject: [PATCH 02/29] add test for sql agent Signed-off-by: minmin-intel --- tests/agent/sql_agent_llama.yaml | 32 ++++++++ tests/agent/sql_agent_test/run_data_split.sh | 3 + tests/agent/sql_agent_test/split_data.py | 23 ++++++ tests/agent/sql_agent_test/test_sql_agent.sh | 86 ++++++++++++++++++++ tests/agent/test.py | 6 +- 5 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 tests/agent/sql_agent_llama.yaml create mode 100644 tests/agent/sql_agent_test/run_data_split.sh create mode 100644 tests/agent/sql_agent_test/split_data.py create mode 100644 tests/agent/sql_agent_test/test_sql_agent.sh diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml new file mode 100644 index 000000000..5af6cd357 --- /dev/null +++ b/tests/agent/sql_agent_llama.yaml @@ -0,0 +1,32 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +services: + agent: + image: ${agent_image} + container_name: test-comps-agent-endpoint + volumes: + - ${TOOLSET_PATH}:/home/user/tools/ + ports: + - "9095:9095" + ipc: host + environment: + ip_address: ${ip_address} + strategy: sql_agent_llama + db_name: ${db_name} + db_path: ${db_path} + use_hints: false + recursion_limit: ${recursion_limit} + llm_engine: tgi + HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + llm_endpoint_url: ${LLM_ENDPOINT_URL} + model: ${LLM_MODEL_ID} + temperature: ${temperature} + max_new_tokens: ${max_new_tokens} + streaming: false + tools: /home/user/tools/custom_tools.yaml + require_human_feedback: false + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + port: 9095 diff --git a/tests/agent/sql_agent_test/run_data_split.sh b/tests/agent/sql_agent_test/run_data_split.sh new file mode 100644 index 000000000..a5c85695d --- /dev/null +++ b/tests/agent/sql_agent_test/run_data_split.sh @@ -0,0 +1,3 @@ +DATAPATH=$WORKDIR/TAG-Bench/tag_queries.csv +OUTFOLDER=$WORKDIR/TAG-Bench/query_by_db +python3 split_data.py --path $DATAPATH --output $OUTFOLDER \ No newline at end of file diff --git a/tests/agent/sql_agent_test/split_data.py b/tests/agent/sql_agent_test/split_data.py new file mode 100644 index 000000000..a00aeaa7e --- /dev/null +++ b/tests/agent/sql_agent_test/split_data.py @@ -0,0 +1,23 @@ +import pandas as pd +import argparse +import os + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--path", type=str, required=True) + parser.add_argument("--output", type=str, required=True) + args = parser.parse_args() + + # if output folder does not exist, create it + if not os.path.exists(args.output): + os.makedirs(args.output) + + # Load the data + data = pd.read_csv(args.path) + + # Split the data by domain + domains = data["DB used"].unique() + for domain in domains: + domain_data = data[data["DB used"] == domain] + out = os.path.join(args.output, f"query_{domain}.csv") + domain_data.to_csv(out, index=False) \ No newline at end of file diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh new file mode 100644 index 000000000..28e05bec8 --- /dev/null +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -0,0 +1,86 @@ +#!/bin/bash +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +#set -xe + +WORKPATH=$(dirname "$PWD") +echo $WORKPATH +LOG_PATH="$WORKPATH/tests" + +# WORKDIR is one level up from GenAIComps +WORKDIR=$(dirname "$WORKPATH") +echo $WORKDIR + +export ip_address=$(hostname -I | awk '{print $1}') +tgi_port=8085 +tgi_volume=$WORKPATH/data +export model=meta-llama/Meta-Llama-3.1-70B-Instruct +export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} +export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" +export LLM_ENDPOINT_URL="http://${ip_address}:${tgi_port}" +export temperature=0.01 +export max_new_tokens=4096 +export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ +echo "TOOLSET_PATH=${TOOLSET_PATH}" +export recursion_limit=15 +export db_name=california_schools +export db_path=${WORKDIR}/TAG-Bench/dev_folder/dev_databases/${db_name}/${db_name}.sqlite + +# download the test data +function prepare_data() { + cd $WORKDIR + + echo "Downloading data..." + git clone https://github.com/TAG-Research/TAG-Bench.git + cd TAG-Bench/setup + chmod +x get_dbs.sh + ./get_dbs.sh + + echo "Split data..." + cd $WORKPATH/tests/agent/sql_agent_test + bash run_data_split.sh + + echo "Data preparation done!" +} + +# launch tgi-gaudi +function start_tgi_service() { + echo "token is ${HF_TOKEN}" + + #multi cards + echo "start tgi gaudi service" + docker run -d --runtime=habana --name "test-comps-tgi-gaudi-service" -p $tgi_port:80 -v $tgi_volume:/data -e HF_TOKEN=$HF_TOKEN -e HABANA_VISIBLE_DEVICES=0,1,2,3 -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tgi-gaudi:2.0.5 --model-id $model --max-input-tokens 4096 --max-total-tokens 8192 --sharded true --num-shard 4 + sleep 5s + echo "Waiting tgi gaudi ready" + n=0 + until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do + docker logs test-comps-tgi-gaudi-service &> ${LOG_PATH}/tgi-gaudi-service.log + n=$((n+1)) + if grep -q Connected ${LOG_PATH}/tgi-gaudi-service.log; then + break + fi + sleep 5s + done + sleep 5s + echo "Service started successfully" +} + +# launch the agent +function start_sql_agent_llama_service() { + echo "Starting sql_agent_llama agent microservice" + docker compose -f $WORKPATH/tests/agent/sql_agent_llama.yaml up -d + sleep 5s + docker logs test-comps-agent-endpoint + echo "Service started successfully" +} + +# run the test +function run_test() { + echo "Running test..." + cd $WORKPATH/tests/agent/ + python3 test.py --test-sql-agent +} + + + diff --git a/tests/agent/test.py b/tests/agent/test.py index fdbfe1c5b..12e23476c 100644 --- a/tests/agent/test.py +++ b/tests/agent/test.py @@ -45,11 +45,15 @@ def process_request(url, query, is_stream=False): if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--stream", action="store_true", help="Stream the response") + parser.add_argument("--test-sql-agent", action="store_true", help="Test the SQL agent") args = parser.parse_args() ip_address = os.getenv("ip_address", "localhost") url = f"http://{ip_address}:9095/v1/chat/completions" - prompt = "What is OPEA?" + if args.test_sql_agent: + prompt = "How many schools have the average score in Math over 560 in the SAT test?" + else: + prompt = "What is OPEA?" if args.stream: process_request(url, prompt, is_stream=True) else: From ad4969a98385063b2e6609b7a175cdc04f0dac2f Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Thu, 5 Dec 2024 09:53:22 -0800 Subject: [PATCH 03/29] update sql agent test Signed-off-by: minmin-intel --- tests/agent/sql_agent_llama.yaml | 1 + tests/agent/sql_agent_test/test_sql_agent.sh | 28 +++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml index 5af6cd357..8d7f3b157 100644 --- a/tests/agent/sql_agent_llama.yaml +++ b/tests/agent/sql_agent_llama.yaml @@ -7,6 +7,7 @@ services: container_name: test-comps-agent-endpoint volumes: - ${TOOLSET_PATH}:/home/user/tools/ + - ${WORKDIR}/GenAIComps/comps:/home/user/GenAIComps/comps ports: - "9095:9095" ipc: host diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 28e05bec8..39f5d2cdc 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -12,6 +12,9 @@ LOG_PATH="$WORKPATH/tests" WORKDIR=$(dirname "$WORKPATH") echo $WORKDIR +export agent_image="opea/agent-langchain:comps" +export agent_container_name="test-comps-agent-endpoint" + export ip_address=$(hostname -I | awk '{print $1}') tgi_port=8085 tgi_volume=$WORKPATH/data @@ -44,13 +47,26 @@ function prepare_data() { echo "Data preparation done!" } +function build_docker_images() { + echo "Building the docker images" + cd $WORKPATH + echo $WORKPATH + docker build --no-cache -t $agent_image --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy -f comps/agent/langchain/Dockerfile . + if [ $? -ne 0 ]; then + echo "opea/agent-langchain built fail" + exit 1 + else + echo "opea/agent-langchain built successful" + fi +} + # launch tgi-gaudi function start_tgi_service() { echo "token is ${HF_TOKEN}" #multi cards echo "start tgi gaudi service" - docker run -d --runtime=habana --name "test-comps-tgi-gaudi-service" -p $tgi_port:80 -v $tgi_volume:/data -e HF_TOKEN=$HF_TOKEN -e HABANA_VISIBLE_DEVICES=0,1,2,3 -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tgi-gaudi:2.0.5 --model-id $model --max-input-tokens 4096 --max-total-tokens 8192 --sharded true --num-shard 4 + docker run -d --runtime=habana --name "test-comps-tgi-gaudi-service" -p $tgi_port:80 -v $tgi_volume:/data -e HF_TOKEN=$HF_TOKEN -e HABANA_VISIBLE_DEVICES=0,1,2,3 -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tgi-gaudi:2.0.5 --model-id $model --max-input-tokens 8192 --max-total-tokens 16384 --sharded true --num-shard 4 sleep 5s echo "Waiting tgi gaudi ready" n=0 @@ -82,5 +98,15 @@ function run_test() { python3 test.py --test-sql-agent } +echo "Building docker image...." +build_docker_images + +echo "Lauching TGI-gaudi...." +start_tgi_service + +echo "launching sql_agent_llama service...." +start_sql_agent_llama_service +echo "Running test...." +run_test From a6ef75d6e00e3db0d11d64e1b3f2642b668127f3 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Thu, 5 Dec 2024 11:15:24 -0800 Subject: [PATCH 04/29] fix bugs and use vllm to test sql agent Signed-off-by: minmin-intel --- comps/agent/langchain/src/config.py | 13 ++++ .../langchain/src/strategy/base_agent.py | 1 + .../src/strategy/sqlagent/planner.py | 9 ++- .../langchain/src/strategy/sqlagent/utils.py | 2 +- comps/agent/langchain/src/utils.py | 14 +++- tests/agent/sql_agent_llama.yaml | 3 +- tests/agent/sql_agent_test/test_sql_agent.sh | 66 +++++++++++++++++-- 7 files changed, 97 insertions(+), 11 deletions(-) diff --git a/comps/agent/langchain/src/config.py b/comps/agent/langchain/src/config.py index 4178e2d9f..82c5b0fde 100644 --- a/comps/agent/langchain/src/config.py +++ b/comps/agent/langchain/src/config.py @@ -72,3 +72,16 @@ if os.environ.get("timeout") is not None: env_config += ["--timeout", os.environ["timeout"]] + +# for sql agent +if os.environ.get("db_path") is not None: + env_config += ["--db_path", os.environ["db_path"]] + +if os.environ.get("db_name") is not None: + env_config += ["--db_name", os.environ["db_name"]] + +if os.environ.get("use_hints") is not None: + env_config += ["--use_hints", os.environ["use_hints"]] + +if os.environ.get("hints_file") is not None: + env_config += ["--hints_file", os.environ["hint_file"]] \ No newline at end of file diff --git a/comps/agent/langchain/src/strategy/base_agent.py b/comps/agent/langchain/src/strategy/base_agent.py index 8cf629d61..53c1017bf 100644 --- a/comps/agent/langchain/src/strategy/base_agent.py +++ b/comps/agent/langchain/src/strategy/base_agent.py @@ -56,6 +56,7 @@ async def stream_generator(self, query, config): async def non_streaming_run(self, query, config): initial_state = self.prepare_initial_state(query) + print("@@@ Initial State: ", initial_state) try: async for s in self.app.astream(initial_state, config=config, stream_mode="values"): message = s["messages"][-1] diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py index 5cde96ca4..71d52169e 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/planner.py +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -58,6 +58,8 @@ def __call__(self, state): else: hints = state["hint"] print("@@@ Hints: ", hints) + else: + hints = "" history = assemble_history(state["messages"]) print("@@@ History: ", history) @@ -111,9 +113,12 @@ def __init__(self, args, with_memory=False, **kwargs): super().__init__(args, local_vars=globals(), **kwargs) # note: here tools only include user defined tools # we need to add the sql query tool as well + print("@@@@ user defined tools: ", self.tools_descriptions) agent = AgentNodeLlama(args, self.tools_descriptions) - - tools = self.tools_descriptions.append(get_sql_query_tool(args.db_path)) + sql_tool = get_sql_query_tool(args.db_path) + print("@@@@ SQL Tool: ", sql_tool) + tools = self.tools_descriptions+[sql_tool] + print("@@@@ ALL Tools: ", tools) tool_node = ToolNode(tools) workflow = StateGraph(AgentState) diff --git a/comps/agent/langchain/src/strategy/sqlagent/utils.py b/comps/agent/langchain/src/strategy/sqlagent/utils.py index b11fc1633..fcbcef19f 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/utils.py +++ b/comps/agent/langchain/src/strategy/sqlagent/utils.py @@ -2,7 +2,7 @@ import json from langchain_core.messages.tool import ToolCall from langchain_core.messages import AIMessage, ToolMessage -from prompt import ANSWER_PARSER_PROMPT, SQL_QUERY_FIXER_PROMPT, SQL_QUERY_FIXER_PROMPT_with_result +from .prompt import ANSWER_PARSER_PROMPT, SQL_QUERY_FIXER_PROMPT, SQL_QUERY_FIXER_PROMPT_with_result def parse_answer_with_llm(text, history, chat_model): diff --git a/comps/agent/langchain/src/utils.py b/comps/agent/langchain/src/utils.py index e8a317a5d..fa3ead466 100644 --- a/comps/agent/langchain/src/utils.py +++ b/comps/agent/langchain/src/utils.py @@ -139,8 +139,14 @@ def get_args(): parser.add_argument("--with_store", type=bool, default=False) parser.add_argument("--timeout", type=int, default=60) + # for sql agent + parser.add_argument("--db_path", type=str, help="database path") + parser.add_argument("--db_name", type=str, help="database name") + parser.add_argument("--use_hints", action="store_true", help="If this agent uses hints") + parser.add_argument("--hints_file", type=str, help="path to the hints file") + sys_args, unknown_args = parser.parse_known_args() - # print("env_config: ", env_config) + print("env_config: ", env_config) if env_config != []: env_args, env_unknown_args = parser.parse_known_args(env_config) unknown_args += env_unknown_args @@ -151,5 +157,11 @@ def get_args(): sys_args.streaming = True else: sys_args.streaming = False + + if sys_args.use_hints == "true": + sys_args.use_hints = False + else: + sys_args.use_hints = False + print("==========sys_args==========:\n", sys_args) return sys_args, unknown_args diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml index 8d7f3b157..ae80b1424 100644 --- a/tests/agent/sql_agent_llama.yaml +++ b/tests/agent/sql_agent_llama.yaml @@ -7,7 +7,8 @@ services: container_name: test-comps-agent-endpoint volumes: - ${TOOLSET_PATH}:/home/user/tools/ - - ${WORKDIR}/GenAIComps/comps:/home/user/GenAIComps/comps + - ${WORKDIR}/GenAIComps/comps:/home/user/comps + - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench ports: - "9095:9095" ipc: host diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 39f5d2cdc..8f93384a1 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -4,6 +4,9 @@ #set -xe +# this script should be run from tests directory +# bash agent/sql_agent_test/test_sql_agent.sh + WORKPATH=$(dirname "$PWD") echo $WORKPATH LOG_PATH="$WORKPATH/tests" @@ -17,7 +20,9 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') tgi_port=8085 -tgi_volume=$WORKPATH/data +tgi_volume=${HF_CACHE_DIR} #$WORKPATH/data +vllm_port=8085 +vllm_volume=${HF_CACHE_DIR} #$WORKPATH/data export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" @@ -28,7 +33,7 @@ export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ echo "TOOLSET_PATH=${TOOLSET_PATH}" export recursion_limit=15 export db_name=california_schools -export db_path=${WORKDIR}/TAG-Bench/dev_folder/dev_databases/${db_name}/${db_name}.sqlite +export db_path=/home/user/TAG-Bench/dev_folder/dev_databases/${db_name}/${db_name}.sqlite # download the test data function prepare_data() { @@ -82,6 +87,49 @@ function start_tgi_service() { echo "Service started successfully" } +function build_vllm_docker_images() { + echo "Building the vllm docker images" + cd $WORKPATH + echo $WORKPATH + if [ ! -d "./vllm" ]; then + git clone https://github.com/HabanaAI/vllm-fork.git + fi + cd ./vllm-fork + docker build -f Dockerfile.hpu -t opea/vllm-gaudi:comps --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy + if [ $? -ne 0 ]; then + echo "opea/vllm-gaudi:comps failed" + exit 1 + else + echo "opea/vllm-gaudi:comps successful" + fi +} + +function start_vllm_service() { + # redis endpoint + echo "token is ${HF_TOKEN}" + + #single card + echo "start vllm gaudi service" + echo "**************model is $model**************" + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq_len-to-capture 8192 --tensor-parallel-size 4 + sleep 5s + echo "Waiting vllm gaudi ready" + n=0 + until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do + docker logs test-comps-vllm-gaudi-service &> ${LOG_PATH}/vllm-gaudi-service.log + n=$((n+1)) + if grep -q "Uvicorn running on" ${LOG_PATH}/vllm-gaudi-service.log; then + break + fi + if grep -q "No such container" ${LOG_PATH}/vllm-gaudi-service.log; then + echo "container test-comps-vllm-gaudi-service not found" + exit 1 + fi + sleep 5s + done + sleep 5s + echo "Service started successfully" +} # launch the agent function start_sql_agent_llama_service() { echo "Starting sql_agent_llama agent microservice" @@ -98,11 +146,17 @@ function run_test() { python3 test.py --test-sql-agent } -echo "Building docker image...." -build_docker_images +# echo "Building docker image...." +# build_docker_images + +# echo "Lauching TGI-gaudi...." +# start_tgi_service + +echo "Building vllm docker image...." +build_vllm_docker_images -echo "Lauching TGI-gaudi...." -start_tgi_service +echo "Launching vllm service...." +start_vllm_service echo "launching sql_agent_llama service...." start_sql_agent_llama_service From a63d3bc4e1ab3f101b345ec1442c8a546e6090e6 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Thu, 5 Dec 2024 12:03:39 -0800 Subject: [PATCH 05/29] add tag-bench test and google search tool Signed-off-by: minmin-intel --- comps/agent/langchain/requirements.txt | 2 +- tests/agent/sql_agent_llama.yaml | 8 +-- tests/agent/sql_agent_test/sql_agent_tools.py | 15 ++++++ .../agent/sql_agent_test/sql_agent_tools.yaml | 11 ++++ tests/agent/sql_agent_test/test_sql_agent.sh | 48 +++++++---------- tests/agent/sql_agent_test/test_tag_bench.py | 52 +++++++++++++++++++ 6 files changed, 102 insertions(+), 34 deletions(-) create mode 100644 tests/agent/sql_agent_test/sql_agent_tools.py create mode 100644 tests/agent/sql_agent_test/sql_agent_tools.yaml create mode 100644 tests/agent/sql_agent_test/test_tag_bench.py diff --git a/comps/agent/langchain/requirements.txt b/comps/agent/langchain/requirements.txt index ab3ff0c6b..f1c41c447 100644 --- a/comps/agent/langchain/requirements.txt +++ b/comps/agent/langchain/requirements.txt @@ -2,7 +2,7 @@ docarray[full] #used by tools -duckduckgo-search +langchain-google-community fastapi huggingface_hub langchain diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml index ae80b1424..c31922ba1 100644 --- a/tests/agent/sql_agent_llama.yaml +++ b/tests/agent/sql_agent_llama.yaml @@ -6,9 +6,9 @@ services: image: ${agent_image} container_name: test-comps-agent-endpoint volumes: - - ${TOOLSET_PATH}:/home/user/tools/ + - ${TOOLSET_PATH}:/home/user/tools/ # tools - ${WORKDIR}/GenAIComps/comps:/home/user/comps - - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench + - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database ports: - "9095:9095" ipc: host @@ -19,7 +19,7 @@ services: db_path: ${db_path} use_hints: false recursion_limit: ${recursion_limit} - llm_engine: tgi + llm_engine: vllm HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} llm_endpoint_url: ${LLM_ENDPOINT_URL} model: ${LLM_MODEL_ID} @@ -32,3 +32,5 @@ services: http_proxy: ${http_proxy} https_proxy: ${https_proxy} port: 9095 + GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} + GOOGLE_API_KEY: ${GOOGLE_API_KEY} diff --git a/tests/agent/sql_agent_test/sql_agent_tools.py b/tests/agent/sql_agent_test/sql_agent_tools.py new file mode 100644 index 000000000..d303a7093 --- /dev/null +++ b/tests/agent/sql_agent_test/sql_agent_tools.py @@ -0,0 +1,15 @@ +def search_web(query: str)->str: + '''Search the web for information not contained in databases.''' + from langchain_core.tools import Tool + from langchain_google_community import GoogleSearchAPIWrapper + + search = GoogleSearchAPIWrapper() + + tool = Tool( + name="google_search", + description="Search Google for recent results.", + func=search.run, + ) + + response = tool.run(query) + return response \ No newline at end of file diff --git a/tests/agent/sql_agent_test/sql_agent_tools.yaml b/tests/agent/sql_agent_test/sql_agent_tools.yaml new file mode 100644 index 000000000..0bfa09429 --- /dev/null +++ b/tests/agent/sql_agent_test/sql_agent_tools.yaml @@ -0,0 +1,11 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +search_web: + description: Search the web for a given query. + callable_api: sql_agent_tools.py:search_web + args_schema: + query: + type: str + description: query + return_output: retrieved_data \ No newline at end of file diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 8f93384a1..56c4232fa 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -19,8 +19,7 @@ export agent_image="opea/agent-langchain:comps" export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') -tgi_port=8085 -tgi_volume=${HF_CACHE_DIR} #$WORKPATH/data + vllm_port=8085 vllm_volume=${HF_CACHE_DIR} #$WORKPATH/data export model=meta-llama/Meta-Llama-3.1-70B-Instruct @@ -29,12 +28,17 @@ export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" export LLM_ENDPOINT_URL="http://${ip_address}:${tgi_port}" export temperature=0.01 export max_new_tokens=4096 -export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ +export TOOLSET_PATH=$WORKPATH/tests/agent/sql_agent_test/ echo "TOOLSET_PATH=${TOOLSET_PATH}" export recursion_limit=15 export db_name=california_schools export db_path=/home/user/TAG-Bench/dev_folder/dev_databases/${db_name}/${db_name}.sqlite +# for using Google search API +export GOOGLE_CSE_ID=${GOOGLE_CSE_ID} +export GOOGLE_API_KEY=${GOOGLE_API_KEY} + + # download the test data function prepare_data() { cd $WORKDIR @@ -65,28 +69,6 @@ function build_docker_images() { fi } -# launch tgi-gaudi -function start_tgi_service() { - echo "token is ${HF_TOKEN}" - - #multi cards - echo "start tgi gaudi service" - docker run -d --runtime=habana --name "test-comps-tgi-gaudi-service" -p $tgi_port:80 -v $tgi_volume:/data -e HF_TOKEN=$HF_TOKEN -e HABANA_VISIBLE_DEVICES=0,1,2,3 -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tgi-gaudi:2.0.5 --model-id $model --max-input-tokens 8192 --max-total-tokens 16384 --sharded true --num-shard 4 - sleep 5s - echo "Waiting tgi gaudi ready" - n=0 - until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do - docker logs test-comps-tgi-gaudi-service &> ${LOG_PATH}/tgi-gaudi-service.log - n=$((n+1)) - if grep -q Connected ${LOG_PATH}/tgi-gaudi-service.log; then - break - fi - sleep 5s - done - sleep 5s - echo "Service started successfully" -} - function build_vllm_docker_images() { echo "Building the vllm docker images" cd $WORKPATH @@ -95,7 +77,7 @@ function build_vllm_docker_images() { git clone https://github.com/HabanaAI/vllm-fork.git fi cd ./vllm-fork - docker build -f Dockerfile.hpu -t opea/vllm-gaudi:comps --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy + docker build --no-cache -f Dockerfile.hpu -t opea/vllm-gaudi:comps --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy if [ $? -ne 0 ]; then echo "opea/vllm-gaudi:comps failed" exit 1 @@ -111,7 +93,7 @@ function start_vllm_service() { #single card echo "start vllm gaudi service" echo "**************model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq_len-to-capture 8192 --tensor-parallel-size 4 + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq_len-to-capture 16384 --tensor-parallel-size 4 sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -146,12 +128,18 @@ function run_test() { python3 test.py --test-sql-agent } +function run_benchmark() { + echo "Running benchmark..." + cd $WORKPATH/tests/agent/sql_agent_test + query_file=$$WORKDIR/TAG-Bench/query_by_db/query_california_schools.csv + outdir=$WORKDIR/sql_agent_output + outfile=california_school_agent_test_result.csv + python3 test_tag_bench.py --query_file +} + # echo "Building docker image...." # build_docker_images -# echo "Lauching TGI-gaudi...." -# start_tgi_service - echo "Building vllm docker image...." build_vllm_docker_images diff --git a/tests/agent/sql_agent_test/test_tag_bench.py b/tests/agent/sql_agent_test/test_tag_bench.py new file mode 100644 index 000000000..fa4a79b78 --- /dev/null +++ b/tests/agent/sql_agent_test/test_tag_bench.py @@ -0,0 +1,52 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import os +import pandas as pd +import requests + + +def generate_answer_agent_api(url, prompt): + proxies = {"http": ""} + payload = { + "query": prompt, + } + response = requests.post(url, json=payload, proxies=proxies) + answer = response.json()["text"] + return answer + +def save_json_lines(json_lines, args): + outfile = "sql_agent_results.json" + output = os.path.join(args.output_dir, outfile) + with open(output, "w") as f: + for line in json_lines: + f.write(str(line)+"\n") + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--query_file", type = str) + parser.add_argument("--output_dir", type = str) + parser.add_argument("--output_file", type = str) + args = parser.parse_args() + + df = pd.read_csv(args.query_file) + + if not os.path.exists(args.output_dir): + os.makedirs(args.output_dir) + + ip_address = os.getenv("ip_address", "localhost") + url = f"http://{ip_address}:9095/v1/chat/completions" + + json_lines = [] + for _, row in df.iterrows(): + query = row["Query"] + ref_answer = row["Answer"] + print("******Query:\n", query) + res = generate_answer_agent_api(url, query) + print("******Answer:\n", res) + json_lines.append({"query": query,"answer":ref_answer, "agent_answer": res}) + save_json_lines(json_lines, args) + print("="*20) + + df.to_csv(os.path.join(args.output_dir, args.output_file), index=False) \ No newline at end of file From c1ca4b475a0e73f00cc10c161b3cb4d9e0651a54 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Thu, 5 Dec 2024 15:24:22 -0800 Subject: [PATCH 06/29] test sql agent with hints Signed-off-by: minmin-intel --- .../langchain/src/strategy/sqlagent/hint.py | 26 ----------- tests/agent/sql_agent_llama.yaml | 11 ++--- .../sql_agent_test/generate_hints_file.py | 43 +++++++++++++++++++ tests/agent/sql_agent_test/test_sql_agent.sh | 32 +++++++++----- tests/agent/sql_agent_test/test_tag_bench.py | 4 +- tests/agent/test.py | 1 + .../test_agent_langchain_on_intel_hpu.sh | 22 ++++++++++ 7 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 tests/agent/sql_agent_test/generate_hints_file.py diff --git a/comps/agent/langchain/src/strategy/sqlagent/hint.py b/comps/agent/langchain/src/strategy/sqlagent/hint.py index e7c3814b8..6b9137cb4 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/hint.py +++ b/comps/agent/langchain/src/strategy/sqlagent/hint.py @@ -2,32 +2,6 @@ import os import glob -def generate_column_descriptions(db_name): - output = [] - decriptions_only = [] - working_dir = os.getenv("WORKDIR") - assert working_dir is not None, "WORKDIR environment variable is not set." - DESCRIPTION_FOLDER=os.path.join(working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/") - table_files = glob.glob(os.path.join(DESCRIPTION_FOLDER, "*.csv")) - for table_file in table_files: - table_name = os.path.basename(table_file).split(".")[0] - print("Table name: ", table_name) - df = pd.read_csv(table_file) - for _, row in df.iterrows(): - col_name = row["original_column_name"] - if not pd.isnull(row["value_description"]): - description = str(row["value_description"]) - if description.lower() in col_name.lower(): - print("Description {} is same as column name {}".format(description, col_name)) - pass - else: - description = description.replace("\n", " ") - description = " ".join(description.split()) - output.append(f"{table_name}.{col_name}: {description}") - # decriptions_only.append(description) - decriptions_only.append(f"{col_name}: {description}") - return output, decriptions_only - def read_hints(hints_file): """ hints_file: csv with columns: table_name, column_name, description diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml index c31922ba1..244166d18 100644 --- a/tests/agent/sql_agent_llama.yaml +++ b/tests/agent/sql_agent_llama.yaml @@ -8,7 +8,7 @@ services: volumes: - ${TOOLSET_PATH}:/home/user/tools/ # tools - ${WORKDIR}/GenAIComps/comps:/home/user/comps - - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database + - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database and hints_file ports: - "9095:9095" ipc: host @@ -17,7 +17,8 @@ services: strategy: sql_agent_llama db_name: ${db_name} db_path: ${db_path} - use_hints: false + use_hints: true + hints_file: /home/user/TAG-Bench/${db_name}_hints.csv recursion_limit: ${recursion_limit} llm_engine: vllm HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} @@ -26,11 +27,11 @@ services: temperature: ${temperature} max_new_tokens: ${max_new_tokens} streaming: false - tools: /home/user/tools/custom_tools.yaml + tools: /home/user/tools/sql_agent_tools.yaml # change back to custom_tools.yaml require_human_feedback: false no_proxy: ${no_proxy} http_proxy: ${http_proxy} https_proxy: ${https_proxy} port: 9095 - GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} - GOOGLE_API_KEY: ${GOOGLE_API_KEY} + GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} #delete + GOOGLE_API_KEY: ${GOOGLE_API_KEY} # delete diff --git a/tests/agent/sql_agent_test/generate_hints_file.py b/tests/agent/sql_agent_test/generate_hints_file.py new file mode 100644 index 000000000..c31aac441 --- /dev/null +++ b/tests/agent/sql_agent_test/generate_hints_file.py @@ -0,0 +1,43 @@ +import pandas as pd +import os +import glob + +def generate_column_descriptions(db_name): + decriptions = [] + working_dir = os.getenv("WORKDIR") + assert working_dir is not None, "WORKDIR environment variable is not set." + DESCRIPTION_FOLDER=os.path.join(working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/") + table_files = glob.glob(os.path.join(DESCRIPTION_FOLDER, "*.csv")) + table_name_col = [] + col_name_col = [] + for table_file in table_files: + table_name = os.path.basename(table_file).split(".")[0] + print("Table name: ", table_name) + df = pd.read_csv(table_file) + for _, row in df.iterrows(): + col_name = row["original_column_name"] + if not pd.isnull(row["value_description"]): + description = str(row["value_description"]) + if description.lower() in col_name.lower(): + print("Description {} is same as column name {}".format(description, col_name)) + pass + else: + description = description.replace("\n", " ") + description = " ".join(description.split()) + # decriptions_only.append(description) + decriptions.append(description) + table_name_col.append(table_name) + col_name_col.append(col_name) + hints_df = pd.DataFrame({"table_name": table_name_col, "column_name": col_name_col, "description": decriptions}) + tag_bench_dir = os.path.join(working_dir, "TAG-Bench") + output_file = os.path.join(tag_bench_dir, f"{db_name}_hints.csv") + hints_df.to_csv(output_file, index=False) + print(f"Generated hints file: {output_file}") + + +if __name__ == "__main__": + generate_column_descriptions("california_schools") + + + + \ No newline at end of file diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 56c4232fa..85f7e16dd 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -21,14 +21,14 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') vllm_port=8085 -vllm_volume=${HF_CACHE_DIR} #$WORKPATH/data +vllm_volume=${HF_CACHE_DIR} #$WORKPATH/data # change back to workpath/data export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" -export LLM_ENDPOINT_URL="http://${ip_address}:${tgi_port}" +export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" export temperature=0.01 export max_new_tokens=4096 -export TOOLSET_PATH=$WORKPATH/tests/agent/sql_agent_test/ +export TOOLSET_PATH=$WORKPATH/tests/agent/sql_agent_test/ # change back to custom tools echo "TOOLSET_PATH=${TOOLSET_PATH}" export recursion_limit=15 export db_name=california_schools @@ -56,6 +56,12 @@ function prepare_data() { echo "Data preparation done!" } +function generate_hints_for_benchmark() { + echo "Generating hints for benchmark..." + cd $WORKPATH/tests/agent/sql_agent_test + python3 generate_hints_file.py +} + function build_docker_images() { echo "Building the docker images" cd $WORKPATH @@ -131,20 +137,23 @@ function run_test() { function run_benchmark() { echo "Running benchmark..." cd $WORKPATH/tests/agent/sql_agent_test - query_file=$$WORKDIR/TAG-Bench/query_by_db/query_california_schools.csv + query_file=${WORKDIR}/TAG-Bench/query_by_db/query_california_schools.csv outdir=$WORKDIR/sql_agent_output - outfile=california_school_agent_test_result.csv - python3 test_tag_bench.py --query_file + outfile=california_school_agent_test_result_with_hints.csv + python3 test_tag_bench.py --query_file $query_file --output_dir $outdir --output_file $outfile } # echo "Building docker image...." # build_docker_images -echo "Building vllm docker image...." -build_vllm_docker_images +# echo "Building vllm docker image...." +# build_vllm_docker_images -echo "Launching vllm service...." -start_vllm_service +# echo "Launching vllm service...." +# start_vllm_service + +echo "Generating hints_file..." +generate_hints_for_benchmark echo "launching sql_agent_llama service...." start_sql_agent_llama_service @@ -152,3 +161,6 @@ start_sql_agent_llama_service echo "Running test...." run_test +echo "Running benchmark...." +run_benchmark + diff --git a/tests/agent/sql_agent_test/test_tag_bench.py b/tests/agent/sql_agent_test/test_tag_bench.py index fa4a79b78..7545323d4 100644 --- a/tests/agent/sql_agent_test/test_tag_bench.py +++ b/tests/agent/sql_agent_test/test_tag_bench.py @@ -45,8 +45,8 @@ def save_json_lines(json_lines, args): print("******Query:\n", query) res = generate_answer_agent_api(url, query) print("******Answer:\n", res) - json_lines.append({"query": query,"answer":ref_answer, "agent_answer": res}) - save_json_lines(json_lines, args) + # json_lines.append({"query": query,"answer":ref_answer, "agent_answer": res}) + # save_json_lines(json_lines, args) print("="*20) df.to_csv(os.path.join(args.output_dir, args.output_file), index=False) \ No newline at end of file diff --git a/tests/agent/test.py b/tests/agent/test.py index 12e23476c..e345e8942 100644 --- a/tests/agent/test.py +++ b/tests/agent/test.py @@ -54,6 +54,7 @@ def process_request(url, query, is_stream=False): prompt = "How many schools have the average score in Math over 560 in the SAT test?" else: prompt = "What is OPEA?" + if args.stream: process_request(url, prompt, is_stream=True) else: diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 9ba25228a..26ad61382 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -298,6 +298,22 @@ function stop_docker() { stop_agent_docker } + +function validate_sql_agent(){ + cd $WORKPATH/tests/ + local CONTENT=$(bash agent/sql_agent_test/test_sql_agent.sh) + local EXIT_CODE=$(validate "$CONTENT" "173" "test-sql-agent") + echo "$EXIT_CODE" + local EXIT_CODE="${EXIT_CODE:0-1}" + echo "return value is $EXIT_CODE" + if [ "$EXIT_CODE" == "1" ]; then + echo "==================SQL Agent logs ======================" + docker logs test-comps-agent-endpoint + exit 1 + fi +} + + function main() { stop_agent_docker stop_docker @@ -399,6 +415,12 @@ function main() { # stop_agent_docker stop_docker + + # test sql agent + validate_sql_agent + + stop_docker + echo y | docker system prune 2>&1 > /dev/null } From cc56a6c00d1b172ce7b6b5a9d96fe0f3035eb328 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Thu, 5 Dec 2024 16:41:20 -0800 Subject: [PATCH 07/29] fix bugs for sql agent with hints and update test Signed-off-by: minmin-intel --- comps/agent/langchain/src/config.py | 2 +- comps/agent/langchain/src/utils.py | 5 ++-- tests/agent/sql_agent_llama.yaml | 10 +++---- tests/agent/sql_agent_test/test_sql_agent.sh | 30 ++++++++++++++------ 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/comps/agent/langchain/src/config.py b/comps/agent/langchain/src/config.py index 82c5b0fde..fda830e31 100644 --- a/comps/agent/langchain/src/config.py +++ b/comps/agent/langchain/src/config.py @@ -84,4 +84,4 @@ env_config += ["--use_hints", os.environ["use_hints"]] if os.environ.get("hints_file") is not None: - env_config += ["--hints_file", os.environ["hint_file"]] \ No newline at end of file + env_config += ["--hints_file", os.environ["hints_file"]] \ No newline at end of file diff --git a/comps/agent/langchain/src/utils.py b/comps/agent/langchain/src/utils.py index fa3ead466..be7fe9191 100644 --- a/comps/agent/langchain/src/utils.py +++ b/comps/agent/langchain/src/utils.py @@ -142,7 +142,7 @@ def get_args(): # for sql agent parser.add_argument("--db_path", type=str, help="database path") parser.add_argument("--db_name", type=str, help="database name") - parser.add_argument("--use_hints", action="store_true", help="If this agent uses hints") + parser.add_argument("--use_hints", type=str, default = "false", help="If this agent uses hints") parser.add_argument("--hints_file", type=str, help="path to the hints file") sys_args, unknown_args = parser.parse_known_args() @@ -159,7 +159,8 @@ def get_args(): sys_args.streaming = False if sys_args.use_hints == "true": - sys_args.use_hints = False + print("SQL agent will use hints") + sys_args.use_hints = True else: sys_args.use_hints = False diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml index 244166d18..a2842d9e9 100644 --- a/tests/agent/sql_agent_llama.yaml +++ b/tests/agent/sql_agent_llama.yaml @@ -7,7 +7,7 @@ services: container_name: test-comps-agent-endpoint volumes: - ${TOOLSET_PATH}:/home/user/tools/ # tools - - ${WORKDIR}/GenAIComps/comps:/home/user/comps + # - ${WORKDIR}/GenAIComps/comps:/home/user/comps # code - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database and hints_file ports: - "9095:9095" @@ -17,7 +17,7 @@ services: strategy: sql_agent_llama db_name: ${db_name} db_path: ${db_path} - use_hints: true + use_hints: false #true hints_file: /home/user/TAG-Bench/${db_name}_hints.csv recursion_limit: ${recursion_limit} llm_engine: vllm @@ -27,11 +27,11 @@ services: temperature: ${temperature} max_new_tokens: ${max_new_tokens} streaming: false - tools: /home/user/tools/sql_agent_tools.yaml # change back to custom_tools.yaml + tools: /home/user/tools/custom_tools.yaml #/home/user/tools/sql_agent_tools.yaml # change back to custom_tools.yaml require_human_feedback: false no_proxy: ${no_proxy} http_proxy: ${http_proxy} https_proxy: ${https_proxy} port: 9095 - GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} #delete - GOOGLE_API_KEY: ${GOOGLE_API_KEY} # delete + # GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} #delete + # GOOGLE_API_KEY: ${GOOGLE_API_KEY} # delete diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 85f7e16dd..a92f46561 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -12,7 +12,7 @@ echo $WORKPATH LOG_PATH="$WORKPATH/tests" # WORKDIR is one level up from GenAIComps -WORKDIR=$(dirname "$WORKPATH") +export WORKDIR=$(dirname "$WORKPATH") echo $WORKDIR export agent_image="opea/agent-langchain:comps" @@ -28,7 +28,7 @@ export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" export temperature=0.01 export max_new_tokens=4096 -export TOOLSET_PATH=$WORKPATH/tests/agent/sql_agent_test/ # change back to custom tools +export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ #$WORKPATH/tests/agent/sql_agent_test/ # change back to custom tools echo "TOOLSET_PATH=${TOOLSET_PATH}" export recursion_limit=15 export db_name=california_schools @@ -56,6 +56,14 @@ function prepare_data() { echo "Data preparation done!" } +function remove_data() { + echo "Removing data..." + cd $WORKDIR + rm -rf TAG-Bench + echo "Data removed!" +} + + function generate_hints_for_benchmark() { echo "Generating hints for benchmark..." cd $WORKPATH/tests/agent/sql_agent_test @@ -123,6 +131,8 @@ function start_sql_agent_llama_service() { echo "Starting sql_agent_llama agent microservice" docker compose -f $WORKPATH/tests/agent/sql_agent_llama.yaml up -d sleep 5s + # need to wait longer if need to use hints + # sleep 3m docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -139,7 +149,7 @@ function run_benchmark() { cd $WORKPATH/tests/agent/sql_agent_test query_file=${WORKDIR}/TAG-Bench/query_by_db/query_california_schools.csv outdir=$WORKDIR/sql_agent_output - outfile=california_school_agent_test_result_with_hints.csv + outfile=california_school_agent_test_result.csv python3 test_tag_bench.py --query_file $query_file --output_dir $outdir --output_file $outfile } @@ -149,11 +159,11 @@ function run_benchmark() { # echo "Building vllm docker image...." # build_vllm_docker_images -# echo "Launching vllm service...." -# start_vllm_service +echo "Launching vllm service...." +start_vllm_service -echo "Generating hints_file..." -generate_hints_for_benchmark +# echo "Generating hints_file..." +# generate_hints_for_benchmark echo "launching sql_agent_llama service...." start_sql_agent_llama_service @@ -161,6 +171,8 @@ start_sql_agent_llama_service echo "Running test...." run_test -echo "Running benchmark...." -run_benchmark +# echo "Running benchmark...." +# run_benchmark +echo "Removing data...." +remove_data From d063bf9da42261a074363891ea8f49b15e6bf845 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 00:44:00 +0000 Subject: [PATCH 08/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/agent/langchain/requirements.txt | 6 +- comps/agent/langchain/src/config.py | 2 +- .../langchain/src/strategy/base_agent.py | 2 +- .../langchain/src/strategy/sqlagent/hint.py | 23 ++++--- .../src/strategy/sqlagent/planner.py | 64 +++++++++++-------- .../langchain/src/strategy/sqlagent/prompt.py | 25 ++++---- .../src/strategy/sqlagent/sql_tools.py | 19 +++--- .../langchain/src/strategy/sqlagent/utils.py | 62 +++++++++++------- comps/agent/langchain/src/utils.py | 4 +- .../sql_agent_test/generate_hints_file.py | 21 +++--- tests/agent/sql_agent_test/run_data_split.sh | 5 +- tests/agent/sql_agent_test/split_data.py | 10 ++- tests/agent/sql_agent_test/sql_agent_tools.py | 10 ++- .../agent/sql_agent_test/sql_agent_tools.yaml | 2 +- tests/agent/sql_agent_test/test_tag_bench.py | 17 +++-- .../test_agent_langchain_on_intel_hpu.sh | 2 +- 16 files changed, 164 insertions(+), 110 deletions(-) diff --git a/comps/agent/langchain/requirements.txt b/comps/agent/langchain/requirements.txt index f1c41c447..431a5060a 100644 --- a/comps/agent/langchain/requirements.txt +++ b/comps/agent/langchain/requirements.txt @@ -1,11 +1,11 @@ # used by microservice docarray[full] - -#used by tools -langchain-google-community fastapi huggingface_hub langchain + +#used by tools +langchain-google-community langchain-huggingface langchain-openai langchain_community diff --git a/comps/agent/langchain/src/config.py b/comps/agent/langchain/src/config.py index fda830e31..6bb1b12dd 100644 --- a/comps/agent/langchain/src/config.py +++ b/comps/agent/langchain/src/config.py @@ -84,4 +84,4 @@ env_config += ["--use_hints", os.environ["use_hints"]] if os.environ.get("hints_file") is not None: - env_config += ["--hints_file", os.environ["hints_file"]] \ No newline at end of file + env_config += ["--hints_file", os.environ["hints_file"]] diff --git a/comps/agent/langchain/src/strategy/base_agent.py b/comps/agent/langchain/src/strategy/base_agent.py index 53c1017bf..8c0048b87 100644 --- a/comps/agent/langchain/src/strategy/base_agent.py +++ b/comps/agent/langchain/src/strategy/base_agent.py @@ -38,7 +38,7 @@ def execute(self, state: dict): def prepare_initial_state(self, query): raise NotImplementedError - + async def stream_generator(self, query, config): initial_state = self.prepare_initial_state(query) try: diff --git a/comps/agent/langchain/src/strategy/sqlagent/hint.py b/comps/agent/langchain/src/strategy/sqlagent/hint.py index 6b9137cb4..06fb5b155 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/hint.py +++ b/comps/agent/langchain/src/strategy/sqlagent/hint.py @@ -1,10 +1,15 @@ -import pandas as pd -import os +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import glob +import os + +import pandas as pd + def read_hints(hints_file): """ - hints_file: csv with columns: table_name, column_name, description + hints_file: csv with columns: table_name, column_name, description """ hints_df = pd.read_csv(hints_file) cols_descriptions = [] @@ -21,9 +26,11 @@ def read_hints(hints_file): def sort_list(list1, list2): import numpy as np + # Use numpy's argsort function to get the indices that would sort the second list - idx = np.argsort(list2)# ascending order - return np.array(list1)[idx].tolist()[::-1], np.array(list2)[idx].tolist()[::-1]# descending order + idx = np.argsort(list2) # ascending order + return np.array(list1)[idx].tolist()[::-1], np.array(list2)[idx].tolist()[::-1] # descending order + def get_topk_cols(topk, cols_descriptions, similarities): sorted_cols, similarities = sort_list(cols_descriptions, similarities) @@ -31,7 +38,7 @@ def get_topk_cols(topk, cols_descriptions, similarities): output = [] for col, sim in zip(top_k_cols, similarities[:topk]): # print(f"{col}: {sim}") - if sim > 0.5: + if sim > 0.5: output.append(col) return output @@ -45,5 +52,5 @@ def pick_hints(query, model, column_embeddings, complete_descriptions, topk=5): hint = "" for col in topk_cols_descriptions: - hint += (col +'\n') - return hint \ No newline at end of file + hint += col + "\n" + return hint diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py index 71d52169e..06df15120 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/planner.py +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -1,37 +1,44 @@ -from typing import Annotated, Sequence, TypedDict +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import json import os +from typing import Annotated, Sequence, TypedDict -from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, ToolMessage, SystemMessage -from langchain_core.runnables import RunnableLambda +from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage, ToolMessage from langchain_core.prompts import PromptTemplate +from langchain_core.runnables import RunnableLambda from langgraph.graph import END, StateGraph from langgraph.graph.message import add_messages from langgraph.managed import IsLastStep from langgraph.prebuilt import ToolNode -from ..base_agent import BaseAgent from ...utils import setup_chat_model, tool_renderer - +from ..base_agent import BaseAgent +from .hint import pick_hints, read_hints from .prompt import AGENT_NODE_TEMPLATE -from .hint import read_hints, pick_hints -from .utils import convert_json_to_tool_call, assemble_history, remove_repeated_tool_calls -from .utils import LlamaOutputParserAndQueryFixer -from .sql_tools import get_table_schema, get_sql_query_tool +from .sql_tools import get_sql_query_tool, get_table_schema +from .utils import ( + LlamaOutputParserAndQueryFixer, + assemble_history, + convert_json_to_tool_call, + remove_repeated_tool_calls, +) class AgentState(TypedDict): """The state of the agent.""" + messages: Annotated[Sequence[BaseMessage], add_messages] is_last_step: IsLastStep hint: str - + class AgentNodeLlama: def __init__(self, args, tools): self.llm = setup_chat_model(args) self.args = args - # two types of tools: + # two types of tools: # sql_db_query - always available, no need to specify # other tools - user defined # here, self.tools is a list of user defined tools @@ -40,21 +47,22 @@ def __init__(self, args, tools): self.chain = self.llm - self.output_parser = LlamaOutputParserAndQueryFixer(chat_model = self.llm) + self.output_parser = LlamaOutputParserAndQueryFixer(chat_model=self.llm) if args.use_hints: from sentence_transformers import SentenceTransformer + self.cols_descriptions, self.values_descriptions = read_hints(args.hints_file) - self.embed_model = SentenceTransformer('BAAI/bge-large-en-v1.5') + self.embed_model = SentenceTransformer("BAAI/bge-large-en-v1.5") self.column_embeddings = self.embed_model.encode(self.values_descriptions) - + def __call__(self, state): print("----------Call Agent Node----------") question = state["messages"][0].content table_schema, num_tables = get_table_schema(self.args.db_path) if self.args.use_hints: if not state["hint"]: - hints = pick_hints(question, self.embed_model,self.column_embeddings,self.cols_descriptions) + hints = pick_hints(question, self.embed_model, self.column_embeddings, self.cols_descriptions) else: hints = state["hint"] print("@@@ Hints: ", hints) @@ -66,16 +74,18 @@ def __call__(self, state): prompt = AGENT_NODE_TEMPLATE.format( domain=self.args.db_name, - tools = self.tools, + tools=self.tools, num_tables=num_tables, - tables_schema=table_schema, - question=question, + tables_schema=table_schema, + question=question, hints=hints, history=history, - ) - + ) + output = self.chain.invoke(prompt) - output = self.output_parser.parse(output.content, history, table_schema, hints, question, state["messages"]) #text: str, history: str, db_schema: str, hint: str + output = self.output_parser.parse( + output.content, history, table_schema, hints, question, state["messages"] + ) # text: str, history: str, db_schema: str, hint: str print("@@@@@ Agent output:\n", output) # convert output to tool calls @@ -101,12 +111,12 @@ def __call__(self, state): ai_message = AIMessage(content=str(output[0]["answer"])) else: ai_message = AIMessage(content=str(output)) - + return {"messages": [ai_message], "hint": hints} class SQLAgentLlama(BaseAgent): - # need new args: + # need new args: # # db_name and db_path # # use_hints, hints_file def __init__(self, args, with_memory=False, **kwargs): @@ -117,7 +127,7 @@ def __init__(self, args, with_memory=False, **kwargs): agent = AgentNodeLlama(args, self.tools_descriptions) sql_tool = get_sql_query_tool(args.db_path) print("@@@@ SQL Tool: ", sql_tool) - tools = self.tools_descriptions+[sql_tool] + tools = self.tools_descriptions + [sql_tool] print("@@@@ ALL Tools: ", tools) tool_node = ToolNode(tools) @@ -145,7 +155,7 @@ def __init__(self, args, with_memory=False, **kwargs): workflow.add_edge("tools", "agent") self.app = workflow.compile() - + def decide_next_step(self, state: AgentState): messages = state["messages"] last_message = messages[-1] @@ -157,8 +167,6 @@ def decide_next_step(self, state: AgentState): return "tools" else: return "end" - + def prepare_initial_state(self, query): return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} - - \ No newline at end of file diff --git a/comps/agent/langchain/src/strategy/sqlagent/prompt.py b/comps/agent/langchain/src/strategy/sqlagent/prompt.py index 875f7ee44..aa95d1be2 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/prompt.py +++ b/comps/agent/langchain/src/strategy/sqlagent/prompt.py @@ -1,5 +1,8 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + AGENT_NODE_TEMPLATE = """\ -You are an SQL expert tasked with answering questions about {domain}. +You are an SQL expert tasked with answering questions about {domain}. In addition to the database, you have the following tools to gather information: {tools} @@ -32,7 +35,7 @@ **IMPORTANT:** * Review your previous steps carefully and utilize them to answer the question. Do not repeat your previous steps. -* The database may not have all the information needed to answer the question. Use the additional tools provided if necessary. +* The database may not have all the information needed to answer the question. Use the additional tools provided if necessary. * If you did not get the answer at first, do not give up. Reflect on the steps that you have taken and try a different way. Think out of the box. Now take a deep breath and think step by step to answeer the following question. @@ -42,7 +45,7 @@ ANSWER_PARSER_PROMPT = """\ -Review the output from an SQL agent and determine if a correct answer has been provided and grounded on real data. +Review the output from an SQL agent and determine if a correct answer has been provided and grounded on real data. Say "yes" when all the following conditions are met: 1. The answer is complete and does not require additional steps to be taken. @@ -65,7 +68,7 @@ SQL_QUERY_FIXER_PROMPT = """\ -You are an SQL database expert tasked with reviewing a SQL query written by an agent. +You are an SQL database expert tasked with reviewing a SQL query written by an agent. **Procedure:** 1. Review Database Schema: - Examine the table creation statements to understand the database structure. @@ -93,12 +96,12 @@ {QUESTION} ************************** -Now analyze the SQL query step by step. Present your reasonings. +Now analyze the SQL query step by step. Present your reasonings. If you identified issues in the original query, write down the corrected SQL query in the format below: ```sql SELECT column1, column2, ... -``` +``` If the original SQL query is correct, just say the query is correct. @@ -108,7 +111,7 @@ """ SQL_QUERY_FIXER_PROMPT_with_result = """\ -You are an SQL database expert tasked with reviewing a SQL query. +You are an SQL database expert tasked with reviewing a SQL query. **Procedure:** 1. Review Database Schema: - Examine the table creation statements to understand the database structure. @@ -117,7 +120,7 @@ 3. Analyze Query Requirements: - User Question: Consider what information the query is supposed to retrieve. Decide if aggregation like COUNT or SUM is needed. - Executed SQL Query: Review the SQL query that was previously executed. -- Execution Result: Analyze the outcome of the executed query. Think carefully if the result makes sense. +- Execution Result: Analyze the outcome of the executed query. Think carefully if the result makes sense. 4. Check against the following common errors: - Failure to exclude null values, ranking or filtering columns have nulls, syntax errors, incorrect table references, incorrect column references, logical mistakes. 5. Correct the Query only when Necessary: @@ -141,16 +144,16 @@ {RESULT} ************************** -Now analyze the SQL query step by step. Present your reasonings. +Now analyze the SQL query step by step. Present your reasonings. If you identified issues in the original query, write down the corrected SQL query in the format below: ```sql SELECT column1, column2, ... -``` +``` If the original SQL query is correct, just say the query is correct. Note: Some user questions can only be answered partially with the database. This is OK. The agent may use other tools in subsequent steps to get additional info. In some cases, the agent may have got additional info with other tools and have incorporated those in its query. Your goal is to review the SQL query and fix it when necessary. Only use the tables provided in the database schema in your corrected query. Do not join tables that are not present in the schema. Do not create any new tables. If you cannot do better than the original query, just say the query is correct. -""" \ No newline at end of file +""" diff --git a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py index df010fd81..5f8f89890 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py +++ b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py @@ -1,12 +1,16 @@ -from langchain_community.utilities import SQLDatabase +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool +from langchain_community.utilities import SQLDatabase def connect_to_db(db_path): - uri= "sqlite:///{path}".format(path=db_path) + uri = "sqlite:///{path}".format(path=db_path) db = SQLDatabase.from_uri(uri) return db + def get_table_schema(db_path): db = connect_to_db(db_path) table_names = ", ".join(db.get_usable_table_names()) @@ -18,11 +22,10 @@ def get_table_schema(db_path): def get_sql_query_tool(db_path): db = connect_to_db(db_path) query_sql_database_tool_description = ( - "Input to this tool is a detailed and correct SQL query, output is a " - "result from the database. If the query is not correct, an error message " - "will be returned. If an error is returned, rewrite the query, check the " - "query, and try again. " - ) + "Input to this tool is a detailed and correct SQL query, output is a " + "result from the database. If the query is not correct, an error message " + "will be returned. If an error is returned, rewrite the query, check the " + "query, and try again. " + ) db_query_tool = QuerySQLDataBaseTool(db=db, description=query_sql_database_tool_description) return db_query_tool - diff --git a/comps/agent/langchain/src/strategy/sqlagent/utils.py b/comps/agent/langchain/src/strategy/sqlagent/utils.py index fcbcef19f..32bf611a9 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/utils.py +++ b/comps/agent/langchain/src/strategy/sqlagent/utils.py @@ -1,7 +1,12 @@ -import uuid +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import json -from langchain_core.messages.tool import ToolCall +import uuid + from langchain_core.messages import AIMessage, ToolMessage +from langchain_core.messages.tool import ToolCall + from .prompt import ANSWER_PARSER_PROMPT, SQL_QUERY_FIXER_PROMPT, SQL_QUERY_FIXER_PROMPT_with_result @@ -25,10 +30,9 @@ def parse_answer_with_llm(text, history, chat_model): else: return None + def get_tool_calls_other_than_sql(text): - """ - get the tool calls other than sql_db_query - """ + """Get the tool calls other than sql_db_query.""" tool_calls = [] text = text.replace("assistant", "") json_lines = text.split("\n") @@ -47,11 +51,12 @@ def get_tool_calls_other_than_sql(text): if isinstance(parsed_line, dict): if "tool" in parsed_line: tool_calls.append(parsed_line) - + except: pass return tool_calls + def get_all_sql_queries(text): queries = [] if "```sql" in text: @@ -64,13 +69,15 @@ def get_all_sql_queries(text): return queries + def get_the_last_sql_query(text): queries = get_all_sql_queries(text) if queries: return queries[-1] else: return None - + + def check_query_if_executed_and_result(query, messages): # get previous sql_db_query tool calls previous_tool_calls = [] @@ -82,7 +89,7 @@ def check_query_if_executed_and_result(query, messages): for tc in previous_tool_calls: if query == tc["args"]["query"]: return get_tool_output(messages, tc["id"]) - + return None @@ -94,10 +101,14 @@ def parse_and_fix_sql_query_v2(text, chat_model, db_schema, hint, question, mess # if not, pass only the query to the fixer result = check_query_if_executed_and_result(chosen_query, messages) if result: - prompt = SQL_QUERY_FIXER_PROMPT_with_result.format(DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question, RESULT=result) + prompt = SQL_QUERY_FIXER_PROMPT_with_result.format( + DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question, RESULT=result + ) else: - prompt = SQL_QUERY_FIXER_PROMPT.format(DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question) - + prompt = SQL_QUERY_FIXER_PROMPT.format( + DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question + ) + response = chat_model.invoke(prompt).content print("@@@ SQL query fixer response: ", response) if "query is correct" in response.lower(): @@ -105,10 +116,11 @@ def parse_and_fix_sql_query_v2(text, chat_model, db_schema, hint, question, mess else: # parse the fixed query fixed_query = get_the_last_sql_query(response) - return fixed_query + return fixed_query else: return None - + + class LlamaOutputParserAndQueryFixer: def __init__(self, chat_model): self.chat_model = chat_model @@ -129,12 +141,12 @@ def parse(self, text: str, history: str, db_schema: str, hint: str, question: st return tool_calls else: return text - + def convert_json_to_tool_call(json_str): tool_name = json_str["tool"] tool_args = json_str["args"] - tcid = str(uuid.uuid4()) + tcid = str(uuid.uuid4()) tool_call = ToolCall(name=tool_name, args=tool_args, id=tcid) return tool_call @@ -145,7 +157,7 @@ def get_tool_output(messages, id): if isinstance(msg, ToolMessage): if msg.tool_call_id == id: tool_output = msg.content - tool_output = tool_output[:1000] # limit to 1000 characters + tool_output = tool_output[:1000] # limit to 1000 characters break return tool_output @@ -168,9 +180,13 @@ def assemble_history(messages): tool_output = get_tool_output(messages, id) if tool == "sql_db_query": sql_query = tc_args["query"] - query_history += f"Step {n}. Executed SQL query: {sql_query}\nQuery Result: {tool_output}\n{breaker}\n" + query_history += ( + f"Step {n}. Executed SQL query: {sql_query}\nQuery Result: {tool_output}\n{breaker}\n" + ) else: - query_history += f"Step {n}. Called tool: {tool} - {tc_args}\nTool Output: {tool_output}\n{breaker}\n" + query_history += ( + f"Step {n}. Called tool: {tool} - {tc_args}\nTool Output: {tool_output}\n{breaker}\n" + ) n += 1 elif m.content == "Repeated previous steps.": # repeated steps query_history += f"Step {n}. Repeated tool calls from previous steps.\n{breaker}\n" @@ -178,13 +194,13 @@ def assemble_history(messages): else: # did not make tool calls query_history += f"Assistant Output: {m.content}\n" - + return query_history def remove_repeated_tool_calls(tool_calls, messages): - """ - Remove repeated tool calls in the messages. + """Remove repeated tool calls in the messages. + tool_calls: list of tool calls: ToolCall(name=tool_name, args=tool_args, id=tcid) messages: list of messages: AIMessage, ToolMessage, HumanMessage """ @@ -194,10 +210,10 @@ def remove_repeated_tool_calls(tool_calls, messages): if isinstance(m, AIMessage) and m.tool_calls and m.content != "Repeated previous steps.": for tc in m.tool_calls: previous_tool_calls.append({"tool": tc["name"], "args": tc["args"]}) - + unique_tool_calls = [] for tc in tool_calls: if {"tool": tc["name"], "args": tc["args"]} not in previous_tool_calls: unique_tool_calls.append(tc) - return unique_tool_calls \ No newline at end of file + return unique_tool_calls diff --git a/comps/agent/langchain/src/utils.py b/comps/agent/langchain/src/utils.py index be7fe9191..bdd25f518 100644 --- a/comps/agent/langchain/src/utils.py +++ b/comps/agent/langchain/src/utils.py @@ -142,7 +142,7 @@ def get_args(): # for sql agent parser.add_argument("--db_path", type=str, help="database path") parser.add_argument("--db_name", type=str, help="database name") - parser.add_argument("--use_hints", type=str, default = "false", help="If this agent uses hints") + parser.add_argument("--use_hints", type=str, default="false", help="If this agent uses hints") parser.add_argument("--hints_file", type=str, help="path to the hints file") sys_args, unknown_args = parser.parse_known_args() @@ -157,7 +157,7 @@ def get_args(): sys_args.streaming = True else: sys_args.streaming = False - + if sys_args.use_hints == "true": print("SQL agent will use hints") sys_args.use_hints = True diff --git a/tests/agent/sql_agent_test/generate_hints_file.py b/tests/agent/sql_agent_test/generate_hints_file.py index c31aac441..9804b3305 100644 --- a/tests/agent/sql_agent_test/generate_hints_file.py +++ b/tests/agent/sql_agent_test/generate_hints_file.py @@ -1,12 +1,19 @@ -import pandas as pd -import os +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import glob +import os + +import pandas as pd + def generate_column_descriptions(db_name): decriptions = [] working_dir = os.getenv("WORKDIR") assert working_dir is not None, "WORKDIR environment variable is not set." - DESCRIPTION_FOLDER=os.path.join(working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/") + DESCRIPTION_FOLDER = os.path.join( + working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/" + ) table_files = glob.glob(os.path.join(DESCRIPTION_FOLDER, "*.csv")) table_name_col = [] col_name_col = [] @@ -17,11 +24,11 @@ def generate_column_descriptions(db_name): for _, row in df.iterrows(): col_name = row["original_column_name"] if not pd.isnull(row["value_description"]): - description = str(row["value_description"]) + description = str(row["value_description"]) if description.lower() in col_name.lower(): print("Description {} is same as column name {}".format(description, col_name)) pass - else: + else: description = description.replace("\n", " ") description = " ".join(description.split()) # decriptions_only.append(description) @@ -37,7 +44,3 @@ def generate_column_descriptions(db_name): if __name__ == "__main__": generate_column_descriptions("california_schools") - - - - \ No newline at end of file diff --git a/tests/agent/sql_agent_test/run_data_split.sh b/tests/agent/sql_agent_test/run_data_split.sh index a5c85695d..2fc2dfcb0 100644 --- a/tests/agent/sql_agent_test/run_data_split.sh +++ b/tests/agent/sql_agent_test/run_data_split.sh @@ -1,3 +1,6 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + DATAPATH=$WORKDIR/TAG-Bench/tag_queries.csv OUTFOLDER=$WORKDIR/TAG-Bench/query_by_db -python3 split_data.py --path $DATAPATH --output $OUTFOLDER \ No newline at end of file +python3 split_data.py --path $DATAPATH --output $OUTFOLDER diff --git a/tests/agent/sql_agent_test/split_data.py b/tests/agent/sql_agent_test/split_data.py index a00aeaa7e..1b3f5cfc7 100644 --- a/tests/agent/sql_agent_test/split_data.py +++ b/tests/agent/sql_agent_test/split_data.py @@ -1,7 +1,11 @@ -import pandas as pd +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import argparse import os +import pandas as pd + if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--path", type=str, required=True) @@ -11,7 +15,7 @@ # if output folder does not exist, create it if not os.path.exists(args.output): os.makedirs(args.output) - + # Load the data data = pd.read_csv(args.path) @@ -20,4 +24,4 @@ for domain in domains: domain_data = data[data["DB used"] == domain] out = os.path.join(args.output, f"query_{domain}.csv") - domain_data.to_csv(out, index=False) \ No newline at end of file + domain_data.to_csv(out, index=False) diff --git a/tests/agent/sql_agent_test/sql_agent_tools.py b/tests/agent/sql_agent_test/sql_agent_tools.py index d303a7093..fc14efe8e 100644 --- a/tests/agent/sql_agent_test/sql_agent_tools.py +++ b/tests/agent/sql_agent_test/sql_agent_tools.py @@ -1,5 +1,9 @@ -def search_web(query: str)->str: - '''Search the web for information not contained in databases.''' +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +def search_web(query: str) -> str: + """Search the web for information not contained in databases.""" from langchain_core.tools import Tool from langchain_google_community import GoogleSearchAPIWrapper @@ -12,4 +16,4 @@ def search_web(query: str)->str: ) response = tool.run(query) - return response \ No newline at end of file + return response diff --git a/tests/agent/sql_agent_test/sql_agent_tools.yaml b/tests/agent/sql_agent_test/sql_agent_tools.yaml index 0bfa09429..ccd5c8e71 100644 --- a/tests/agent/sql_agent_test/sql_agent_tools.yaml +++ b/tests/agent/sql_agent_test/sql_agent_tools.yaml @@ -8,4 +8,4 @@ search_web: query: type: str description: query - return_output: retrieved_data \ No newline at end of file + return_output: retrieved_data diff --git a/tests/agent/sql_agent_test/test_tag_bench.py b/tests/agent/sql_agent_test/test_tag_bench.py index 7545323d4..6664759f3 100644 --- a/tests/agent/sql_agent_test/test_tag_bench.py +++ b/tests/agent/sql_agent_test/test_tag_bench.py @@ -3,6 +3,7 @@ import argparse import os + import pandas as pd import requests @@ -16,18 +17,20 @@ def generate_answer_agent_api(url, prompt): answer = response.json()["text"] return answer + def save_json_lines(json_lines, args): outfile = "sql_agent_results.json" output = os.path.join(args.output_dir, outfile) with open(output, "w") as f: for line in json_lines: - f.write(str(line)+"\n") + f.write(str(line) + "\n") + if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument("--query_file", type = str) - parser.add_argument("--output_dir", type = str) - parser.add_argument("--output_file", type = str) + parser.add_argument("--query_file", type=str) + parser.add_argument("--output_dir", type=str) + parser.add_argument("--output_file", type=str) args = parser.parse_args() df = pd.read_csv(args.query_file) @@ -37,7 +40,7 @@ def save_json_lines(json_lines, args): ip_address = os.getenv("ip_address", "localhost") url = f"http://{ip_address}:9095/v1/chat/completions" - + json_lines = [] for _, row in df.iterrows(): query = row["Query"] @@ -47,6 +50,6 @@ def save_json_lines(json_lines, args): print("******Answer:\n", res) # json_lines.append({"query": query,"answer":ref_answer, "agent_answer": res}) # save_json_lines(json_lines, args) - print("="*20) + print("=" * 20) - df.to_csv(os.path.join(args.output_dir, args.output_file), index=False) \ No newline at end of file + df.to_csv(os.path.join(args.output_dir, args.output_file), index=False) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 26ad61382..c7de9a090 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -420,7 +420,7 @@ function main() { validate_sql_agent stop_docker - + echo y | docker system prune 2>&1 > /dev/null } From 1f207b1c0f168c19c250041874b94dd4284812c8 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Fri, 6 Dec 2024 11:14:56 -0800 Subject: [PATCH 09/29] add readme for sql agent and fix ci bugs Signed-off-by: minmin-intel --- comps/agent/langchain/README.md | 12 ++++---- .../langchain/{ => assets}/agent_arch.jpg | Bin .../langchain/assets/sql_agent_llama.png | Bin 0 -> 291320 bytes .../langchain/src/strategy/sqlagent/README.md | 26 ++++++++++++++++++ .../sql_agent_test/generate_hints_file.py | 7 ++--- tests/agent/sql_agent_test/test_sql_agent.sh | 2 +- 6 files changed, 37 insertions(+), 10 deletions(-) rename comps/agent/langchain/{ => assets}/agent_arch.jpg (100%) create mode 100644 comps/agent/langchain/assets/sql_agent_llama.png create mode 100644 comps/agent/langchain/src/strategy/sqlagent/README.md diff --git a/comps/agent/langchain/README.md b/comps/agent/langchain/README.md index 585ff5d96..54af0fa56 100644 --- a/comps/agent/langchain/README.md +++ b/comps/agent/langchain/README.md @@ -11,6 +11,7 @@ We currently support the following types of agents: 1. ReAct: use `react_langchain` or `react_langgraph` or `react_llama` as strategy. First introduced in this seminal [paper](https://arxiv.org/abs/2210.03629). The ReAct agent engages in "reason-act-observe" cycles to solve problems. Please refer to this [doc](https://python.langchain.com/v0.2/docs/how_to/migrate_agent/) to understand the differences between the langchain and langgraph versions of react agents. See table below to understand the validated LLMs for each react strategy. 2. RAG agent: use `rag_agent` or `rag_agent_llama` strategy. This agent is specifically designed for improving RAG performance. It has the capability to rephrase query, check relevancy of retrieved context, and iterate if context is not relevant. See table below to understand the validated LLMs for each rag agent strategy. 3. Plan and execute: `plan_execute` strategy. This type of agent first makes a step-by-step plan given a user request, and then execute the plan sequentially (or in parallel, to be implemented in future). If the execution results can solve the problem, then the agent will output an answer; otherwise, it will replan and execute again. +4. SQL agent: use `sql_agent_llama` strategy. This agent is specifically designed and optimized for answering questions aabout data in SQL databases using open-source LLMs (we recommend [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct)). For more technical details read descriptions here. **Note**: @@ -29,10 +30,11 @@ Agents use LLM for reasoning and planning. We support 3 options of LLM engine: | ---------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | ReAct | `react_langchain` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Only allows tools with one input variable | | ReAct | `react_langgraph` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), | if using vllm, need to specify `--enable-auto-tool-choice --tool-call-parser ${model_parser}`, refer to vllm docs for more info | -| ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Recommended for open-source LLMs | +| ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs | | RAG agent | `rag_agent` | GPT-4o-mini | | -| RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | +| RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | | Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | | +| SQL agent|`sql_agent_llama`|[llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (vllm-gaudi)|database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent.| ### 1.3 Tools @@ -120,12 +122,12 @@ Once microservice starts, user can use below script to invoke. ```bash curl http://${ip_address}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{ - "query": "What is the weather today in Austin?" + "query": "What is OPEA project?" }' # expected output -data: 'The temperature in Austin today is 78°F.' +data: 'The OPEA project is .....' # just showing partial example here. data: [DONE] @@ -210,4 +212,4 @@ data: [DONE] ## 5. Customize agent strategy For advanced developers who want to implement their own agent strategies, you can add a separate folder in `src\strategy`, implement your agent by inherit the `BaseAgent` class, and add your strategy into the `src\agent.py`. The architecture of this agent microservice is shown in the diagram below as a reference. -![Architecture Overview](agent_arch.jpg) +![Architecture Overview](assets/agent_arch.jpg) diff --git a/comps/agent/langchain/agent_arch.jpg b/comps/agent/langchain/assets/agent_arch.jpg similarity index 100% rename from comps/agent/langchain/agent_arch.jpg rename to comps/agent/langchain/assets/agent_arch.jpg diff --git a/comps/agent/langchain/assets/sql_agent_llama.png b/comps/agent/langchain/assets/sql_agent_llama.png new file mode 100644 index 0000000000000000000000000000000000000000..6d832d4d4f8510e5c3437d195988fbe5eb99e637 GIT binary patch literal 291320 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ξ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 i!Uw)F*+FFJjE9Xd#jFTQdC{Fel){k@;- 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%0DVCp=2(j&0s?DRMb1pww&?J3Hf$A&!?;uNqOU%| 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

srW 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 literal 0 HcmV?d00001 diff --git a/comps/agent/langchain/src/strategy/sqlagent/README.md b/comps/agent/langchain/src/strategy/sqlagent/README.md new file mode 100644 index 000000000..b74fe9ec5 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/README.md @@ -0,0 +1,26 @@ +# SQL Agents +## Overview of sql_agent_llama +The architecture of `sql_agent_llama` is shown in the figure below. +The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. + +![SQL Agent Architecture](../../../assets/sql_agent_llama.png) + +### Database schema: +We use langchain's [SQLDatabase](https://python.langchain.com/api_reference/community/utilities/langchain_community.utilities.sql_database.SQLDatabase.html#langchain_community.utilities.sql_database.SQLDatabase) API to get table names and schemas from the SQL database. User just need to specify `db_path` and `db_name`. The table schemas are incorporated into the prompts for the agent. + +### Hints module: +If you want to use the hints module, you need to prepare a csv file that has 3 columns: `table_name`, `column_name`, `description`, and make this file available to the agent microservice. The `description` should include useful information (for example, domain knowledge) about a certain column in a table in the database. The hints module will pick up to five relevant columns together with their descriptions based on the user question using similarity search. The hints module will then pass these column descriptions to the agent node. + +### Output parser: +Due to the current limitations of open source LLMs and serving frameworks (tgi and vllm) in generating tool call objects, we developed and optimized a custom output parser, together with our specially designed prompt templates. The output parser has 3 functions: +1. Decide if a valid final answer presents in the raw agent output. This is needed because: a) we found sometimes agent would make guess or hallucinate data, so it is critical to double check, b) sometimes LLM does not strictly follow instructions on output format so simple string parsing can fail. We use one additional LLM call to perform this function. +2. Pick out tool calls from raw agent output. And check if the agent has made same tool calls before. If yes, remove the repeated tool calls. +3. Parse and review SQL query, and fix SQL query if there are errors. This proved to improve SQL agent performance since the initial query may contain errors and having a "second pair of eyes" can often spot the errors while the agent node itself may not be able to identify the errors in subsequent execution steps. + + +### Limitations of sql_agent_llama +1. Agent connects to local SQL databases with uri. +2. Agent is only allowed to issue "SELECT" commands to databases, i.e., agent can only query databases but cannot update databases. +3. We currently does not support "streaming" agent outputs on the fly for `sql_agent_llama`. + +Please submit issues if you want new features to be added. We also welcome community contributions! \ No newline at end of file diff --git a/tests/agent/sql_agent_test/generate_hints_file.py b/tests/agent/sql_agent_test/generate_hints_file.py index c31aac441..279695843 100644 --- a/tests/agent/sql_agent_test/generate_hints_file.py +++ b/tests/agent/sql_agent_test/generate_hints_file.py @@ -3,7 +3,7 @@ import glob def generate_column_descriptions(db_name): - decriptions = [] + descriptions = [] working_dir = os.getenv("WORKDIR") assert working_dir is not None, "WORKDIR environment variable is not set." DESCRIPTION_FOLDER=os.path.join(working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/") @@ -24,11 +24,10 @@ def generate_column_descriptions(db_name): else: description = description.replace("\n", " ") description = " ".join(description.split()) - # decriptions_only.append(description) - decriptions.append(description) + descriptions.append(description) table_name_col.append(table_name) col_name_col.append(col_name) - hints_df = pd.DataFrame({"table_name": table_name_col, "column_name": col_name_col, "description": decriptions}) + hints_df = pd.DataFrame({"table_name": table_name_col, "column_name": col_name_col, "description": descriptions}) tag_bench_dir = os.path.join(working_dir, "TAG-Bench") output_file = os.path.join(tag_bench_dir, f"{db_name}_hints.csv") hints_df.to_csv(output_file, index=False) diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index a92f46561..515f0949b 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -21,7 +21,7 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') vllm_port=8085 -vllm_volume=${HF_CACHE_DIR} #$WORKPATH/data # change back to workpath/data +vllm_volume=$WORKPATH/data # change back to workpath/data export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" From 48ca5171b2bbd8f9859d9d884196c72cdff51de1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:15:59 +0000 Subject: [PATCH 10/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/agent/langchain/README.md | 18 +++++++++--------- .../langchain/src/strategy/sqlagent/README.md | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/comps/agent/langchain/README.md b/comps/agent/langchain/README.md index 54af0fa56..55c5b0a43 100644 --- a/comps/agent/langchain/README.md +++ b/comps/agent/langchain/README.md @@ -26,15 +26,15 @@ Agents use LLM for reasoning and planning. We support 3 options of LLM engine: 2. Open-source LLMs served with vllm. Follow the instructions in [Section 2.2.2](#222-start-agent-microservices-with-vllm). 3. OpenAI LLMs via API calls. To use OpenAI llms, specify `llm_engine=openai` and `export OPENAI_API_KEY=` -| Agent type | `strategy` arg | Validated LLMs (serving SW) | Notes | -| ---------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| ReAct | `react_langchain` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Only allows tools with one input variable | -| ReAct | `react_langgraph` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), | if using vllm, need to specify `--enable-auto-tool-choice --tool-call-parser ${model_parser}`, refer to vllm docs for more info | -| ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs | -| RAG agent | `rag_agent` | GPT-4o-mini | | -| RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | -| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | | -| SQL agent|`sql_agent_llama`|[llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (vllm-gaudi)|database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent.| +| Agent type | `strategy` arg | Validated LLMs (serving SW) | Notes | +| ---------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ReAct | `react_langchain` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Only allows tools with one input variable | +| ReAct | `react_langgraph` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), | if using vllm, need to specify `--enable-auto-tool-choice --tool-call-parser ${model_parser}`, refer to vllm docs for more info | +| ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs | +| RAG agent | `rag_agent` | GPT-4o-mini | | +| RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | +| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | | +| SQL agent | `sql_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (vllm-gaudi) | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | ### 1.3 Tools diff --git a/comps/agent/langchain/src/strategy/sqlagent/README.md b/comps/agent/langchain/src/strategy/sqlagent/README.md index b74fe9ec5..d27fb42a7 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/README.md +++ b/comps/agent/langchain/src/strategy/sqlagent/README.md @@ -1,26 +1,32 @@ # SQL Agents + ## Overview of sql_agent_llama + The architecture of `sql_agent_llama` is shown in the figure below. -The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. +The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. ![SQL Agent Architecture](../../../assets/sql_agent_llama.png) -### Database schema: +### Database schema: + We use langchain's [SQLDatabase](https://python.langchain.com/api_reference/community/utilities/langchain_community.utilities.sql_database.SQLDatabase.html#langchain_community.utilities.sql_database.SQLDatabase) API to get table names and schemas from the SQL database. User just need to specify `db_path` and `db_name`. The table schemas are incorporated into the prompts for the agent. -### Hints module: +### Hints module: + If you want to use the hints module, you need to prepare a csv file that has 3 columns: `table_name`, `column_name`, `description`, and make this file available to the agent microservice. The `description` should include useful information (for example, domain knowledge) about a certain column in a table in the database. The hints module will pick up to five relevant columns together with their descriptions based on the user question using similarity search. The hints module will then pass these column descriptions to the agent node. -### Output parser: +### Output parser: + Due to the current limitations of open source LLMs and serving frameworks (tgi and vllm) in generating tool call objects, we developed and optimized a custom output parser, together with our specially designed prompt templates. The output parser has 3 functions: + 1. Decide if a valid final answer presents in the raw agent output. This is needed because: a) we found sometimes agent would make guess or hallucinate data, so it is critical to double check, b) sometimes LLM does not strictly follow instructions on output format so simple string parsing can fail. We use one additional LLM call to perform this function. 2. Pick out tool calls from raw agent output. And check if the agent has made same tool calls before. If yes, remove the repeated tool calls. 3. Parse and review SQL query, and fix SQL query if there are errors. This proved to improve SQL agent performance since the initial query may contain errors and having a "second pair of eyes" can often spot the errors while the agent node itself may not be able to identify the errors in subsequent execution steps. - ### Limitations of sql_agent_llama + 1. Agent connects to local SQL databases with uri. 2. Agent is only allowed to issue "SELECT" commands to databases, i.e., agent can only query databases but cannot update databases. 3. We currently does not support "streaming" agent outputs on the fly for `sql_agent_llama`. -Please submit issues if you want new features to be added. We also welcome community contributions! \ No newline at end of file +Please submit issues if you want new features to be added. We also welcome community contributions! From 66c27e2139e1a447ebd50a45de2169d271e9d6cc Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Fri, 6 Dec 2024 12:08:53 -0800 Subject: [PATCH 11/29] add sql agent using openai models Signed-off-by: minmin-intel --- comps/agent/langchain/assets/sql_agent.png | Bin 0 -> 252033 bytes comps/agent/langchain/src/agent.py | 5 + .../langchain/src/strategy/sqlagent/README.md | 16 +- .../src/strategy/sqlagent/__init__.py | 1 + .../src/strategy/sqlagent/planner.py | 154 +++++++++++++++++- .../langchain/src/strategy/sqlagent/prompt.py | 66 ++++++++ tests/agent/sql_agent_test/test_sql_agent.sh | 2 +- .../test_agent_langchain_on_intel_hpu.sh | 4 +- 8 files changed, 241 insertions(+), 7 deletions(-) create mode 100644 comps/agent/langchain/assets/sql_agent.png diff --git a/comps/agent/langchain/assets/sql_agent.png b/comps/agent/langchain/assets/sql_agent.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e2e3b33cf885eea44754b8f07cb2f0b50c847a GIT binary patch literal 252033 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 TCt^s@r=Vfz1g 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 z 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 i( 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%0DTNnTN!-OsPCCF0!t~_ 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 C5B}i* literal 0 HcmV?d00001 diff --git a/comps/agent/langchain/src/agent.py b/comps/agent/langchain/src/agent.py index 25e0c57ea..a7713a29b 100644 --- a/comps/agent/langchain/src/agent.py +++ b/comps/agent/langchain/src/agent.py @@ -38,5 +38,10 @@ def instantiate_agent(args, strategy="react_langchain", with_memory=False): from .strategy.sqlagent import SQLAgentLlama return SQLAgentLlama(args, with_memory, custom_prompt=custom_prompt) + elif strategy == "sql_agent": + print("Initializing SQL Agent") + from .strategy.sqlagent import SQLAgent + + return SQLAgent(args, with_memory, custom_prompt=custom_prompt) else: raise ValueError(f"Agent strategy: {strategy} not supported!") diff --git a/comps/agent/langchain/src/strategy/sqlagent/README.md b/comps/agent/langchain/src/strategy/sqlagent/README.md index b74fe9ec5..846a88c4d 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/README.md +++ b/comps/agent/langchain/src/strategy/sqlagent/README.md @@ -1,9 +1,13 @@ # SQL Agents +We currently have two types of SQL agents: +1. `sql_agent_llama`: for using with open-source LLMs, especially `meta-llama/Llama-3.1-70B-Instruct` model. +2. `sql_agent`: for using with OpenAI models, we developed and validated with GPT-4o-mini. + ## Overview of sql_agent_llama The architecture of `sql_agent_llama` is shown in the figure below. The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. -![SQL Agent Architecture](../../../assets/sql_agent_llama.png) +![SQL Agent Llama Architecture](../../../assets/sql_agent_llama.png) ### Database schema: We use langchain's [SQLDatabase](https://python.langchain.com/api_reference/community/utilities/langchain_community.utilities.sql_database.SQLDatabase.html#langchain_community.utilities.sql_database.SQLDatabase) API to get table names and schemas from the SQL database. User just need to specify `db_path` and `db_name`. The table schemas are incorporated into the prompts for the agent. @@ -17,9 +21,15 @@ Due to the current limitations of open source LLMs and serving frameworks (tgi a 2. Pick out tool calls from raw agent output. And check if the agent has made same tool calls before. If yes, remove the repeated tool calls. 3. Parse and review SQL query, and fix SQL query if there are errors. This proved to improve SQL agent performance since the initial query may contain errors and having a "second pair of eyes" can often spot the errors while the agent node itself may not be able to identify the errors in subsequent execution steps. +## Overview of sql_agent +The architecture of `sql_agent` is shown in the figure below. +The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. The basic idea is the same as `sql_agent_llama`. However, since OpenAI APIs produce well-structured tool call objects, we don't need a special output parser. Instead, we only keep the query fixer. + +![SQL Agent Architecture](../../../assets/sql_agent.png) + -### Limitations of sql_agent_llama -1. Agent connects to local SQL databases with uri. +## Limitations +1. Agent connects to local SQLite databases with uri. 2. Agent is only allowed to issue "SELECT" commands to databases, i.e., agent can only query databases but cannot update databases. 3. We currently does not support "streaming" agent outputs on the fly for `sql_agent_llama`. diff --git a/comps/agent/langchain/src/strategy/sqlagent/__init__.py b/comps/agent/langchain/src/strategy/sqlagent/__init__.py index cc8a59e69..f8bf69ff4 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/__init__.py +++ b/comps/agent/langchain/src/strategy/sqlagent/__init__.py @@ -2,3 +2,4 @@ # SPDX-License-Identifier: Apache-2.0 from .planner import SQLAgentLlama +from .planner import SQLAgent diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py index 06df15120..f5a93b286 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/planner.py +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -16,7 +16,7 @@ from ...utils import setup_chat_model, tool_renderer from ..base_agent import BaseAgent from .hint import pick_hints, read_hints -from .prompt import AGENT_NODE_TEMPLATE +from .prompt import AGENT_NODE_TEMPLATE, AGENT_SYSM, QUERYFIXER_PROMPT from .sql_tools import get_sql_query_tool, get_table_schema from .utils import ( LlamaOutputParserAndQueryFixer, @@ -170,3 +170,155 @@ def decide_next_step(self, state: AgentState): def prepare_initial_state(self, query): return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} + + +################################################ +# Below is SQL agent using OpenAI models +################################################ +class AgentNode: + def __init__(self, args, llm, tools): + self.llm = llm.bind_tools(tools) + self.args = args + if args.use_hints: + from sentence_transformers import SentenceTransformer + self.cols_descriptions, self.values_descriptions = read_hints(args.hints_file) + self.embed_model = SentenceTransformer("BAAI/bge-large-en-v1.5") + self.column_embeddings = self.embed_model.encode(self.values_descriptions) + + def __call__(self, state): + print("----------Call Agent Node----------") + question = state["messages"][0].content + table_schema, num_tables = get_table_schema(self.args.db_path) + if self.args.use_hints: + if not state["hint"]: + hints = pick_hints(question, self.embed_model, self.column_embeddings, self.cols_descriptions) + else: + hints = state["hint"] + else: + hints = "" + + sysm = AGENT_SYSM.format(num_tables=num_tables,tables_schema=table_schema, question=question, hints=hints) + _system_message = SystemMessage(content=sysm) + state_modifier_runnable = RunnableLambda( + lambda state: [_system_message] + state["messages"], + name="StateModifier", + ) + + chain = state_modifier_runnable | self.llm + response = chain.invoke(state) + + return {"messages": [response], "hint": hints} + + +class QueryFixerNode: + def __init__(self, args, llm): + prompt = PromptTemplate( + template=QUERYFIXER_PROMPT, + input_variables=["DATABASE_SCHEMA", "QUESTION", "HINT", "QUERY", "RESULT"], + ) + self.chain = prompt | llm + self.args = args + + def get_sql_query_and_result(self, state): + messages = state["messages"] + assert isinstance(messages[-1], ToolMessage), "The last message should be a tool message" + result = messages[-1].content + id = messages[-1].tool_call_id + query = "" + for msg in reversed(messages): + if isinstance(msg, AIMessage) and msg.tool_calls: + if msg.tool_calls[0]["id"] == id: + query = msg.tool_calls[0]["args"]["query"] + break + print("@@@@ Executed SQL Query: ", query) + print("@@@@ Execution Result: ", result) + return query, result + + def __call__(self, state): + print("----------Call Query Fixer Node----------") + table_schema, _ = get_table_schema(self.args.db_path) + question = state["messages"][0].content + hint = state["hint"] + query, result = self.get_sql_query_and_result(state) + response = self.chain.invoke( + { + "DATABASE_SCHEMA": table_schema, + "QUESTION": question, + "HINT": hint, + "QUERY": query, + "RESULT": result, + } + ) + # print("@@@@@ Query fixer output:\n", response.content) + return {"messages": [response]} + +class SQLAgent(BaseAgent): + def __init__(self, args, with_memory=False, **kwargs): + super().__init__(args, local_vars=globals(), **kwargs) + + agent = AgentNode(args, self.llm, self.tools_descriptions) + query_fixer = QueryFixerNode(args, self.llm) + sql_tool = get_sql_query_tool(args.db_path) + tools = self.tools_descriptions + [sql_tool] + print("@@@@ ALL Tools: ", tools) + tool_node = ToolNode(tools) + + workflow = StateGraph(AgentState) + + # Define the nodes we will cycle between + workflow.add_node("agent", agent) + workflow.add_node("query_fixer", query_fixer) + workflow.add_node("tools", tool_node) + + workflow.set_entry_point("agent") + + # We now add a conditional edge + workflow.add_conditional_edges( + "agent", + self.should_continue, + { + # If `tools`, then we call the tool node. + "continue": "tools", + "end": END, + }, + ) + + workflow.add_conditional_edges( + "tools", + self.should_go_to_query_fixer, + { + "true": "query_fixer", + "false": "agent" + }, + ) + workflow.add_edge("query_fixer", "agent") + + self.app = workflow.compile() + + + # Define the function that determines whether to continue or not + def should_continue(self, state: AgentState): + messages = state["messages"] + last_message = messages[-1] + # If there is no function call, then we finish + if not last_message.tool_calls: + return "end" + # Otherwise if there is, we continue + else: + return "continue" + + + def should_go_to_query_fixer(self, state: AgentState): + messages = state["messages"] + last_message = messages[-1] + assert isinstance(last_message, ToolMessage), "The last message should be a tool message" + print("@@@@ Called Tool: ", last_message.name) + if last_message.name == "sql_db_query": + print("@@@@ Going to Query Fixer") + return "true" + else: + print("@@@@ Going back to Agent") + return "false" + + def prepare_initial_state(self, query): + return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} \ No newline at end of file diff --git a/comps/agent/langchain/src/strategy/sqlagent/prompt.py b/comps/agent/langchain/src/strategy/sqlagent/prompt.py index aa95d1be2..0b4184eab 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/prompt.py +++ b/comps/agent/langchain/src/strategy/sqlagent/prompt.py @@ -157,3 +157,69 @@ Only use the tables provided in the database schema in your corrected query. Do not join tables that are not present in the schema. Do not create any new tables. If you cannot do better than the original query, just say the query is correct. """ + + +########################################## +## Prompt templates for SQL agent using OpenAI models +########################################## +AGENT_SYSM = """\ +You are an SQL expert tasked with answering questions about schools in California. +You can access a database that has {num_tables} tables. The schema of the tables is as follows. Read the schema carefully. +{tables_schema} +**************** +Question: {question} + +Hints: +{hints} +**************** + +When querying the database, remember the following: +1. You MUST double check your SQL query before executing it. Reflect on the steps you have taken and fix errors if there are any. If you get an error while executing a query, rewrite the query and try again. +2. Unless the user specifies a specific number of examples they wish to obtain, always limit your query to no more than 20 results. +3. Only query columns that are relevant to the question. +4. DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. + +IMPORTANT: +* Divide the question into sub-questions and conquer sub-questions one by one. +* You may need to combine information from multiple tables to answer the question. +* If database does not have all the information needed to answer the question, use the web search tool or your own knowledge. +* If you did not get the answer at first, do not give up. Reflect on the steps that you have taken and try a different way. Think out of the box. You hard work will be rewarded. + +Now take a deep breath and think step by step to solve the problem. +""" + +QUERYFIXER_PROMPT = """\ +You are an SQL database expert tasked with reviewing a SQL query. +**Procedure:** +1. Review Database Schema: +- Examine the table creation statements to understand the database structure. +2. Review the Hint provided. +- Use the provided hints to understand the domain knowledge relevant to the query. +3. Analyze Query Requirements: +- Original Question: Consider what information the query is supposed to retrieve. +- Executed SQL Query: Review the SQL query that was previously executed. +- Execution Result: Analyze the outcome of the executed query. Think carefully if the result makes sense. If the result does not make sense, identify the issues with the executed SQL query (e.g., null values, syntax +errors, incorrect table references, incorrect column references, logical mistakes). +4. Correct the Query if Necessary: +- If issues were identified, modify the SQL query to address the identified issues, ensuring it correctly fetches the requested data +according to the database schema and query requirements. +5. If the query is correct, provide the same query as the final answer. + +======= Your task ======= +************************** +Table creation statements +{DATABASE_SCHEMA} +************************** +Hint: +{HINT} +************************** +The original question is: +Question: +{QUESTION} +The SQL query executed was: +{QUERY} +The execution result: +{RESULT} +************************** +Based on the question, table schema, hint and the previous query, analyze the result. Fix the query if needed and provide your reasoning. If the query is correct, provide the same query as the final answer. +""" \ No newline at end of file diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 515f0949b..95fa8a46a 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -107,7 +107,7 @@ function start_vllm_service() { #single card echo "start vllm gaudi service" echo "**************model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq_len-to-capture 16384 --tensor-parallel-size 4 + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq-len-to-capture 16384 --tensor-parallel-size 4 sleep 5s echo "Waiting vllm gaudi ready" n=0 diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index c7de9a090..f908ca66f 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -88,7 +88,7 @@ function start_vllm_service() { #single card echo "start vllm gaudi service" echo "**************model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq_len-to-capture 8192 + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -115,7 +115,7 @@ function start_vllm_auto_tool_choice_service() { #single card echo "start vllm gaudi service" echo "**************auto_tool model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq_len-to-capture 8192 --enable-auto-tool-choice --tool-call-parser ${model_parser} + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 --enable-auto-tool-choice --tool-call-parser ${model_parser} sleep 5s echo "Waiting vllm gaudi ready" n=0 From a8897b563a07c60acaff63152d5116bbdff453a4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 20:11:41 +0000 Subject: [PATCH 12/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../langchain/src/strategy/sqlagent/README.md | 5 ++++- .../src/strategy/sqlagent/planner.py | 19 ++++++++----------- .../langchain/src/strategy/sqlagent/prompt.py | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/comps/agent/langchain/src/strategy/sqlagent/README.md b/comps/agent/langchain/src/strategy/sqlagent/README.md index 2f9189419..69d573b1c 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/README.md +++ b/comps/agent/langchain/src/strategy/sqlagent/README.md @@ -1,5 +1,7 @@ # SQL Agents + We currently have two types of SQL agents: + 1. `sql_agent_llama`: for using with open-source LLMs, especially `meta-llama/Llama-3.1-70B-Instruct` model. 2. `sql_agent`: for using with OpenAI models, we developed and validated with GPT-4o-mini. @@ -27,13 +29,14 @@ Due to the current limitations of open source LLMs and serving frameworks (tgi a 3. Parse and review SQL query, and fix SQL query if there are errors. This proved to improve SQL agent performance since the initial query may contain errors and having a "second pair of eyes" can often spot the errors while the agent node itself may not be able to identify the errors in subsequent execution steps. ## Overview of sql_agent + The architecture of `sql_agent` is shown in the figure below. The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. The basic idea is the same as `sql_agent_llama`. However, since OpenAI APIs produce well-structured tool call objects, we don't need a special output parser. Instead, we only keep the query fixer. ![SQL Agent Architecture](../../../assets/sql_agent.png) - ## Limitations + 1. Agent connects to local SQLite databases with uri. 2. Agent is only allowed to issue "SELECT" commands to databases, i.e., agent can only query databases but cannot update databases. 3. We currently does not support "streaming" agent outputs on the fly for `sql_agent_llama`. diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py index f5a93b286..29aa4d420 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/planner.py +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -181,6 +181,7 @@ def __init__(self, args, llm, tools): self.args = args if args.use_hints: from sentence_transformers import SentenceTransformer + self.cols_descriptions, self.values_descriptions = read_hints(args.hints_file) self.embed_model = SentenceTransformer("BAAI/bge-large-en-v1.5") self.column_embeddings = self.embed_model.encode(self.values_descriptions) @@ -197,7 +198,7 @@ def __call__(self, state): else: hints = "" - sysm = AGENT_SYSM.format(num_tables=num_tables,tables_schema=table_schema, question=question, hints=hints) + sysm = AGENT_SYSM.format(num_tables=num_tables, tables_schema=table_schema, question=question, hints=hints) _system_message = SystemMessage(content=sysm) state_modifier_runnable = RunnableLambda( lambda state: [_system_message] + state["messages"], @@ -218,7 +219,7 @@ def __init__(self, args, llm): ) self.chain = prompt | llm self.args = args - + def get_sql_query_and_result(self, state): messages = state["messages"] assert isinstance(messages[-1], ToolMessage), "The last message should be a tool message" @@ -252,10 +253,11 @@ def __call__(self, state): # print("@@@@@ Query fixer output:\n", response.content) return {"messages": [response]} + class SQLAgent(BaseAgent): def __init__(self, args, with_memory=False, **kwargs): super().__init__(args, local_vars=globals(), **kwargs) - + agent = AgentNode(args, self.llm, self.tools_descriptions) query_fixer = QueryFixerNode(args, self.llm) sql_tool = get_sql_query_tool(args.db_path) @@ -286,15 +288,11 @@ def __init__(self, args, with_memory=False, **kwargs): workflow.add_conditional_edges( "tools", self.should_go_to_query_fixer, - { - "true": "query_fixer", - "false": "agent" - }, + {"true": "query_fixer", "false": "agent"}, ) workflow.add_edge("query_fixer", "agent") self.app = workflow.compile() - # Define the function that determines whether to continue or not def should_continue(self, state: AgentState): @@ -306,7 +304,6 @@ def should_continue(self, state: AgentState): # Otherwise if there is, we continue else: return "continue" - def should_go_to_query_fixer(self, state: AgentState): messages = state["messages"] @@ -319,6 +316,6 @@ def should_go_to_query_fixer(self, state: AgentState): else: print("@@@@ Going back to Agent") return "false" - + def prepare_initial_state(self, query): - return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} \ No newline at end of file + return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} diff --git a/comps/agent/langchain/src/strategy/sqlagent/prompt.py b/comps/agent/langchain/src/strategy/sqlagent/prompt.py index 0b4184eab..dae63766f 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/prompt.py +++ b/comps/agent/langchain/src/strategy/sqlagent/prompt.py @@ -163,7 +163,7 @@ ## Prompt templates for SQL agent using OpenAI models ########################################## AGENT_SYSM = """\ -You are an SQL expert tasked with answering questions about schools in California. +You are an SQL expert tasked with answering questions about schools in California. You can access a database that has {num_tables} tables. The schema of the tables is as follows. Read the schema carefully. {tables_schema} **************** @@ -180,7 +180,7 @@ 4. DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. IMPORTANT: -* Divide the question into sub-questions and conquer sub-questions one by one. +* Divide the question into sub-questions and conquer sub-questions one by one. * You may need to combine information from multiple tables to answer the question. * If database does not have all the information needed to answer the question, use the web search tool or your own knowledge. * If you did not get the answer at first, do not give up. Reflect on the steps that you have taken and try a different way. Think out of the box. You hard work will be rewarded. @@ -189,7 +189,7 @@ """ QUERYFIXER_PROMPT = """\ -You are an SQL database expert tasked with reviewing a SQL query. +You are an SQL database expert tasked with reviewing a SQL query. **Procedure:** 1. Review Database Schema: - Examine the table creation statements to understand the database structure. @@ -222,4 +222,4 @@ {RESULT} ************************** Based on the question, table schema, hint and the previous query, analyze the result. Fix the query if needed and provide your reasoning. If the query is correct, provide the same query as the final answer. -""" \ No newline at end of file +""" From a93f0d43861189f9f6e832d5105951254f12be93 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Fri, 6 Dec 2024 15:01:42 -0800 Subject: [PATCH 13/29] fix bugs in sql agent openai Signed-off-by: minmin-intel --- .../src/strategy/sqlagent/planner.py | 5 +-- .../src/strategy/sqlagent/sql_tools.py | 3 +- tests/agent/sql_agent_openai.yaml | 36 +++++++++++++++++++ tests/agent/sql_agent_test/test_sql_agent.sh | 30 ++++++++++++---- 4 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 tests/agent/sql_agent_openai.yaml diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py index f5a93b286..c0e0bef2a 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/planner.py +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -256,12 +256,13 @@ class SQLAgent(BaseAgent): def __init__(self, args, with_memory=False, **kwargs): super().__init__(args, local_vars=globals(), **kwargs) - agent = AgentNode(args, self.llm, self.tools_descriptions) - query_fixer = QueryFixerNode(args, self.llm) sql_tool = get_sql_query_tool(args.db_path) tools = self.tools_descriptions + [sql_tool] print("@@@@ ALL Tools: ", tools) + tool_node = ToolNode(tools) + agent = AgentNode(args, self.llm, tools) + query_fixer = QueryFixerNode(args, self.llm) workflow = StateGraph(AgentState) diff --git a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py index 5f8f89890..70f880afb 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py +++ b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py @@ -27,5 +27,6 @@ def get_sql_query_tool(db_path): "will be returned. If an error is returned, rewrite the query, check the " "query, and try again. " ) - db_query_tool = QuerySQLDataBaseTool(db=db, description=query_sql_database_tool_description) + db_query_tool = QuerySQLDataBaseTool(db=db, name= "sql_db_query", description=query_sql_database_tool_description) + print("SQL Query Tool Created: ", db_query_tool) return db_query_tool diff --git a/tests/agent/sql_agent_openai.yaml b/tests/agent/sql_agent_openai.yaml new file mode 100644 index 000000000..124eccae9 --- /dev/null +++ b/tests/agent/sql_agent_openai.yaml @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +services: + agent: + image: ${agent_image} + container_name: test-comps-agent-endpoint + volumes: + - ${TOOLSET_PATH}:/home/user/tools/ # tools + - ${WORKDIR}/GenAIComps/comps:/home/user/comps # code + - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database and hints_file + ports: + - "9095:9095" + ipc: host + environment: + ip_address: ${ip_address} + strategy: sql_agent + db_name: ${db_name} + db_path: ${db_path} + use_hints: false #true + hints_file: /home/user/TAG-Bench/${db_name}_hints.csv + recursion_limit: ${recursion_limit} + llm_engine: openai + OPENAI_API_KEY: ${OPENAI_API_KEY} + model: "gpt-4o-mini-2024-07-18" + temperature: 0 + max_new_tokens: ${max_new_tokens} + streaming: false + tools: /home/user/tools/sql_agent_tools.yaml # /home/user/tools/custom_tools.yaml # + require_human_feedback: false + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + port: 9095 + GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} #delete + GOOGLE_API_KEY: ${GOOGLE_API_KEY} # delete diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 95fa8a46a..b7d0bb587 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -20,7 +20,7 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') -vllm_port=8085 +vllm_port=8084 vllm_volume=$WORKPATH/data # change back to workpath/data export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} @@ -28,7 +28,7 @@ export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" export temperature=0.01 export max_new_tokens=4096 -export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ #$WORKPATH/tests/agent/sql_agent_test/ # change back to custom tools +export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ # change back to custom tools $WORKPATH/tests/agent/sql_agent_test/ # echo "TOOLSET_PATH=${TOOLSET_PATH}" export recursion_limit=15 export db_name=california_schools @@ -137,6 +137,18 @@ function start_sql_agent_llama_service() { echo "Service started successfully" } + +function start_sql_agent_openai_service() { + export OPENAI_API_KEY=${OPENAI_API_KEY} + echo "Starting sql_agent_openai agent microservice" + docker compose -f $WORKPATH/tests/agent/sql_agent_openai.yaml up -d + sleep 5s + # need to wait longer if need to use hints + # sleep 3m + docker logs test-comps-agent-endpoint + echo "Service started successfully" +} + # run the test function run_test() { echo "Running test..." @@ -153,11 +165,14 @@ function run_benchmark() { python3 test_tag_bench.py --query_file $query_file --output_dir $outdir --output_file $outfile } -# echo "Building docker image...." -# build_docker_images +echo "Building docker image...." +build_docker_images -# echo "Building vllm docker image...." -# build_vllm_docker_images +echo "Preparing data...." +prepare_data + +echo "Building vllm docker image...." +build_vllm_docker_images echo "Launching vllm service...." start_vllm_service @@ -168,6 +183,9 @@ start_vllm_service echo "launching sql_agent_llama service...." start_sql_agent_llama_service +# echo "launching sql_agent_openai service...." +# start_sql_agent_openai_service + echo "Running test...." run_test From b78949534ab909e4d09e7173f903fbecb156ff6c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 23:04:09 +0000 Subject: [PATCH 14/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/agent/langchain/src/strategy/sqlagent/planner.py | 2 +- comps/agent/langchain/src/strategy/sqlagent/sql_tools.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py index fd56082b3..bc54d7d4d 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/planner.py +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -257,7 +257,7 @@ def __call__(self, state): class SQLAgent(BaseAgent): def __init__(self, args, with_memory=False, **kwargs): super().__init__(args, local_vars=globals(), **kwargs) - + sql_tool = get_sql_query_tool(args.db_path) tools = self.tools_descriptions + [sql_tool] print("@@@@ ALL Tools: ", tools) diff --git a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py index 70f880afb..bb76716c6 100644 --- a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py +++ b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py @@ -27,6 +27,6 @@ def get_sql_query_tool(db_path): "will be returned. If an error is returned, rewrite the query, check the " "query, and try again. " ) - db_query_tool = QuerySQLDataBaseTool(db=db, name= "sql_db_query", description=query_sql_database_tool_description) + db_query_tool = QuerySQLDataBaseTool(db=db, name="sql_db_query", description=query_sql_database_tool_description) print("SQL Query Tool Created: ", db_query_tool) return db_query_tool From 0644105c3bb706331cf0ef0c30828f2d5db84951 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Mon, 9 Dec 2024 18:46:45 +0000 Subject: [PATCH 15/29] make wait time longer for sql agent microservice to be ready Signed-off-by: minmin-intel --- tests/agent/sql_agent_test/test_sql_agent.sh | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index b7d0bb587..3d6da4cc6 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -21,14 +21,14 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') vllm_port=8084 -vllm_volume=$WORKPATH/data # change back to workpath/data +vllm_volume=$WORKPATH/data #${HF_CACHE_DIR} export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" export temperature=0.01 export max_new_tokens=4096 -export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ # change back to custom tools $WORKPATH/tests/agent/sql_agent_test/ # +export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ # $WORKPATH/tests/agent/sql_agent_test/ echo "TOOLSET_PATH=${TOOLSET_PATH}" export recursion_limit=15 export db_name=california_schools @@ -107,7 +107,7 @@ function start_vllm_service() { #single card echo "start vllm gaudi service" echo "**************model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq-len-to-capture 16384 --tensor-parallel-size 4 + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq-len-to-capture 16384 --tensor-parallel-size 4 sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -130,9 +130,7 @@ function start_vllm_service() { function start_sql_agent_llama_service() { echo "Starting sql_agent_llama agent microservice" docker compose -f $WORKPATH/tests/agent/sql_agent_llama.yaml up -d - sleep 5s - # need to wait longer if need to use hints - # sleep 3m + sleep 3m docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -142,9 +140,7 @@ function start_sql_agent_openai_service() { export OPENAI_API_KEY=${OPENAI_API_KEY} echo "Starting sql_agent_openai agent microservice" docker compose -f $WORKPATH/tests/agent/sql_agent_openai.yaml up -d - sleep 5s - # need to wait longer if need to use hints - # sleep 3m + sleep 3m docker logs test-comps-agent-endpoint echo "Service started successfully" } From 48935b01eaa5e068b6527fb5c960ee86bfdc070e Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Mon, 9 Dec 2024 18:51:04 +0000 Subject: [PATCH 16/29] update readme Signed-off-by: minmin-intel --- comps/agent/langchain/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/comps/agent/langchain/README.md b/comps/agent/langchain/README.md index 55c5b0a43..70e65a408 100644 --- a/comps/agent/langchain/README.md +++ b/comps/agent/langchain/README.md @@ -11,11 +11,11 @@ We currently support the following types of agents: 1. ReAct: use `react_langchain` or `react_langgraph` or `react_llama` as strategy. First introduced in this seminal [paper](https://arxiv.org/abs/2210.03629). The ReAct agent engages in "reason-act-observe" cycles to solve problems. Please refer to this [doc](https://python.langchain.com/v0.2/docs/how_to/migrate_agent/) to understand the differences between the langchain and langgraph versions of react agents. See table below to understand the validated LLMs for each react strategy. 2. RAG agent: use `rag_agent` or `rag_agent_llama` strategy. This agent is specifically designed for improving RAG performance. It has the capability to rephrase query, check relevancy of retrieved context, and iterate if context is not relevant. See table below to understand the validated LLMs for each rag agent strategy. 3. Plan and execute: `plan_execute` strategy. This type of agent first makes a step-by-step plan given a user request, and then execute the plan sequentially (or in parallel, to be implemented in future). If the execution results can solve the problem, then the agent will output an answer; otherwise, it will replan and execute again. -4. SQL agent: use `sql_agent_llama` strategy. This agent is specifically designed and optimized for answering questions aabout data in SQL databases using open-source LLMs (we recommend [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct)). For more technical details read descriptions here. +4. SQL agent: use `sql_agent_llama` or `sql_agent` strategy. This agent is specifically designed and optimized for answering questions aabout data in SQL databases. For more technical details read descriptions [here](src/strategy/sqlagent/README.md). **Note**: -1. Due to the limitations in support for tool calling by TGI and vllm, we have developed subcategories of agent strategies (`rag_agent_llama` and `react_llama`) specifically designed for open-source LLMs served with TGI and vllm. +1. Due to the limitations in support for tool calling by TGI and vllm, we have developed subcategories of agent strategies (`rag_agent_llama`, `react_llama` and `sql_agent_llama`) specifically designed for open-source LLMs served with TGI and vllm. 2. For advanced developers who want to implement their own agent strategies, please refer to [Section 5](#5-customize-agent-strategy) below. ### 1.2 LLM engine From b86bbea47ab2976dd2b1db4e7c0cf011b1002798 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Mon, 9 Dec 2024 19:59:56 +0000 Subject: [PATCH 17/29] fix test bug Signed-off-by: minmin-intel --- tests/agent/test_agent_langchain_on_intel_hpu.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index f908ca66f..26d0f5ccd 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -360,8 +360,8 @@ function main() { start_react_langgraph_agent_service_vllm echo "===========Testing ReAct Langgraph VLLM Mistral =============" validate_microservice - # stop_agent_docker - # stop_vllm_docker + stop_agent_docker + stop_vllm_docker echo "=============================================" # test plan execute with vllm - Mistral From 88c796d8769a23130d12b0cd842d31dd228bafe4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 21:37:30 +0000 Subject: [PATCH 18/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/agent/langchain/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/comps/agent/langchain/README.md b/comps/agent/langchain/README.md index c926ea7ea..9e858c252 100644 --- a/comps/agent/langchain/README.md +++ b/comps/agent/langchain/README.md @@ -33,9 +33,9 @@ Agents use LLM for reasoning and planning. We support 3 options of LLM engine: | ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs | | RAG agent | `rag_agent` | GPT-4o-mini | | | RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | -| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | Currently, due to some issues with guaided decoding of vllm-gaudi, this strategy does not work properly with vllm-gaudi. We are actively debugging. Stay tuned. In the meanwhile, you can use OpenAI's models with this strategy. | +| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | Currently, due to some issues with guaided decoding of vllm-gaudi, this strategy does not work properly with vllm-gaudi. We are actively debugging. Stay tuned. In the meanwhile, you can use OpenAI's models with this strategy. | | SQL agent | `sql_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (vllm-gaudi) | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | -| SQL agent | `sql_agent` | GPT-4o-mini | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | +| SQL agent | `sql_agent` | GPT-4o-mini | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | ### 1.3 Tools From 7622cfd3404bc31fc571e8a70cd9af7eb90e97f5 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Mon, 9 Dec 2024 21:42:52 +0000 Subject: [PATCH 19/29] skip planexec with vllm due to vllm-gaudi bug Signed-off-by: minmin-intel --- comps/agent/langchain/README.md | 3 +- .../test_agent_langchain_on_intel_hpu.sh | 45 ++++++++----------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/comps/agent/langchain/README.md b/comps/agent/langchain/README.md index 70e65a408..c926ea7ea 100644 --- a/comps/agent/langchain/README.md +++ b/comps/agent/langchain/README.md @@ -33,8 +33,9 @@ Agents use LLM for reasoning and planning. We support 3 options of LLM engine: | ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs | | RAG agent | `rag_agent` | GPT-4o-mini | | | RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | -| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | | +| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | Currently, due to some issues with guaided decoding of vllm-gaudi, this strategy does not work properly with vllm-gaudi. We are actively debugging. Stay tuned. In the meanwhile, you can use OpenAI's models with this strategy. | | SQL agent | `sql_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (vllm-gaudi) | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | +| SQL agent | `sql_agent` | GPT-4o-mini | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | ### 1.3 Tools diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 26d0f5ccd..866e4ef4e 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -88,7 +88,7 @@ function start_vllm_service() { #single card echo "start vllm gaudi service" echo "**************model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -115,7 +115,7 @@ function start_vllm_auto_tool_choice_service() { #single card echo "start vllm gaudi service" echo "**************auto_tool model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 --enable-auto-tool-choice --tool-call-parser ${model_parser} + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 --enable-auto-tool-choice --tool-call-parser ${model_parser} sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -172,7 +172,7 @@ function start_react_langgraph_agent_service_vllm() { function start_planexec_agent_service_vllm() { echo "Starting planexec agent microservice" docker compose -f $WORKPATH/tests/agent/planexec_vllm.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -355,7 +355,7 @@ function main() { export model_parser=mistral export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" - # test react with vllm - Mistral + test react with vllm - Mistral start_vllm_auto_tool_choice_service start_react_langgraph_agent_service_vllm echo "===========Testing ReAct Langgraph VLLM Mistral =============" @@ -365,36 +365,27 @@ function main() { echo "=============================================" # test plan execute with vllm - Mistral - start_vllm_service - start_planexec_agent_service_vllm - echo "===========Testing Plan Execute VLLM Mistral =============" - validate_microservice - stop_agent_docker - stop_vllm_docker - echo "=============================================" + # start_vllm_service + # start_planexec_agent_service_vllm + # echo "===========Testing Plan Execute VLLM Mistral =============" + # validate_microservice + # stop_agent_docker + # stop_vllm_docker + # echo "=============================================" - export model=meta-llama/Llama-3.1-8B-Instruct - export LLM_MODEL_ID=${model} - export model_parser=llama3_json + # export model=meta-llama/Llama-3.1-8B-Instruct + # export LLM_MODEL_ID=${model} + # export model_parser=llama3_json - # test react with vllm - llama3 support has not been synced to vllm-gaudi yet - # start_vllm_auto_tool_choice_service - # start_react_langgraph_agent_service_vllm - # echo "===========Testing ReAct VLLM =============" + # # test plan execute with vllm - llama3.1 + # start_vllm_service + # start_planexec_agent_service_vllm + # echo "===========Testing Plan Execute VLLM Llama3.1 =============" # validate_microservice # stop_agent_docker # stop_vllm_docker # echo "=============================================" - # test plan execute with vllm - llama3.1 - start_vllm_service - start_planexec_agent_service_vllm - echo "===========Testing Plan Execute VLLM Llama3.1 =============" - validate_microservice - stop_agent_docker - stop_vllm_docker - echo "=============================================" - # # ==================== OpenAI tests ==================== # start_ragagent_agent_service_openai From 5f76d823b65e02b16b39f674fbd054a1e16670b1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:33:55 +0000 Subject: [PATCH 20/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/agent/test_agent_langchain_on_intel_hpu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 98746c1c3..4eb03ef5d 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -408,7 +408,7 @@ function main() { # stop_agent_docker stop_docker - mv $WORKPATH/data $WORKPATH/hub + mv $WORKPATH/data $WORKPATH/hub # test sql agent validate_sql_agent mv $WORKPATH/hub $WORKPATH/data From b80ee58d142f1c408e1199e33b3e0810552de3d2 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Mon, 9 Dec 2024 22:38:46 +0000 Subject: [PATCH 21/29] debug ut issue Signed-off-by: minmin-intel --- tests/agent/sql_agent_test/test_sql_agent.sh | 13 ++++++++----- tests/agent/test_agent_langchain_on_intel_hpu.sh | 6 ++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 3d6da4cc6..43e61b902 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -21,7 +21,10 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') vllm_port=8084 -vllm_volume=$WORKPATH/data #${HF_CACHE_DIR} +vllm_volume=$WORKPATH #${HF_CACHE_DIR} +echo "vllm volume: $vllm_volume" +ls $vllm_volume + export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" @@ -161,14 +164,14 @@ function run_benchmark() { python3 test_tag_bench.py --query_file $query_file --output_dir $outdir --output_file $outfile } -echo "Building docker image...." -build_docker_images +# echo "Building docker image...." +# build_docker_images echo "Preparing data...." prepare_data -echo "Building vllm docker image...." -build_vllm_docker_images +# echo "Building vllm docker image...." +# build_vllm_docker_images echo "Launching vllm service...." start_vllm_service diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 866e4ef4e..98746c1c3 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -309,6 +309,8 @@ function validate_sql_agent(){ if [ "$EXIT_CODE" == "1" ]; then echo "==================SQL Agent logs ======================" docker logs test-comps-agent-endpoint + echo "================== vllm gaudi service logs ======================" + docker logs test-comps-vllm-gaudi-service exit 1 fi } @@ -406,10 +408,10 @@ function main() { # stop_agent_docker stop_docker - + mv $WORKPATH/data $WORKPATH/hub # test sql agent validate_sql_agent - + mv $WORKPATH/hub $WORKPATH/data stop_docker echo y | docker system prune 2>&1 > /dev/null From 9d85cb3345a3c0ebd4b2cb498b429ca67c4ae05a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 00:59:52 +0000 Subject: [PATCH 22/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/agent/langchain/log | 4 +- .../test_agent_langchain_on_intel_hpu.sh | 2 +- tests/vllm-gaudi-service.log | 98 ++++++++++++------- 3 files changed, 68 insertions(+), 36 deletions(-) diff --git a/comps/agent/langchain/log b/comps/agent/langchain/log index 43bccc0c7..65e62c8c0 100644 --- a/comps/agent/langchain/log +++ b/comps/agent/langchain/log @@ -1,5 +1,5 @@ [HumanMessage(content="what's the most recent album from the founder of ysl records?", id='cfde4aba-0464-4ad9-bd1c-d3fc40bbb46e'), AIMessage(content='', addi -tional_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOutputFunctionDefinition(arguments={'query': 'founder of YSL Records'}, nam +tional_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOutputFunctionDefinition(arguments={'query': 'founder of YSL Records'}, name e='duckduckgo_search', description=None), id='142bd66e-7ec6-4381-bcb6-2d0bd4fcecd3', type='function')]}, id='6430421d-2238-452b-9fbe-4d6cc8bc0cd8', tool_call s=[{'name': 'duckduckgo_search', 'args': {'query': 'founder of YSL Records'}, 'id': '142bd66e-7ec6-4381-bcb6-2d0bd4fcecd3', 'type': 'tool_call'}]), ToolMessa ge(content='Prosecutors allege the chart-topping artist\'s label Young Stoner Life Records also stands for Young Slime ... a YSL co-founder who reached a ple @@ -17,7 +17,7 @@ e='function')]}, id='50a644af-3117-4513-be56-5fb4b16d0481', tool_calls=[{'name': ropel close friends and family members to industry success. The Birth Of YSL Records And Its Impact On The Music Industry In 2016, Young Thug founded YSL Rec ords, with its full name, "Young Stoner Life," perfectly representing the enigmatic persona of ... Young Thug, who runs the Young Stoner Life label, has been accused of co-founding the Young Slime Life Atlanta gang and violating the RICO act, among other charges. Here\'s what to know about the ... The rapper foun -ded the record label Young Stoner Life in 2016 as an imprint of 300 Entertainment. YSL Records calls its roster of artists the "Slime Family." One of the YSL +dead the record label Young Stoner Life in 2016 as an imprint of 300 Entertainment. YSL Records calls its roster of artists the "Slime Family." One of the YSL Records founder\'s charges includes conspiracy to violate the Racketeer Influenced and Corrupt Organizations Act (RICO).', name='duckduckgo_search', id='afc cee2f-f36f-4d86-8abd-8d05d733649d', tool_call_id='6d073578-5bf1-449e-8d32-4f3b5f999a06'), HumanMessage(content='Retrieved document is not sufficient or relev ant to answer the query. Reformulate the query to search knowledge base again.', id='22af0af8-92d0-4876-ad4e-16457c37f1f3'), AIMessage(content='', additional diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index a57ed541f..c47648615 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -19,7 +19,7 @@ if [ -d "$WORKPATH/hub" ]; then ls "$WORKPATH/hub" fi vllm_port=8085 -export vllm_volume=$WORKPATH +export vllm_volume=$WORKPATH export WORKPATH=$WORKPATH diff --git a/tests/vllm-gaudi-service.log b/tests/vllm-gaudi-service.log index 34a19b14f..4230ffbe9 100644 --- a/tests/vllm-gaudi-service.log +++ b/tests/vllm-gaudi-service.log @@ -153,38 +153,70 @@ INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetens (VllmWorkerProcess pid=359) INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] (VllmWorkerProcess pid=357) INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] (VllmWorkerProcess pid=358) INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] - Loading safetensors checkpoint shards: 0% Completed | 0/30 [00:00 Date: Tue, 10 Dec 2024 01:01:29 +0000 Subject: [PATCH 23/29] use vllm for all uts Signed-off-by: minmin-intel --- tests/agent/sql_agent_test/test_sql_agent.sh | 12 +-- .../test_agent_langchain_on_intel_hpu.sh | 85 ++++++++++++++----- 2 files changed, 68 insertions(+), 29 deletions(-) diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 43e61b902..864235774 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -20,10 +20,10 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') -vllm_port=8084 -vllm_volume=$WORKPATH #${HF_CACHE_DIR} -echo "vllm volume: $vllm_volume" -ls $vllm_volume +vllm_port=8085 +vllm_volume=${HF_CACHE_DIR} #$WORKPATH #${HF_CACHE_DIR} +# echo "vllm volume: $vllm_volume" +# ls $vllm_volume/hub export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} @@ -173,8 +173,8 @@ prepare_data # echo "Building vllm docker image...." # build_vllm_docker_images -echo "Launching vllm service...." -start_vllm_service +# echo "Launching vllm service...." +# start_vllm_service # echo "Generating hints_file..." # generate_hints_for_benchmark diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 98746c1c3..a57ed541f 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -6,12 +6,20 @@ WORKPATH=$(dirname "$PWD") echo $WORKPATH +ls $WORKPATH +echo "=========================" LOG_PATH="$WORKPATH/tests" ip_address=$(hostname -I | awk '{print $1}') tgi_port=8085 tgi_volume=$WORKPATH/data -vllm_port=8086 -vllm_volume=$WORKPATH/data +echo "tgi volume: " +ls $tgi_volume +echo "=========================" +if [ -d "$WORKPATH/hub" ]; then + ls "$WORKPATH/hub" +fi +vllm_port=8085 +export vllm_volume=$WORKPATH export WORKPATH=$WORKPATH @@ -135,10 +143,37 @@ function start_vllm_auto_tool_choice_service() { echo "Service started successfully" } +function start_vllm_service_70B() { + # redis endpoint + echo "token is ${HF_TOKEN}" + + #single card + echo "start vllm gaudi service" + echo "**************model is $model**************" + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq-len-to-capture 16384 --tensor-parallel-size 4 + sleep 5s + echo "Waiting vllm gaudi ready" + n=0 + until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do + docker logs test-comps-vllm-gaudi-service &> ${LOG_PATH}/vllm-gaudi-service.log + n=$((n+1)) + if grep -q "Uvicorn running on" ${LOG_PATH}/vllm-gaudi-service.log; then + break + fi + if grep -q "No such container" ${LOG_PATH}/vllm-gaudi-service.log; then + echo "container test-comps-vllm-gaudi-service not found" + exit 1 + fi + sleep 5s + done + sleep 5s + echo "Service started successfully" +} + function start_react_langchain_agent_service() { echo "Starting react_langchain agent microservice" docker compose -f $WORKPATH/tests/agent/react_langchain.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -147,7 +182,7 @@ function start_react_langchain_agent_service() { function start_react_langgraph_agent_service_openai() { echo "Starting react_langchain agent microservice" docker compose -f $WORKPATH/tests/agent/react_langgraph_openai.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -156,7 +191,7 @@ function start_react_langgraph_agent_service_openai() { function start_react_llama_agent_service() { echo "Starting react_langgraph agent microservice" docker compose -f $WORKPATH/tests/agent/reactllama.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -164,7 +199,7 @@ function start_react_llama_agent_service() { function start_react_langgraph_agent_service_vllm() { echo "Starting react_langgraph agent microservice" docker compose -f $WORKPATH/tests/agent/react_vllm.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -180,7 +215,7 @@ function start_planexec_agent_service_vllm() { function start_ragagent_agent_service() { echo "Starting rag agent microservice" docker compose -f $WORKPATH/tests/agent/ragagent.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -188,7 +223,7 @@ function start_ragagent_agent_service() { function start_ragagent_agent_service_openai() { echo "Starting rag agent microservice" docker compose -f $WORKPATH/tests/agent/ragagent_openai.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -196,7 +231,7 @@ function start_ragagent_agent_service_openai() { function start_planexec_agent_service_openai() { echo "Starting plan execute agent microservice" docker compose -f $WORKPATH/tests/agent/planexec_openai.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -309,8 +344,8 @@ function validate_sql_agent(){ if [ "$EXIT_CODE" == "1" ]; then echo "==================SQL Agent logs ======================" docker logs test-comps-agent-endpoint - echo "================== vllm gaudi service logs ======================" - docker logs test-comps-vllm-gaudi-service + # echo "================== vllm gaudi service logs ======================" + # docker logs test-comps-vllm-gaudi-service exit 1 fi } @@ -320,9 +355,13 @@ function main() { stop_agent_docker stop_docker build_docker_images + build_vllm_docker_images + + # ==================== Tests with 70B model ==================== + # RAG agent, react_llama, react_langchain, assistant apis - # ==================== TGI tests ==================== - start_tgi_service + # start_tgi_service + start_vllm_service_70B # test rag agent start_ragagent_agent_service @@ -331,7 +370,7 @@ function main() { stop_agent_docker echo "=============================================" - # test react_llama + # # test react_llama start_react_llama_agent_service echo "===========Testing ReAct Llama =============" validate_microservice @@ -339,7 +378,7 @@ function main() { echo "=============================================" - # test react_langchain + # # test react_langchain start_react_langchain_agent_service echo "=============Testing ReAct Langchain=============" validate_microservice_streaming @@ -347,10 +386,14 @@ function main() { stop_agent_docker echo "=============================================" - stop_tgi_docker + # stop_tgi_docker - # ==================== VLLM tests ==================== - build_vllm_docker_images + # test sql agent + validate_sql_agent + + stop_docker + + # # # ==================== Test react_langgraph with vllm auto-tool-choice ==================== export model=mistralai/Mistral-7B-Instruct-v0.3 export LLM_MODEL_ID=${model} @@ -366,6 +409,7 @@ function main() { stop_vllm_docker echo "=============================================" + # # # ==================== Test plan-execute agent with vllm guided decoding ==================== # test plan execute with vllm - Mistral # start_vllm_service # start_planexec_agent_service_vllm @@ -407,11 +451,6 @@ function main() { # validate_microservice # stop_agent_docker - stop_docker - mv $WORKPATH/data $WORKPATH/hub - # test sql agent - validate_sql_agent - mv $WORKPATH/hub $WORKPATH/data stop_docker echo y | docker system prune 2>&1 > /dev/null From 4b239ecfdd2b50a95b19a56f5cddf1702c81a8f1 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Tue, 10 Dec 2024 04:40:27 +0000 Subject: [PATCH 24/29] debug ci issue Signed-off-by: minmin-intel --- tests/agent/test_agent_langchain_on_intel_hpu.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index a57ed541f..e555ab801 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -352,6 +352,7 @@ function validate_sql_agent(){ function main() { + docker rm $(docker ps -a -q) stop_agent_docker stop_docker build_docker_images From bb0d24d3f0e6aa060856b4093851ed6be7d30f1d Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Tue, 10 Dec 2024 04:47:04 +0000 Subject: [PATCH 25/29] change vllm port Signed-off-by: minmin-intel --- tests/agent/test_agent_langchain_on_intel_hpu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 9465094dc..41d25b80a 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -18,7 +18,7 @@ echo "=========================" if [ -d "$WORKPATH/hub" ]; then ls "$WORKPATH/hub" fi -vllm_port=8085 +vllm_port=8086 export vllm_volume=$WORKPATH export WORKPATH=$WORKPATH From f5e29d9c0b94c7ee6775015532db4b7662d119f6 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Tue, 10 Dec 2024 05:14:28 +0000 Subject: [PATCH 26/29] update ut Signed-off-by: minmin-intel --- tests/agent/test_agent_langchain_on_intel_hpu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 41d25b80a..2fd786c9b 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -31,7 +31,7 @@ export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export ip_address=$(hostname -I | awk '{print $1}') export HUGGINGFACEHUB_API_TOKEN=${HUGGINGFACEHUB_API_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" -export LLM_ENDPOINT_URL="http://${ip_address}:${tgi_port}" +export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" export temperature=0.01 export max_new_tokens=4096 export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ From 8dfccaa63f540cf5f65f75b9ef1b90862a3ab22e Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Tue, 10 Dec 2024 17:48:32 +0000 Subject: [PATCH 27/29] remove tgi server Signed-off-by: minmin-intel --- .../test_agent_langchain_on_intel_hpu.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 2fd786c9b..b832ab16d 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -12,14 +12,11 @@ LOG_PATH="$WORKPATH/tests" ip_address=$(hostname -I | awk '{print $1}') tgi_port=8085 tgi_volume=$WORKPATH/data -echo "tgi volume: " -ls $tgi_volume -echo "=========================" -if [ -d "$WORKPATH/hub" ]; then - ls "$WORKPATH/hub" -fi + vllm_port=8086 -export vllm_volume=$WORKPATH +export vllm_volume=$WORKPATH/data +echo "vllm_volume:" +ls $vllm_volume export WORKPATH=$WORKPATH @@ -310,7 +307,12 @@ function stop_tgi_docker() { cid=$(docker ps -aq --filter "name=test-comps-tgi-gaudi-service") echo "Stopping the docker containers "${cid} if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi - echo "Docker containers stopped successfully" + echo "TGI Docker containers stopped successfully" + + cid=$(docker ps -aq --filter "name=tgi-server") + echo "Stopping the docker containers "${cid} + if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi + echo "TGI Docker containers stopped successfully" } function stop_vllm_docker() { @@ -352,7 +354,6 @@ function validate_sql_agent(){ function main() { - docker rm $(docker ps -a -q) stop_agent_docker stop_docker build_docker_images From 1feb779a2eba30fda91d5ce4a1b4d347cbdcd236 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:43:04 +0000 Subject: [PATCH 28/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/agent/test_agent_langchain_on_intel_hpu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index b832ab16d..77aa1fb19 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -308,7 +308,7 @@ function stop_tgi_docker() { echo "Stopping the docker containers "${cid} if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi echo "TGI Docker containers stopped successfully" - + cid=$(docker ps -aq --filter "name=tgi-server") echo "Stopping the docker containers "${cid} if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi From 14c61f9cbc19dde77456803308b576d606daaad8 Mon Sep 17 00:00:00 2001 From: minmin-intel Date: Wed, 11 Dec 2024 18:28:13 +0000 Subject: [PATCH 29/29] align vllm port Signed-off-by: minmin-intel --- tests/agent/sql_agent_test/test_sql_agent.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh index 864235774..4a49b1a4f 100644 --- a/tests/agent/sql_agent_test/test_sql_agent.sh +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -20,10 +20,8 @@ export agent_container_name="test-comps-agent-endpoint" export ip_address=$(hostname -I | awk '{print $1}') -vllm_port=8085 -vllm_volume=${HF_CACHE_DIR} #$WORKPATH #${HF_CACHE_DIR} -# echo "vllm volume: $vllm_volume" -# ls $vllm_volume/hub +vllm_port=8086 +vllm_volume=${HF_CACHE_DIR} export model=meta-llama/Meta-Llama-3.1-70B-Instruct export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN}