prediction-market-agent-tooling 0.60.1.dev424__py3-none-any.whl → 0.60.2__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.
@@ -3,13 +3,13 @@ import typing as t
3
3
  from copy import deepcopy
4
4
 
5
5
  from eth_account.signers.local import LocalAccount
6
- from pydantic import Field, model_validator
6
+ from pydantic import BeforeValidator, Field, model_validator
7
7
  from pydantic.types import SecretStr
8
8
  from pydantic.v1.types import SecretStr as SecretStrV1
9
9
  from pydantic_settings import BaseSettings, SettingsConfigDict
10
10
  from safe_eth.eth import EthereumClient
11
11
  from safe_eth.safe.safe import SafeV141
12
- from web3 import Account
12
+ from web3 import Account, Web3
13
13
 
14
14
  from prediction_market_agent_tooling.deploy.gcp.utils import gcp_get_secret_value
15
15
  from prediction_market_agent_tooling.gtypes import (
@@ -39,7 +39,10 @@ class APIKeys(BaseSettings):
39
39
  METACULUS_API_KEY: t.Optional[SecretStr] = None
40
40
  METACULUS_USER_ID: t.Optional[int] = None
41
41
  BET_FROM_PRIVATE_KEY: t.Optional[PrivateKey] = None
42
- SAFE_ADDRESS: t.Optional[ChecksumAddress] = None
42
+ SAFE_ADDRESS: t.Annotated[
43
+ ChecksumAddress | None,
44
+ BeforeValidator(lambda x: x if x is None else Web3.to_checksum_address(x)),
45
+ ] = None
43
46
  OPENAI_API_KEY: t.Optional[SecretStr] = None
44
47
  GRAPH_API_KEY: t.Optional[SecretStr] = None
45
48
  TENDERLY_FORK_RPC: t.Optional[str] = None
@@ -91,6 +94,14 @@ class APIKeys(BaseSettings):
91
94
  raise ValueError("Data must be a dictionary.")
92
95
  return data
93
96
 
97
+ def copy_without_safe_address(self) -> "APIKeys":
98
+ """
99
+ This is handy when you operate in environment with SAFE_ADDRESS, but need to execute transaction using EOA.
100
+ """
101
+ data = self.model_copy(deep=True)
102
+ data.SAFE_ADDRESS = None
103
+ return data
104
+
94
105
  @property
95
106
  def manifold_user_id(self) -> str:
96
107
  return get_authenticated_user(
@@ -30,7 +30,7 @@ from prediction_market_agent_tooling.deploy.trade_interval import (
30
30
  FixedInterval,
31
31
  TradeInterval,
32
32
  )
33
- from prediction_market_agent_tooling.gtypes import xDai, xdai_type
33
+ from prediction_market_agent_tooling.gtypes import xDai
34
34
  from prediction_market_agent_tooling.loggers import logger
35
35
  from prediction_market_agent_tooling.markets.agent_market import (
36
36
  AgentMarket,
@@ -50,7 +50,7 @@ from prediction_market_agent_tooling.markets.markets import (
50
50
  have_bet_on_market_since,
51
51
  )
52
52
  from prediction_market_agent_tooling.markets.omen.omen import (
53
- withdraw_wxdai_to_xdai_to_keep_balance,
53
+ send_keeping_token_to_eoa_xdai,
54
54
  )
55
55
  from prediction_market_agent_tooling.monitor.monitor_app import (
56
56
  MARKET_TYPE_TO_DEPLOYED_AGENT,
@@ -62,6 +62,9 @@ from prediction_market_agent_tooling.tools.custom_exceptions import (
62
62
  from prediction_market_agent_tooling.tools.is_invalid import is_invalid
63
63
  from prediction_market_agent_tooling.tools.is_predictable import is_predictable_binary
64
64
  from prediction_market_agent_tooling.tools.langfuse_ import langfuse_context, observe
65
+ from prediction_market_agent_tooling.tools.tokens.main_token import (
66
+ MINIMUM_NATIVE_TOKEN_IN_EOA_FOR_FEES,
67
+ )
65
68
  from prediction_market_agent_tooling.tools.utils import DatetimeUTC, utcnow
66
69
 
67
70
  MAX_AVAILABLE_MARKETS = 1000
@@ -289,7 +292,9 @@ class DeployablePredictionAgent(DeployableAgent):
289
292
  allow_invalid_questions: bool = False
290
293
  same_market_trade_interval: TradeInterval = FixedInterval(timedelta(hours=24))
291
294
 
292
- min_balance_to_keep_in_native_currency: xDai | None = xdai_type(0.1)
295
+ min_balance_to_keep_in_native_currency: xDai | None = (
296
+ MINIMUM_NATIVE_TOKEN_IN_EOA_FOR_FEES
297
+ )
293
298
 
294
299
  # Only Metaculus allows to post predictions without trading (buying/selling of outcome tokens).
295
300
  supported_markets: t.Sequence[MarketType] = [MarketType.METACULUS]
@@ -416,10 +421,10 @@ class DeployablePredictionAgent(DeployableAgent):
416
421
  if market_type.is_blockchain_market:
417
422
  # Exchange wxdai back to xdai if the balance is getting low, so we can keep paying for fees.
418
423
  if self.min_balance_to_keep_in_native_currency is not None:
419
- withdraw_wxdai_to_xdai_to_keep_balance(
424
+ send_keeping_token_to_eoa_xdai(
420
425
  api_keys,
421
426
  min_required_balance=self.min_balance_to_keep_in_native_currency,
422
- withdraw_multiplier=2,
427
+ multiplier=3,
423
428
  )
424
429
 
425
430
  def process_market(
@@ -1315,41 +1315,77 @@ def get_binary_market_p_yes_history(market: OmenAgentMarket) -> list[Probability
1315
1315
  return history
1316
1316
 
1317
1317
 
1318
- def withdraw_wxdai_to_xdai_to_keep_balance(
1318
+ def send_keeping_token_to_eoa_xdai(
1319
1319
  api_keys: APIKeys,
1320
1320
  min_required_balance: xDai,
1321
- withdraw_multiplier: float = 1.0,
1321
+ multiplier: float = 1.0,
1322
1322
  web3: Web3 | None = None,
1323
1323
  ) -> None:
1324
1324
  """
1325
- Keeps xDai balance above the minimum required balance by withdrawing wxDai to xDai.
1326
- Optionally, the amount to withdraw can be multiplied by the `withdraw_multiplier`, which can be useful to keep a buffer.
1325
+ Keeps xDai balance above the minimum required balance by transfering keeping token to xDai.
1326
+ Optionally, the amount to transfer can be multiplied by the `multiplier`, which can be useful to keep a buffer.
1327
1327
  """
1328
- # xDai needs to be in our wallet where we pay transaction fees, so do not check for Safe's balance.
1329
- current_balances = get_balances(api_keys.public_key, web3)
1328
+ # Only wxDai can be withdrawn to xDai. Anything else needs to be swapped to wxDai first.
1329
+ wxdai_contract = WrappedxDaiContract()
1330
+
1331
+ if KEEPING_ERC20_TOKEN.address != wxdai_contract.address:
1332
+ raise RuntimeError(
1333
+ "Only wxDai can be withdrawn to xDai. Rest is not implemented for simplicity for now. It would require trading using CoW, or double withdrawing from sDai"
1334
+ )
1330
1335
 
1331
- if current_balances.xdai >= min_required_balance:
1336
+ current_balances_eoa = get_balances(api_keys.public_key, web3)
1337
+ current_balances_betting = get_balances(api_keys.bet_from_address, web3)
1338
+
1339
+ # xDai needs to be in our wallet where we pay transaction fees, so do not check for Safe's balance here, but for EOA.
1340
+ if current_balances_eoa.xdai >= min_required_balance:
1332
1341
  logger.info(
1333
- f"Current xDai balance {current_balances.xdai} is more or equal than the required minimum balance {min_required_balance}."
1342
+ f"Current xDai balance {current_balances_eoa.xdai} is more or equal than the required minimum balance {min_required_balance}."
1334
1343
  )
1335
1344
  return
1336
1345
 
1337
1346
  need_to_withdraw = xDai(
1338
- (min_required_balance - current_balances.xdai) * withdraw_multiplier
1347
+ (min_required_balance - current_balances_eoa.xdai) * multiplier
1339
1348
  )
1349
+ need_to_withdraw_wei = xdai_to_wei(need_to_withdraw)
1340
1350
 
1341
- if current_balances.wxdai < need_to_withdraw:
1342
- raise OutOfFundsError(
1343
- f"Current wxDai balance {current_balances.wxdai} is less than the required minimum wxDai to withdraw {need_to_withdraw}."
1351
+ if current_balances_eoa.wxdai >= need_to_withdraw:
1352
+ # If EOA has enough of wxDai, simply withdraw it.
1353
+ logger.info(
1354
+ f"Withdrawing {need_to_withdraw} wxDai from EOA to keep the EOA's xDai balance above the minimum required balance {min_required_balance}."
1355
+ )
1356
+ wxdai_contract.withdraw(
1357
+ api_keys=api_keys.copy_without_safe_address(),
1358
+ amount_wei=need_to_withdraw_wei,
1359
+ web3=web3,
1344
1360
  )
1345
1361
 
1346
- wxdai_contract = WrappedxDaiContract()
1347
- wxdai_contract.withdraw(
1348
- api_keys=api_keys, amount_wei=xdai_to_wei(need_to_withdraw), web3=web3
1349
- )
1350
- logger.info(
1351
- f"Withdrew {need_to_withdraw} wxDai to keep the balance above the minimum required balance {min_required_balance}."
1352
- )
1362
+ elif current_balances_betting.wxdai >= need_to_withdraw:
1363
+ # If Safe has enough of wxDai:
1364
+ # First send them to EOA's address.
1365
+ logger.info(
1366
+ f"Transfering {need_to_withdraw} wxDai from betting address to EOA's address."
1367
+ )
1368
+ wxdai_contract.transferFrom(
1369
+ api_keys=api_keys,
1370
+ sender=api_keys.bet_from_address,
1371
+ recipient=api_keys.public_key,
1372
+ amount_wei=need_to_withdraw_wei,
1373
+ web3=web3,
1374
+ )
1375
+ # And then simply withdraw it.
1376
+ logger.info(
1377
+ f"Withdrawing {need_to_withdraw} wxDai from EOA to keep the EOA's xDai balance above the minimum required balance {min_required_balance}."
1378
+ )
1379
+ wxdai_contract.withdraw(
1380
+ api_keys=api_keys.copy_without_safe_address(),
1381
+ amount_wei=need_to_withdraw_wei,
1382
+ web3=web3,
1383
+ )
1384
+
1385
+ else:
1386
+ raise OutOfFundsError(
1387
+ f"Current wxDai balance ({current_balances_eoa=}, {current_balances_betting=}) is less than the required minimum wxDai to withdraw {need_to_withdraw}."
1388
+ )
1353
1389
 
1354
1390
 
1355
1391
  def get_buy_outcome_token_amount(
@@ -18,6 +18,9 @@ from prediction_market_agent_tooling.markets.omen.data_models import (
18
18
  OmenMarket,
19
19
  RealityQuestion,
20
20
  )
21
+ from prediction_market_agent_tooling.markets.omen.omen import (
22
+ send_keeping_token_to_eoa_xdai,
23
+ )
21
24
  from prediction_market_agent_tooling.markets.omen.omen_contracts import (
22
25
  OmenOracleContract,
23
26
  OmenRealitioContract,
@@ -25,11 +28,15 @@ from prediction_market_agent_tooling.markets.omen.omen_contracts import (
25
28
  from prediction_market_agent_tooling.markets.omen.omen_subgraph_handler import (
26
29
  OmenSubgraphHandler,
27
30
  )
31
+ from prediction_market_agent_tooling.tools.tokens.main_token import (
32
+ MINIMUM_NATIVE_TOKEN_IN_EOA_FOR_FEES,
33
+ )
28
34
  from prediction_market_agent_tooling.tools.utils import utcnow
29
35
  from prediction_market_agent_tooling.tools.web3_utils import (
30
36
  ZERO_BYTES,
31
37
  wei_to_xdai,
32
38
  xdai_to_wei,
39
+ xdai_type,
33
40
  )
34
41
 
35
42
 
@@ -139,6 +146,16 @@ def finalize_markets(
139
146
  logger.info(
140
147
  f"[{idx+1} / {len(markets_with_resolutions)}] Looking into {market.url=} {market.question_title=}"
141
148
  )
149
+
150
+ # If we don't have enough of xDai for bond, try to get it from the keeping token.
151
+ send_keeping_token_to_eoa_xdai(
152
+ api_keys=api_keys,
153
+ min_required_balance=xdai_type(
154
+ realitio_bond + MINIMUM_NATIVE_TOKEN_IN_EOA_FOR_FEES
155
+ ),
156
+ web3=web3,
157
+ )
158
+
142
159
  closed_before_days = (utcnow() - market.close_time).days
143
160
 
144
161
  if resolution is None:
@@ -22,10 +22,7 @@ from prediction_market_agent_tooling.markets.agent_market import (
22
22
  ProcessedTradedMarket,
23
23
  SortBy,
24
24
  )
25
- from prediction_market_agent_tooling.markets.blockchain_utils import (
26
- get_total_balance,
27
- store_trades,
28
- )
25
+ from prediction_market_agent_tooling.markets.blockchain_utils import store_trades
29
26
  from prediction_market_agent_tooling.markets.data_models import (
30
27
  BetAmount,
31
28
  Currency,
@@ -167,11 +164,7 @@ class SeerAgentMarket(AgentMarket):
167
164
 
168
165
  @staticmethod
169
166
  def verify_operational_balance(api_keys: APIKeys) -> bool:
170
- return get_total_balance(
171
- api_keys.public_key,
172
- # Use `public_key`, not `bet_from_address` because transaction costs are paid from the EOA wallet.
173
- sum_wxdai=False,
174
- ) > xdai_type(0.001)
167
+ return OmenAgentMarket.verify_operational_balance(api_keys=api_keys)
175
168
 
176
169
  @staticmethod
177
170
  def from_data_model(model: SeerMarket) -> "SeerAgentMarket":
@@ -18,6 +18,7 @@ import psycopg2
18
18
  from pydantic import BaseModel
19
19
  from sqlalchemy import Column
20
20
  from sqlalchemy.dialects.postgresql import JSONB
21
+ from sqlalchemy.exc import DataError
21
22
  from sqlmodel import Field, SQLModel, desc, select
22
23
 
23
24
  from prediction_market_agent_tooling.config import APIKeys
@@ -51,6 +52,7 @@ def db_cache(
51
52
  api_keys: APIKeys | None = None,
52
53
  ignore_args: Sequence[str] | None = None,
53
54
  ignore_arg_types: Sequence[type] | None = None,
55
+ log_error_on_unsavable_data: bool = True,
54
56
  ) -> Callable[[FunctionT], FunctionT]:
55
57
  ...
56
58
 
@@ -64,6 +66,7 @@ def db_cache(
64
66
  api_keys: APIKeys | None = None,
65
67
  ignore_args: Sequence[str] | None = None,
66
68
  ignore_arg_types: Sequence[type] | None = None,
69
+ log_error_on_unsavable_data: bool = True,
67
70
  ) -> FunctionT:
68
71
  ...
69
72
 
@@ -76,6 +79,7 @@ def db_cache(
76
79
  api_keys: APIKeys | None = None,
77
80
  ignore_args: Sequence[str] | None = None,
78
81
  ignore_arg_types: Sequence[type] | None = None,
82
+ log_error_on_unsavable_data: bool = True,
79
83
  ) -> FunctionT | Callable[[FunctionT], FunctionT]:
80
84
  if func is None:
81
85
  # Ugly Pythonic way to support this decorator as `@postgres_cache` but also `@postgres_cache(max_age=timedelta(days=3))`
@@ -209,8 +213,8 @@ def db_cache(
209
213
  logger.info(f"Saving {cache_entry} into database.")
210
214
  session.add(cache_entry)
211
215
  session.commit()
212
- except psycopg2.errors.UntranslatableCharacter as e:
213
- logger.warning(
216
+ except (DataError, psycopg2.errors.UntranslatableCharacter) as e:
217
+ (logger.error if log_error_on_unsavable_data else logger.warning)(
214
218
  f"Failed to save {cache_entry} into database, ignoring, because: {e}"
215
219
  )
216
220
  except Exception:
@@ -14,7 +14,11 @@ from prediction_market_agent_tooling.tools.tavily.tavily_models import (
14
14
  DEFAULT_SCORE_THRESHOLD = 0.75 # Based on some empirical testing, anything lower wasn't very relevant to the question being asked
15
15
 
16
16
 
17
- @db_cache(max_age=timedelta(days=1), ignore_args=["api_keys"])
17
+ @db_cache(
18
+ max_age=timedelta(days=1),
19
+ ignore_args=["api_keys"],
20
+ log_error_on_unsavable_data=False,
21
+ )
18
22
  def tavily_search(
19
23
  query: str,
20
24
  search_depth: t.Literal["basic", "advanced"] = "advanced",
@@ -1,3 +1,4 @@
1
+ from prediction_market_agent_tooling.gtypes import xdai_type
1
2
  from prediction_market_agent_tooling.markets.omen.omen_constants import (
2
3
  WRAPPED_XDAI_CONTRACT_ADDRESS,
3
4
  )
@@ -9,7 +10,9 @@ from prediction_market_agent_tooling.tools.contract import (
9
10
  # except for a small portion that will be kept in the native token of the network to pay for the fees.
10
11
  # Auto deposit must work from native token into this token.
11
12
  # If changed, then keep in mind that we assume this token is equal to 1 USD.
12
- # Also if changed, `withdraw_wxdai_to_xdai_to_keep_balance` will require update.
13
+ # Also if changed, `send_keeping_token_to_eoa_xdai` will require update.
13
14
  KEEPING_ERC20_TOKEN = ContractDepositableWrapperERC20OnGnosisChain(
14
15
  address=WRAPPED_XDAI_CONTRACT_ADDRESS
15
16
  )
17
+
18
+ MINIMUM_NATIVE_TOKEN_IN_EOA_FOR_FEES = xdai_type(0.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.60.1.dev424
3
+ Version: 0.60.2
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -20,8 +20,8 @@ prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-
20
20
  prediction_market_agent_tooling/benchmark/agents.py,sha256=B1-uWdyeN4GGKMWGK_-CcAFJg1m9Y_XuaeIHPB29QR8,3971
21
21
  prediction_market_agent_tooling/benchmark/benchmark.py,sha256=MqTiaaJ3cYiOLUVR7OyImLWxcEya3Rl5JyFYW-K0lwM,17097
22
22
  prediction_market_agent_tooling/benchmark/utils.py,sha256=D0MfUkVZllmvcU0VOurk9tcKT7JTtwwOp-63zuCBVuc,2880
23
- prediction_market_agent_tooling/config.py,sha256=owJ3goDbH1aeX8PzeJCeGK5pitYJqqk7yFOkaTbDarY,9209
24
- prediction_market_agent_tooling/deploy/agent.py,sha256=rvBPubAjZu9WACayT4q4ERxINOayBJte9ZPi7yFlnNQ,24872
23
+ prediction_market_agent_tooling/config.py,sha256=eiJPhb736Jtgrbh2d035_bFz2YaIiipUPapgIjYNqM4,9629
24
+ prediction_market_agent_tooling/deploy/agent.py,sha256=tC0MQKR_63SdsfDrCWXAko0yP01zvP7tuspAbjCj0eE,24988
25
25
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=dIIdZashExWk9tOdyDjw87AuUcGyM7jYxNChYrVK2dM,1001
26
26
  prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=Y6Pb8OfSb6galRbfdNBvvNTgO-4dR2ybJ4o5GKJcMoM,12894
27
27
  prediction_market_agent_tooling/deploy/constants.py,sha256=M5ty8URipYMGe_G-RzxRydK3AFL6CyvmqCraJUrLBnE,82
@@ -51,10 +51,10 @@ prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=FaBCTPPe
51
51
  prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=86TIx6cavEWc8Cv4KpZxSvwiSw9oFybXE3YB49pg-CA,4377
52
52
  prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  prediction_market_agent_tooling/markets/omen/data_models.py,sha256=sfaOpNk6oFIzxYQzs9EehqAT_19IxYJy9pns-UTepOc,28934
54
- prediction_market_agent_tooling/markets/omen/omen.py,sha256=nJGjVHKKWvrVtTRwLLdpZoOIpk9vuEtypl238nazO9c,51623
54
+ prediction_market_agent_tooling/markets/omen/omen.py,sha256=ZLKa0X5hSQucqcqIyuwUM_NzHuAlbLZzUPSqSQBUscE,53213
55
55
  prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=D9oflYKafLQiHYtB5sScMHqmXyzM8JP8J0yATmc4SQQ,233
56
56
  prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=EXqBlVivbmW8aBQ65O09X2xkyesHAop49GUl1tUffWA,28648
57
- prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=dMxnPK2DF3aL4oZkBkbxwTcU7EMmi1vnTm0oC5d91yY,9781
57
+ prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=B4z9dPqtEfows8-1hkstBLLS_7X0L9z3CG41adyCYgg,10336
58
58
  prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=dQyz1RR1MlQncb1Slq7tk1Maql-sbb5YYE_sDe26MYA,38711
59
59
  prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
60
60
  prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=Fd5PI5y3mJM8VHExBhWFWEnuuIKxQmIAXgBuoPDvNjw,4341
@@ -62,7 +62,7 @@ prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=VZh
62
62
  prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=NRoZK71PtH8kkangMqme7twcAXhRJSSabbmOir-UnAI,3418
63
63
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=DImFxeMg8lTfsEDZ8FavndW38TfUsCkawcVGnucsuGo,2029
64
64
  prediction_market_agent_tooling/markets/seer/data_models.py,sha256=HGJv4XSvCxXLLC5VwxZTZ5E4w_bWGKv50fM_6ssloxI,8203
65
- prediction_market_agent_tooling/markets/seer/seer.py,sha256=M3RN3ZlLduFJvhk_0KTZDkX94z_HKhFOIK7BwLSGauM,13145
65
+ prediction_market_agent_tooling/markets/seer/seer.py,sha256=r21sXj_4_oIG2L1N5l56vEYGI_q2RGem_6G-Sixkbck,12954
66
66
  prediction_market_agent_tooling/markets/seer/seer_contracts.py,sha256=E7CYAKZiK6cg3dyj1kJuIPKSYYUft98F64shF5S0g4s,2730
67
67
  prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=aycOvJ1_f5m7xzd_Hlx98_-VeM869IY9mTzJ2zn_VEM,8577
68
68
  prediction_market_agent_tooling/monitor/financial_metrics/financial_metrics.py,sha256=fjIgjDIx5MhH5mwf7S0cspLOOSU3elYLhGYoIiM26mU,2746
@@ -80,7 +80,7 @@ prediction_market_agent_tooling/tools/betting_strategies/market_moving.py,sha256
80
80
  prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,sha256=-FUSuQQgjcWSSnoFxnlAyTeilY6raJABJVM2QKkFqAY,438
81
81
  prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py,sha256=THMXwFlskvzbjnX_OiYtDSzI8XVFyULWfP2525_9UGc,429
82
82
  prediction_market_agent_tooling/tools/betting_strategies/utils.py,sha256=kpIb-ci67Vc1Yqqaa-_S4OUkbhWSIYog4_Iwp69HU_k,97
83
- prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=Q5E5cI5Mn65wq8N9Mv7on_lOnl9JOqzezvZc2ZbWhFo,11119
83
+ prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=j8ULI7z0BDaKg16Vua1UbhrIKEjqpa8800haYPQaF9w,11358
84
84
  prediction_market_agent_tooling/tools/caches/inmemory_cache.py,sha256=ZW5iI5rmjqeAebu5T7ftRnlkxiL02IC-MxCfDB80x7w,1506
85
85
  prediction_market_agent_tooling/tools/caches/serializers.py,sha256=vFDx4fsPxclXp2q0sv27j4al_M_Tj9aR2JJP-xNHQXA,2151
86
86
  prediction_market_agent_tooling/tools/contract.py,sha256=BCl3R-n5jpp5XPAho9yTuUxRbOoKbZSga1Qaa4RfAp8,20945
@@ -110,15 +110,15 @@ prediction_market_agent_tooling/tools/safe.py,sha256=9vxGGLvSPnfy-sxUFDpBTe8omqp
110
110
  prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0rnVhtQGzwoUdAgn_7u_GBM,729
111
111
  prediction_market_agent_tooling/tools/streamlit_user_login.py,sha256=NXEqfjT9Lc9QtliwSGRASIz1opjQ7Btme43H4qJbzgE,3010
112
112
  prediction_market_agent_tooling/tools/tavily/tavily_models.py,sha256=5ldQs1pZe6uJ5eDAuP4OLpzmcqYShlIV67kttNFvGS0,342
113
- prediction_market_agent_tooling/tools/tavily/tavily_search.py,sha256=Kw2mXNkMTYTEe1MBSTqhQmLoeXtgb6CkmHlcAJvhtqE,3809
113
+ prediction_market_agent_tooling/tools/tavily/tavily_search.py,sha256=pPs0qZNfJ7G-1ajfz0iaWOBQyiC0TbcShfrW8T39jtg,3859
114
114
  prediction_market_agent_tooling/tools/tokens/auto_deposit.py,sha256=o8_ERfPL-ps9FLvH5vgdiSRJQ4dZONJw9KK9sHgeP2I,6390
115
115
  prediction_market_agent_tooling/tools/tokens/auto_withdraw.py,sha256=25Y0H1p0hSD3gWShKPcJ5BckQc3nr_hOAvImOFODC0w,3160
116
- prediction_market_agent_tooling/tools/tokens/main_token.py,sha256=v5PfD2m9m92bJpK-k8ww6yDO7dwpchFtQ1BJRgi8rhs,714
116
+ prediction_market_agent_tooling/tools/tokens/main_token.py,sha256=7JPgVF4RbiFzLDQVBkBuC--eUoM1AYOcJ4VygbmK5yo,822
117
117
  prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
118
118
  prediction_market_agent_tooling/tools/utils.py,sha256=jLG4nbEoIzzJiZ4RgMx4Q969Zdl0p0s63p8uET_0Fuw,6440
119
119
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=2PXZfGRrDVZD60agVpBN4JkOF0YsNBXgTEH1y-V71uQ,12723
120
- prediction_market_agent_tooling-0.60.1.dev424.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
121
- prediction_market_agent_tooling-0.60.1.dev424.dist-info/METADATA,sha256=J1Ilnb6VXdi85KIt6GiAZ7B3fhp4lRLQNRTBGpvnbIg,8636
122
- prediction_market_agent_tooling-0.60.1.dev424.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
123
- prediction_market_agent_tooling-0.60.1.dev424.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
124
- prediction_market_agent_tooling-0.60.1.dev424.dist-info/RECORD,,
120
+ prediction_market_agent_tooling-0.60.2.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
121
+ prediction_market_agent_tooling-0.60.2.dist-info/METADATA,sha256=vijNsJBwWEVEPwvWJdGA-SQ7uklcgNzXF5IbcQyTVZs,8629
122
+ prediction_market_agent_tooling-0.60.2.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
123
+ prediction_market_agent_tooling-0.60.2.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
124
+ prediction_market_agent_tooling-0.60.2.dist-info/RECORD,,