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.
- prediction_market_agent_tooling/deploy/betting_strategy.py +7 -4
- prediction_market_agent_tooling/markets/agent_market.py +17 -0
- prediction_market_agent_tooling/markets/blockchain_utils.py +5 -3
- prediction_market_agent_tooling/markets/data_models.py +23 -3
- prediction_market_agent_tooling/markets/polymarket/api.py +9 -3
- prediction_market_agent_tooling/markets/polymarket/data_models.py +5 -3
- prediction_market_agent_tooling/markets/polymarket/polymarket.py +15 -7
- prediction_market_agent_tooling/markets/seer/seer.py +11 -2
- prediction_market_agent_tooling/markets/seer/swap_pool_handler.py +4 -1
- prediction_market_agent_tooling/tools/hexbytes_custom.py +9 -0
- prediction_market_agent_tooling/tools/httpx_cached_client.py +5 -3
- prediction_market_agent_tooling/tools/langfuse_client_utils.py +4 -0
- prediction_market_agent_tooling/tools/singleton.py +11 -6
- {prediction_market_agent_tooling-0.67.3.dist-info → prediction_market_agent_tooling-0.67.4.dist-info}/METADATA +1 -1
- {prediction_market_agent_tooling-0.67.3.dist-info → prediction_market_agent_tooling-0.67.4.dist-info}/RECORD +18 -18
- {prediction_market_agent_tooling-0.67.3.dist-info → prediction_market_agent_tooling-0.67.4.dist-info}/LICENSE +0 -0
- {prediction_market_agent_tooling-0.67.3.dist-info → prediction_market_agent_tooling-0.67.4.dist-info}/WHEEL +0 -0
- {prediction_market_agent_tooling-0.67.3.dist-info → prediction_market_agent_tooling-0.67.4.dist-info}/entry_points.txt +0 -0
@@ -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:
|
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
|
-
|
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=
|
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-
|
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
|
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
|
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[
|
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
|
-
|
73
|
-
|
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 =
|
88
|
-
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=
|
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=[
|
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=}
|
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
|
-
|
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
|
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
|
-
|
8
|
+
ONE_DAY = timedelta(days=1)
|
7
9
|
|
8
10
|
|
9
11
|
class HttpxCachedClient(metaclass=SingletonMeta):
|
10
|
-
def __init__(self, ttl:
|
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[
|
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
|
-
|
18
|
-
the returned instance.
|
21
|
+
Different __init__ arguments will result in different instances.
|
19
22
|
"""
|
20
|
-
|
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[
|
23
|
-
return self._instances[
|
27
|
+
self._instances[key] = instance
|
28
|
+
return self._instances[key]
|
@@ -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=
|
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=
|
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=
|
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=
|
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
|
68
|
-
prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
100
|
-
prediction_market_agent_tooling/tools/httpx_cached_client.py,sha256=
|
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=
|
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=
|
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.
|
133
|
-
prediction_market_agent_tooling-0.67.
|
134
|
-
prediction_market_agent_tooling-0.67.
|
135
|
-
prediction_market_agent_tooling-0.67.
|
136
|
-
prediction_market_agent_tooling-0.67.
|
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,,
|
File without changes
|
File without changes
|