diff --git a/a2as.yaml b/a2as.yaml new file mode 100644 index 0000000..ac887cc --- /dev/null +++ b/a2as.yaml @@ -0,0 +1,158 @@ +manifest: + version: "0.1.2" + schema: https://a2as.org/cert/schema + subject: + name: iamtomshaw/quotation-agent + source: https://github.com/iamtomshaw/quotation-agent + branch: main + commit: "7ea95357" + scope: [main.py] + issued: + by: A2AS.org + at: '2026-01-26T16:13:07Z' + signatures: + digest: sha256:D4V0WqJBErOYQcl2enoyR60-DZdDEBmG2f9Ckg_1d78 + key: ed25519:eyg-dG5Tavtr1CAG-xWABE-2vEomLE6y__yD-UgbKw0 + sig: ed25519:5e7nHrL4n76z5WePdwLSNYfiBxDZY_wQIggYO0rGVhE-kIgaPldBDjaWvLOfMzOahEdx-Z9vzw8NASJ6IV0WBg + +agents: + agent: + type: instance + models: [gpt-4o] + tools: [get_pricing_from_notion, WebSearchTool, currency_conversion] + params: + function: run_quotation_agent + name: Quotation Agent + instructions: [, You are a pricing and quotation agent that provides accurate and competitive pricing quotes + based on user requests. You are an expert in the influencer marketing industry so you know how to price campaigns + effectively., 'You are pricing campaigns for Tom Shaw, a programming and tech content creator with a focus on software + development, AI, and technology trends.', , , 'Provide accurate and competitive pricing quotes + that are beneficial for the influencer to ensure that they are paid a fair rate for their services. If you do not + have enough information, or need any details specified (for example, the type of content, duration, on or off site + production, etc), ask the user for more information.', , , You have access to tools that can fetch + information on the influencer's pricing list. You have the ability to search the web for additional information + if needed. Make sure to specify when you have used a tool so that the user knows where the information came from. + You can also convert currencies using the exchange rate API., , , 'Provide a clear and concise quote + based on the user''s request. The quote should be broken down into its component parts so that the user can understand + how you have reached the final amount. If the user asks for more information, provide relevant details about the + influencer''s previous deals and pricing. The quote should be in the GBP currency format unless otherwise specified. + If so, you should convert the quote to the specified currency. If you do swap currencies, make sure you do the pricing + in GBP first, then convert to the specified currency using the exchange rate API.', ] + +models: + gpt-4o: + type: literal + agents: [agent] + +tools: + currency_conversion: + type: decorator + agents: [agent] + params: + description: Convert currency using an external API + get_pricing_from_notion: + type: decorator + agents: [agent] + WebSearchTool: + type: module + agents: [agent] + +imports: + Agent: agents.Agent + APIKeyHeader: fastapi.security.APIKeyHeader + BaseModel: pydantic.BaseModel + datetime: datetime.datetime + Depends: fastapi.Depends + FastAPI: fastapi.FastAPI + function_tool: agents.function_tool + HTTP_403_FORBIDDEN: starlette.status.HTTP_403_FORBIDDEN + HTTPException: fastapi.HTTPException + json: json + load_dotenv: dotenv.load_dotenv + os: os + requests: requests + Runner: agents.Runner + TResponseInputItem: agents.TResponseInputItem + uuid: uuid + WebSearchTool: agents.WebSearchTool + WebSocket: fastapi.WebSocket + WebSocketDisconnect: fastapi.WebSocketDisconnect + +functions: + __init__: + type: sync + module: main + args: [self] + broadcast: + type: async + module: main + args: [self, message] + clear_chat: + type: sync + module: main + args: [api_key] + connect: + type: async + module: main + args: [self, websocket] + currency_conversion: + type: tool + module: main + args: [amount, from_currency, to_currency] + disconnect: + type: sync + module: main + args: [self, websocket] + get_pricing_from_notion: + type: tool + module: main + process_chat_message: + type: async + module: main + args: [message] + params: + returns: str + read_root: + type: sync + module: main + args: [api_key] + run_quotation_agent: + type: async + module: main + args: [message, page_id] + send_message: + type: async + module: main + args: [self, message, websocket] + verify_api_key: + type: sync + module: main + args: [api_key] + websocket_endpoint: + type: async + module: main + args: [websocket] + +variables: + API_KEY: + type: env + params: + caller: [os.getenv] + path: [main] + API_KEY_NAME: + type: env + EXCHANGE_RATE_API_KEY: + type: env + params: + caller: [os.getenv] + path: [main] + NOTION_API_KEY: + type: env + params: + caller: [os.getenv] + path: [main] + NOTION_PAGE_ID: + type: env + params: + caller: [os.getenv] + path: [main]