Skip to content

Commit 0e53eae

Browse files
Merge pull request #468 from valory-xyz/chore/dual-purpose-use-offchain-flag
feat(mech): dual-purpose use_offchain, drop mech_events_enabled, rename wildcard→predict_api
2 parents 4ad065d + 9b09e65 commit 0e53eae

20 files changed

Lines changed: 668 additions & 260 deletions

packages/packages.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
"connection/valory/websocket_client/0.1.0": "bafybeid4cnbjpmzcsw3usg7umufgqyod2u3xfw5uso3vukt3n5hfuxvdea",
1010
"skill/valory/contract_subscription/0.1.0": "bafybeicqlkmfpttw4hbbaakr6xos62rd6ytjwkyzlfli4xpvl5yqcycf6q",
1111
"skill/valory/delivery_rate_abci/0.1.0": "bafybeiathwdfpcfqbipqbkslv6j22q5cvov4n3czmehzij3czrhdnlg42e",
12-
"skill/valory/mech_abci/0.1.0": "bafybeib33ygqjlxsw4sl7t56zdlsui6kukk2wz6gspddrof2c3pjeisyem",
13-
"skill/valory/task_execution/0.1.0": "bafybeib4ca677b4fbvtcf2zpfxjr7aob55qeuo7hhqjeenvhfs7ob7cujq",
14-
"skill/valory/task_submission_abci/0.1.0": "bafybeie4gnqfzbizxqgpn56qgqkw76z23cj3kuued2dsysoampe7s4y5ou",
12+
"skill/valory/mech_abci/0.1.0": "bafybeigdwb6lsnj46goll73qzkeqcyffpv7sixf5oqwlfthl43htsybjia",
13+
"skill/valory/task_execution/0.1.0": "bafybeiba6ar75dz6ih36u6vwt3ksnvcibgxvxrq2ktedcp2b6rmvew563y",
14+
"skill/valory/task_submission_abci/0.1.0": "bafybeic3clyx66kfa3tdktzqiitr2kv5yk6qmqy6cuerumopweiigksabu",
1515
"skill/valory/websocket_client/0.1.0": "bafybeid6oyycsrvk4duftffs5mrfgmcepibt3qe4om3kfzhwhilfq3ynay",
16-
"agent/valory/mech/0.1.0": "bafybeigmprmqsw4rga2yx4xjouysasyreym52lwl2ol7of7zou7wai3mju",
17-
"service/valory/mech/0.1.0": "bafybeihptuvknnbiap4qxi2jwxt5t7okj7t227xocp5jsywnqyskmbzhly"
16+
"agent/valory/mech/0.1.0": "bafybeiab7emnojt4uglfdpk7x6x26wmnqs5azf7favs7qw3o3yebmkydxa",
17+
"service/valory/mech/0.1.0": "bafybeicjlkkltnpt4m3pse74e4fgq4lwbmbg7mx4ecdvmtsouzslmjbrxy"
1818
},
1919
"third_party": {
2020
"protocol/open_aea/signing/1.0.0": "bafybeifsjmldwyki3beqyvdt5lzenrg6wyrqaar5plc5rpnvtc4zlentye",

packages/valory/agents/mech/aea-config.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ skills:
4040
- valory/abstract_abci:0.1.0:bafybeie5et43th2nta76cd3kpm3fmurd7oyzk3qxim76octvt56m6r2poi
4141
- valory/abstract_round_abci:0.1.0:bafybeifkxnvvgsldkb4rgejsoon2mvrmrnl7asy2nhenwss7hpwg3myflu
4242
- valory/contract_subscription:0.1.0:bafybeicqlkmfpttw4hbbaakr6xos62rd6ytjwkyzlfli4xpvl5yqcycf6q
43-
- valory/mech_abci:0.1.0:bafybeib33ygqjlxsw4sl7t56zdlsui6kukk2wz6gspddrof2c3pjeisyem
43+
- valory/mech_abci:0.1.0:bafybeigdwb6lsnj46goll73qzkeqcyffpv7sixf5oqwlfthl43htsybjia
4444
- valory/registration_abci:0.1.0:bafybeif4n2esdjvquomdkwktv7eolepskpo5jlqrfda2abxjqzy2ljsxzi
4545
- valory/reset_pause_abci:0.1.0:bafybeifrnmlscfiki7wojs6zasppefupd2wkjyq6orhdllfppjud7isrxi
4646
- valory/delivery_rate_abci:0.1.0:bafybeiathwdfpcfqbipqbkslv6j22q5cvov4n3czmehzij3czrhdnlg42e
47-
- valory/task_execution:0.1.0:bafybeib4ca677b4fbvtcf2zpfxjr7aob55qeuo7hhqjeenvhfs7ob7cujq
48-
- valory/task_submission_abci:0.1.0:bafybeie4gnqfzbizxqgpn56qgqkw76z23cj3kuued2dsysoampe7s4y5ou
47+
- valory/task_execution:0.1.0:bafybeiba6ar75dz6ih36u6vwt3ksnvcibgxvxrq2ktedcp2b6rmvew563y
48+
- valory/task_submission_abci:0.1.0:bafybeic3clyx66kfa3tdktzqiitr2kv5yk6qmqy6cuerumopweiigksabu
4949
- valory/termination_abci:0.1.0:bafybeih6sa2ttcvvjk7rcfn7ure2ws23kcfufssb4qmluzcfvednkfpvoi
5050
- valory/transaction_settlement_abci:0.1.0:bafybeihizaapype5sz7vlosms3nfo6jzfj4ujycuf5uthviq2otvmw6f6m
5151
- valory/websocket_client:0.1.0:bafybeid6oyycsrvk4duftffs5mrfgmcepibt3qe4om3kfzhwhilfq3ynay

packages/valory/services/mech/service.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ license: Apache-2.0
77
fingerprint:
88
README.md: bafybeihppqns2lwn5vehtqh2wu4tjyf76dbzxc26nlfws4sc5hcbjbalma
99
fingerprint_ignore_patterns: []
10-
agent: valory/mech:0.1.0:bafybeigmprmqsw4rga2yx4xjouysasyreym52lwl2ol7of7zou7wai3mju
10+
agent: valory/mech:0.1.0:bafybeiab7emnojt4uglfdpk7x6x26wmnqs5azf7favs7qw3o3yebmkydxa
1111
number_of_agents: 4
1212
deployment:
1313
agent:

packages/valory/skills/mech_abci/composition.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
TaskSubmissionAbciApp.FinishedTaskExecutionWithErrorRound: ResetAndPauseAbci.ResetAndPauseRound,
4646
TaskSubmissionAbciApp.FinishedWithoutTasksRound: ResetAndPauseAbci.ResetAndPauseRound,
4747
# Settlement-confirmed path runs through the new PostTxSettlement
48-
# round so the wildcard data-lake POST fires once per settled FSM
48+
# round so the predict-api data lake POST fires once per settled FSM
4949
# round; the round itself is fail-soft (always advances on DONE)
50-
# so a wildcard outage does not stall the loop.
50+
# so a predict-api outage does not stall the loop.
5151
TransactionSubmissionAbciApp.FinishedTransactionSubmissionRound: TaskSubmissionAbciApp.PostTxSettlementRound, # pylint: disable=C0301
5252
TaskSubmissionAbciApp.FinishedPostTxSettlementRound: ResetAndPauseAbci.ResetAndPauseRound,
5353
TransactionSubmissionAbciApp.FailedRound: ResetAndPauseAbci.ResetAndPauseRound,

packages/valory/skills/mech_abci/skill.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ aea_version: '>=2.0.0, <3.0.0'
88
fingerprint:
99
__init__.py: bafybeigawvaywwgbr4fhxir2fpwze3wp7pctvwtp5gpkjritknqoecxfz4
1010
behaviours.py: bafybeibnqxq3le55hn3s3wdlf7wwyzn5y3df4ta5d3ikdb53ypfbl5myjq
11-
composition.py: bafybeiaag6c436uiprfmn7lm3f3ukmpezd47yqpd5b74dsu4w3wcmqhcrm
11+
composition.py: bafybeibc73befd2eiwf2hvzct7ayse6dqutru6vddnzuk5swpi2ncjdrpe
1212
dialogues.py: bafybeigph4dbt75rpfjoxp5zzplb4m5izwblbpt6qssnrvvl2joj6o5cke
1313
fsm_specification.yaml: bafybeih2b72kr7avbrmduezvbjfpo32h6w3mcucy44ri2aox5m6q6iae6q
1414
handlers.py: bafybeihnzh6rkrsn6xvmio4c3borzothkj5u62qcbjnzr5gt6hcy6iudsu
1515
models.py: bafybeid2dmqyfe4pinh6glewhas24zvjntc4z3rtrkp3ji7z2bkq5sudhu
1616
tests/__init__.py: bafybeicswkogdqefhafjpbl2afcwtruegtmkumlk5mbapauys2od7rt7di
1717
tests/conftest.py: bafybeiaqouyzclh4wvnf36jgcmgzm7k4snfghnm3v4yowb4pomyn6qvezu
1818
tests/test_behaviours.py: bafybeibjw3tusfxxmr3byy6sdmu7gefotya4xvhd7ia43ll7fgyqggx7ye
19-
tests/test_composition.py: bafybeifjx57plcn3zg2xb3nlnhxukcnxmnapv7ynxai2wiqbdmg46fgiye
19+
tests/test_composition.py: bafybeihrzdjr7w4dght6bhstcni4zswp4rzgzkgx5bpx4lcesh46h6noqm
2020
tests/test_dialogues.py: bafybeiaicu6h4d3rppxbjhkifwlrfpjmxd6y4sdqnlskdjqijkct2tvhci
2121
tests/test_handlers.py: bafybeicekjso4qfxaiqpaapgosxkvr4tbce6evnxguhzunug4subrikgci
2222
tests/test_models.py: bafybeif4iuuknrtx3tc72y2ii237dqtl6nlqgpdywy227sfqbvxkk6mugy
@@ -30,11 +30,11 @@ skills:
3030
- valory/abstract_round_abci:0.1.0:bafybeifkxnvvgsldkb4rgejsoon2mvrmrnl7asy2nhenwss7hpwg3myflu
3131
- valory/registration_abci:0.1.0:bafybeif4n2esdjvquomdkwktv7eolepskpo5jlqrfda2abxjqzy2ljsxzi
3232
- valory/reset_pause_abci:0.1.0:bafybeifrnmlscfiki7wojs6zasppefupd2wkjyq6orhdllfppjud7isrxi
33-
- valory/task_submission_abci:0.1.0:bafybeie4gnqfzbizxqgpn56qgqkw76z23cj3kuued2dsysoampe7s4y5ou
33+
- valory/task_submission_abci:0.1.0:bafybeic3clyx66kfa3tdktzqiitr2kv5yk6qmqy6cuerumopweiigksabu
3434
- valory/termination_abci:0.1.0:bafybeih6sa2ttcvvjk7rcfn7ure2ws23kcfufssb4qmluzcfvednkfpvoi
3535
- valory/transaction_settlement_abci:0.1.0:bafybeihizaapype5sz7vlosms3nfo6jzfj4ujycuf5uthviq2otvmw6f6m
3636
- valory/delivery_rate_abci:0.1.0:bafybeiathwdfpcfqbipqbkslv6j22q5cvov4n3czmehzij3czrhdnlg42e
37-
- valory/task_execution:0.1.0:bafybeib4ca677b4fbvtcf2zpfxjr7aob55qeuo7hhqjeenvhfs7ob7cujq
37+
- valory/task_execution:0.1.0:bafybeiba6ar75dz6ih36u6vwt3ksnvcibgxvxrq2ktedcp2b6rmvew563y
3838
behaviours:
3939
main:
4040
args: {}
@@ -171,9 +171,9 @@ models:
171171
tools_to_pricing: {}
172172
service_endpoint_base: https://dummy_service.autonolas.tech/
173173
default_chain_id: gnosis
174-
mech_events_enabled: false
175-
wildcard_events_url: ''
176-
wildcard_events_timeout_seconds: 5.0
174+
use_offchain: false
175+
predict_api_events_url: https://mpp.autonolas.tech/mech/events
176+
predict_api_events_timeout_seconds: 5.0
177177
mech_events_sweep_pending_enabled: false
178178
mech_events_sweep_max_age_seconds: 3600.0
179179
mech_events_chain_id: 0

packages/valory/skills/mech_abci/tests/test_composition.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def test_transaction_submission_finished_routes_via_post_tx_settlement(
8787
) -> None:
8888
"""Successful settlement now lands in PostTxSettlementRound first.
8989
90-
The round fires the wildcard data-lake POST and then advances to
90+
The round fires the predict-api data lake POST and then advances to
9191
ResetAndPauseRound via its own FinishedPostTxSettlementRound exit.
9292
The two-edge wiring keeps the settlement→reset path intact while
9393
slotting in the analytics-write side effect.

packages/valory/skills/task_execution/behaviours.py

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def _iso_z(dt: datetime) -> str:
103103
104104
Normalises through ``astimezone(timezone.utc)`` so a datetime with any
105105
UTC offset (``+00:00``, ``+05:30``, ``-08:00``) emits the same canonical
106-
string for the same wall-clock instant. The wildcard server's Pydantic
106+
string for the same wall-clock instant. The predict-api server's Pydantic
107107
``AwareDatetime`` round-trips through ``model_dump(mode="json")`` which
108108
emits ``...Z`` for UTC; the mech's ``batch_hash`` recompute on the
109109
server side compares byte-for-byte against ours, so leaving the offset
@@ -127,10 +127,10 @@ def _iso_z(dt: datetime) -> str:
127127

128128

129129
# Cap on the JSON-serialised size of each ``raw_content`` blob attached to
130-
# a wildcard event. The blob rides Tendermint consensus replication into
130+
# a predict-api event. The blob rides Tendermint consensus replication into
131131
# ``synchronized_data`` on every agent and the field is requester-influenced
132132
# (``params``, ``model``, response body), so an uncapped large payload would
133-
# inflate per-node state. 256 KiB matches the wildcard server's ``_MAX_TEXT``
133+
# inflate per-node state. 256 KiB matches the predict-api server's ``_MAX_TEXT``
134134
# cap on individual TEXT columns; the analytics ETL drops the row to a
135135
# truncated sentinel when the cap is hit so the rest of the event still
136136
# lands.
@@ -1533,30 +1533,35 @@ def _finalize_done_task(self, cid: str) -> None:
15331533
# pop the data key value as it's bytes which causes issues
15341534
# with json dumps and not required anywhere
15351535
done_task.pop("data", None)
1536-
# Attach the offchain wildcard-event payload before the
1536+
# Attach the offchain predict-api event payload before the
15371537
# IN_MEMORY_REQUESTS pop below; the post-settlement behaviour in
15381538
# task_submission_abci reads it off ``synchronized_data.done_tasks``
1539-
# (i.e. after consensus replication) and posts it to the wildcard
1539+
# (i.e. after consensus replication) and posts it to the predict-api
15401540
# data lake, but the buffered request metadata it needs is local
15411541
# to this agent's shared_state and goes away at the pop.
15421542
#
1543-
# Gated on BOTH ``is_offchain`` AND the ``mech_events_enabled`` flag
1544-
# so Phase 1 is genuinely dark: when the flag is off, no payload is
1545-
# built and nothing rides Tendermint consensus replication. The flag
1546-
# check lives here as well as in the post-settlement behaviour so
1547-
# the consensus-state cost is gated, not just the HTTP write.
1548-
# Build the wildcard event for both off-chain HTTP deliveries
1549-
# (is_offchain=True) and on-chain marketplace deliveries
1550-
# (is_offchain=False AND is_marketplace_mech). The ``source`` field
1551-
# on the event (set by ``_build_wildcard_event``) is what
1552-
# disambiguates the two paths on the wildcard side: ``mech_offchain``
1553-
# for the paid HTTP path, ``mech_onchain`` for the on-chain rails.
1554-
# See ``autonolas-marketplace/docs/onchain_write_path_scope.md`` for
1543+
# Gate the whole event build on ``use_offchain``. When the flag
1544+
# is off, no payload is built and nothing rides Tendermint
1545+
# consensus replication — so the ingress-side consensus cost
1546+
# matches the egress-side HTTP write cost (nothing on either
1547+
# side). The paired gate in
1548+
# :py:meth:`task_submission_abci.behaviours.PostTxSettlementBehaviour._do_predict_api_write_best_effort`
1549+
# additionally warns if it receives events under a locally-off
1550+
# flag, so a config drift between the two skill copies of
1551+
# ``use_offchain`` is alertable rather than silent.
1552+
# Build the event for both off-chain HTTP deliveries
1553+
# (``is_offchain=True``) and on-chain marketplace deliveries
1554+
# (``is_offchain=False`` AND ``is_marketplace_delivery=True``).
1555+
# The ``source`` field on the event (set by
1556+
# ``_build_predict_api_event``) disambiguates the two paths on
1557+
# the predict-api side: ``mech_offchain`` for the paid HTTP path,
1558+
# ``mech_onchain`` for the on-chain rails. See
1559+
# ``autonolas-marketplace/docs/onchain_write_path_scope.md`` for
15551560
# the agreed shape.
1556-
wildcard_mode_enabled = getattr(self.params, "mech_events_enabled", False)
1561+
predict_api_mode_enabled = self.params.use_offchain
15571562
is_marketplace_delivery = bool(done_task.get("is_marketplace_mech"))
1558-
if wildcard_mode_enabled and (is_offchain or is_marketplace_delivery):
1559-
done_task["wildcard_event"] = self._build_wildcard_event(
1563+
if predict_api_mode_enabled and (is_offchain or is_marketplace_delivery):
1564+
done_task["predict_api_event"] = self._build_predict_api_event(
15601565
done_task=done_task,
15611566
cid=cid,
15621567
executing_task=cast(Dict[str, Any], executing_task),
@@ -1571,29 +1576,29 @@ def _finalize_done_task(self, cid: str) -> None:
15711576
self.context.shared_state.get(IN_MEMORY_REQUESTS, {}).pop(req_id, None)
15721577
self._reset_executing_task()
15731578

1574-
def _build_wildcard_event(
1579+
def _build_predict_api_event(
15751580
self,
15761581
*,
15771582
done_task: Dict[str, Any],
15781583
cid: str,
15791584
executing_task: Dict[str, Any],
15801585
) -> Dict[str, Any]:
1581-
"""Build the structured wildcard-event payload from on-hand data.
1586+
"""Build the structured predict-api event payload from on-hand data.
15821587
15831588
The post-settlement behaviour batches every event from one FSM round
1584-
into a single signed POST to the wildcard data lake. Fields are
1589+
into a single signed POST to the predict-api data lake. Fields are
15851590
populated best-effort from the buffered request metadata
15861591
(``IN_MEMORY_REQUESTS``), the offchain response
15871592
(``OFFCHAIN_REQUEST_RESPONSES``), the in-flight ``executing_task``,
15881593
and skill params. Optional fields that aren't readily available are
1589-
left ``None``; the wildcard server accepts a NULL there. Required
1594+
left ``None``; the predict-api server accepts a NULL there. Required
15901595
fields default to safe placeholders rather than blocking the row: a
1591-
malformed event surfaces as a 422 when the wildcard write fires (and
1596+
malformed event surfaces as a 422 when the predict-api write fires (and
15921597
lands in the local replay buffer so it's recoverable), which is
15931598
preferable to silently dropping analytics data.
15941599
15951600
Datetimes are emitted as ISO 8601 strings with UTC offset so the
1596-
wildcard ``AwareDatetime`` parser accepts them; mech ints (Unix
1601+
predict-api ``AwareDatetime`` parser accepts them; mech ints (Unix
15971602
seconds) are converted here so the structured event can ride the
15981603
FSM consensus channel without round-tripping through a custom
15991604
codec.
@@ -1654,15 +1659,15 @@ def _build_wildcard_event(
16541659
delivery_mech = str(
16551660
done_task.get("mech_address") or self.params.mech_marketplace_address or ""
16561661
)
1657-
# Wildcard ``source`` derives from the per-task ``is_offchain``
1662+
# The predict-api ``source`` derives from the per-task ``is_offchain``
16581663
# flag: True → ``mech_offchain`` (paid HTTP path); False →
16591664
# ``mech_onchain`` (the on-chain marketplace rails). This is the
1660-
# only field that disambiguates the two paths on the wildcard
1665+
# only field that disambiguates the two paths on the predict-api
16611666
# side; the per-row ``is_offchain`` boolean stays on the
16621667
# response payload as well (the lake keeps both because the
16631668
# ipfs_historical backfill describes either path).
16641669
is_offchain_task = bool(executing_task.get("is_offchain", False))
1665-
wildcard_source = "mech_offchain" if is_offchain_task else "mech_onchain"
1670+
predict_api_source = "mech_offchain" if is_offchain_task else "mech_onchain"
16661671

16671672
# `start_time` is a perf_counter() value (monotonic, not wall-clock),
16681673
# not suitable as a delivered_at timestamp. Use the current wall-clock
@@ -1698,7 +1703,7 @@ def _build_wildcard_event(
16981703
# the executed_at on the response so the time-leading index entry is
16991704
# always populated for an offchain row. The requester can store the
17001705
# value as a Unix int or as an ISO 8601 string — ``str(int)`` would
1701-
# produce ``"1700000000"`` which the wildcard's ``AwareDatetime``
1706+
# produce ``"1700000000"`` which the predict-api's ``AwareDatetime``
17021707
# parser rejects with a 422, so coerce int / float explicitly.
17031708
requested_at_raw = request_data.get("datetime") or request_data.get(
17041709
"requested_at"
@@ -1772,7 +1777,7 @@ def _build_wildcard_event(
17721777
nonce_int = int(nonce_raw) if nonce_raw is not None else None
17731778
except (TypeError, ValueError):
17741779
nonce_int = None
1775-
# The wildcard server requires ``prompt`` to be a non-empty string;
1780+
# The predict-api server requires ``prompt`` to be a non-empty string;
17761781
# placeholder rather than dropping the row. Enforce the cap on the
17771782
# UTF-8 BYTE length, not on ``len()`` (code points) — a CJK prompt
17781783
# of 50k code points encodes to ~150 KB and would otherwise sail
@@ -1788,11 +1793,11 @@ def _build_wildcard_event(
17881793
# Failed-row ``error`` carries the available diagnostic, regardless
17891794
# of which branch put us on the failed arm. When ``invalid`` is set
17901795
# but no ``result_text`` is available (the tool produced no
1791-
# response object), the field is ``None``; the wildcard server's
1796+
# response object), the field is ``None``; the predict-api server's
17921797
# CHECK allows a ``failed`` row with empty error so the row still
17931798
# lands as a settled failure.
17941799
error_text = str(result_text) if status == "failed" and result_text else None
1795-
# Strip the result from the failed arm so the wildcard's
1800+
# Strip the result from the failed arm so the predict-api's
17961801
# status/error/result shape CHECK accepts the row.
17971802
result_value: Optional[str] = (
17981803
None if status == "failed" else (str(result_text) if result_text else "")
@@ -1819,7 +1824,7 @@ def _build_wildcard_event(
18191824
# which keys the requester as ``requester`` and carries no
18201825
# ``sender`` field. This block now runs for on-chain
18211826
# marketplace deliveries too, so falling back to
1822-
# ``requester`` keeps the wildcard row correctly populated
1827+
# ``requester`` keeps the predict-api row correctly populated
18231828
# instead of writing an empty ``requester``.
18241829
"requester": str(
18251830
executing_task.get("sender")
@@ -1878,7 +1883,7 @@ def _build_wildcard_event(
18781883
"response_cid": None,
18791884
"delivered_at": now_iso,
18801885
},
1881-
"source": wildcard_source,
1886+
"source": predict_api_source,
18821887
}
18831888

18841889
def _reset_executing_task(self) -> None:

packages/valory/skills/task_execution/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ def filter_requests(self, reqs: List[Dict[str, Any]]) -> None:
469469
# The contract's RequestInfo.responseTimeout is the
470470
# authoritative timeout; this local stamp is the proxy the
471471
# mech uses to decide when to emit a request-only event
472-
# to the wildcard data lake. See
472+
# to the predict-api data lake. See
473473
# ``autonolas-marketplace/docs/onchain_write_path_scope.md``
474474
# §3.2 for the design.
475475
req.setdefault("enqueued_at_local", time.time())

0 commit comments

Comments
 (0)