Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for multiple mechs #127

Merged
merged 1 commit into from
Oct 30, 2023
Merged
Show file tree
Hide file tree
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
18 changes: 12 additions & 6 deletions packages/valory/agents/mech/aea-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ connections:
- valory/p2p_libp2p_client:0.1.0:bafybeihge56dn3xep2dzomu7rtvbgo4uc2qqh7ljl3fubqdi2lq44gs5lq
- valory/websocket_client:0.1.0:bafybeidxgkpajanybyjrmdnor4au4ttghzyp2ulgm7rttjgopxrjoaszzi
contracts:
- valory/agent_mech:0.1.0:bafybeihl5bhzztik6iylqyuzbci2nxvlj6f7hybspxgrvlrik7szrlsxfa
- valory/agent_mech:0.1.0:bafybeic7l75wn3nrjf24lddqngpolalbhjh7su6mttmuebqxgh4veqegia
- valory/gnosis_safe:0.1.0:bafybeibt7arvjzz4ah24omst74f4sfjpzrdef76yti6ml7dopsauhdzeci
- valory/gnosis_safe_proxy_factory:0.1.0:bafybeigxqwbd6wds57ecsfkl2hf4z4vbz5gokex6nutu5zcdpw6irh573y
- valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y
Expand All @@ -35,11 +35,11 @@ skills:
- valory/abstract_abci:0.1.0:bafybeihgemn2gwjc2wyxuh7rttg5pk5gec7dxhet3ih2tmg75vsdbgad7a
- valory/abstract_round_abci:0.1.0:bafybeic3xbxh74qaufevlmuwj64hhzyvp6ne24ffmbdauset52z7app2cu
- valory/contract_subscription:0.1.0:bafybeiedubkfhzjrg2wpuseham25ml54dmpcfc3vuaha6cl3fvar4b3qai
- valory/mech_abci:0.1.0:bafybeiezaqnzlkcqa3ezycg72go7bpphlreror65nyrx2cc3n4bx4tbumi
- valory/task_execution:0.1.0:bafybeibbchr6ibv3asncoatmrr46jxfsf6kr4whlfxfxqpmnl57enb6r2a
- valory/mech_abci:0.1.0:bafybeifyj7mpoupexuw5ozwucstooznwzjqei5xh3x6aqbahmhsfxock2y
- valory/task_execution:0.1.0:bafybeiaomsbxkugiplv76cjwbkqnbsoq4nw2pmq5ywgxmsxy7o52zz3rzq
- valory/registration_abci:0.1.0:bafybeigqxnmblvehj4cbhywmjbvivf44ru23xyizf7gx4wfkygkubwex24
- valory/reset_pause_abci:0.1.0:bafybeifdul36ucwer665cljtb4233fzedxkxfgi7fwflhmlsr2efhu4eiq
- valory/task_submission_abci:0.1.0:bafybeia7mbsfyupjioyyn3zsarlp337ln463jhhozowagdbugaytk77u2y
- valory/task_submission_abci:0.1.0:bafybeif3iq7a424o4uldemtlfzsbohewlktb65mllwxgg5t4q5mieuew34
- valory/termination_abci:0.1.0:bafybeihnp324qgyypecaol4tqt7bugbvpbut4hw5brbckbhpovenfiw3zu
- valory/transaction_settlement_abci:0.1.0:bafybeidbodazeikfo24pug3ir44ub265ltmepm752mzkuic4qfhkdcckmm
default_ledger: ethereum
Expand Down Expand Up @@ -92,6 +92,12 @@ dependencies:
version: ==2.1.1
hypothesis:
version: ==6.21.6
spacy:
version: ==3.7.2
tiktoken:
version: ==0.5.1
python-dateutil:
version: ==2.8.2
default_connection: null
---
public_id: valory/websocket_client:0.1.0:bafybeiexove4oqyhoae5xmk2hilskthosov5imdp65olpgj3cfrepbouyy
Expand Down Expand Up @@ -154,7 +160,7 @@ models:
tendermint_max_retries: ${int:5}
tendermint_url: ${str:http://localhost:26657}
use_termination: ${bool:false}
agent_mech_contract_address: ${str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_addresses: ${list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81"]}
round_timeout_seconds: ${float:30.0}
reset_period_count: ${int:1000}
on_chain_service_id: ${int:1}
Expand All @@ -174,7 +180,7 @@ type: skill
models:
params:
args:
agent_mech_contract_address: ${str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_addresses: ${list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81"]}
task_deadline: ${float:240.0}
file_hash_to_tools_json: ${list:[["bafybeibi34bhbvesmvd6o24jxvuldrwen4wj62na3lhva7k4afkg2shinu",["openai-text-davinci-002","openai-text-davinci-003","openai-gpt-3.5-turbo","openai-gpt-4"]],["bafybeiafdm3jctiz6wwo3rmo3vdubk7j7l5tumoxi5n5rc3x452mtkgyua",["stabilityai-stable-diffusion-v1-5","stabilityai-stable-diffusion-xl-beta-v2-2-2","stabilityai-stable-diffusion-512-v2-1","stabilityai-stable-diffusion-768-v2-1"]],["bafybeidpbnqbruzqlq424qt3i5dcvyqmcimshjilftabnrroujmjhdmteu",["transfer-native"]],["bafybeiglhy5epaytvt5qqdx77ld23ekouli53qrf2hjyebd5xghlunidfi",["prediction-online","prediction-offline"]]]}
api_keys_json: ${list:[["openai", "dummy_api_key"],["stabilityai", "dummy_api_key"],["google_api_key",
Expand Down
21 changes: 21 additions & 0 deletions packages/valory/contracts/agent_mech/contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ def get_request_events(
{
"tx_hash": entry.transactionHash.hex(),
"block_number": entry.blockNumber,
"contract_address": contract_address,
**entry["args"],
}
for entry in entries
Expand Down Expand Up @@ -183,3 +184,23 @@ def get_undelivered_reqs(
# store each requests in the pending_tasks list, make sure each req is stored once
pending_tasks.append(request)
return {"data": pending_tasks}

@classmethod
def get_multiple_undelivered_reqs(
cls,
ledger_api: LedgerApi,
contract_address: str,
contract_addresses: List[str],
from_block: BlockIdentifier = "earliest",
**kwargs: Any,
) -> JSONLike:
"""Get the requests that are not delivered."""
pending_tasks: List[Dict[str, Any]] = []
# ensure we get the same range on all contracts
to_block = ledger_api.api.eth.block_number
for contract_address in contract_addresses:
pending_tasks_batch = cls.get_undelivered_reqs(
ledger_api, contract_address, from_block, to_block
).get("data")
pending_tasks.extend(pending_tasks_batch)
return {"data": pending_tasks}
2 changes: 1 addition & 1 deletion packages/valory/contracts/agent_mech/contract.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ aea_version: '>=1.0.0, <2.0.0'
fingerprint:
__init__.py: bafybeigpq5lxfj2aza6ok3fjuywtdafelkbvoqwaits7regfbgu4oynmku
build/AgentMech.json: bafybeidrlu7vpusp2tzovyf5rbnqy2jicuq3e6czizfkzswjq4rjusu72i
contract.py: bafybeia4e7nbxuqoqbtxolapvn5z35ryfjnoldrd4zr2cbv5ewa44tohme
contract.py: bafybeibexkfobufuooyzton3up7nq7alr2wlinkflegpsa7tnvafcdzk34
fingerprint_ignore_patterns: []
class_name: AgentMechContract
contract_interface_paths:
Expand Down
18 changes: 9 additions & 9 deletions packages/valory/services/mech/service.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license: Apache-2.0
fingerprint:
README.md: bafybeif7ia4jdlazy6745ke2k2x5yoqlwsgwr6sbztbgqtwvs3ndm2p7ba
fingerprint_ignore_patterns: []
agent: valory/mech:0.1.0:bafybeiah5xgb7fpzln6sqqbj4leqsdunh6jxes3ripum7a22csuiw5miy4
agent: valory/mech:0.1.0:bafybeig23wynkrigqg4jbxzpgejotrcbbj6obfzpzqqs6zpcewcml5dxn4
number_of_agents: 4
deployment:
agent:
Expand Down Expand Up @@ -43,7 +43,7 @@ type: skill
tendermint_p2p_url: ${TM_P2P_ENDPOINT_NODE_0:str:node0:26656}
termination_sleep: ${TERMINATION_SLEEP:int:900}
use_termination: ${USE_TERMINATION:bool:false}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
reset_period_count: ${RESET_PERIOD_COUNT:int:1000}
use_slashing: ${USE_SLASHING:bool:false}
slash_cooldown_hours: ${SLASH_COOLDOWN_HOURS:int:3}
Expand All @@ -70,7 +70,7 @@ type: skill
tendermint_p2p_url: ${TM_P2P_ENDPOINT_NODE_0:str:node0:26656}
termination_sleep: ${TERMINATION_SLEEP:int:900}
use_termination: ${USE_TERMINATION:bool:false}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
reset_period_count: ${RESET_PERIOD_COUNT:int:1000}
use_slashing: ${USE_SLASHING:bool:false}
slash_cooldown_hours: ${SLASH_COOLDOWN_HOURS:int:3}
Expand All @@ -97,7 +97,7 @@ type: skill
tendermint_p2p_url: ${TM_P2P_ENDPOINT_NODE_0:str:node0:26656}
termination_sleep: ${TERMINATION_SLEEP:int:900}
use_termination: ${USE_TERMINATION:bool:false}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
reset_period_count: ${RESET_PERIOD_COUNT:int:1000}
use_slashing: ${USE_SLASHING:bool:false}
slash_cooldown_hours: ${SLASH_COOLDOWN_HOURS:int:3}
Expand All @@ -124,7 +124,7 @@ type: skill
tendermint_p2p_url: ${TM_P2P_ENDPOINT_NODE_0:str:node0:26656}
termination_sleep: ${TERMINATION_SLEEP:int:900}
use_termination: ${USE_TERMINATION:bool:false}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
reset_period_count: ${RESET_PERIOD_COUNT:int:1000}
use_slashing: ${USE_SLASHING:bool:false}
slash_cooldown_hours: ${SLASH_COOLDOWN_HOURS:int:3}
Expand All @@ -141,7 +141,7 @@ type: skill
models:
params:
args:
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
task_deadline: ${TASK_DEADLINE:float:240.0}
file_hash_to_tools_json: ${FILE_HASH_TO_TOOLS:list:[]}
api_keys_json: ${API_KEYS:list:[]}
Expand All @@ -152,7 +152,7 @@ type: skill
models:
params:
args:
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
task_deadline: ${TASK_DEADLINE:float:240.0}
file_hash_to_tools_json: ${FILE_HASH_TO_TOOLS:list:[]}
api_keys_json: ${API_KEYS:list:[]}
Expand All @@ -163,7 +163,7 @@ type: skill
models:
params:
args:
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
task_deadline: ${TASK_DEADLINE:float:240.0}
file_hash_to_tools_json: ${FILE_HASH_TO_TOOLS:list:[]}
api_keys_json: ${API_KEYS:list:[]}
Expand All @@ -174,7 +174,7 @@ type: skill
models:
params:
args:
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESS:str:0xFf82123dFB52ab75C417195c5fDB87630145ae81}
agent_mech_contract_address: ${AGENT_MECH_CONTRACT_ADDRESSES:list:["0xFf82123dFB52ab75C417195c5fDB87630145ae81","0x77af31De935740567Cf4fF1986D04B2c964A786a"]}
task_deadline: ${TASK_DEADLINE:float:240.0}
file_hash_to_tools_json: ${FILE_HASH_TO_TOOLS:list:[]}
api_keys_json: ${API_KEYS:list:[]}
Expand Down
5 changes: 3 additions & 2 deletions packages/valory/skills/mech_abci/skill.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ skills:
- valory/abstract_round_abci:0.1.0:bafybeic3xbxh74qaufevlmuwj64hhzyvp6ne24ffmbdauset52z7app2cu
- valory/registration_abci:0.1.0:bafybeigqxnmblvehj4cbhywmjbvivf44ru23xyizf7gx4wfkygkubwex24
- valory/reset_pause_abci:0.1.0:bafybeifdul36ucwer665cljtb4233fzedxkxfgi7fwflhmlsr2efhu4eiq
- valory/task_submission_abci:0.1.0:bafybeia7mbsfyupjioyyn3zsarlp337ln463jhhozowagdbugaytk77u2y
- valory/task_submission_abci:0.1.0:bafybeif3iq7a424o4uldemtlfzsbohewlktb65mllwxgg5t4q5mieuew34
- valory/termination_abci:0.1.0:bafybeihnp324qgyypecaol4tqt7bugbvpbut4hw5brbckbhpovenfiw3zu
- valory/transaction_settlement_abci:0.1.0:bafybeidbodazeikfo24pug3ir44ub265ltmepm752mzkuic4qfhkdcckmm
behaviours:
Expand Down Expand Up @@ -75,7 +75,8 @@ models:
class_name: LedgerApiDialogues
params:
args:
agent_mech_contract_address: '0xFf82123dFB52ab75C417195c5fDB87630145ae81'
agent_mech_contract_addresses:
- '0xFf82123dFB52ab75C417195c5fDB87630145ae81'
api_keys_json:
- - openai
- dummy_api_key
Expand Down
14 changes: 9 additions & 5 deletions packages/valory/skills/task_execution/behaviours.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,14 +199,17 @@ def _check_for_new_reqs(self) -> None:
# set the initial from block
self._populate_from_block()
return

contract_api_msg, _ = self.context.contract_dialogues.create(
performative=ContractApiMessage.Performative.GET_STATE,
contract_address=self.params.agent_mech_contract_address,
contract_address=self.params.agent_mech_contract_addresses[0],
contract_id=str(AgentMechContract.contract_id),
callable="get_undelivered_reqs",
callable="get_multiple_undelivered_reqs",
kwargs=ContractApiMessage.Kwargs(
dict(from_block=self.params.from_block, chain_id=GNOSIS_CHAIN)
dict(
from_block=self.params.from_block,
chain_id=GNOSIS_CHAIN,
contract_addresses=self.params.agent_mech_contract_addresses,
)
),
counterparty=LEDGER_API_ADDRESS,
ledger_id=self.context.default_ledger_id,
Expand Down Expand Up @@ -256,9 +259,10 @@ def _handle_done_task(self) -> None:
"""Handle done tasks"""
executing_task = cast(Dict[str, Any], self._executing_task)
req_id = executing_task.get("requestId", None)
mech_address = executing_task.get("contract_address", None)
task_result = self._get_executing_task_result()
response = {"requestId": req_id, "result": "Invalid response"}
self._done_task = {"request_id": req_id}
self._done_task = {"request_id": req_id, "mech_address": mech_address}
if task_result is not None:
# task succeeded
deliver_msg, prompt, transaction = task_result
Expand Down
8 changes: 4 additions & 4 deletions packages/valory/skills/task_execution/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ class Params(Model):

def __init__(self, *args: Any, **kwargs: Any) -> None:
"""Initialize the parameters object."""
self.agent_mech_contract_address = kwargs.get(
"agent_mech_contract_address", None
self.agent_mech_contract_addresses = kwargs.get(
"agent_mech_contract_addresses", None
)
enforce(
self.agent_mech_contract_address is not None,
"agent_mech_contract_address must be set!",
self.agent_mech_contract_addresses is not None,
"agent_mech_contract_addresses must be set!",
)

self.in_flight_req: bool = False
Expand Down
9 changes: 5 additions & 4 deletions packages/valory/skills/task_execution/skill.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
__init__.py: bafybeidqhvvlnthkbnmrdkdeyjyx2f2ab6z4xdgmagh7welqnh2v6wczx4
behaviours.py: bafybeiaxbc7esaphfdc3pgmvwghqloouwk45k3sg5xdhaa7mnadms4ivve
behaviours.py: bafybeibrvfpdvcdtel3juuxjcbtvrwazgdg3na5h4fzh2akfldk2eipudq
dialogues.py: bafybeid4zxalqdlo5mw4yfbuf34hx4jp5ay5z6chm4zviwu4cj7fudtwca
handlers.py: bafybeidbt5ezj74cgfogk3w4uw4si2grlnk5g54veyumw7g5yh6gdscywu
models.py: bafybeibfaxjdlwlpmv4ursoyfvo4k6lp442fyzxxvl7vsw5pyssgxartbm
models.py: bafybeiavbz7un34qpxbmi3bmvk7yogc4w7d5wd3eymonelsqep5li222y4
utils/__init__.py: bafybeiccdijaigu6e5p2iruwo5mkk224o7ywedc7nr6xeu5fpmhjqgk24e
utils/ipfs.py: bafybeicuaj23qrcdv6ly4j7yo6il2r5plozhd6mwvcp5acwqbjxb2t3u2i
utils/task.py: bafybeiakokty64m5cqp72drrpvfckhruldlwcge5hcc2bsy2ujk6nnrazq
Expand All @@ -20,7 +20,7 @@ connections:
- valory/ipfs:0.1.0:bafybeigkn27u7m5atju6a724clycyfshbgcbwheztil2bky7krfa46ub2a
- valory/p2p_libp2p_client:0.1.0:bafybeihge56dn3xep2dzomu7rtvbgo4uc2qqh7ljl3fubqdi2lq44gs5lq
contracts:
- valory/agent_mech:0.1.0:bafybeihl5bhzztik6iylqyuzbci2nxvlj6f7hybspxgrvlrik7szrlsxfa
- valory/agent_mech:0.1.0:bafybeic7l75wn3nrjf24lddqngpolalbhjh7su6mttmuebqxgh4veqegia
protocols:
- valory/acn_data_share:0.1.0:bafybeieyixetwvz767zekhvg7r6etumyanzys6xbalx2brrfswybinnlhi
- valory/contract_api:1.0.0:bafybeialhbjvwiwcnqq3ysxcyemobcbie7xza66gaofcvla5njezkvhcka
Expand Down Expand Up @@ -64,7 +64,8 @@ models:
params:
args:
agent_index: 0
agent_mech_contract_address: '0x9A676e781A523b5d0C0e43731313A708CB607508'
agent_mech_contract_addresses:
- '0x9A676e781A523b5d0C0e43731313A708CB607508'
api_keys_json:
- - openai
- dummy_api_key
Expand Down
4 changes: 2 additions & 2 deletions packages/valory/skills/task_submission_abci/behaviours.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ def _get_deliver_tx(
"""Get the deliver tx."""
contract_api_msg = yield from self.get_contract_api_response(
performative=ContractApiMessage.Performative.GET_STATE, # type: ignore
contract_address=self.params.agent_mech_contract_address,
contract_address=task_data["mech_address"],
contract_id=str(AgentMechContract.contract_id),
contract_callable="get_deliver_data",
request_id=task_data["request_id"],
Expand All @@ -313,7 +313,7 @@ def _get_deliver_tx(

data = cast(bytes, contract_api_msg.state.body["data"])
return {
"to": self.params.agent_mech_contract_address,
"to": task_data["mech_address"],
"value": ZERO_ETHER_VALUE,
"data": data,
}
Expand Down
5 changes: 0 additions & 5 deletions packages/valory/skills/task_submission_abci/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,6 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
self.multisend_address = kwargs.get("multisend_address", None)
if self.multisend_address is None:
raise ValueError("No multisend_address specified!")
self.agent_mech_contract_address = kwargs.get(
"agent_mech_contract_address", None
)
if self.agent_mech_contract_address is None:
raise ValueError("agent_mech_contract_address is required")
self.agent_registry_address = self._ensure(
"agent_registry_address", kwargs, str
)
Expand Down
6 changes: 3 additions & 3 deletions packages/valory/skills/task_submission_abci/skill.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@ license: Apache-2.0
aea_version: '>=1.0.0, <2.0.0'
fingerprint:
__init__.py: bafybeiholqak7ltw6bbmn2c5tn3j7xgzkdlfzp3kcskiqsvmxoih6m4muq
behaviours.py: bafybeicqny46ccyh5tr7wfiplld4o5wp6ibqn5afkp3e3po353vwua255e
behaviours.py: bafybeicl5hj7pvoj3tmyj4hvvlmliktbmrvrhfl2sljccj7socrpoiegje
dialogues.py: bafybeibmac3m5u5h6ucoyjr4dazay72dyga656wvjl6z6saapluvjo54ne
fsm_specification.yaml: bafybeig6bhn554qyou7kef5bstnlv54zke32avyti63uu4hvsol3lzqkoi
handlers.py: bafybeibe5n7my2vd2wlwo73sbma65epjqc7kxgtittewlylcmvnmoxtxzq
models.py: bafybeibwa7xffrsi6np4o2gvin5a7a6arlbpkizazoq4fjb2b4kdrja5si
models.py: bafybeib4sgwtutuj6dydoi6q5rrfoj5nvvkb7cyzsipxk2yrmrhuocuoni
payloads.py: bafybeia2yorri2u5rwh6vukb6iwdrbn53ygsuuhthns2txptvjipyb6f4e
rounds.py: bafybeicstmau4vlzpxz3kjgiwwsetwmotdk4un4iucmdddzvot5dgdkg2a
tasks.py: bafybeicu5t5cvfhbndgpxbbtmp4vbmtyb6fba6vsnlewftvuderxp5lwcy
fingerprint_ignore_patterns: []
connections: []
contracts:
- valory/agent_mech:0.1.0:bafybeihl5bhzztik6iylqyuzbci2nxvlj6f7hybspxgrvlrik7szrlsxfa
- valory/agent_mech:0.1.0:bafybeic7l75wn3nrjf24lddqngpolalbhjh7su6mttmuebqxgh4veqegia
- valory/agent_registry:0.1.0:bafybeiargayav6yiztdnwzejoejstcx4idssch2h4f5arlgtzj3tgsgfmu
- valory/gnosis_safe:0.1.0:bafybeibt7arvjzz4ah24omst74f4sfjpzrdef76yti6ml7dopsauhdzeci
- valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y
Expand Down
Loading