Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 158 additions & 0 deletions a2as.yaml
Original file line number Diff line number Diff line change
@@ -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: [<background>, 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.', </background>, <goal>, '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.', </goal>, <tools>, 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., </tools>, <output>, '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.', </output>]

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]