prediction-market-agent-tooling 0.60.1.dev424__py3-none-any.whl → 0.60.3__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.
- prediction_market_agent_tooling/config.py +14 -3
- prediction_market_agent_tooling/deploy/agent.py +10 -5
- prediction_market_agent_tooling/markets/omen/omen.py +62 -23
- prediction_market_agent_tooling/markets/omen/omen_resolving.py +17 -0
- prediction_market_agent_tooling/markets/seer/seer.py +2 -9
- prediction_market_agent_tooling/tools/caches/db_cache.py +7 -2
- prediction_market_agent_tooling/tools/tavily/tavily_search.py +5 -1
- prediction_market_agent_tooling/tools/tokens/main_token.py +4 -1
- {prediction_market_agent_tooling-0.60.1.dev424.dist-info → prediction_market_agent_tooling-0.60.3.dist-info}/METADATA +1 -1
- {prediction_market_agent_tooling-0.60.1.dev424.dist-info → prediction_market_agent_tooling-0.60.3.dist-info}/RECORD +13 -13
- {prediction_market_agent_tooling-0.60.1.dev424.dist-info → prediction_market_agent_tooling-0.60.3.dist-info}/LICENSE +0 -0
- {prediction_market_agent_tooling-0.60.1.dev424.dist-info → prediction_market_agent_tooling-0.60.3.dist-info}/WHEEL +0 -0
- {prediction_market_agent_tooling-0.60.1.dev424.dist-info → prediction_market_agent_tooling-0.60.3.dist-info}/entry_points.txt +0 -0
@@ -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.
|
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
|
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
|
-
|
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 =
|
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
|
-
|
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
|
-
|
427
|
+
multiplier=3,
|
423
428
|
)
|
424
429
|
|
425
430
|
def process_market(
|
@@ -757,6 +757,7 @@ def omen_buy_outcome_tx(
|
|
757
757
|
outcome: str,
|
758
758
|
auto_deposit: bool,
|
759
759
|
web3: Web3 | None = None,
|
760
|
+
slippage: float = 0.01,
|
760
761
|
) -> str:
|
761
762
|
"""
|
762
763
|
Bets the given amount of xDai for the given outcome in the given market.
|
@@ -776,8 +777,8 @@ def omen_buy_outcome_tx(
|
|
776
777
|
expected_shares = market_contract.calcBuyAmount(
|
777
778
|
amount_wei_to_buy, outcome_index, web3=web3
|
778
779
|
)
|
779
|
-
# Allow
|
780
|
-
expected_shares = remove_fraction(expected_shares,
|
780
|
+
# Allow small slippage.
|
781
|
+
expected_shares = remove_fraction(expected_shares, slippage)
|
781
782
|
# Approve the market maker to withdraw our collateral token.
|
782
783
|
collateral_token_contract.approve(
|
783
784
|
api_keys=api_keys,
|
@@ -829,6 +830,7 @@ def omen_sell_outcome_tx(
|
|
829
830
|
outcome: str,
|
830
831
|
auto_withdraw: bool,
|
831
832
|
web3: Web3 | None = None,
|
833
|
+
slippage: float = 0.001,
|
832
834
|
) -> str:
|
833
835
|
"""
|
834
836
|
Sells the given xDai value of shares corresponding to the given outcome in
|
@@ -838,6 +840,7 @@ def omen_sell_outcome_tx(
|
|
838
840
|
transaction.
|
839
841
|
"""
|
840
842
|
amount_wei = xdai_to_wei(amount)
|
843
|
+
amount_wei = remove_fraction(amount_wei, slippage)
|
841
844
|
|
842
845
|
market_contract: OmenFixedProductMarketMakerContract = market.get_contract()
|
843
846
|
conditional_token_contract = OmenConditionalTokenContract()
|
@@ -859,8 +862,8 @@ def omen_sell_outcome_tx(
|
|
859
862
|
max_outcome_tokens_to_sell = market_contract.calcSellAmount(
|
860
863
|
amount_wei, outcome_index, web3=web3
|
861
864
|
)
|
862
|
-
# Allow
|
863
|
-
max_outcome_tokens_to_sell = add_fraction(max_outcome_tokens_to_sell,
|
865
|
+
# Allow small slippage.
|
866
|
+
max_outcome_tokens_to_sell = add_fraction(max_outcome_tokens_to_sell, slippage)
|
864
867
|
|
865
868
|
# Approve the market maker to move our (all) conditional tokens.
|
866
869
|
conditional_token_contract.setApprovalForAll(
|
@@ -1315,41 +1318,77 @@ def get_binary_market_p_yes_history(market: OmenAgentMarket) -> list[Probability
|
|
1315
1318
|
return history
|
1316
1319
|
|
1317
1320
|
|
1318
|
-
def
|
1321
|
+
def send_keeping_token_to_eoa_xdai(
|
1319
1322
|
api_keys: APIKeys,
|
1320
1323
|
min_required_balance: xDai,
|
1321
|
-
|
1324
|
+
multiplier: float = 1.0,
|
1322
1325
|
web3: Web3 | None = None,
|
1323
1326
|
) -> None:
|
1324
1327
|
"""
|
1325
|
-
Keeps xDai balance above the minimum required balance by
|
1326
|
-
Optionally, the amount to
|
1328
|
+
Keeps xDai balance above the minimum required balance by transfering keeping token to xDai.
|
1329
|
+
Optionally, the amount to transfer can be multiplied by the `multiplier`, which can be useful to keep a buffer.
|
1327
1330
|
"""
|
1328
|
-
#
|
1329
|
-
|
1331
|
+
# Only wxDai can be withdrawn to xDai. Anything else needs to be swapped to wxDai first.
|
1332
|
+
wxdai_contract = WrappedxDaiContract()
|
1333
|
+
|
1334
|
+
if KEEPING_ERC20_TOKEN.address != wxdai_contract.address:
|
1335
|
+
raise RuntimeError(
|
1336
|
+
"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"
|
1337
|
+
)
|
1330
1338
|
|
1331
|
-
|
1339
|
+
current_balances_eoa = get_balances(api_keys.public_key, web3)
|
1340
|
+
current_balances_betting = get_balances(api_keys.bet_from_address, web3)
|
1341
|
+
|
1342
|
+
# xDai needs to be in our wallet where we pay transaction fees, so do not check for Safe's balance here, but for EOA.
|
1343
|
+
if current_balances_eoa.xdai >= min_required_balance:
|
1332
1344
|
logger.info(
|
1333
|
-
f"Current xDai balance {
|
1345
|
+
f"Current xDai balance {current_balances_eoa.xdai} is more or equal than the required minimum balance {min_required_balance}."
|
1334
1346
|
)
|
1335
1347
|
return
|
1336
1348
|
|
1337
1349
|
need_to_withdraw = xDai(
|
1338
|
-
(min_required_balance -
|
1350
|
+
(min_required_balance - current_balances_eoa.xdai) * multiplier
|
1339
1351
|
)
|
1352
|
+
need_to_withdraw_wei = xdai_to_wei(need_to_withdraw)
|
1340
1353
|
|
1341
|
-
if
|
1342
|
-
|
1343
|
-
|
1354
|
+
if current_balances_eoa.wxdai >= need_to_withdraw:
|
1355
|
+
# If EOA has enough of wxDai, simply withdraw it.
|
1356
|
+
logger.info(
|
1357
|
+
f"Withdrawing {need_to_withdraw} wxDai from EOA to keep the EOA's xDai balance above the minimum required balance {min_required_balance}."
|
1358
|
+
)
|
1359
|
+
wxdai_contract.withdraw(
|
1360
|
+
api_keys=api_keys.copy_without_safe_address(),
|
1361
|
+
amount_wei=need_to_withdraw_wei,
|
1362
|
+
web3=web3,
|
1344
1363
|
)
|
1345
1364
|
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1365
|
+
elif current_balances_betting.wxdai >= need_to_withdraw:
|
1366
|
+
# If Safe has enough of wxDai:
|
1367
|
+
# First send them to EOA's address.
|
1368
|
+
logger.info(
|
1369
|
+
f"Transfering {need_to_withdraw} wxDai from betting address to EOA's address."
|
1370
|
+
)
|
1371
|
+
wxdai_contract.transferFrom(
|
1372
|
+
api_keys=api_keys,
|
1373
|
+
sender=api_keys.bet_from_address,
|
1374
|
+
recipient=api_keys.public_key,
|
1375
|
+
amount_wei=need_to_withdraw_wei,
|
1376
|
+
web3=web3,
|
1377
|
+
)
|
1378
|
+
# And then simply withdraw it.
|
1379
|
+
logger.info(
|
1380
|
+
f"Withdrawing {need_to_withdraw} wxDai from EOA to keep the EOA's xDai balance above the minimum required balance {min_required_balance}."
|
1381
|
+
)
|
1382
|
+
wxdai_contract.withdraw(
|
1383
|
+
api_keys=api_keys.copy_without_safe_address(),
|
1384
|
+
amount_wei=need_to_withdraw_wei,
|
1385
|
+
web3=web3,
|
1386
|
+
)
|
1387
|
+
|
1388
|
+
else:
|
1389
|
+
raise OutOfFundsError(
|
1390
|
+
f"Current wxDai balance ({current_balances_eoa=}, {current_balances_betting=}) is less than the required minimum wxDai to withdraw {need_to_withdraw}."
|
1391
|
+
)
|
1353
1392
|
|
1354
1393
|
|
1355
1394
|
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
|
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))`
|
@@ -87,6 +91,7 @@ def db_cache(
|
|
87
91
|
api_keys=api_keys,
|
88
92
|
ignore_args=ignore_args,
|
89
93
|
ignore_arg_types=ignore_arg_types,
|
94
|
+
log_error_on_unsavable_data=log_error_on_unsavable_data,
|
90
95
|
)
|
91
96
|
|
92
97
|
return decorator
|
@@ -209,8 +214,8 @@ def db_cache(
|
|
209
214
|
logger.info(f"Saving {cache_entry} into database.")
|
210
215
|
session.add(cache_entry)
|
211
216
|
session.commit()
|
212
|
-
except psycopg2.errors.UntranslatableCharacter as e:
|
213
|
-
logger.warning(
|
217
|
+
except (DataError, psycopg2.errors.UntranslatableCharacter) as e:
|
218
|
+
(logger.error if log_error_on_unsavable_data else logger.warning)(
|
214
219
|
f"Failed to save {cache_entry} into database, ignoring, because: {e}"
|
215
220
|
)
|
216
221
|
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(
|
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, `
|
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)
|
@@ -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=
|
24
|
-
prediction_market_agent_tooling/deploy/agent.py,sha256=
|
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=
|
54
|
+
prediction_market_agent_tooling/markets/omen/omen.py,sha256=FUPGOKmhiKjLHLmfgHBM_MzoiKVWiPOu8SzRk-AKrNk,53339
|
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=
|
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=
|
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=
|
83
|
+
prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=dB8LNs2JvVRaFCeAKRmIQRwiirsMgtL31he8051wM-g,11431
|
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=
|
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=
|
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.
|
121
|
-
prediction_market_agent_tooling-0.60.
|
122
|
-
prediction_market_agent_tooling-0.60.
|
123
|
-
prediction_market_agent_tooling-0.60.
|
124
|
-
prediction_market_agent_tooling-0.60.
|
120
|
+
prediction_market_agent_tooling-0.60.3.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
|
121
|
+
prediction_market_agent_tooling-0.60.3.dist-info/METADATA,sha256=DTvfIp6tOVJtowtb7I4B-3oMfaFAeASW_-t5U7k4O_A,8629
|
122
|
+
prediction_market_agent_tooling-0.60.3.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
123
|
+
prediction_market_agent_tooling-0.60.3.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
|
124
|
+
prediction_market_agent_tooling-0.60.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|