From e8752d0a140ca6666f6f511b95953d2efc0140ed Mon Sep 17 00:00:00 2001 From: Anand Chandrashekar Date: Mon, 9 Jun 2025 19:45:06 +0530 Subject: [PATCH] This commit contains a Corvic example using Google ADK --- deployed-agents/Google-ADK/README.md | 35 ++++++++++ deployed-agents/Google-ADK/img.png | Bin 0 -> 33057 bytes .../Google-ADK/multi_tool_agent/__init__.py | 1 + .../Google-ADK/multi_tool_agent/agent.py | 63 ++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 deployed-agents/Google-ADK/README.md create mode 100644 deployed-agents/Google-ADK/img.png create mode 100644 deployed-agents/Google-ADK/multi_tool_agent/__init__.py create mode 100644 deployed-agents/Google-ADK/multi_tool_agent/agent.py diff --git a/deployed-agents/Google-ADK/README.md b/deployed-agents/Google-ADK/README.md new file mode 100644 index 0000000..415adfa --- /dev/null +++ b/deployed-agents/Google-ADK/README.md @@ -0,0 +1,35 @@ +

Corvic MCP with Google ADK

+In this example, we use the ADK framework to forward a question to Corvic Agent via MCP. The Corvic agent is a sales reporting agent that reports the total sales given a customer id. +

Pre-requisites

+Download this folder to a local path and make sure you have the following libraries installed. + +```bash + +pip install google-adk +pip install mcp +pip install nest-asyncio +``` + +

Setup Google Credentials

+In the directory where the code is downloaded, set the Google credentials +```bash + +export GOOGLE_GENAI_USE_VERTEXAI=FALSE +export GOOGLE_API_KEY= +``` + +

Setup Corvic

+Add MCP endpoint and Authorization in `agent.py`. Your administrator will provide these items + +

Start the ADK Server

+Start the ADK web agent using the following command +```bash + +adk web +``` + +

Ask questions on the Web Interface

+Navigate to http://localhost:8000 where a prompt is presented. You can go ahead and ask the question you want Corvic to answer. +![img.png](img.png) +

+In the image above, a question `Provide sales data for customer id 1234` is being answered by Corvic. \ No newline at end of file diff --git a/deployed-agents/Google-ADK/img.png b/deployed-agents/Google-ADK/img.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca0968dc826add961187d54b507e5dfd92c0621 GIT binary patch literal 33057 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š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 dict: + """Retrieves the sales data for the customer id. + + Args: + customer_id (str): The id of the customer. + + Returns: + dict: status and result or error msg. + """ + final_response = asyncio.run(run(customer_id)) + + return { + "status": "success", + "report": ( + f"Corvic response: {repr(final_response)}" + ), + } + + +root_agent = Agent( + name="Sales_Reporting_agent", + model="gemini-2.0-flash", + description=( + "Agent to provide sales data for a given customer id." + ), + instruction=( + "Only answer based on the tool, and dont add any information of your own. You are a helpful agent who can answer user questions about sales to a customer." + ), + tools=[get_sales_data], +)