from typing import Annotated, Any from arcade_tdk import ToolContext, tool from arcade_google_finance.enums import GoogleFinanceWindow from arcade_google_finance.utils import call_serpapi, prepare_params @tool(requires_secrets=["SERP_API_KEY"]) async def get_stock_summary( context: ToolContext, ticker_symbol: Annotated[ str, "The stock ticker to get summary for. For example, 'GOOG' is the ticker symbol for Google", ], exchange_identifier: Annotated[ str, "The exchange identifier. This part indicates the market where the " "stock is traded. For example, 'NASDAQ', 'NYSE', 'TSE', 'LSE', etc.", ], ) -> Annotated[dict[str, Any], "Summary of the stock's recent performance"]: """Retrieve the summary information for a given stock ticker using the Google Finance API. Gets the stock's current price as well as price movement from the most recent trading day. """ # Prepare the request query = ( f"{ticker_symbol.upper()}:{exchange_identifier.upper()}" if exchange_identifier else ticker_symbol.upper() ) params = prepare_params("google_finance", q=query) # Execute the request results = call_serpapi(context, params) # Parse the results summary: dict = results.get("summary", {}) return summary @tool(requires_secrets=["SERP_API_KEY"]) async def get_stock_historical_data( context: ToolContext, ticker_symbol: Annotated[ str, "The stock ticker to get summary for. For example, 'GOOG' is the ticker symbol for Google", ], exchange_identifier: Annotated[ str, "The exchange identifier. This part indicates the market where the " "stock is traded. For example, 'NASDAQ', 'NYSE', 'TSE', 'LSE', etc.", ], window: Annotated[ GoogleFinanceWindow, "Time window for the graph data. Defaults to 1 month" ] = GoogleFinanceWindow.ONE_MONTH, ) -> Annotated[ dict[str, Any], "A stock's price and volume data at a specific time interval over a specified time window", ]: """Fetch historical stock price data over a specified time window Returns a stock's price and volume data over a specified time window """ # Prepare the request query = ( f"{ticker_symbol.upper()}:{exchange_identifier.upper()}" if exchange_identifier else ticker_symbol.upper() ) params = prepare_params("google_finance", q=query, window=window.value) # Execute the request results = call_serpapi(context, params) # Parse the results data = { "summary": results.get("summary", {}), "graph": results.get("graph", []), } key_events = results.get("key_events") if key_events: data["key_events"] = key_events return data