prediction-market-agent-tooling 0.64.11.dev653__py3-none-any.whl → 0.64.12__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/chains.py +4 -0
- prediction_market_agent_tooling/config.py +6 -5
- prediction_market_agent_tooling/logprobs_parser.py +71 -33
- prediction_market_agent_tooling/markets/data_models.py +2 -0
- prediction_market_agent_tooling/markets/omen/omen.py +1 -1
- prediction_market_agent_tooling/markets/omen/omen_contracts.py +8 -0
- prediction_market_agent_tooling/tools/contract.py +54 -14
- {prediction_market_agent_tooling-0.64.11.dev653.dist-info → prediction_market_agent_tooling-0.64.12.dist-info}/METADATA +1 -1
- {prediction_market_agent_tooling-0.64.11.dev653.dist-info → prediction_market_agent_tooling-0.64.12.dist-info}/RECORD +12 -11
- {prediction_market_agent_tooling-0.64.11.dev653.dist-info → prediction_market_agent_tooling-0.64.12.dist-info}/LICENSE +0 -0
- {prediction_market_agent_tooling-0.64.11.dev653.dist-info → prediction_market_agent_tooling-0.64.12.dist-info}/WHEEL +0 -0
- {prediction_market_agent_tooling-0.64.11.dev653.dist-info → prediction_market_agent_tooling-0.64.12.dist-info}/entry_points.txt +0 -0
@@ -12,6 +12,7 @@ from safe_eth.eth import EthereumClient
|
|
12
12
|
from safe_eth.safe.safe import SafeV141
|
13
13
|
from web3 import Account, Web3
|
14
14
|
|
15
|
+
from prediction_market_agent_tooling.chains import ETHEREUM_ID, GNOSIS_CHAIN_ID
|
15
16
|
from prediction_market_agent_tooling.deploy.gcp.utils import gcp_get_secret_value
|
16
17
|
from prediction_market_agent_tooling.gtypes import (
|
17
18
|
ChainID,
|
@@ -278,9 +279,9 @@ class RPCConfig(BaseSettings):
|
|
278
279
|
env_file=".env", env_file_encoding="utf-8", extra="ignore"
|
279
280
|
)
|
280
281
|
|
281
|
-
ETHEREUM_RPC_URL: URI = Field(default=URI("https://
|
282
|
-
GNOSIS_RPC_URL: URI = Field(default=URI("https://rpc.
|
283
|
-
CHAIN_ID: ChainID = Field(default=
|
282
|
+
ETHEREUM_RPC_URL: URI = Field(default=URI("https://rpc.eth.gateway.fm"))
|
283
|
+
GNOSIS_RPC_URL: URI = Field(default=URI("https://rpc.gnosis.gateway.fm"))
|
284
|
+
CHAIN_ID: ChainID = Field(default=GNOSIS_CHAIN_ID)
|
284
285
|
|
285
286
|
@property
|
286
287
|
def ethereum_rpc_url(self) -> URI:
|
@@ -299,9 +300,9 @@ class RPCConfig(BaseSettings):
|
|
299
300
|
return check_not_none(self.CHAIN_ID, "CHAIN_ID missing in the environment.")
|
300
301
|
|
301
302
|
def chain_id_to_rpc_url(self, chain_id: ChainID) -> URI:
|
302
|
-
if chain_id ==
|
303
|
+
if chain_id == ETHEREUM_ID:
|
303
304
|
return self.ethereum_rpc_url
|
304
|
-
elif chain_id ==
|
305
|
+
elif chain_id == GNOSIS_CHAIN_ID:
|
305
306
|
return self.gnosis_rpc_url
|
306
307
|
else:
|
307
308
|
raise ValueError(f"Unsupported chain ID: {chain_id}")
|
@@ -1,29 +1,47 @@
|
|
1
1
|
import math
|
2
2
|
from itertools import product
|
3
|
-
from typing import Any, Tuple
|
3
|
+
from typing import Any, Tuple, Type
|
4
4
|
|
5
|
-
from pydantic import BaseModel
|
5
|
+
from pydantic import BaseModel, ValidationError
|
6
|
+
from pydantic.fields import FieldInfo
|
7
|
+
from pydantic.type_adapter import TypeAdapter
|
6
8
|
|
7
9
|
from prediction_market_agent_tooling.loggers import logger
|
8
10
|
|
9
11
|
|
10
|
-
class
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
class LogprobDetail(BaseModel):
|
13
|
+
token: str
|
14
|
+
logprob: float
|
15
|
+
prob: float
|
16
|
+
|
17
|
+
|
18
|
+
class FieldLogprobs(BaseModel):
|
19
|
+
key: str
|
20
|
+
logprobs: list[LogprobDetail]
|
14
21
|
|
15
22
|
|
16
23
|
class LogprobsParser:
|
24
|
+
def __init__(
|
25
|
+
self,
|
26
|
+
skip_fields: list[str] | None = None,
|
27
|
+
max_top_logprobs_length: int = 3,
|
28
|
+
max_logprobs_length: int = 5,
|
29
|
+
):
|
30
|
+
base_skip_fields = ["logprobs"]
|
31
|
+
self.skip_fields = base_skip_fields + (skip_fields or [])
|
32
|
+
self.max_top_logprobs_length = max_top_logprobs_length
|
33
|
+
self.max_logprobs_length = max_logprobs_length
|
34
|
+
|
17
35
|
def _get_logprobs_key_index(
|
18
|
-
self, logprobs: list[dict[str, Any]],
|
36
|
+
self, logprobs: list[dict[str, Any]], field_name: str
|
19
37
|
) -> int:
|
20
38
|
key_candidate = ""
|
21
39
|
for i, token in enumerate(logprobs):
|
22
|
-
if token["token"] in
|
40
|
+
if token["token"] in field_name:
|
23
41
|
key_candidate = key_candidate + token["token"]
|
24
42
|
else:
|
25
43
|
key_candidate = ""
|
26
|
-
if key_candidate ==
|
44
|
+
if key_candidate == field_name:
|
27
45
|
return i
|
28
46
|
|
29
47
|
return -1
|
@@ -45,19 +63,25 @@ class LogprobsParser:
|
|
45
63
|
for i in range(result_start_index, len(logprobs))
|
46
64
|
if logprobs[i]["token"] in {",", '"', ",\n", "\",\n'", '",\n'}
|
47
65
|
),
|
48
|
-
-1,
|
66
|
+
len(logprobs) - 1,
|
49
67
|
)
|
50
68
|
return result_start_index + 1, result_end_index
|
51
69
|
|
52
|
-
def _is_correct_type(self, token: str, key_type: type) -> bool:
|
70
|
+
def _is_correct_type(self, token: str, key_type: type | None) -> bool:
|
71
|
+
if key_type is None:
|
72
|
+
return True
|
73
|
+
|
53
74
|
try:
|
54
|
-
key_type(token)
|
75
|
+
TypeAdapter(key_type).validate_python(token)
|
55
76
|
return True
|
56
|
-
except
|
77
|
+
except ValidationError:
|
57
78
|
return False
|
58
79
|
|
59
80
|
def _parse_valid_tokens_with__agg_probs(
|
60
|
-
self,
|
81
|
+
self,
|
82
|
+
logprobs_list: list[tuple[dict[str, Any]]],
|
83
|
+
field_info: FieldInfo,
|
84
|
+
top_logprobs: int,
|
61
85
|
) -> list[dict[str, Any]]:
|
62
86
|
results: list[dict[str, Any]] = [
|
63
87
|
{
|
@@ -73,45 +97,59 @@ class LogprobsParser:
|
|
73
97
|
results_filtered: list[dict[str, Any]] = [
|
74
98
|
result
|
75
99
|
for result in results
|
76
|
-
if self._is_correct_type(result["token"],
|
77
|
-
and (key.valid_values is None or result["token"] in key.valid_values)
|
100
|
+
if self._is_correct_type(result["token"], field_info.annotation)
|
78
101
|
]
|
79
102
|
|
80
|
-
|
81
|
-
:
|
82
|
-
|
103
|
+
sorted_results = sorted(
|
104
|
+
results_filtered, key=lambda x: x["logprob"], reverse=True
|
105
|
+
)
|
106
|
+
return (
|
107
|
+
sorted_results[:top_logprobs]
|
108
|
+
if len(sorted_results) > top_logprobs
|
109
|
+
else sorted_results
|
110
|
+
)
|
83
111
|
|
84
112
|
def parse_logprobs(
|
85
|
-
self, logprobs: list[dict[str, Any]],
|
86
|
-
) -> list[
|
113
|
+
self, logprobs: list[dict[str, Any]], target_model_cls: Type[BaseModel]
|
114
|
+
) -> list[FieldLogprobs]:
|
87
115
|
results_for_keys = []
|
88
116
|
|
89
|
-
for
|
90
|
-
|
117
|
+
for field_name, field_info in target_model_cls.model_fields.items():
|
118
|
+
if field_name in self.skip_fields:
|
119
|
+
continue
|
120
|
+
|
121
|
+
key_index = self._get_logprobs_key_index(logprobs, field_name)
|
122
|
+
|
91
123
|
if key_index < 0:
|
92
|
-
logger.warning(f"Key {
|
124
|
+
logger.warning(f"Key {field_name} not found in logprobs")
|
93
125
|
continue
|
94
126
|
|
95
127
|
(
|
96
128
|
result_start_index,
|
97
129
|
result_end_index,
|
98
130
|
) = self._get_logprobs_indexes_for_result(logprobs, key_index)
|
131
|
+
|
99
132
|
if result_start_index < 0 or result_end_index < 0:
|
100
|
-
logger.warning(f"Error in parsing result for {
|
133
|
+
logger.warning(f"Error in parsing result for {field_name} in logprobs")
|
101
134
|
continue
|
102
135
|
|
103
|
-
|
104
|
-
logprobs[i]["top_logprobs"]
|
136
|
+
valid_logprobs_raw = [
|
137
|
+
logprobs[i]["top_logprobs"][: self.max_top_logprobs_length]
|
105
138
|
for i in range(result_start_index, result_end_index)
|
139
|
+
if logprobs[i]["top_logprobs"] is not None
|
106
140
|
]
|
107
141
|
|
142
|
+
parsed_logprobs_data = self._parse_valid_tokens_with__agg_probs(
|
143
|
+
list(product(*valid_logprobs_raw[: self.max_logprobs_length])),
|
144
|
+
field_info,
|
145
|
+
min(len(sublist) for sublist in valid_logprobs_raw),
|
146
|
+
)
|
147
|
+
|
108
148
|
results_for_keys.append(
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
),
|
114
|
-
}
|
149
|
+
FieldLogprobs(
|
150
|
+
key=field_name,
|
151
|
+
logprobs=[LogprobDetail(**item) for item in parsed_logprobs_data],
|
152
|
+
)
|
115
153
|
)
|
116
154
|
|
117
155
|
return results_for_keys
|
@@ -10,6 +10,7 @@ from prediction_market_agent_tooling.gtypes import (
|
|
10
10
|
OutcomeToken,
|
11
11
|
Probability,
|
12
12
|
)
|
13
|
+
from prediction_market_agent_tooling.logprobs_parser import FieldLogprobs
|
13
14
|
from prediction_market_agent_tooling.tools.utils import DatetimeUTC
|
14
15
|
|
15
16
|
|
@@ -77,6 +78,7 @@ class ProbabilisticAnswer(BaseModel):
|
|
77
78
|
p_yes: Probability
|
78
79
|
confidence: float
|
79
80
|
reasoning: str | None = None
|
81
|
+
logprobs: list[FieldLogprobs] | None = None
|
80
82
|
|
81
83
|
@property
|
82
84
|
def p_no(self) -> Probability:
|
@@ -90,7 +90,7 @@ from prediction_market_agent_tooling.tools.web3_utils import get_receipt_block_t
|
|
90
90
|
|
91
91
|
OMEN_DEFAULT_REALITIO_BOND_VALUE = xDai(0.01)
|
92
92
|
# Too low value would work with the Omen contract, but causes CoW orders (when buying the specific market's tokens) to fail.
|
93
|
-
OMEN_TINY_BET_AMOUNT = USD(0.
|
93
|
+
OMEN_TINY_BET_AMOUNT = USD(0.01)
|
94
94
|
|
95
95
|
|
96
96
|
class OmenAgentMarket(AgentMarket):
|
@@ -431,6 +431,12 @@ class OmenFixedProductMarketMakerContract(ContractOnGnosisChain):
|
|
431
431
|
)
|
432
432
|
|
433
433
|
|
434
|
+
class MetriSuperGroup(ContractERC20OnGnosisChain):
|
435
|
+
address: ChecksumAddress = Web3.to_checksum_address(
|
436
|
+
"0x7147A7405fCFe5CFa30c6d5363f9f357a317d082"
|
437
|
+
)
|
438
|
+
|
439
|
+
|
434
440
|
class GNOContract(ContractERC20OnGnosisChain):
|
435
441
|
address: ChecksumAddress = Web3.to_checksum_address(
|
436
442
|
"0x9c58bacc331c9aa871afd802db6379a98e80cedb"
|
@@ -923,10 +929,12 @@ class CollateralTokenChoice(str, Enum):
|
|
923
929
|
wxdai = "wxdai"
|
924
930
|
sdai = "sdai"
|
925
931
|
gno = "gno"
|
932
|
+
metri_super_user = "metri_super_user"
|
926
933
|
|
927
934
|
|
928
935
|
COLLATERAL_TOKEN_CHOICE_TO_ADDRESS = {
|
929
936
|
CollateralTokenChoice.wxdai: WrappedxDaiContract().address,
|
930
937
|
CollateralTokenChoice.sdai: sDaiContract().address,
|
931
938
|
CollateralTokenChoice.gno: GNOContract().address,
|
939
|
+
CollateralTokenChoice.metri_super_user: MetriSuperGroup().address,
|
932
940
|
}
|
@@ -4,6 +4,8 @@ import time
|
|
4
4
|
import typing as t
|
5
5
|
from contextlib import contextmanager
|
6
6
|
|
7
|
+
import eth_abi
|
8
|
+
from eth_abi.exceptions import DecodingError
|
7
9
|
from pydantic import BaseModel, field_validator
|
8
10
|
from web3 import Web3
|
9
11
|
from web3.constants import CHECKSUM_ADDRESSS_ZERO
|
@@ -20,6 +22,7 @@ from prediction_market_agent_tooling.gtypes import (
|
|
20
22
|
TxReceipt,
|
21
23
|
Wei,
|
22
24
|
)
|
25
|
+
from prediction_market_agent_tooling.loggers import logger
|
23
26
|
from prediction_market_agent_tooling.tools.utils import DatetimeUTC
|
24
27
|
from prediction_market_agent_tooling.tools.web3_utils import (
|
25
28
|
call_function_on_contract,
|
@@ -591,27 +594,64 @@ def contract_implements_function(
|
|
591
594
|
look_for_proxy_contract: bool = True,
|
592
595
|
) -> bool:
|
593
596
|
function_signature = f"{function_name}({','.join(function_arg_types or [])})"
|
594
|
-
|
597
|
+
function_selector = web3.keccak(text=function_signature)[0:4].hex()[2:]
|
598
|
+
# 1. Check directly in bytecode
|
599
|
+
bytecode = web3.eth.get_code(contract_address).hex()
|
600
|
+
if function_selector in bytecode:
|
601
|
+
return True
|
595
602
|
contract_code = web3.eth.get_code(contract_address).hex()
|
596
|
-
implements =
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
603
|
+
implements = function_selector in contract_code
|
604
|
+
|
605
|
+
# If not found directly and we should check proxies
|
606
|
+
if not implements and look_for_proxy_contract:
|
607
|
+
# Case 1: Check if it's a standard proxy (has implementation() function)
|
608
|
+
if contract_implements_function(
|
601
609
|
contract_address, "implementation", web3, look_for_proxy_contract=False
|
602
|
-
)
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
610
|
+
):
|
611
|
+
# Get the implementation address and check the function there
|
612
|
+
implementation_address = ContractProxyOnGnosisChain(
|
613
|
+
address=contract_address
|
614
|
+
).implementation()
|
615
|
+
implements = contract_implements_function(
|
616
|
+
implementation_address,
|
617
|
+
function_name=function_name,
|
618
|
+
web3=web3,
|
619
|
+
function_arg_types=function_arg_types,
|
620
|
+
look_for_proxy_contract=False,
|
621
|
+
)
|
622
|
+
else:
|
623
|
+
# Case 2: Check if it's a minimal proxy contract
|
624
|
+
implements = minimal_proxy_implements_function(
|
625
|
+
contract_address=contract_address,
|
626
|
+
function_name=function_name,
|
627
|
+
web3=web3,
|
628
|
+
function_arg_types=function_arg_types,
|
629
|
+
)
|
630
|
+
|
631
|
+
return implements
|
632
|
+
|
633
|
+
|
634
|
+
def minimal_proxy_implements_function(
|
635
|
+
contract_address: ChecksumAddress,
|
636
|
+
function_name: str,
|
637
|
+
web3: Web3,
|
638
|
+
function_arg_types: list[str] | None = None,
|
639
|
+
) -> bool:
|
640
|
+
try:
|
641
|
+
# Read storage slot 0 which should contain the implementation address in minimal proxies
|
642
|
+
raw_slot_0 = web3.eth.get_storage_at(contract_address, 0)
|
643
|
+
singleton_address = eth_abi.decode(["address"], raw_slot_0)[0]
|
644
|
+
# Recurse into singleton
|
645
|
+
return contract_implements_function(
|
646
|
+
Web3.to_checksum_address(singleton_address),
|
609
647
|
function_name=function_name,
|
610
648
|
web3=web3,
|
611
649
|
function_arg_types=function_arg_types,
|
612
650
|
look_for_proxy_contract=False,
|
613
651
|
)
|
614
|
-
|
652
|
+
except DecodingError:
|
653
|
+
logger.info(f"Error decoding contract address for singleton")
|
654
|
+
return False
|
615
655
|
|
616
656
|
|
617
657
|
def init_collateral_token_contract(
|
@@ -22,7 +22,8 @@ prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-
|
|
22
22
|
prediction_market_agent_tooling/benchmark/agents.py,sha256=B1-uWdyeN4GGKMWGK_-CcAFJg1m9Y_XuaeIHPB29QR8,3971
|
23
23
|
prediction_market_agent_tooling/benchmark/benchmark.py,sha256=MqTiaaJ3cYiOLUVR7OyImLWxcEya3Rl5JyFYW-K0lwM,17097
|
24
24
|
prediction_market_agent_tooling/benchmark/utils.py,sha256=D0MfUkVZllmvcU0VOurk9tcKT7JTtwwOp-63zuCBVuc,2880
|
25
|
-
prediction_market_agent_tooling/
|
25
|
+
prediction_market_agent_tooling/chains.py,sha256=1qQstoqXMwqwM7k-KH7MjMz8Ei-D83KZByvDbCZpAxs,116
|
26
|
+
prediction_market_agent_tooling/config.py,sha256=rdpRHZyoTvRIDn7Qu6eViOjPBkR9Z0MOdEMFsQOuAIE,10822
|
26
27
|
prediction_market_agent_tooling/deploy/agent.py,sha256=dobqPUQkaDPhsvMmXwibNKu4hSSTXTvmfa3F46ylLBc,26560
|
27
28
|
prediction_market_agent_tooling/deploy/agent_example.py,sha256=dIIdZashExWk9tOdyDjw87AuUcGyM7jYxNChYrVK2dM,1001
|
28
29
|
prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=p25t7VU7I4hSkSl6SpzI_W55kLbYEySQdBqeschmARY,12918
|
@@ -36,12 +37,12 @@ prediction_market_agent_tooling/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
36
37
|
prediction_market_agent_tooling/jobs/jobs_models.py,sha256=8vYafsK1cqMWQtjBoq9rruroF84xAVD00vBTMWH6QMg,2166
|
37
38
|
prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=Pf6QxPXGyie-2l_wZUjaGPTjZTlpv50_JhP40mULBaU,5048
|
38
39
|
prediction_market_agent_tooling/loggers.py,sha256=hF_n-E5iMSqh3dY5G6LkQRHyReMYGPNTLu82dDFh1PU,5187
|
39
|
-
prediction_market_agent_tooling/logprobs_parser.py,sha256=
|
40
|
+
prediction_market_agent_tooling/logprobs_parser.py,sha256=Du1Yc-fAVSixQX_Zx6KWpgSzI_ZYhv5tS1b8IcOPPr8,4979
|
40
41
|
prediction_market_agent_tooling/markets/agent_market.py,sha256=1NomilM0GCXcRq_1N_cr2AbSK5ONTowFeRbrhc7V5zE,14929
|
41
42
|
prediction_market_agent_tooling/markets/base_subgraph_handler.py,sha256=7RaYO_4qAmQ6ZGM8oPK2-CkiJfKmV9MxM-rJlduaecU,1971
|
42
43
|
prediction_market_agent_tooling/markets/blockchain_utils.py,sha256=qm21scopQ6dfewkoqQF6lWLDGg2BblsKUdC9aG93Hmc,2249
|
43
44
|
prediction_market_agent_tooling/markets/categorize.py,sha256=jsoHWvZk9pU6n17oWSCcCxNNYVwlb_NXsZxKRI7vmsk,1301
|
44
|
-
prediction_market_agent_tooling/markets/data_models.py,sha256=
|
45
|
+
prediction_market_agent_tooling/markets/data_models.py,sha256=OZdq7VfTenxPk_3mI7DvpGMFMBPrq2pvFwcMb47BnNY,4663
|
45
46
|
prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
46
47
|
prediction_market_agent_tooling/markets/manifold/api.py,sha256=ih92UTZdSbmy6tTUgSCps_HqYQXpMSsfne5Np5znVEM,7217
|
47
48
|
prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=DWNvK6Qdxz7Lxqpe-qQE4X-mw8GFGpukGfnjT_ohcZA,6364
|
@@ -55,9 +56,9 @@ prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=86TIx6cavE
|
|
55
56
|
prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
57
|
prediction_market_agent_tooling/markets/omen/cow_contracts.py,sha256=sl1L4cK5nAJwZ2wdhLzqh8p7h_IEValNvLwKUlInKxw,957
|
57
58
|
prediction_market_agent_tooling/markets/omen/data_models.py,sha256=4YEOpU-ypq8IBxlEr_qgrKKWwE7wKG6VE_Dq-UKVdOE,30513
|
58
|
-
prediction_market_agent_tooling/markets/omen/omen.py,sha256=
|
59
|
+
prediction_market_agent_tooling/markets/omen/omen.py,sha256=NKeTT2gU6uZ9a4gGpa9Dxy6msFQp_41Ug85hIdCmQy4,51733
|
59
60
|
prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=D9oflYKafLQiHYtB5sScMHqmXyzM8JP8J0yATmc4SQQ,233
|
60
|
-
prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=
|
61
|
+
prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=c6Z-hZzOybnmU-xRgzKElZmy_238Mf2mQ6dSUaYP_tY,29834
|
61
62
|
prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=Cyi9Ci-Z-K8WCZWVLs9oSuJC6qRobi_CpqDCno_5F-0,10238
|
62
63
|
prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=j-x_0Cm8IO-qynIXutu0iSPwrRDxdeCPYf5UHm6MJbs,39446
|
63
64
|
prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
|
@@ -90,7 +91,7 @@ prediction_market_agent_tooling/tools/betting_strategies/utils.py,sha256=68zFWUj
|
|
90
91
|
prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=rZIGhgijquwwPtp_qncSAPR1SDF2XxIVZL1ir0fgzWw,12127
|
91
92
|
prediction_market_agent_tooling/tools/caches/inmemory_cache.py,sha256=ZW5iI5rmjqeAebu5T7ftRnlkxiL02IC-MxCfDB80x7w,1506
|
92
93
|
prediction_market_agent_tooling/tools/caches/serializers.py,sha256=vFDx4fsPxclXp2q0sv27j4al_M_Tj9aR2JJP-xNHQXA,2151
|
93
|
-
prediction_market_agent_tooling/tools/contract.py,sha256=
|
94
|
+
prediction_market_agent_tooling/tools/contract.py,sha256=pdr9ZYmj4QVUfgVKdvOU6ucYdBpJGdha_FMR_LgtcEs,22912
|
94
95
|
prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
|
95
96
|
prediction_market_agent_tooling/tools/cow/cow_order.py,sha256=nZafUa5d23mFnEL2arm3jLdqdA9zl-z_fN39ceovwg4,9079
|
96
97
|
prediction_market_agent_tooling/tools/custom_exceptions.py,sha256=Fh8z1fbwONvP4-j7AmV_PuEcoqb6-QXa9PJ9m7guMcM,93
|
@@ -125,8 +126,8 @@ prediction_market_agent_tooling/tools/tokens/usd.py,sha256=yuW8iPPtcpP4eLH2nORMD
|
|
125
126
|
prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
|
126
127
|
prediction_market_agent_tooling/tools/utils.py,sha256=AC2a68jwASMWuQi-w8twl8b_M52YwrEJ81abmuEaqMY,6661
|
127
128
|
prediction_market_agent_tooling/tools/web3_utils.py,sha256=zRq-eeBGWt8uUGN9G_WfjmJ0eVvO8aWE9S0Pz_Y6AOA,12342
|
128
|
-
prediction_market_agent_tooling-0.64.
|
129
|
-
prediction_market_agent_tooling-0.64.
|
130
|
-
prediction_market_agent_tooling-0.64.
|
131
|
-
prediction_market_agent_tooling-0.64.
|
132
|
-
prediction_market_agent_tooling-0.64.
|
129
|
+
prediction_market_agent_tooling-0.64.12.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
|
130
|
+
prediction_market_agent_tooling-0.64.12.dist-info/METADATA,sha256=yt6lfStMOmUD_6GOSu-oeuwHIHEmXN7HAogInnoOPIU,8742
|
131
|
+
prediction_market_agent_tooling-0.64.12.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
132
|
+
prediction_market_agent_tooling-0.64.12.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
|
133
|
+
prediction_market_agent_tooling-0.64.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|