prediction-market-agent-tooling 0.65.9__py3-none-any.whl → 0.65.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,11 +9,17 @@ from cowdao_cowpy.common.api.errors import UnexpectedResponseError
9
9
  from cowdao_cowpy.common.chains import Chain
10
10
  from cowdao_cowpy.common.config import SupportedChainId
11
11
  from cowdao_cowpy.common.constants import CowContractAddress
12
+ from cowdao_cowpy.contracts.domain import domain
13
+ from cowdao_cowpy.contracts.sign import SigningScheme, sign_order_cancellations
12
14
  from cowdao_cowpy.cow.swap import CompletedOrder, get_order_quote, swap_tokens
13
15
  from cowdao_cowpy.order_book.api import OrderBookApi
14
16
  from cowdao_cowpy.order_book.config import Envs, OrderBookAPIConfigFactory
15
17
  from cowdao_cowpy.order_book.generated.model import (
18
+ UID,
16
19
  Address,
20
+ EcdsaSignature,
21
+ EcdsaSigningScheme,
22
+ OrderCancellations,
17
23
  OrderMetaData,
18
24
  OrderQuoteRequest,
19
25
  OrderQuoteResponse,
@@ -24,6 +30,9 @@ from cowdao_cowpy.order_book.generated.model import (
24
30
  OrderStatus,
25
31
  TokenAmount,
26
32
  )
33
+ from eth_account import Account
34
+ from eth_account.signers.local import LocalAccount
35
+ from eth_keys.datatypes import PrivateKey as eth_keys_PrivateKey
27
36
  from tenacity import (
28
37
  retry_if_not_exception_type,
29
38
  stop_after_attempt,
@@ -33,7 +42,13 @@ from tenacity import (
33
42
  from web3 import Web3
34
43
 
35
44
  from prediction_market_agent_tooling.config import APIKeys
36
- from prediction_market_agent_tooling.gtypes import ChecksumAddress, HexBytes, Wei
45
+ from prediction_market_agent_tooling.gtypes import (
46
+ ChecksumAddress,
47
+ HexBytes,
48
+ HexStr,
49
+ PrivateKey,
50
+ Wei,
51
+ )
37
52
  from prediction_market_agent_tooling.loggers import logger
38
53
  from prediction_market_agent_tooling.markets.omen.cow_contracts import (
39
54
  CowGPv2SettlementContract,
@@ -153,21 +168,12 @@ def get_buy_token_amount_else_raise(
153
168
  return Wei(order_quote.quote.buyAmount.root)
154
169
 
155
170
 
156
- @tenacity.retry(
157
- stop=stop_after_attempt(3),
158
- wait=wait_fixed(1),
159
- retry=tenacity.retry_if_not_exception_type((TimeoutError, OrderStatusError)),
160
- after=lambda x: logger.debug(f"swap_tokens_waiting failed, {x.attempt_number=}."),
161
- )
162
- def swap_tokens_waiting(
163
- amount_wei: Wei,
164
- sell_token: ChecksumAddress,
165
- buy_token: ChecksumAddress,
171
+ def handle_allowance(
166
172
  api_keys: APIKeys,
167
- chain: Chain = Chain.GNOSIS,
168
- env: Envs = "prod",
173
+ sell_token: ChecksumAddress,
174
+ amount_wei: Wei,
169
175
  web3: Web3 | None = None,
170
- ) -> OrderMetaData:
176
+ ) -> None:
171
177
  # Approve the CoW Swap Vault Relayer to get the sell token only if allowance not sufficient.
172
178
  for_address = Web3.to_checksum_address(CowContractAddress.VAULT_RELAYER.value)
173
179
  current_allowance = ContractERC20OnGnosisChain(address=sell_token).allowance(
@@ -183,24 +189,47 @@ def swap_tokens_waiting(
183
189
  web3=web3,
184
190
  )
185
191
 
192
+
193
+ @tenacity.retry(
194
+ stop=stop_after_attempt(3),
195
+ wait=wait_fixed(1),
196
+ retry=tenacity.retry_if_not_exception_type((TimeoutError, OrderStatusError)),
197
+ after=lambda x: logger.debug(f"swap_tokens_waiting failed, {x.attempt_number=}."),
198
+ )
199
+ def swap_tokens_waiting(
200
+ amount_wei: Wei,
201
+ sell_token: ChecksumAddress,
202
+ buy_token: ChecksumAddress,
203
+ api_keys: APIKeys,
204
+ chain: Chain = Chain.GNOSIS,
205
+ env: Envs = "prod",
206
+ web3: Web3 | None = None,
207
+ wait_order_complete: bool = True,
208
+ ) -> tuple[OrderMetaData | None, CompletedOrder]:
186
209
  # CoW library uses async, so we need to wrap the call in asyncio.run for us to use it.
187
210
  return asyncio.run(
188
211
  swap_tokens_waiting_async(
189
- amount_wei, sell_token, buy_token, api_keys, chain, env
212
+ amount_wei,
213
+ sell_token,
214
+ buy_token,
215
+ api_keys,
216
+ chain,
217
+ env,
218
+ web3=web3,
219
+ wait_order_complete=wait_order_complete,
190
220
  )
191
221
  )
192
222
 
193
223
 
194
- async def swap_tokens_waiting_async(
224
+ async def place_swap_order(
225
+ api_keys: APIKeys,
195
226
  amount_wei: Wei,
196
227
  sell_token: ChecksumAddress,
197
228
  buy_token: ChecksumAddress,
198
- api_keys: APIKeys,
199
229
  chain: Chain,
200
230
  env: Envs,
201
- timeout: timedelta = timedelta(seconds=120),
202
231
  slippage_tolerance: float = 0.01,
203
- ) -> OrderMetaData:
232
+ ) -> CompletedOrder:
204
233
  account = api_keys.get_account()
205
234
  safe_address = api_keys.safe_address_checksum
206
235
 
@@ -220,6 +249,12 @@ async def swap_tokens_waiting_async(
220
249
  logger.info(f"Safe is used. Signing the order after its creation.")
221
250
  await sign_safe_cow_swap(api_keys, order, chain, env)
222
251
 
252
+ return order
253
+
254
+
255
+ async def wait_for_order_completion(
256
+ order: CompletedOrder, timeout: timedelta = timedelta(seconds=120)
257
+ ) -> OrderMetaData:
223
258
  start_time = utcnow()
224
259
 
225
260
  while True:
@@ -249,6 +284,36 @@ async def swap_tokens_waiting_async(
249
284
  await asyncio.sleep(3.14)
250
285
 
251
286
 
287
+ async def swap_tokens_waiting_async(
288
+ amount_wei: Wei,
289
+ sell_token: ChecksumAddress,
290
+ buy_token: ChecksumAddress,
291
+ api_keys: APIKeys,
292
+ chain: Chain,
293
+ env: Envs,
294
+ timeout: timedelta = timedelta(seconds=120),
295
+ slippage_tolerance: float = 0.01,
296
+ web3: Web3 | None = None,
297
+ wait_order_complete: bool = True,
298
+ ) -> tuple[OrderMetaData | None, CompletedOrder]:
299
+ handle_allowance(
300
+ api_keys=api_keys, sell_token=sell_token, amount_wei=amount_wei, web3=web3
301
+ )
302
+ order = await place_swap_order(
303
+ api_keys=api_keys,
304
+ amount_wei=amount_wei,
305
+ sell_token=sell_token,
306
+ buy_token=buy_token,
307
+ chain=chain,
308
+ env=env,
309
+ slippage_tolerance=slippage_tolerance,
310
+ )
311
+ if wait_order_complete:
312
+ order_metadata = await wait_for_order_completion(order=order, timeout=timeout)
313
+ return order_metadata, order
314
+ return None, order
315
+
316
+
252
317
  @tenacity.retry(
253
318
  stop=tenacity.stop_after_attempt(3),
254
319
  wait=tenacity.wait_fixed(1),
@@ -323,3 +388,33 @@ def paginate_endpoint(url: str, limit: int = 1000) -> t.Any:
323
388
  offset += limit
324
389
 
325
390
  return results
391
+
392
+
393
+ async def cancel_order(
394
+ order_uids: t.Sequence[str],
395
+ api_keys: APIKeys,
396
+ chain: Chain = Chain.GNOSIS,
397
+ env: Envs = "prod",
398
+ ) -> None:
399
+ """Cancels orders that were created by the user corresponding to the api_keys.."""
400
+ order_domain = domain(
401
+ chain=chain, verifying_contract=CowContractAddress.SETTLEMENT_CONTRACT.value
402
+ )
403
+ owner = build_account(api_keys.bet_from_private_key)
404
+ order_signature = sign_order_cancellations(
405
+ order_domain, list(order_uids), owner, SigningScheme.EIP712
406
+ )
407
+ oc = OrderCancellations(
408
+ signature=EcdsaSignature(root=order_signature.data),
409
+ orderUids=[UID(root=order_uid) for order_uid in order_uids],
410
+ signingScheme=EcdsaSigningScheme.eip712,
411
+ )
412
+ order_book_api = get_order_book_api(env, chain)
413
+ await order_book_api.delete_order(orders_cancelation=oc)
414
+
415
+
416
+ def build_account(private_key: PrivateKey) -> LocalAccount:
417
+ return LocalAccount(
418
+ key=eth_keys_PrivateKey(HexBytes(HexStr(private_key.get_secret_value()))),
419
+ account=Account.from_key(private_key.get_secret_value()),
420
+ )
@@ -67,17 +67,23 @@ def unwrap_generic_value(value: Any) -> Any:
67
67
  return value.value
68
68
  elif isinstance(value, list):
69
69
  return [unwrap_generic_value(v) for v in value]
70
+ elif isinstance(value, tuple):
71
+ return tuple(unwrap_generic_value(v) for v in value)
70
72
  elif isinstance(value, dict):
71
73
  return {k: unwrap_generic_value(v) for k, v in value.items()}
72
74
  return value
73
75
 
74
76
 
75
- def parse_function_params(params: Optional[list[Any] | dict[str, Any]]) -> list[Any]:
77
+ def parse_function_params(
78
+ params: Optional[list[Any] | tuple[Any] | dict[str, Any]]
79
+ ) -> list[Any] | tuple[Any]:
76
80
  params = unwrap_generic_value(params)
77
81
  if params is None:
78
82
  return []
79
83
  if isinstance(params, list):
80
- return params
84
+ return [unwrap_generic_value(i) for i in params]
85
+ if isinstance(params, tuple):
86
+ return tuple(unwrap_generic_value(i) for i in params)
81
87
  if isinstance(params, dict):
82
88
  return list(params.values())
83
89
  raise ValueError(f"Invalid type for function parameters: {type(params)}")
@@ -117,8 +123,8 @@ def prepare_tx(
117
123
 
118
124
  # Build the transaction.
119
125
  function_call = contract.functions[function_name](*parse_function_params(function_params)) # type: ignore # TODO: Fix Mypy, as this works just OK.
120
- tx_params_new = function_call.build_transaction(tx_params_new)
121
- return tx_params_new
126
+ built_tx_params: TxParams = function_call.build_transaction(tx_params_new)
127
+ return built_tx_params
122
128
 
123
129
 
124
130
  def _prepare_tx_params(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.65.9
3
+ Version: 0.65.11
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -18,12 +18,14 @@ prediction_market_agent_tooling/abis/ownable_erc721.abi.json,sha256=9sxm588MAQmq
18
18
  prediction_market_agent_tooling/abis/proxy.abi.json,sha256=h24GXZ6Q0bSZlwh7zOv0EiDvbqUz_PHtWfKHTyPJ1w4,644
19
19
  prediction_market_agent_tooling/abis/seer_gnosis_router.abi.json,sha256=DyADzOXhy9MDS31ReVrG7ibpWbw1jVy19nExZ80xfRY,6839
20
20
  prediction_market_agent_tooling/abis/seer_market_factory.abi.json,sha256=g7RVxZVUWlTXIgTV2W6kO4twQM909Qv58zAr7Dk4XIc,13553
21
+ prediction_market_agent_tooling/abis/swapr_router.abi.json,sha256=Y1wK20D1-zdbdlzkzV0BHY-HXMJrog6dgSHEzKzrQOU,13346
21
22
  prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
23
  prediction_market_agent_tooling/benchmark/agents.py,sha256=zC5tUM6pPTWtqSddOOSYV_fxHYmZb5uGAb4Ru87Tah8,4221
23
- prediction_market_agent_tooling/benchmark/benchmark.py,sha256=KwMZzwise3sgmhdjw7xCgHMmjKHdHqQC-zc9untOLWg,17832
24
+ prediction_market_agent_tooling/benchmark/benchmark.py,sha256=hpIpjjePDFTLhK841sGftFbhu8bDDZr28KO4VTneewM,17837
24
25
  prediction_market_agent_tooling/benchmark/utils.py,sha256=xQd7p9H08-OtN3iC4QT2i9bkUTmrXa6rxGXeg9yMhgU,2986
25
26
  prediction_market_agent_tooling/chains.py,sha256=1qQstoqXMwqwM7k-KH7MjMz8Ei-D83KZByvDbCZpAxs,116
26
27
  prediction_market_agent_tooling/config.py,sha256=-kJfdDr-m0R-tGZ1KRI-hJJk0mXDt142CAlvwaJ2N2I,11778
28
+ prediction_market_agent_tooling/data_download/langfuse_data_downloader.py,sha256=EOtFKEtljwts1ftkcSN_i9Wk8jbfnhMehPRC63BU7l0,8842
27
29
  prediction_market_agent_tooling/deploy/agent.py,sha256=ONuXYe9zRO37lzume5z-2hPKTBrCljBg5OD_38gNRc0,25289
28
30
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=yS1fWkHynr9MYGNOM2WsCnRWLPaffY4bOc6bIudrdd4,1377
29
31
  prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=YYayGjTKW02d3BUavJ8M3NmFk41oldEM3FHbwppZGRM,17184
@@ -36,7 +38,7 @@ prediction_market_agent_tooling/gtypes.py,sha256=bUIZfZIGvIi3aiZNu5rVE9kRevw8sfM
36
38
  prediction_market_agent_tooling/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
39
  prediction_market_agent_tooling/jobs/jobs_models.py,sha256=DoZ9dlvVhpNrnINiR1uy6YUOsuzI_L-avBt362y5xXM,2467
38
40
  prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=qbTZ9HVvu_iP4dDxuvOZxAp6JsRKejvEW2YDYCnRmd4,5039
39
- prediction_market_agent_tooling/loggers.py,sha256=kFZ1BrI8hvWgZO1vzptFnYiOEDx9Ozs86DA9yF3bSgY,5212
41
+ prediction_market_agent_tooling/loggers.py,sha256=7hNsTbH0K9wjOaUZu4xtuIBCVlrfbP8b8eiea8uNUgs,5762
40
42
  prediction_market_agent_tooling/logprobs_parser.py,sha256=DBlBQtWX8_URXhzTU3YWIPa76Zx3QDHlx1ARqbgJsVI,5008
41
43
  prediction_market_agent_tooling/markets/agent_market.py,sha256=pnyxTMUrL8cQsP4lmBBpe07R-Mi7S4vNjrvNLdOzAa8,19258
42
44
  prediction_market_agent_tooling/markets/base_subgraph_handler.py,sha256=7RaYO_4qAmQ6ZGM8oPK2-CkiJfKmV9MxM-rJlduaecU,1971
@@ -59,20 +61,21 @@ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=0jCxgUEVpaggt
59
61
  prediction_market_agent_tooling/markets/omen/omen.py,sha256=q3SqvQEpZAsbFBbSid_rhRn-hVi-roCRN4piGj2wxU8,50301
60
62
  prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=D9oflYKafLQiHYtB5sScMHqmXyzM8JP8J0yATmc4SQQ,233
61
63
  prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=f0dKbdVM2OUTSpkCSZdPtKqeckS2c48j3rjnK8oD3wE,29716
62
- prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=_9FjpH-y_yDwua2-mZ0Iop49cRBs2m7w-Z1s3mOofFk,10848
64
+ prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=D-ubf_LumHs_c5rBAAntQ8wGKprtO2V1JZeedmChNIE,11035
63
65
  prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=149T_tJxK2GFnGCulOlGr2Mwiaa7sa74E4lqYsuCv68,39962
64
66
  prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
65
67
  prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=U1SXTz93FIG3GO1h5BJWSt1hPKn_YAMBeZ3k8IS-ook,4552
66
68
  prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=wCwpZ8Kppy8JG_1HZDfEK_Gg1g1sL7NCbGoPeTeMSko,12756
67
69
  prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=meAhQ5_gwVDvlSxhGGVAvRB7B47zKLnRvZ-_13tKtwY,3433
68
70
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=8kTeVjXPcXC6DkDvWYsZQLY7x8DS6CEp_yznSEazsNU,2037
69
- prediction_market_agent_tooling/markets/seer/data_models.py,sha256=G0i-fnVaK16KWDYVI6w3lvyte6Op7ca_iIC8IfrXmlM,4702
71
+ prediction_market_agent_tooling/markets/seer/data_models.py,sha256=osM9WaLsxQf-pfVGq0O-IkM93ehP9a7fVUf-hi2VlMs,5523
70
72
  prediction_market_agent_tooling/markets/seer/exceptions.py,sha256=cEObdjluivD94tgOLzmimR7wgQEOt6SRakrYdhsRQtk,112
71
73
  prediction_market_agent_tooling/markets/seer/price_manager.py,sha256=MClY2NGwOV70nZYIcmzXFy6Ogd8NBIq7telQcQ3VcU4,6243
72
- prediction_market_agent_tooling/markets/seer/seer.py,sha256=IsFK8XXjHq8UBvIkueiWpm_b3ddMslr84DqF_qNFQw0,21745
73
- prediction_market_agent_tooling/markets/seer/seer_contracts.py,sha256=kH9nPXsx6UM5er42g2f3fLvy36sY5JM2f_beXeuNgUc,3790
74
+ prediction_market_agent_tooling/markets/seer/seer.py,sha256=_2Ld3EepmZuzpgAmW6f7eAS5-geXE25XgUKPUrFCWoI,23864
75
+ prediction_market_agent_tooling/markets/seer/seer_contracts.py,sha256=uMzpHpI6_tgfhWxPzupLdUJlZ1P2wr0rRiYjAGClKgU,4984
74
76
  prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=pJxch9_u0EdiIatQP1-UFClt8UEfMZAXBlk5wDO_ovk,9940
75
77
  prediction_market_agent_tooling/markets/seer/subgraph_data_models.py,sha256=0izxS8Mtzonfdl9UqvFVXrdj0hVzieroekXhogfZKCw,1817
78
+ prediction_market_agent_tooling/markets/seer/swap_pool_handler.py,sha256=y0pDL2BoxayROy3warEN3r8Fs3rPCPPZ191bgrgZikg,3403
76
79
  prediction_market_agent_tooling/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
80
  prediction_market_agent_tooling/tools/_generic_value.py,sha256=pD_PI13lpPp1gFoljHwa_Lzlp-u2pu0m-Z7LcxwDM2U,10618
78
81
  prediction_market_agent_tooling/tools/balances.py,sha256=Osab21btfJDw2Y-jT_TV-KHGrseCRxcsYeW6WcOMB8E,1050
@@ -84,7 +87,7 @@ prediction_market_agent_tooling/tools/caches/inmemory_cache.py,sha256=ZW5iI5rmjq
84
87
  prediction_market_agent_tooling/tools/caches/serializers.py,sha256=vFDx4fsPxclXp2q0sv27j4al_M_Tj9aR2JJP-xNHQXA,2151
85
88
  prediction_market_agent_tooling/tools/contract.py,sha256=pdr9ZYmj4QVUfgVKdvOU6ucYdBpJGdha_FMR_LgtcEs,22912
86
89
  prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
87
- prediction_market_agent_tooling/tools/cow/cow_order.py,sha256=KpklYy5DY3j-aIlf6dB_o0mEX4MD3fqMiZK3tJs5Gro,10129
90
+ prediction_market_agent_tooling/tools/cow/cow_order.py,sha256=yTUG6VPVe292R_5IG8F90kfZfAeun8G1TL6mHsnaXM0,12984
88
91
  prediction_market_agent_tooling/tools/cow/models.py,sha256=ZWGW0og5vXjgZVXxkx4uV2m61Q8AmL-L-D_D4f7ApR0,379
89
92
  prediction_market_agent_tooling/tools/custom_exceptions.py,sha256=Fh8z1fbwONvP4-j7AmV_PuEcoqb6-QXa9PJ9m7guMcM,93
90
93
  prediction_market_agent_tooling/tools/datetime_utc.py,sha256=8_WackjtjC8zHXrhQFTGQ6e6Fz_6llWoKR4CSFvIv9I,2766
@@ -120,9 +123,9 @@ prediction_market_agent_tooling/tools/tokens/token_utils.py,sha256=fhs-FH9m9IbzG
120
123
  prediction_market_agent_tooling/tools/tokens/usd.py,sha256=yuW8iPPtcpP4eLH2nORMDAfztcq0Nv2ascSrCquF1f8,3115
121
124
  prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
122
125
  prediction_market_agent_tooling/tools/utils.py,sha256=RlWSlzS2LavMIWrpwn1fevbzgPZruD4VcXTa-XxjWnE,7343
123
- prediction_market_agent_tooling/tools/web3_utils.py,sha256=zRq-eeBGWt8uUGN9G_WfjmJ0eVvO8aWE9S0Pz_Y6AOA,12342
124
- prediction_market_agent_tooling-0.65.9.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
125
- prediction_market_agent_tooling-0.65.9.dist-info/METADATA,sha256=fwrbaHBiT91jMhqYkTWJ-vPB2dav-bxrgqfV7oDjGHY,8734
126
- prediction_market_agent_tooling-0.65.9.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
127
- prediction_market_agent_tooling-0.65.9.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
128
- prediction_market_agent_tooling-0.65.9.dist-info/RECORD,,
126
+ prediction_market_agent_tooling/tools/web3_utils.py,sha256=0r26snqCXGdLKCWA8jpe7DV8x2NPYWZwOy4oyKyDCYk,12615
127
+ prediction_market_agent_tooling-0.65.11.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
128
+ prediction_market_agent_tooling-0.65.11.dist-info/METADATA,sha256=Sae7uwTRaQX3tZx71Sp-ecNMBF81BgIj5i2TZOGXAmU,8735
129
+ prediction_market_agent_tooling-0.65.11.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
130
+ prediction_market_agent_tooling-0.65.11.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
131
+ prediction_market_agent_tooling-0.65.11.dist-info/RECORD,,