prediction-market-agent-tooling 0.67.3__py3-none-any.whl → 0.67.4__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.
@@ -443,8 +443,11 @@ class KellyBettingStrategy(BettingStrategy):
443
443
  kelly_bet_size = min(kelly_bet.size, max_price_impact_bet_amount)
444
444
 
445
445
  bet_outcome = direction if kelly_bet.direction else other_direction
446
+
446
447
  amounts = {
447
- bet_outcome: market.get_token_in_usd(kelly_bet_size),
448
+ bet_outcome: BettingStrategy.cap_to_profitable_bet_amount(
449
+ market, market.get_token_in_usd(kelly_bet_size), bet_outcome
450
+ ),
448
451
  }
449
452
  target_position = Position(market_id=market.id, amounts_current=amounts)
450
453
  trades = self._build_rebalance_trades_from_positions(
@@ -475,12 +478,12 @@ class KellyBettingStrategy(BettingStrategy):
475
478
  self, market: AgentMarket, kelly_bet: SimpleBet, direction: OutcomeStr
476
479
  ) -> CollateralToken:
477
480
  def calculate_price_impact_deviation_from_target_price_impact(
478
- bet_amount_usd: float, # Needs to be float because it's used in minimize_scalar internally.
481
+ bet_amount_collateral: float, # Needs to be float because it's used in minimize_scalar internally.
479
482
  ) -> float:
480
483
  outcome_idx = market.get_outcome_index(direction)
481
484
  price_impact = self.calculate_price_impact_for_bet_amount(
482
485
  outcome_idx=outcome_idx,
483
- bet_amount=market.get_usd_in_token(USD(bet_amount_usd)),
486
+ bet_amount=CollateralToken(bet_amount_collateral),
484
487
  pool_balances=pool_balances,
485
488
  fees=market.fees,
486
489
  )
@@ -504,7 +507,7 @@ class KellyBettingStrategy(BettingStrategy):
504
507
  calculate_price_impact_deviation_from_target_price_impact,
505
508
  bounds=(0, 1000 * total_pool_balance),
506
509
  method="bounded",
507
- tol=1e-11,
510
+ tol=1e-13,
508
511
  options={"maxiter": 10000},
509
512
  )
510
513
  return CollateralToken(optimized_bet_amount.x)
@@ -153,6 +153,23 @@ class AgentMarket(BaseModel):
153
153
  if "fees" not in data and "fee" in data:
154
154
  data["fees"] = MarketFees(absolute=0.0, bet_proportion=data["fee"])
155
155
  del data["fee"]
156
+ # Backward compatibility for older `AgentMarket` without `probabilities`.
157
+ if "probabilities" not in data and "current_p_yes" in data:
158
+ yes_outcome = data["outcomes"][
159
+ [o.lower() for o in data["outcomes"]].index(
160
+ YES_OUTCOME_LOWERCASE_IDENTIFIER
161
+ )
162
+ ]
163
+ no_outcome = data["outcomes"][
164
+ [o.lower() for o in data["outcomes"]].index(
165
+ NO_OUTCOME_LOWERCASE_IDENTIFIER
166
+ )
167
+ ]
168
+ data["probabilities"] = {
169
+ yes_outcome: data["current_p_yes"],
170
+ no_outcome: 1 - data["current_p_yes"],
171
+ }
172
+ del data["current_p_yes"]
156
173
  return data
157
174
 
158
175
  def market_outcome_for_probability_key(
@@ -37,6 +37,10 @@ def store_trades(
37
37
  logger.warning(f"No prediction for market {market_id}, not storing anything.")
38
38
  return None
39
39
 
40
+ logger.info(
41
+ f"Storing trades for market {market_id}, with outcomes {outcomes}, {traded_market=}."
42
+ )
43
+
40
44
  probabilities = traded_market.answer.probabilities
41
45
  if not probabilities:
42
46
  logger.info("Skipping this since no probabilities available.")
@@ -56,9 +60,7 @@ def store_trades(
56
60
  ipfs_hash_decoded = ipfscidv0_to_byte32(ipfs_hash)
57
61
 
58
62
  # tx_hashes must be list of bytes32 (see Solidity contract).
59
- tx_hashes = [
60
- HexBytes(HexStr(i.id)) for i in traded_market.trades if i.id is not None
61
- ]
63
+ tx_hashes = [HexBytes(HexStr(i.id)) for i in traded_market.trades]
62
64
 
63
65
  # Dune dashboard expects the probs to be in the same order as on the market.
64
66
  probabilities_converted = [
@@ -1,7 +1,7 @@
1
1
  from enum import Enum
2
- from typing import Annotated, Sequence
2
+ from typing import Annotated, Any, Sequence
3
3
 
4
- from pydantic import BaseModel, BeforeValidator, computed_field
4
+ from pydantic import BaseModel, BeforeValidator, computed_field, model_validator
5
5
 
6
6
  from prediction_market_agent_tooling.deploy.constants import (
7
7
  DOWN_OUTCOME_LOWERCASE_IDENTIFIER,
@@ -157,6 +157,15 @@ class CategoricalProbabilisticAnswer(BaseModel):
157
157
  confidence: float
158
158
  reasoning: str | None = None
159
159
 
160
+ @model_validator(mode="before")
161
+ @classmethod
162
+ def _model_validator(cls, data: Any) -> Any:
163
+ if "p_yes" in data:
164
+ return CategoricalProbabilisticAnswer.from_probabilistic_answer(
165
+ ProbabilisticAnswer.model_validate(data)
166
+ ).model_dump()
167
+ return data
168
+
160
169
  @property
161
170
  def probable_resolution(self) -> Resolution:
162
171
  most_likely_outcome = max(
@@ -290,9 +299,20 @@ class Trade(BaseModel):
290
299
  outcome: OutcomeStr
291
300
  amount: USD
292
301
 
302
+ @model_validator(mode="before")
303
+ @classmethod
304
+ def _model_validator(cls, data: Any) -> Any:
305
+ if isinstance(data["outcome"], bool):
306
+ data["outcome"] = (
307
+ YES_OUTCOME_LOWERCASE_IDENTIFIER
308
+ if data["outcome"]
309
+ else NO_OUTCOME_LOWERCASE_IDENTIFIER
310
+ )
311
+ return data
312
+
293
313
 
294
314
  class PlacedTrade(Trade):
295
- id: str | None = None
315
+ id: str
296
316
 
297
317
  @staticmethod
298
318
  def from_trade(trade: Trade, id: str) -> "PlacedTrade":
@@ -1,4 +1,5 @@
1
1
  import typing as t
2
+ from datetime import timedelta
2
3
  from enum import Enum
3
4
  from urllib.parse import urljoin
4
5
 
@@ -49,7 +50,7 @@ def get_polymarkets_with_pagination(
49
50
  Binary markets have len(model.markets) == 1.
50
51
  Categorical markets have len(model.markets) > 1
51
52
  """
52
- client: httpx.Client = HttpxCachedClient(ttl=60).get_client()
53
+ client: httpx.Client = HttpxCachedClient(ttl=timedelta(seconds=60)).get_client()
53
54
  all_markets: list[PolymarketGammaResponseDataItem] = []
54
55
  offset = 0
55
56
  remaining = limit
@@ -82,6 +83,9 @@ def get_polymarkets_with_pagination(
82
83
 
83
84
  markets_to_add = []
84
85
  for m in market_response.data:
86
+ # Some Polymarket markets are missing the markets field
87
+ if m.markets is None:
88
+ continue
85
89
  if excluded_questions and m.title in excluded_questions:
86
90
  continue
87
91
 
@@ -94,14 +98,16 @@ def get_polymarkets_with_pagination(
94
98
  ]:
95
99
  continue
96
100
 
97
- if created_after and created_after > m.startDate:
101
+ if not m.startDate or (created_after and created_after > m.startDate):
98
102
  continue
99
103
 
100
104
  markets_to_add.append(m)
101
105
 
102
106
  if only_binary:
103
107
  markets_to_add = [
104
- market for market in market_response.data if len(market.markets) == 1
108
+ market
109
+ for market in markets_to_add
110
+ if market.markets is not None and len(market.markets) == 1
105
111
  ]
106
112
 
107
113
  # Add the markets from this batch to our results
@@ -59,16 +59,18 @@ class PolymarketGammaResponseDataItem(BaseModel):
59
59
  id: str
60
60
  slug: str
61
61
  volume: float | None = None
62
- startDate: DatetimeUTC
62
+ startDate: DatetimeUTC | None = None
63
63
  endDate: DatetimeUTC | None = None
64
64
  liquidity: float | None = None
65
65
  liquidityClob: float | None = None
66
66
  title: str
67
- description: str
67
+ description: str | None = None
68
68
  archived: bool
69
69
  closed: bool
70
70
  active: bool
71
- markets: list[PolymarketGammaMarket]
71
+ markets: list[
72
+ PolymarketGammaMarket
73
+ ] | None = None # Some Polymarket markets have missing markets field. We skip these markets manually when retrieving.
72
74
  tags: list[PolymarketGammaTag]
73
75
 
74
76
  @property
@@ -7,6 +7,7 @@ from prediction_market_agent_tooling.gtypes import (
7
7
  OutcomeStr,
8
8
  Probability,
9
9
  )
10
+ from prediction_market_agent_tooling.loggers import logger
10
11
  from prediction_market_agent_tooling.markets.agent_market import (
11
12
  AgentMarket,
12
13
  ConditionalFilterType,
@@ -31,6 +32,7 @@ from prediction_market_agent_tooling.markets.polymarket.polymarket_subgraph_hand
31
32
  PolymarketSubgraphHandler,
32
33
  )
33
34
  from prediction_market_agent_tooling.tools.datetime_utc import DatetimeUTC
35
+ from prediction_market_agent_tooling.tools.utils import check_not_none
34
36
 
35
37
 
36
38
  class PolymarketAgentMarket(AgentMarket):
@@ -69,9 +71,11 @@ class PolymarketAgentMarket(AgentMarket):
69
71
  ]
70
72
  # For a binary market, there should be exactly one payout numerator greater than 0.
71
73
  if len(payout_numerator_indices_gt_0) != 1:
72
- raise ValueError(
73
- f"Only binary markets are supported. Got payout numerators: {condition_model.payoutNumerators}"
74
+ # These cases involve multi-categorical resolution (to be implemented https://github.com/gnosis/prediction-market-agent-tooling/issues/770)
75
+ logger.warning(
76
+ f"Only binary markets are supported. Got payout numerators: {condition_model.payoutNumerators} for condition_id {condition_id.hex()}"
74
77
  )
78
+ return Resolution(outcome=None, invalid=False)
75
79
 
76
80
  # we return the only payout numerator greater than 0 as resolution
77
81
  resolved_outcome = outcomes[payout_numerator_indices_gt_0[0]]
@@ -83,16 +87,16 @@ class PolymarketAgentMarket(AgentMarket):
83
87
  condition_model_dict: dict[HexBytes, ConditionSubgraphModel],
84
88
  ) -> "PolymarketAgentMarket":
85
89
  # If len(model.markets) > 0, this denotes a categorical market.
86
-
87
- outcomes = model.markets[0].outcomes_list
88
- outcome_prices = model.markets[0].outcome_prices
90
+ markets = check_not_none(model.markets)
91
+ outcomes = markets[0].outcomes_list
92
+ outcome_prices = markets[0].outcome_prices
89
93
  if not outcome_prices:
90
94
  # We give random prices
91
95
  outcome_prices = [0.5, 0.5]
92
96
  probabilities = {o: Probability(op) for o, op in zip(outcomes, outcome_prices)}
93
97
 
94
98
  resolution = PolymarketAgentMarket.build_resolution_from_condition(
95
- condition_id=model.markets[0].conditionId,
99
+ condition_id=markets[0].conditionId,
96
100
  condition_model_dict=condition_model_dict,
97
101
  outcomes=outcomes,
98
102
  )
@@ -164,7 +168,11 @@ class PolymarketAgentMarket(AgentMarket):
164
168
  )
165
169
 
166
170
  condition_models = PolymarketSubgraphHandler().get_conditions(
167
- condition_ids=[market.markets[0].conditionId for market in markets]
171
+ condition_ids=[
172
+ market.markets[0].conditionId
173
+ for market in markets
174
+ if market.markets is not None
175
+ ]
168
176
  )
169
177
  condition_models_dict = {c.id: c for c in condition_models}
170
178
 
@@ -2,6 +2,7 @@ import asyncio
2
2
  import typing as t
3
3
  from datetime import timedelta
4
4
 
5
+ import cachetools
5
6
  from cowdao_cowpy.common.api.errors import UnexpectedResponseError
6
7
  from eth_typing import ChecksumAddress
7
8
  from web3 import Web3
@@ -99,6 +100,11 @@ from prediction_market_agent_tooling.tools.utils import check_not_none, utcnow
99
100
  SEER_TINY_BET_AMOUNT = USD(0.1)
100
101
 
101
102
 
103
+ SHARED_CACHE: cachetools.TTLCache[t.Hashable, t.Any] = cachetools.TTLCache(
104
+ maxsize=256, ttl=10 * 60
105
+ )
106
+
107
+
102
108
  class SeerAgentMarket(AgentMarket):
103
109
  wrapped_tokens: list[ChecksumAddress]
104
110
  creator: HexAddress
@@ -541,6 +547,7 @@ class SeerAgentMarket(AgentMarket):
541
547
  liquidity = self.get_liquidity_for_outcome(outcome)
542
548
  return liquidity > self.minimum_market_liquidity_required
543
549
 
550
+ @cachetools.cached(cache=SHARED_CACHE, key=lambda self: f"has_liquidity_{self.id}")
544
551
  def has_liquidity(self) -> bool:
545
552
  # We define a market as having liquidity if it has liquidity for all outcomes except for the invalid (index -1)
546
553
  return all(
@@ -594,7 +601,7 @@ class SeerAgentMarket(AgentMarket):
594
601
  f"Expected exactly 1 trade from {order_metadata=}, but got {len(trades)=}."
595
602
  )
596
603
  cow_tx_hash = trades[0].txHash
597
- logger.info(f"TxHash for {order_metadata.uid.root=} is {cow_tx_hash=}.")
604
+ logger.info(f"TxHash is {cow_tx_hash=} for {order_metadata.uid.root=}.")
598
605
  return cow_tx_hash.hex()
599
606
 
600
607
  except (
@@ -626,7 +633,9 @@ class SeerAgentMarket(AgentMarket):
626
633
  amount_wei=amount_wei,
627
634
  web3=web3,
628
635
  )
629
- return tx_receipt["transactionHash"].hex()
636
+ swap_pool_tx_hash = tx_receipt["transactionHash"].hex()
637
+ logger.info(f"TxHash is {swap_pool_tx_hash=}.")
638
+ return swap_pool_tx_hash
630
639
 
631
640
  def place_bet(
632
641
  self,
@@ -71,7 +71,10 @@ class SwapPoolHandler:
71
71
  price_outcome_token = PriceManager.build(
72
72
  HexBytes(HexStr(self.market_id))
73
73
  ).get_token_price_from_pools(token=outcome_token)
74
- if not price_outcome_token:
74
+ if (
75
+ not price_outcome_token
76
+ or not price_outcome_token.priceOfCollateralInAskingToken
77
+ ):
75
78
  raise ValueError(
76
79
  f"Could not find price for {outcome_token=} and {self.collateral_token_address}"
77
80
  )
@@ -60,6 +60,15 @@ class HexBytes(HexBytesBase, BaseHex):
60
60
  value = hex_str[2:] if hex_str.startswith("0x") else hex_str
61
61
  return super().fromhex(value)
62
62
 
63
+ def hex(
64
+ self,
65
+ sep: t.Union[str, bytes] | None = None,
66
+ bytes_per_sep: t.SupportsIndex = 1,
67
+ ) -> str:
68
+ """We enforce a 0x prefix."""
69
+ x = super().hex(sep, bytes_per_sep) # type: ignore[arg-type]
70
+ return x if x.startswith("0x") else "0x" + x
71
+
63
72
  @classmethod
64
73
  def __eth_pydantic_validate__(
65
74
  cls, value: t.Any, info: ValidationInfo | None = None
@@ -1,15 +1,17 @@
1
+ from datetime import timedelta
2
+
1
3
  import hishel
2
4
  import httpx
3
5
 
4
6
  from prediction_market_agent_tooling.tools.singleton import SingletonMeta
5
7
 
6
- ONE_DAY_IN_SECONDS = 60 * 60 * 24
8
+ ONE_DAY = timedelta(days=1)
7
9
 
8
10
 
9
11
  class HttpxCachedClient(metaclass=SingletonMeta):
10
- def __init__(self, ttl: int = ONE_DAY_IN_SECONDS) -> None:
12
+ def __init__(self, ttl: timedelta = ONE_DAY) -> None:
11
13
  storage = hishel.FileStorage(
12
- ttl=ttl,
14
+ ttl=ttl.total_seconds(),
13
15
  check_ttl_every=60,
14
16
  )
15
17
  controller = hishel.Controller(force_cache=True)
@@ -68,6 +68,7 @@ def get_traces_for_agent(
68
68
  client: Langfuse,
69
69
  to_timestamp: DatetimeUTC | None = None,
70
70
  tags: str | list[str] | None = None,
71
+ limit: int | None = None,
71
72
  ) -> list[TraceWithDetails]:
72
73
  """
73
74
  Fetch agent traces using pagination
@@ -98,6 +99,9 @@ def get_traces_for_agent(
98
99
  if has_output:
99
100
  agent_traces = [t for t in agent_traces if t.output is not None]
100
101
  all_agent_traces.extend(agent_traces)
102
+ if limit is not None and len(all_agent_traces) >= limit:
103
+ all_agent_traces = all_agent_traces[:limit]
104
+ break
101
105
  return all_agent_traces
102
106
 
103
107
 
@@ -8,16 +8,21 @@ class SingletonMeta(type, t.Generic[_T]):
8
8
  The Singleton class can be implemented in different ways in Python. Some
9
9
  possible methods include: base class, decorator, metaclass. We will use the
10
10
  metaclass because it is best suited for this purpose.
11
+
12
+ This version creates a unique instance for each unique set of __init__ arguments.
11
13
  """
12
14
 
13
- _instances: dict[t.Any, _T] = {}
15
+ _instances: dict[
16
+ tuple[t.Any, tuple[t.Any, ...], tuple[tuple[str, t.Any], ...]], _T
17
+ ] = {}
14
18
 
15
19
  def __call__(self, *args: t.Any, **kwargs: t.Any) -> _T:
16
20
  """
17
- Possible changes to the value of the `__init__` argument do not affect
18
- the returned instance.
21
+ Different __init__ arguments will result in different instances.
19
22
  """
20
- if self not in self._instances:
23
+ # Create a key based on the class, args, and kwargs (sorted for consistency)
24
+ key = (self, args, tuple(sorted(kwargs.items())))
25
+ if key not in self._instances:
21
26
  instance = super().__call__(*args, **kwargs)
22
- self._instances[self] = instance
23
- return self._instances[self]
27
+ self._instances[key] = instance
28
+ return self._instances[key]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.67.3
3
+ Version: 0.67.4
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -29,7 +29,7 @@ prediction_market_agent_tooling/config.py,sha256=-kJfdDr-m0R-tGZ1KRI-hJJk0mXDt14
29
29
  prediction_market_agent_tooling/data_download/langfuse_data_downloader.py,sha256=VY23h324VKIVkevj1B1O-zL1eEp9AElmcfn6SwYDUSc,14246
30
30
  prediction_market_agent_tooling/deploy/agent.py,sha256=eFiOaBgaEcUuxUNnqRdXrWen3lEeyhzM9EzLY4NY07Q,30380
31
31
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=yS1fWkHynr9MYGNOM2WsCnRWLPaffY4bOc6bIudrdd4,1377
32
- prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=iSipsauuAI4Ij1BVF_0w9NJT5n83vouMG7aPnrrTfWY,21149
32
+ prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=N3asdTTNA1i72Fpob1C7rffwDoV-ghnjrojPBxYq4Cw,21248
33
33
  prediction_market_agent_tooling/deploy/constants.py,sha256=iobTlZpQD6_2UL9TfoElAnBEbqzIIAKZSsAoMCGhwmA,331
34
34
  prediction_market_agent_tooling/deploy/gcp/deploy.py,sha256=CYUgnfy-9XVk04kkxA_5yp0GE9Mw5caYqlFUZQ2j3ks,3739
35
35
  prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py,sha256=OsPboCFGiZKsvGyntGZHwdqPlLTthITkNF5rJFvGgU8,2582
@@ -41,11 +41,11 @@ prediction_market_agent_tooling/jobs/jobs_models.py,sha256=DoZ9dlvVhpNrnINiR1uy6
41
41
  prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=lCymxn0iH4xDmqouTP2LMORoGCiTzlK1_yqYtx1Njj4,5132
42
42
  prediction_market_agent_tooling/loggers.py,sha256=o1HyvwtK1DbuC0YWQwJNqzXLLbSC41gNBkEUxiAziEg,5796
43
43
  prediction_market_agent_tooling/logprobs_parser.py,sha256=DBlBQtWX8_URXhzTU3YWIPa76Zx3QDHlx1ARqbgJsVI,5008
44
- prediction_market_agent_tooling/markets/agent_market.py,sha256=tlNiVhP5m0Wtz4MEjTCCGY-nsJUVGF4JZKuo94y8w1Y,20564
44
+ prediction_market_agent_tooling/markets/agent_market.py,sha256=AvIJdeu4LAMtxAvQIRZktrbUYOczb3kditVVUGyF5EU,21289
45
45
  prediction_market_agent_tooling/markets/base_subgraph_handler.py,sha256=7RaYO_4qAmQ6ZGM8oPK2-CkiJfKmV9MxM-rJlduaecU,1971
46
- prediction_market_agent_tooling/markets/blockchain_utils.py,sha256=6REOt70v3vnzmtCbuRcUTdwt6htXy9nAfNkLOH3Bv1U,2987
46
+ prediction_market_agent_tooling/markets/blockchain_utils.py,sha256=TPGfQaC6BvJud6zuPA3oewojOXleYjiTKD7AX6PUwKA,3071
47
47
  prediction_market_agent_tooling/markets/categorize.py,sha256=orLZlPaHgeREU66m1amxfWikeV77idV4sZDPB8NgSD0,1300
48
- prediction_market_agent_tooling/markets/data_models.py,sha256=x4dBbdPb7dd2JiaD15jDaiA65KB1IcDGnx1hYcY0-2U,10063
48
+ prediction_market_agent_tooling/markets/data_models.py,sha256=f05tZuflrcfy19dqRL2f_ABVa_lzmzOrW09zxOw6s6Q,10735
49
49
  prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  prediction_market_agent_tooling/markets/manifold/api.py,sha256=tWnjuqvU8pcCuja2B_ynHeds1iiEFc6QWHjeSO_GSxY,7676
51
51
  prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=3z1gFbPMEgCDGqeH-IK8wcvqmIHgLdZX8C2M1UQ7iDw,6740
@@ -64,20 +64,20 @@ prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=XtRk4vpxwU
64
64
  prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=27-HRngTqfk_wgvttB3GeVHhy_O2YZcz9izo9OufOI0,29991
65
65
  prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=D-ubf_LumHs_c5rBAAntQ8wGKprtO2V1JZeedmChNIE,11035
66
66
  prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=2fLlPa5EYPmc2Oa2qilR3Z5qZv-q7xJECN9Hvaj3LB4,40001
67
- prediction_market_agent_tooling/markets/polymarket/api.py,sha256=-WW49xTYxzb6wBWZ8t6oOpf9puD6Vph8y2AYBocLGcM,4211
68
- prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=iRorGwuC9lXcWiVeOqykPip7FSx41RCAo6FOhyKlokU,4971
67
+ prediction_market_agent_tooling/markets/polymarket/api.py,sha256=Kr6Y_V04OmYUWvn9J3snJXhvL4S1doUsnXgRSWvq5Sk,4466
68
+ prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=kfuNLZKC978pm1ENf35_IgvOT6X3qSnYaLyT13F5C8s,5130
69
69
  prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=QQoFZp1hSllB9r3yaiglMbEtP3YNCCMm3VmqZ2RDnlo,10576
70
- prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=ttUmiQllflT4ZCvaHVlykOx_4upsuZF4xknBDzfJMiE,6766
70
+ prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=5QTO7OIqBr7YyDvnTodDqex_XHBF4S5YYtCy56Xbkdg,7264
71
71
  prediction_market_agent_tooling/markets/polymarket/polymarket_subgraph_handler.py,sha256=bjgTQXf7HhN0Pc_oy5fFNE6v12F8rK05nq6bozgOYIg,1587
72
72
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=A_diygWKYyp4WHbxAlAVAuC0S0ZqbEKE80wxL6mxHKQ,1275
73
73
  prediction_market_agent_tooling/markets/seer/data_models.py,sha256=d8J-hgUmGGhhv41u816O7xvBsi9m-TginULvj82hf_g,6681
74
74
  prediction_market_agent_tooling/markets/seer/exceptions.py,sha256=cEObdjluivD94tgOLzmimR7wgQEOt6SRakrYdhsRQtk,112
75
75
  prediction_market_agent_tooling/markets/seer/price_manager.py,sha256=PZf6-6zc6DvH1u65wHWyeD55lgG-UGnN_xzBMvrb3ug,7120
76
- prediction_market_agent_tooling/markets/seer/seer.py,sha256=MYxefiG3n7QT8R6kbjxkbJsC2iOH6iUm0ZHxCNGohJ0,28536
76
+ prediction_market_agent_tooling/markets/seer/seer.py,sha256=i_a7VtAogk3NvLWCgLjF9EqK-C1AChuEaDpl06fsJYc,28861
77
77
  prediction_market_agent_tooling/markets/seer/seer_contracts.py,sha256=JqfQNFSRWREPw6pQGpJoh-No5ZlKwmTiALJiAYEuvW8,5516
78
78
  prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=Ta4wb-P42Q0_GJfAtHkTjRUlknxwgHmjwdUqrgfHi0s,17133
79
79
  prediction_market_agent_tooling/markets/seer/subgraph_data_models.py,sha256=7szvK5we3LF38UthWHg5V3LD6C137O5_WMEcP9Dwl8w,1763
80
- prediction_market_agent_tooling/markets/seer/swap_pool_handler.py,sha256=kyU65phG7eHUyFMuwQ2HQUIayjBe6PCjBJ_pS7p164s,3434
80
+ prediction_market_agent_tooling/markets/seer/swap_pool_handler.py,sha256=k_sCEJZLroVDjOVkZ084VKJGNODLGjBGezhsWEZvlH4,3528
81
81
  prediction_market_agent_tooling/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  prediction_market_agent_tooling/tools/_generic_value.py,sha256=pD_PI13lpPp1gFoljHwa_Lzlp-u2pu0m-Z7LcxwDM2U,10618
83
83
  prediction_market_agent_tooling/tools/balances.py,sha256=Osab21btfJDw2Y-jT_TV-KHGrseCRxcsYeW6WcOMB8E,1050
@@ -96,15 +96,15 @@ prediction_market_agent_tooling/tools/custom_exceptions.py,sha256=Fh8z1fbwONvP4-
96
96
  prediction_market_agent_tooling/tools/datetime_utc.py,sha256=8_WackjtjC8zHXrhQFTGQ6e6Fz_6llWoKR4CSFvIv9I,2766
97
97
  prediction_market_agent_tooling/tools/db/db_manager.py,sha256=GtzHH1NLl8HwqC8Z7s6eTlIQXuV0blxfaV2PeQrBnfQ,3013
98
98
  prediction_market_agent_tooling/tools/google_utils.py,sha256=D-6FB2HRtmxaKZJ_Za-qj6VZCp5XU18rF4wLMMrqEUg,2557
99
- prediction_market_agent_tooling/tools/hexbytes_custom.py,sha256=ytwr4N8t-9UF1F4wXsln3IV1HBKgaYirsErc3NsKL-M,2119
100
- prediction_market_agent_tooling/tools/httpx_cached_client.py,sha256=M2r2wQs_A-kcfzjoPorCm3J2D9Ux2uEETyRqHJEe6GQ,597
99
+ prediction_market_agent_tooling/tools/hexbytes_custom.py,sha256=dhwg2KcOlpjyTPke4b6f4mHE-nm6ZHHjgLv6mqAXXds,2414
100
+ prediction_market_agent_tooling/tools/httpx_cached_client.py,sha256=1mqOWC2-Ch2ibT63GAk0npsVR-4bR1T9WN9eU_SEhkE,634
101
101
  prediction_market_agent_tooling/tools/image_gen/image_gen.py,sha256=i7ole0NMprELk-I3qJQLqFNZjiqM1w6s11IqM4Ctaqw,1349
102
102
  prediction_market_agent_tooling/tools/image_gen/market_thumbnail_gen.py,sha256=ihH_ARBuHUIL7DSLYUe2osRrC_iVlzHezfspASOUu0g,1285
103
103
  prediction_market_agent_tooling/tools/ipfs/ipfs_handler.py,sha256=CTTMfTvs_8PH4kAtlQby2aeEKwgpmxtuGbd4oYIdJ2A,1201
104
104
  prediction_market_agent_tooling/tools/is_invalid.py,sha256=ArYgPqZApRwIPXwBmTdz7d-7ynP856GLaeCcIl9tV08,5334
105
105
  prediction_market_agent_tooling/tools/is_predictable.py,sha256=RNwVH31qpHtg2UWdeMZoFOpMsKgE-aKmcc3Uj6_dK-A,6909
106
106
  prediction_market_agent_tooling/tools/langfuse_.py,sha256=jI_4ROxqo41CCnWGS1vN_AeDVhRzLMaQLxH3kxDu3L8,1153
107
- prediction_market_agent_tooling/tools/langfuse_client_utils.py,sha256=6IvsqqNNfBtwonAqcdhkDi-GN0pMS8dID3vFGUZoEoM,6626
107
+ prediction_market_agent_tooling/tools/langfuse_client_utils.py,sha256=7cyGcin2-fhhp_wxAGA_uzpEUUbI8lTud3MJndjYnoM,6795
108
108
  prediction_market_agent_tooling/tools/omen/reality_accuracy.py,sha256=M1SF7iSW1gVlQSTskdVFTn09uPLST23YeipVIWj54io,2236
109
109
  prediction_market_agent_tooling/tools/omen/sell_positions.py,sha256=Q4oI7_QI3AkyxlH10VvxDahYVrphQa1Wnox2Ce_cf_k,2452
110
110
  prediction_market_agent_tooling/tools/parallelism.py,sha256=6Gou0hbjtMZrYvxjTDFUDZuxmE2nqZVbb6hkg1hF82A,1022
@@ -116,7 +116,7 @@ prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_analy
116
116
  prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py,sha256=kNWq92T11Knb9mYBZlMiZUzOpKgCd-5adanylQUMRJA,3085
117
117
  prediction_market_agent_tooling/tools/rephrase.py,sha256=tqNqusaf5JeEC8ov11uL0YzUo2Dea5Ucczto77GRSQM,2319
118
118
  prediction_market_agent_tooling/tools/safe.py,sha256=o477HGPQv7X_eDoOeYoELCHryiq1_102y_JVhGEPDXw,5165
119
- prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0rnVhtQGzwoUdAgn_7u_GBM,729
119
+ prediction_market_agent_tooling/tools/singleton.py,sha256=CHpUJuu89Hwup2fH9CIChUwavc52TG6tCoi_wA_qZps,990
120
120
  prediction_market_agent_tooling/tools/streamlit_user_login.py,sha256=NXEqfjT9Lc9QtliwSGRASIz1opjQ7Btme43H4qJbzgE,3010
121
121
  prediction_market_agent_tooling/tools/tavily/tavily_models.py,sha256=5ldQs1pZe6uJ5eDAuP4OLpzmcqYShlIV67kttNFvGS0,342
122
122
  prediction_market_agent_tooling/tools/tavily/tavily_search.py,sha256=pPs0qZNfJ7G-1ajfz0iaWOBQyiC0TbcShfrW8T39jtg,3859
@@ -129,8 +129,8 @@ prediction_market_agent_tooling/tools/tokens/usd.py,sha256=yuW8iPPtcpP4eLH2nORMD
129
129
  prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
130
130
  prediction_market_agent_tooling/tools/utils.py,sha256=mbOGoWKalNIm7M2K51TEPGwU9oVp1Z6SPsFaBgbn6ws,7397
131
131
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=0r26snqCXGdLKCWA8jpe7DV8x2NPYWZwOy4oyKyDCYk,12615
132
- prediction_market_agent_tooling-0.67.3.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
133
- prediction_market_agent_tooling-0.67.3.dist-info/METADATA,sha256=hBmjI7Am8TkC0AOrGun125L9BieiDwoBq0ifnQheHIo,8770
134
- prediction_market_agent_tooling-0.67.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
135
- prediction_market_agent_tooling-0.67.3.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
136
- prediction_market_agent_tooling-0.67.3.dist-info/RECORD,,
132
+ prediction_market_agent_tooling-0.67.4.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
133
+ prediction_market_agent_tooling-0.67.4.dist-info/METADATA,sha256=jEFepq9cqrzVIqjTyZODBnvEJ9jJGREtzIqKd05YrLE,8770
134
+ prediction_market_agent_tooling-0.67.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
135
+ prediction_market_agent_tooling-0.67.4.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
136
+ prediction_market_agent_tooling-0.67.4.dist-info/RECORD,,