prediction-market-agent-tooling 0.66.0.dev789__py3-none-any.whl → 0.66.1__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.
@@ -373,7 +373,8 @@ class DeployablePredictionAgent(DeployableAgent):
373
373
  binary_answer = self.answer_binary_market(market)
374
374
  return (
375
375
  CategoricalProbabilisticAnswer.from_probabilistic_answer(
376
- binary_answer
376
+ binary_answer,
377
+ market.outcomes,
377
378
  )
378
379
  if binary_answer is not None
379
380
  else None
@@ -15,6 +15,10 @@ from prediction_market_agent_tooling.gtypes import (
15
15
  Probability,
16
16
  )
17
17
  from prediction_market_agent_tooling.logprobs_parser import FieldLogprobs
18
+ from prediction_market_agent_tooling.markets.omen.omen_constants import (
19
+ OMEN_FALSE_OUTCOME,
20
+ OMEN_TRUE_OUTCOME,
21
+ )
18
22
  from prediction_market_agent_tooling.tools.utils import DatetimeUTC, check_not_none
19
23
 
20
24
 
@@ -142,13 +146,20 @@ class CategoricalProbabilisticAnswer(BaseModel):
142
146
  @staticmethod
143
147
  def from_probabilistic_answer(
144
148
  answer: ProbabilisticAnswer,
149
+ market_outcomes: Sequence[OutcomeStr] | None = None,
145
150
  ) -> "CategoricalProbabilisticAnswer":
146
151
  return CategoricalProbabilisticAnswer(
147
152
  probabilities={
148
- OutcomeStr(YES_OUTCOME_LOWERCASE_IDENTIFIER): answer.p_yes,
149
- OutcomeStr(NO_OUTCOME_LOWERCASE_IDENTIFIER): Probability(
150
- 1 - answer.p_yes
151
- ),
153
+ (
154
+ OMEN_TRUE_OUTCOME
155
+ if market_outcomes and OMEN_TRUE_OUTCOME in market_outcomes
156
+ else OutcomeStr(YES_OUTCOME_LOWERCASE_IDENTIFIER)
157
+ ): answer.p_yes,
158
+ (
159
+ OMEN_FALSE_OUTCOME
160
+ if market_outcomes and OMEN_FALSE_OUTCOME in market_outcomes
161
+ else OutcomeStr(NO_OUTCOME_LOWERCASE_IDENTIFIER)
162
+ ): Probability(1 - answer.p_yes),
152
163
  },
153
164
  confidence=answer.confidence,
154
165
  reasoning=answer.reasoning,
@@ -14,13 +14,13 @@ class QuestionType(str, Enum):
14
14
  class AggregationItem(BaseModel):
15
15
  start_time: DatetimeUTC
16
16
  end_time: DatetimeUTC | None
17
- forecast_values: list[float] | None
17
+ forecast_values: list[float] | None = None
18
18
  forecaster_count: int
19
19
  interval_lower_bounds: list[float] | None
20
20
  centers: list[float] | None
21
21
  interval_upper_bounds: list[float] | None
22
- means: list[float] | None
23
- histogram: list[list[float]] | None
22
+ means: list[float] | None = None
23
+ histogram: list[list[float]] | None = None
24
24
 
25
25
 
26
26
  class Aggregation(BaseModel):
@@ -3,7 +3,7 @@ import os
3
3
  from web3 import Web3
4
4
 
5
5
  from prediction_market_agent_tooling.config import APIKeys
6
- from prediction_market_agent_tooling.gtypes import ABI, HexBytes
6
+ from prediction_market_agent_tooling.gtypes import ABI, ChecksumAddress, HexBytes
7
7
  from prediction_market_agent_tooling.tools.contract import (
8
8
  ContractOnGnosisChain,
9
9
  abi_field_validator,
@@ -19,6 +19,10 @@ class CowGPv2SettlementContract(ContractOnGnosisChain):
19
19
  )
20
20
  )
21
21
 
22
+ address: ChecksumAddress = Web3.to_checksum_address(
23
+ "0x9008D19f58AAbD9eD0D60971565AA8510560ab41"
24
+ )
25
+
22
26
  def setPreSignature(
23
27
  self,
24
28
  api_keys: APIKeys,
@@ -23,6 +23,10 @@ from prediction_market_agent_tooling.markets.data_models import (
23
23
  Resolution,
24
24
  ResolvedBet,
25
25
  )
26
+ from prediction_market_agent_tooling.markets.omen.omen_constants import (
27
+ OMEN_FALSE_OUTCOME,
28
+ OMEN_TRUE_OUTCOME,
29
+ )
26
30
  from prediction_market_agent_tooling.tools.contract import (
27
31
  ContractERC20OnGnosisChain,
28
32
  init_collateral_token_contract,
@@ -37,8 +41,6 @@ from prediction_market_agent_tooling.tools.utils import (
37
41
  utcnow,
38
42
  )
39
43
 
40
- OMEN_TRUE_OUTCOME = OutcomeStr("Yes")
41
- OMEN_FALSE_OUTCOME = OutcomeStr("No")
42
44
  OMEN_BINARY_MARKET_OUTCOMES: t.Sequence[OutcomeStr] = [
43
45
  OMEN_TRUE_OUTCOME,
44
46
  OMEN_FALSE_OUTCOME,
@@ -1,5 +1,10 @@
1
1
  from web3 import Web3
2
2
 
3
+ from prediction_market_agent_tooling.gtypes import OutcomeStr
4
+
5
+ OMEN_TRUE_OUTCOME = OutcomeStr("Yes")
6
+ OMEN_FALSE_OUTCOME = OutcomeStr("No")
7
+
3
8
  WRAPPED_XDAI_CONTRACT_ADDRESS = Web3.to_checksum_address(
4
9
  "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d"
5
10
  )
@@ -2,6 +2,7 @@ import asyncio
2
2
  import typing as t
3
3
  from datetime import timedelta
4
4
 
5
+ from cowdao_cowpy.common.api.errors import UnexpectedResponseError
5
6
  from eth_typing import ChecksumAddress
6
7
  from web3 import Web3
7
8
  from web3.types import TxReceipt
@@ -61,7 +62,6 @@ from prediction_market_agent_tooling.tools.contract import (
61
62
  to_gnosis_chain_contract,
62
63
  )
63
64
  from prediction_market_agent_tooling.tools.cow.cow_order import (
64
- cancel_order,
65
65
  get_buy_token_amount_else_raise,
66
66
  get_orders_by_owner,
67
67
  get_trades_by_owner,
@@ -481,26 +481,32 @@ class SeerAgentMarket(AgentMarket):
481
481
  Returns:
482
482
  Transaction hash of the successful swap
483
483
  """
484
- _, order = swap_tokens_waiting(
485
- amount_wei=amount_wei,
486
- sell_token=sell_token,
487
- buy_token=buy_token,
488
- api_keys=api_keys,
489
- web3=web3,
490
- wait_order_complete=False,
491
- )
492
484
 
493
485
  try:
486
+ _, order = swap_tokens_waiting(
487
+ amount_wei=amount_wei,
488
+ sell_token=sell_token,
489
+ buy_token=buy_token,
490
+ api_keys=api_keys,
491
+ web3=web3,
492
+ wait_order_complete=False,
493
+ timeout=timedelta(minutes=2),
494
+ )
494
495
  order_metadata = asyncio.run(wait_for_order_completion(order=order))
495
496
  logger.debug(
496
497
  f"Swapped {sell_token} for {buy_token}. Order details {order_metadata}"
497
498
  )
498
499
  return order_metadata.uid.root
499
500
 
500
- except TimeoutError:
501
- # Since timeout occurred, we need to cancel the order before trying to swap again.
502
- asyncio.run(cancel_order(order_uids=[order.uid.root], api_keys=api_keys))
503
- logger.info("TimeoutError. Trying to swap directly on Swapr pools.")
501
+ except (UnexpectedResponseError, TimeoutError) as e:
502
+ # We don't retry if not enough balance.
503
+ if "InsufficientBalance" in str(e):
504
+ raise e
505
+ # Note that we don't need to cancel the order because we are setting
506
+ # timeout and valid_to in the order, thus the order simply expires.
507
+ logger.info(
508
+ f"Exception occured when swapping tokens via Cowswap, doing swap via pools. {e}"
509
+ )
504
510
 
505
511
  tx_receipt = SwapPoolHandler(
506
512
  api_keys=api_keys,
@@ -55,7 +55,8 @@ from prediction_market_agent_tooling.markets.omen.cow_contracts import (
55
55
  )
56
56
  from prediction_market_agent_tooling.tools.contract import ContractERC20OnGnosisChain
57
57
  from prediction_market_agent_tooling.tools.cow.models import MinimalisticToken, Order
58
- from prediction_market_agent_tooling.tools.utils import check_not_none, utcnow
58
+ from prediction_market_agent_tooling.tools.cow.semaphore import postgres_rate_limited
59
+ from prediction_market_agent_tooling.tools.utils import utcnow
59
60
 
60
61
 
61
62
  class OrderStatusError(Exception):
@@ -190,7 +191,11 @@ def handle_allowance(
190
191
  )
191
192
 
192
193
 
194
+ @postgres_rate_limited(
195
+ api_keys=APIKeys(), rate_id="swap_tokens_waiting", interval_seconds=60.0
196
+ )
193
197
  @tenacity.retry(
198
+ reraise=True,
194
199
  stop=stop_after_attempt(3),
195
200
  wait=wait_fixed(1),
196
201
  retry=tenacity.retry_if_not_exception_type((TimeoutError, OrderStatusError)),
@@ -205,6 +210,7 @@ def swap_tokens_waiting(
205
210
  env: Envs = "prod",
206
211
  web3: Web3 | None = None,
207
212
  wait_order_complete: bool = True,
213
+ timeout: timedelta = timedelta(seconds=120),
208
214
  ) -> tuple[OrderMetaData | None, CompletedOrder]:
209
215
  # CoW library uses async, so we need to wrap the call in asyncio.run for us to use it.
210
216
  return asyncio.run(
@@ -215,6 +221,7 @@ def swap_tokens_waiting(
215
221
  api_keys,
216
222
  chain,
217
223
  env,
224
+ timeout=timeout,
218
225
  web3=web3,
219
226
  wait_order_complete=wait_order_complete,
220
227
  )
@@ -229,6 +236,7 @@ async def place_swap_order(
229
236
  chain: Chain,
230
237
  env: Envs,
231
238
  slippage_tolerance: float = 0.01,
239
+ valid_to: int | None = None,
232
240
  ) -> CompletedOrder:
233
241
  account = api_keys.get_account()
234
242
  safe_address = api_keys.safe_address_checksum
@@ -242,6 +250,7 @@ async def place_swap_order(
242
250
  chain=chain,
243
251
  env=env,
244
252
  slippage_tolerance=slippage_tolerance,
253
+ valid_to=valid_to,
245
254
  )
246
255
  logger.info(f"Order created: {order}")
247
256
 
@@ -299,6 +308,7 @@ async def swap_tokens_waiting_async(
299
308
  handle_allowance(
300
309
  api_keys=api_keys, sell_token=sell_token, amount_wei=amount_wei, web3=web3
301
310
  )
311
+ valid_to = (utcnow() + timeout).timestamp()
302
312
  order = await place_swap_order(
303
313
  api_keys=api_keys,
304
314
  amount_wei=amount_wei,
@@ -307,6 +317,7 @@ async def swap_tokens_waiting_async(
307
317
  chain=chain,
308
318
  env=env,
309
319
  slippage_tolerance=slippage_tolerance,
320
+ valid_to=int(valid_to),
310
321
  )
311
322
  if wait_order_complete:
312
323
  order_metadata = await wait_for_order_completion(order=order, timeout=timeout)
@@ -327,11 +338,8 @@ async def sign_safe_cow_swap(
327
338
  ) -> None:
328
339
  order_book_api = get_order_book_api(env, chain)
329
340
  posted_order = await order_book_api.get_order_by_uid(order.uid)
330
- CowGPv2SettlementContract(
331
- address=Web3.to_checksum_address(
332
- check_not_none(posted_order.settlementContract).root
333
- )
334
- ).setPreSignature(
341
+
342
+ CowGPv2SettlementContract().setPreSignature(
335
343
  api_keys,
336
344
  HexBytes(posted_order.uid.root),
337
345
  True,
@@ -1,7 +1,9 @@
1
1
  from pydantic import BaseModel
2
+ from sqlmodel import Field, SQLModel
2
3
 
3
4
  from prediction_market_agent_tooling.gtypes import ChecksumAddress
4
5
  from prediction_market_agent_tooling.tools.datetime_utc import DatetimeUTC
6
+ from prediction_market_agent_tooling.tools.utils import utcnow
5
7
 
6
8
 
7
9
  class MinimalisticToken(BaseModel):
@@ -14,3 +16,9 @@ class Order(BaseModel):
14
16
  sellToken: str
15
17
  buyToken: str
16
18
  creationDate: DatetimeUTC
19
+
20
+
21
+ class RateLimit(SQLModel, table=True):
22
+ __tablename__ = "rate_limit"
23
+ id: str = Field(primary_key=True)
24
+ last_called_at: DatetimeUTC = Field(default_factory=utcnow)
@@ -0,0 +1,101 @@
1
+ import time
2
+ from datetime import timedelta
3
+ from functools import wraps
4
+ from typing import Any, Callable, Optional, TypeVar, cast
5
+
6
+ from sqlalchemy.exc import OperationalError
7
+ from sqlmodel import Session, select
8
+
9
+ from prediction_market_agent_tooling.config import APIKeys
10
+ from prediction_market_agent_tooling.tools.cow.models import RateLimit
11
+ from prediction_market_agent_tooling.tools.datetime_utc import DatetimeUTC
12
+ from prediction_market_agent_tooling.tools.db.db_manager import DBManager
13
+ from prediction_market_agent_tooling.tools.utils import utcnow
14
+
15
+ F = TypeVar("F", bound=Callable[..., Any])
16
+
17
+ FALLBACK_SQL_ENGINE = "sqlite:///rate_limit.db"
18
+
19
+
20
+ def postgres_rate_limited(
21
+ api_keys: APIKeys, rate_id: str = "default", interval_seconds: float = 1.0
22
+ ) -> Callable[[F], F]:
23
+ """rate_id is used to distinguish between different rate limits for different functions"""
24
+ limiter = RateLimiter(id=rate_id, interval_seconds=interval_seconds)
25
+
26
+ def decorator(func: F) -> F:
27
+ @wraps(func)
28
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
29
+ sqlalchemy_db_url = (
30
+ api_keys.sqlalchemy_db_url.get_secret_value()
31
+ if api_keys.SQLALCHEMY_DB_URL
32
+ else FALLBACK_SQL_ENGINE
33
+ )
34
+
35
+ db_manager = DBManager(sqlalchemy_db_url)
36
+ db_manager.create_tables([RateLimit])
37
+
38
+ with db_manager.get_session() as session:
39
+ limiter.enforce(session)
40
+ return func(*args, **kwargs)
41
+
42
+ return cast(F, wrapper)
43
+
44
+ return decorator
45
+
46
+
47
+ class RateLimiter:
48
+ def __init__(self, id: str, interval_seconds: float = 1.0) -> None:
49
+ self.id = id
50
+ self.interval = timedelta(seconds=interval_seconds)
51
+
52
+ def enforce(self, session: Session, timeout_seconds: float = 30.0) -> None:
53
+ """
54
+ Enforces the rate limit inside a transaction.
55
+ Blocks until allowed or timeout is reached.
56
+
57
+ Args:
58
+ session: The database session to use
59
+ timeout_seconds: Maximum time in seconds to wait before giving up
60
+
61
+ Raises:
62
+ TimeoutError: If the rate limit cannot be acquired within the timeout period
63
+ """
64
+ start_time = time.monotonic()
65
+
66
+ while True:
67
+ try:
68
+ with session.begin():
69
+ stmt = (
70
+ select(RateLimit)
71
+ .where(RateLimit.id == self.id)
72
+ .with_for_update()
73
+ )
74
+ result: Optional[RateLimit] = session.exec(stmt).first()
75
+
76
+ now = utcnow()
77
+
78
+ if result is None:
79
+ # First time this limiter is used
80
+ session.add(RateLimit(id=self.id))
81
+ return
82
+
83
+ last_called_aware = DatetimeUTC.from_datetime(result.last_called_at)
84
+ elapsed = now - last_called_aware
85
+ if elapsed >= self.interval:
86
+ result.last_called_at = now
87
+ session.add(result)
88
+ return
89
+
90
+ # Not enough time passed, sleep and retry
91
+ to_sleep = (self.interval - elapsed).total_seconds()
92
+ time.sleep(to_sleep)
93
+ except OperationalError:
94
+ # Backoff if DB is under contention
95
+ elapsed_time = time.monotonic() - start_time
96
+ if elapsed_time > timeout_seconds:
97
+ raise TimeoutError(
98
+ f"Could not acquire rate limit '{self.id}' "
99
+ f"after {elapsed_time:.1f} seconds due to database contention"
100
+ )
101
+ time.sleep(0.5)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.66.0.dev789
3
+ Version: 0.66.1
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -14,7 +14,7 @@ Provides-Extra: openai
14
14
  Provides-Extra: optuna
15
15
  Requires-Dist: autoflake (>=2.2.1,<3.0.0)
16
16
  Requires-Dist: base58 (>=1.0.2,<2.0)
17
- Requires-Dist: cowdao-cowpy-kongzii (==1.0.0rc2)
17
+ Requires-Dist: cowdao-cowpy (==1.0.0rc5)
18
18
  Requires-Dist: cron-validator (>=1.0.8,<2.0.0)
19
19
  Requires-Dist: eth-account (>=0.8.0,<0.12.0)
20
20
  Requires-Dist: eth-keys (>=0.6.1,<0.7.0)
@@ -26,7 +26,7 @@ prediction_market_agent_tooling/benchmark/utils.py,sha256=xQd7p9H08-OtN3iC4QT2i9
26
26
  prediction_market_agent_tooling/chains.py,sha256=1qQstoqXMwqwM7k-KH7MjMz8Ei-D83KZByvDbCZpAxs,116
27
27
  prediction_market_agent_tooling/config.py,sha256=-kJfdDr-m0R-tGZ1KRI-hJJk0mXDt142CAlvwaJ2N2I,11778
28
28
  prediction_market_agent_tooling/data_download/langfuse_data_downloader.py,sha256=VY23h324VKIVkevj1B1O-zL1eEp9AElmcfn6SwYDUSc,14246
29
- prediction_market_agent_tooling/deploy/agent.py,sha256=pnYHShwaKZGyVTw3BD-_oSezfhzXAop4lD9JnoFpp60,26240
29
+ prediction_market_agent_tooling/deploy/agent.py,sha256=HLK5rf38PWgKydc_aIUck-wYzWQUnPdhto3Evoq82Lg,26282
30
30
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=yS1fWkHynr9MYGNOM2WsCnRWLPaffY4bOc6bIudrdd4,1377
31
31
  prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=YYayGjTKW02d3BUavJ8M3NmFk41oldEM3FHbwppZGRM,17184
32
32
  prediction_market_agent_tooling/deploy/constants.py,sha256=Qe9cllgsGMkecfmbhXoFkPxuJyG6ATsrT87RF9SmPWM,249
@@ -44,7 +44,7 @@ prediction_market_agent_tooling/markets/agent_market.py,sha256=nMIa6BkoUWdiz12kF
44
44
  prediction_market_agent_tooling/markets/base_subgraph_handler.py,sha256=7RaYO_4qAmQ6ZGM8oPK2-CkiJfKmV9MxM-rJlduaecU,1971
45
45
  prediction_market_agent_tooling/markets/blockchain_utils.py,sha256=6REOt70v3vnzmtCbuRcUTdwt6htXy9nAfNkLOH3Bv1U,2987
46
46
  prediction_market_agent_tooling/markets/categorize.py,sha256=orLZlPaHgeREU66m1amxfWikeV77idV4sZDPB8NgSD0,1300
47
- prediction_market_agent_tooling/markets/data_models.py,sha256=seifqxjVpzZdVKJQ7a5sKPPUM749EHV80SdI6pVQ3b4,7542
47
+ prediction_market_agent_tooling/markets/data_models.py,sha256=H3G-2I9QFhWrBY_KI-4BO2jMtb_f9yauzHz-zA4NI5Q,8016
48
48
  prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  prediction_market_agent_tooling/markets/manifold/api.py,sha256=tWnjuqvU8pcCuja2B_ynHeds1iiEFc6QWHjeSO_GSxY,7676
50
50
  prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=3z1gFbPMEgCDGqeH-IK8wcvqmIHgLdZX8C2M1UQ7iDw,6740
@@ -53,13 +53,13 @@ prediction_market_agent_tooling/markets/manifold/utils.py,sha256=DCigEbpGWkXR-RZ
53
53
  prediction_market_agent_tooling/markets/market_fees.py,sha256=YeK3ynjYIguB0xf6sO5iyg9lOdW_HD4C6nbJfiGyRCU,1351
54
54
  prediction_market_agent_tooling/markets/markets.py,sha256=lIEPfPJD1Gz90pTvN2pZi51rpb969STPgQtNFCqHUJg,2667
55
55
  prediction_market_agent_tooling/markets/metaculus/api.py,sha256=4TRPGytQQbSdf42DCg2M_JWYPAuNjqZ3eBqaQBLkNks,2736
56
- prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=FaBCTPPezXbBwZ9p791CiVgQ4vB696xnMbz9XVXmiVI,3267
56
+ prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=WjPt0MKeJNtoY-8oLQTLC8vQYYQ-dBj8UZoPq-UBYsQ,3288
57
57
  prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=S1Kkf_F3KuqFO938d5bun60wd8lsGvnGqxsW-tgEBgw,5110
58
58
  prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- prediction_market_agent_tooling/markets/omen/cow_contracts.py,sha256=sl1L4cK5nAJwZ2wdhLzqh8p7h_IEValNvLwKUlInKxw,957
60
- prediction_market_agent_tooling/markets/omen/data_models.py,sha256=-EhjQRQLxI0O3m4eOKUMH10_RS4tOBwIvMSnbIIHu10,31056
59
+ prediction_market_agent_tooling/markets/omen/cow_contracts.py,sha256=sFaW82u_haL4nze8fjTmnQsOuV0OecunQlAhh1OAw0w,1091
60
+ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=RsBYSbM4deA6Os4kQ3egH3HvwT80tQho6T1yyoATCMs,31103
61
61
  prediction_market_agent_tooling/markets/omen/omen.py,sha256=hTHqS_-Z7jocrwuisqymYWLUUn8bK_WSRwaKPgXz1es,50477
62
- prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=pYcdK5a1nPte9x7E154vkIiM6cLw1JvqpLibs9HsBbo,347
62
+ prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=XtRk4vpxwUYkTndfjlcmghA-NOIneV8zdHFdyI7tHhM,487
63
63
  prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=27-HRngTqfk_wgvttB3GeVHhy_O2YZcz9izo9OufOI0,29991
64
64
  prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=D-ubf_LumHs_c5rBAAntQ8wGKprtO2V1JZeedmChNIE,11035
65
65
  prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=h-YFRLY5rlhM9RqqceyfbHlno3elltN8Nr_Mnu1kJ90,40006
@@ -71,7 +71,7 @@ prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=8kTeVjXPcXC6D
71
71
  prediction_market_agent_tooling/markets/seer/data_models.py,sha256=osM9WaLsxQf-pfVGq0O-IkM93ehP9a7fVUf-hi2VlMs,5523
72
72
  prediction_market_agent_tooling/markets/seer/exceptions.py,sha256=cEObdjluivD94tgOLzmimR7wgQEOt6SRakrYdhsRQtk,112
73
73
  prediction_market_agent_tooling/markets/seer/price_manager.py,sha256=MClY2NGwOV70nZYIcmzXFy6Ogd8NBIq7telQcQ3VcU4,6243
74
- prediction_market_agent_tooling/markets/seer/seer.py,sha256=vXSJ-iqkO44q4HVsKbu_6gD8lpx7t70Rbx-Or6xOao8,24354
74
+ prediction_market_agent_tooling/markets/seer/seer.py,sha256=h1ntSoljQ3nKQj-orxVcR5YE8ijJU4D_iRNzwg8zp2k,24672
75
75
  prediction_market_agent_tooling/markets/seer/seer_contracts.py,sha256=uMzpHpI6_tgfhWxPzupLdUJlZ1P2wr0rRiYjAGClKgU,4984
76
76
  prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=pJxch9_u0EdiIatQP1-UFClt8UEfMZAXBlk5wDO_ovk,9940
77
77
  prediction_market_agent_tooling/markets/seer/subgraph_data_models.py,sha256=0izxS8Mtzonfdl9UqvFVXrdj0hVzieroekXhogfZKCw,1817
@@ -87,8 +87,9 @@ prediction_market_agent_tooling/tools/caches/inmemory_cache.py,sha256=ZW5iI5rmjq
87
87
  prediction_market_agent_tooling/tools/caches/serializers.py,sha256=vFDx4fsPxclXp2q0sv27j4al_M_Tj9aR2JJP-xNHQXA,2151
88
88
  prediction_market_agent_tooling/tools/contract.py,sha256=pdr9ZYmj4QVUfgVKdvOU6ucYdBpJGdha_FMR_LgtcEs,22912
89
89
  prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
90
- prediction_market_agent_tooling/tools/cow/cow_order.py,sha256=yTUG6VPVe292R_5IG8F90kfZfAeun8G1TL6mHsnaXM0,12984
91
- prediction_market_agent_tooling/tools/cow/models.py,sha256=ZWGW0og5vXjgZVXxkx4uV2m61Q8AmL-L-D_D4f7ApR0,379
90
+ prediction_market_agent_tooling/tools/cow/cow_order.py,sha256=cKjyVbBblOkVjBbLyJ8w7qnzkxRhawtQYeNb4rymZwc,13272
91
+ prediction_market_agent_tooling/tools/cow/models.py,sha256=jAITIcg8GXEGtRQpezVvlqaQ5M8OEiiHqLwoyUeX3JM,655
92
+ prediction_market_agent_tooling/tools/cow/semaphore.py,sha256=IJGKRgvXnRSkEt_z1i5-eFIoVMcyhr7HK0JfIz1MXdQ,3738
92
93
  prediction_market_agent_tooling/tools/custom_exceptions.py,sha256=Fh8z1fbwONvP4-j7AmV_PuEcoqb6-QXa9PJ9m7guMcM,93
93
94
  prediction_market_agent_tooling/tools/datetime_utc.py,sha256=8_WackjtjC8zHXrhQFTGQ6e6Fz_6llWoKR4CSFvIv9I,2766
94
95
  prediction_market_agent_tooling/tools/db/db_manager.py,sha256=GtzHH1NLl8HwqC8Z7s6eTlIQXuV0blxfaV2PeQrBnfQ,3013
@@ -124,8 +125,8 @@ prediction_market_agent_tooling/tools/tokens/usd.py,sha256=yuW8iPPtcpP4eLH2nORMD
124
125
  prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
125
126
  prediction_market_agent_tooling/tools/utils.py,sha256=RlWSlzS2LavMIWrpwn1fevbzgPZruD4VcXTa-XxjWnE,7343
126
127
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=0r26snqCXGdLKCWA8jpe7DV8x2NPYWZwOy4oyKyDCYk,12615
127
- prediction_market_agent_tooling-0.66.0.dev789.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
128
- prediction_market_agent_tooling-0.66.0.dev789.dist-info/METADATA,sha256=WO3GuEMVYTvLpvwToAN3XN_gqTIG6dSMZP1CUsoeo4U,8741
129
- prediction_market_agent_tooling-0.66.0.dev789.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
130
- prediction_market_agent_tooling-0.66.0.dev789.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
131
- prediction_market_agent_tooling-0.66.0.dev789.dist-info/RECORD,,
128
+ prediction_market_agent_tooling-0.66.1.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
129
+ prediction_market_agent_tooling-0.66.1.dist-info/METADATA,sha256=N_rlOf-Rwg-XY743zHGYmSOUJIxMNUeg2_1Jga3hsSY,8726
130
+ prediction_market_agent_tooling-0.66.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
131
+ prediction_market_agent_tooling-0.66.1.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
132
+ prediction_market_agent_tooling-0.66.1.dist-info/RECORD,,