prediction-market-agent-tooling 0.55.2__py3-none-any.whl → 0.55.2.dev120__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/agent.py +0 -1
- prediction_market_agent_tooling/markets/base_subgraph_handler.py +51 -0
- prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +15 -51
- prediction_market_agent_tooling/markets/seer/data_models.py +27 -0
- prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py +142 -0
- prediction_market_agent_tooling/tools/is_invalid.py +2 -1
- {prediction_market_agent_tooling-0.55.2.dist-info → prediction_market_agent_tooling-0.55.2.dev120.dist-info}/METADATA +1 -1
- {prediction_market_agent_tooling-0.55.2.dist-info → prediction_market_agent_tooling-0.55.2.dev120.dist-info}/RECORD +11 -8
- {prediction_market_agent_tooling-0.55.2.dist-info → prediction_market_agent_tooling-0.55.2.dev120.dist-info}/LICENSE +0 -0
- {prediction_market_agent_tooling-0.55.2.dist-info → prediction_market_agent_tooling-0.55.2.dev120.dist-info}/WHEEL +0 -0
- {prediction_market_agent_tooling-0.55.2.dist-info → prediction_market_agent_tooling-0.55.2.dev120.dist-info}/entry_points.txt +0 -0
@@ -519,7 +519,6 @@ class DeployableTraderAgent(DeployablePredictionAgent):
|
|
519
519
|
def initialize_langfuse(self) -> None:
|
520
520
|
super().initialize_langfuse()
|
521
521
|
# Auto-observe all the methods where it makes sense, so that subclassses don't need to do it manually.
|
522
|
-
self.get_betting_strategy = observe()(self.get_betting_strategy) # type: ignore[method-assign]
|
523
522
|
self.build_trades = observe()(self.build_trades) # type: ignore[method-assign]
|
524
523
|
|
525
524
|
def check_min_required_balance_to_trade(self, market: AgentMarket) -> None:
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import typing as t
|
2
|
+
|
3
|
+
import tenacity
|
4
|
+
from pydantic import BaseModel
|
5
|
+
from subgrounds import FieldPath, Subgrounds
|
6
|
+
|
7
|
+
from prediction_market_agent_tooling.config import APIKeys
|
8
|
+
from prediction_market_agent_tooling.loggers import logger
|
9
|
+
from prediction_market_agent_tooling.tools.singleton import SingletonMeta
|
10
|
+
|
11
|
+
T = t.TypeVar("T", bound=BaseModel)
|
12
|
+
|
13
|
+
|
14
|
+
class BaseSubgraphHandler(metaclass=SingletonMeta):
|
15
|
+
def __init__(self) -> None:
|
16
|
+
self.sg = Subgrounds()
|
17
|
+
# Patch methods to retry on failure.
|
18
|
+
self.sg.query_json = tenacity.retry(
|
19
|
+
stop=tenacity.stop_after_attempt(3),
|
20
|
+
wait=tenacity.wait_fixed(1),
|
21
|
+
after=lambda x: logger.debug(f"query_json failed, {x.attempt_number=}."),
|
22
|
+
)(self.sg.query_json)
|
23
|
+
self.sg.load_subgraph = tenacity.retry(
|
24
|
+
stop=tenacity.stop_after_attempt(3),
|
25
|
+
wait=tenacity.wait_fixed(1),
|
26
|
+
after=lambda x: logger.debug(f"load_subgraph failed, {x.attempt_number=}."),
|
27
|
+
)(self.sg.load_subgraph)
|
28
|
+
|
29
|
+
self.keys = APIKeys()
|
30
|
+
|
31
|
+
def _parse_items_from_json(
|
32
|
+
self, result: list[dict[str, t.Any]]
|
33
|
+
) -> list[dict[str, t.Any]]:
|
34
|
+
"""subgrounds return a weird key as a dict key"""
|
35
|
+
items = []
|
36
|
+
for result_chunk in result:
|
37
|
+
for k, v in result_chunk.items():
|
38
|
+
# subgrounds might pack all items as a list, indexed by a key, or pack it as a dictionary (if one single element)
|
39
|
+
if v is None:
|
40
|
+
continue
|
41
|
+
elif isinstance(v, dict):
|
42
|
+
items.extend([v])
|
43
|
+
else:
|
44
|
+
items.extend(v)
|
45
|
+
return items
|
46
|
+
|
47
|
+
def do_query(self, fields: list[FieldPath], pydantic_model: t.Type[T]) -> list[T]:
|
48
|
+
result = self.sg.query_json(fields)
|
49
|
+
items = self._parse_items_from_json(result)
|
50
|
+
models = [pydantic_model.model_validate(i) for i in items]
|
51
|
+
return models
|
@@ -2,12 +2,10 @@ import sys
|
|
2
2
|
import typing as t
|
3
3
|
|
4
4
|
import requests
|
5
|
-
import tenacity
|
6
5
|
from PIL import Image
|
7
6
|
from PIL.Image import Image as ImageType
|
8
|
-
from subgrounds import FieldPath
|
7
|
+
from subgrounds import FieldPath
|
9
8
|
|
10
|
-
from prediction_market_agent_tooling.config import APIKeys
|
11
9
|
from prediction_market_agent_tooling.gtypes import (
|
12
10
|
ChecksumAddress,
|
13
11
|
HexAddress,
|
@@ -15,8 +13,10 @@ from prediction_market_agent_tooling.gtypes import (
|
|
15
13
|
Wei,
|
16
14
|
wei_type,
|
17
15
|
)
|
18
|
-
from prediction_market_agent_tooling.loggers import logger
|
19
16
|
from prediction_market_agent_tooling.markets.agent_market import FilterBy, SortBy
|
17
|
+
from prediction_market_agent_tooling.markets.base_subgraph_handler import (
|
18
|
+
BaseSubgraphHandler,
|
19
|
+
)
|
20
20
|
from prediction_market_agent_tooling.markets.omen.data_models import (
|
21
21
|
OMEN_BINARY_MARKET_OUTCOMES,
|
22
22
|
ContractPrediction,
|
@@ -33,7 +33,6 @@ from prediction_market_agent_tooling.markets.omen.omen_contracts import (
|
|
33
33
|
WrappedxDaiContract,
|
34
34
|
sDaiContract,
|
35
35
|
)
|
36
|
-
from prediction_market_agent_tooling.tools.singleton import SingletonMeta
|
37
36
|
from prediction_market_agent_tooling.tools.utils import (
|
38
37
|
DatetimeUTC,
|
39
38
|
to_int_timestamp,
|
@@ -51,7 +50,7 @@ SAFE_COLLATERAL_TOKEN_MARKETS = (
|
|
51
50
|
)
|
52
51
|
|
53
52
|
|
54
|
-
class OmenSubgraphHandler(
|
53
|
+
class OmenSubgraphHandler(BaseSubgraphHandler):
|
55
54
|
"""
|
56
55
|
Class responsible for handling interactions with Omen subgraphs (trades, conditionalTokens).
|
57
56
|
"""
|
@@ -64,52 +63,38 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
|
|
64
63
|
|
65
64
|
OMEN_IMAGE_MAPPING_GRAPH_URL = "https://gateway-arbitrum.network.thegraph.com/api/{graph_api_key}/subgraphs/id/EWN14ciGK53PpUiKSm7kMWQ6G4iz3tDrRLyZ1iXMQEdu"
|
66
65
|
|
67
|
-
OMEN_AGENT_RESULT_MAPPING_GRAPH_URL = "https://gateway-arbitrum.network.thegraph.com/api/{graph_api_key}/subgraphs/id/
|
66
|
+
OMEN_AGENT_RESULT_MAPPING_GRAPH_URL = "https://gateway-arbitrum.network.thegraph.com/api/{graph_api_key}/subgraphs/id/J6bJEnbqJpAvNyQE8i58M9mKF4zqo33BEJRdnXmqa6Kn"
|
68
67
|
|
69
68
|
INVALID_ANSWER = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
70
69
|
|
71
70
|
def __init__(self) -> None:
|
72
|
-
|
73
|
-
|
74
|
-
# Patch methods to retry on failure.
|
75
|
-
self.sg.query_json = tenacity.retry(
|
76
|
-
stop=tenacity.stop_after_attempt(3),
|
77
|
-
wait=tenacity.wait_fixed(1),
|
78
|
-
after=lambda x: logger.debug(f"query_json failed, {x.attempt_number=}."),
|
79
|
-
)(self.sg.query_json)
|
80
|
-
self.sg.load_subgraph = tenacity.retry(
|
81
|
-
stop=tenacity.stop_after_attempt(3),
|
82
|
-
wait=tenacity.wait_fixed(1),
|
83
|
-
after=lambda x: logger.debug(f"load_subgraph failed, {x.attempt_number=}."),
|
84
|
-
)(self.sg.load_subgraph)
|
85
|
-
|
86
|
-
keys = APIKeys()
|
71
|
+
super().__init__()
|
87
72
|
|
88
73
|
# Load the subgraph
|
89
74
|
self.trades_subgraph = self.sg.load_subgraph(
|
90
75
|
self.OMEN_TRADES_SUBGRAPH.format(
|
91
|
-
graph_api_key=keys.graph_api_key.get_secret_value()
|
76
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
92
77
|
)
|
93
78
|
)
|
94
79
|
self.conditional_tokens_subgraph = self.sg.load_subgraph(
|
95
80
|
self.CONDITIONAL_TOKENS_SUBGRAPH.format(
|
96
|
-
graph_api_key=keys.graph_api_key.get_secret_value()
|
81
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
97
82
|
)
|
98
83
|
)
|
99
84
|
self.realityeth_subgraph = self.sg.load_subgraph(
|
100
85
|
self.REALITYETH_GRAPH_URL.format(
|
101
|
-
graph_api_key=keys.graph_api_key.get_secret_value()
|
86
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
102
87
|
)
|
103
88
|
)
|
104
89
|
self.omen_image_mapping_subgraph = self.sg.load_subgraph(
|
105
90
|
self.OMEN_IMAGE_MAPPING_GRAPH_URL.format(
|
106
|
-
graph_api_key=keys.graph_api_key.get_secret_value()
|
91
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
107
92
|
)
|
108
93
|
)
|
109
94
|
|
110
95
|
self.omen_agent_result_mapping_subgraph = self.sg.load_subgraph(
|
111
96
|
self.OMEN_AGENT_RESULT_MAPPING_GRAPH_URL.format(
|
112
|
-
graph_api_key=keys.graph_api_key.get_secret_value()
|
97
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
113
98
|
)
|
114
99
|
)
|
115
100
|
|
@@ -446,14 +431,8 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
|
|
446
431
|
**optional_params,
|
447
432
|
)
|
448
433
|
|
449
|
-
omen_markets = self.do_markets_query(markets)
|
450
|
-
return omen_markets
|
451
|
-
|
452
|
-
def do_markets_query(self, markets: FieldPath) -> list[OmenMarket]:
|
453
434
|
fields = self._get_fields_for_markets(markets)
|
454
|
-
|
455
|
-
items = self._parse_items_from_json(result)
|
456
|
-
omen_markets = [OmenMarket.model_validate(i) for i in items]
|
435
|
+
omen_markets = self.do_query(fields=fields, pydantic_model=OmenMarket)
|
457
436
|
return omen_markets
|
458
437
|
|
459
438
|
def get_omen_market_by_market_id(self, market_id: HexAddress) -> OmenMarket:
|
@@ -461,7 +440,8 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
|
|
461
440
|
id=market_id.lower()
|
462
441
|
)
|
463
442
|
|
464
|
-
|
443
|
+
fields = self._get_fields_for_markets(markets)
|
444
|
+
omen_markets = self.do_query(fields=fields, pydantic_model=OmenMarket)
|
465
445
|
|
466
446
|
if len(omen_markets) != 1:
|
467
447
|
raise ValueError(
|
@@ -470,22 +450,6 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
|
|
470
450
|
|
471
451
|
return omen_markets[0]
|
472
452
|
|
473
|
-
def _parse_items_from_json(
|
474
|
-
self, result: list[dict[str, t.Any]]
|
475
|
-
) -> list[dict[str, t.Any]]:
|
476
|
-
"""subgrounds return a weird key as a dict key"""
|
477
|
-
items = []
|
478
|
-
for result_chunk in result:
|
479
|
-
for k, v in result_chunk.items():
|
480
|
-
# subgrounds might pack all items as a list, indexed by a key, or pack it as a dictionary (if one single element)
|
481
|
-
if v is None:
|
482
|
-
continue
|
483
|
-
elif isinstance(v, dict):
|
484
|
-
items.extend([v])
|
485
|
-
else:
|
486
|
-
items.extend(v)
|
487
|
-
return items
|
488
|
-
|
489
453
|
def _get_fields_for_user_positions(
|
490
454
|
self, user_positions: FieldPath
|
491
455
|
) -> list[FieldPath]:
|
@@ -0,0 +1,27 @@
|
|
1
|
+
from pydantic import BaseModel, ConfigDict, Field
|
2
|
+
|
3
|
+
from prediction_market_agent_tooling.gtypes import HexBytes
|
4
|
+
|
5
|
+
|
6
|
+
class SeerMarket(BaseModel):
|
7
|
+
model_config = ConfigDict(populate_by_name=True)
|
8
|
+
|
9
|
+
id: HexBytes
|
10
|
+
title: str = Field(alias="marketName")
|
11
|
+
outcomes: list[str]
|
12
|
+
parent_market: HexBytes = Field(alias="parentMarket")
|
13
|
+
wrapped_tokens: list[HexBytes] = Field(alias="wrappedTokens")
|
14
|
+
|
15
|
+
|
16
|
+
class SeerToken(BaseModel):
|
17
|
+
id: HexBytes
|
18
|
+
name: str
|
19
|
+
symbol: str
|
20
|
+
|
21
|
+
|
22
|
+
class SeerPool(BaseModel):
|
23
|
+
model_config = ConfigDict(populate_by_name=True)
|
24
|
+
id: HexBytes
|
25
|
+
liquidity: int
|
26
|
+
token0: SeerToken
|
27
|
+
token1: SeerToken
|
@@ -0,0 +1,142 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from subgrounds import FieldPath
|
4
|
+
from web3.constants import ADDRESS_ZERO
|
5
|
+
|
6
|
+
from prediction_market_agent_tooling.markets.base_subgraph_handler import (
|
7
|
+
BaseSubgraphHandler,
|
8
|
+
)
|
9
|
+
from prediction_market_agent_tooling.markets.seer.data_models import (
|
10
|
+
SeerMarket,
|
11
|
+
SeerPool,
|
12
|
+
)
|
13
|
+
from prediction_market_agent_tooling.tools.hexbytes_custom import HexBytes
|
14
|
+
|
15
|
+
INVALID_OUTCOME = "Invalid result"
|
16
|
+
|
17
|
+
|
18
|
+
class SeerSubgraphHandler(BaseSubgraphHandler):
|
19
|
+
"""
|
20
|
+
Class responsible for handling interactions with Seer subgraphs.
|
21
|
+
"""
|
22
|
+
|
23
|
+
SEER_SUBGRAPH = "https://gateway-arbitrum.network.thegraph.com/api/{graph_api_key}/subgraphs/id/B4vyRqJaSHD8dRDb3BFRoAzuBK18c1QQcXq94JbxDxWH"
|
24
|
+
|
25
|
+
SWAPR_ALGEBRA_SUBGRAPH = "https://gateway-arbitrum.network.thegraph.com/api/{graph_api_key}/subgraphs/id/AAA1vYjxwFHzbt6qKwLHNcDSASyr1J1xVViDH8gTMFMR"
|
26
|
+
|
27
|
+
INVALID_ANSWER = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
28
|
+
|
29
|
+
def __init__(self) -> None:
|
30
|
+
super().__init__()
|
31
|
+
|
32
|
+
self.seer_subgraph = self.sg.load_subgraph(
|
33
|
+
self.SEER_SUBGRAPH.format(
|
34
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
35
|
+
)
|
36
|
+
)
|
37
|
+
self.swapr_algebra_subgraph = self.sg.load_subgraph(
|
38
|
+
self.SWAPR_ALGEBRA_SUBGRAPH.format(
|
39
|
+
graph_api_key=self.keys.graph_api_key.get_secret_value()
|
40
|
+
)
|
41
|
+
)
|
42
|
+
|
43
|
+
def _get_fields_for_markets(self, markets_field: FieldPath) -> list[FieldPath]:
|
44
|
+
fields = [
|
45
|
+
markets_field.id,
|
46
|
+
markets_field.factory,
|
47
|
+
markets_field.creator,
|
48
|
+
markets_field.marketName,
|
49
|
+
markets_field.outcomes,
|
50
|
+
markets_field.parentMarket,
|
51
|
+
markets_field.finalizeTs,
|
52
|
+
markets_field.wrappedTokens,
|
53
|
+
]
|
54
|
+
return fields
|
55
|
+
|
56
|
+
@staticmethod
|
57
|
+
def filter_bicategorical_markets(markets: list[SeerMarket]) -> list[SeerMarket]:
|
58
|
+
# We do an extra check for the invalid outcome for safety.
|
59
|
+
return [
|
60
|
+
m for m in markets if len(m.outcomes) == 3 and INVALID_OUTCOME in m.outcomes
|
61
|
+
]
|
62
|
+
|
63
|
+
@staticmethod
|
64
|
+
def filter_binary_markets(markets: list[SeerMarket]) -> list[SeerMarket]:
|
65
|
+
return [
|
66
|
+
market
|
67
|
+
for market in markets
|
68
|
+
if {"yes", "no"}.issubset({o.lower() for o in market.outcomes})
|
69
|
+
]
|
70
|
+
|
71
|
+
@staticmethod
|
72
|
+
def build_filter_for_conditional_markets(
|
73
|
+
include_conditional_markets: bool = True,
|
74
|
+
) -> dict[Any, Any]:
|
75
|
+
return (
|
76
|
+
{}
|
77
|
+
if include_conditional_markets
|
78
|
+
else {"parentMarket": ADDRESS_ZERO.lower()}
|
79
|
+
)
|
80
|
+
|
81
|
+
def get_bicategorical_markets(
|
82
|
+
self, include_conditional_markets: bool = True
|
83
|
+
) -> list[SeerMarket]:
|
84
|
+
"""Returns markets that contain 2 categories plus an invalid outcome."""
|
85
|
+
# Binary markets on Seer contain 3 outcomes: OutcomeA, outcomeB and an Invalid option.
|
86
|
+
query_filter = self.build_filter_for_conditional_markets(
|
87
|
+
include_conditional_markets
|
88
|
+
)
|
89
|
+
query_filter["outcomes_contains"] = [INVALID_OUTCOME]
|
90
|
+
markets_field = self.seer_subgraph.Query.markets(where=query_filter)
|
91
|
+
fields = self._get_fields_for_markets(markets_field)
|
92
|
+
markets = self.do_query(fields=fields, pydantic_model=SeerMarket)
|
93
|
+
two_category_markets = self.filter_bicategorical_markets(markets)
|
94
|
+
return two_category_markets
|
95
|
+
|
96
|
+
def get_binary_markets(
|
97
|
+
self, include_conditional_markets: bool = True
|
98
|
+
) -> list[SeerMarket]:
|
99
|
+
two_category_markets = self.get_bicategorical_markets(
|
100
|
+
include_conditional_markets=include_conditional_markets
|
101
|
+
)
|
102
|
+
# Now we additionally filter markets based on YES/NO being the only outcomes.
|
103
|
+
binary_markets = self.filter_binary_markets(two_category_markets)
|
104
|
+
return binary_markets
|
105
|
+
|
106
|
+
def get_market_by_id(self, market_id: HexBytes) -> SeerMarket:
|
107
|
+
markets_field = self.seer_subgraph.Query.market(id=market_id.hex().lower())
|
108
|
+
fields = self._get_fields_for_markets(markets_field)
|
109
|
+
markets = self.do_query(fields=fields, pydantic_model=SeerMarket)
|
110
|
+
if len(markets) != 1:
|
111
|
+
raise ValueError(
|
112
|
+
f"Fetched wrong number of markets. Expected 1 but got {len(markets)}"
|
113
|
+
)
|
114
|
+
return markets[0]
|
115
|
+
|
116
|
+
def _get_fields_for_pools(self, pools_field: FieldPath) -> list[FieldPath]:
|
117
|
+
fields = [
|
118
|
+
pools_field.id,
|
119
|
+
pools_field.liquidity,
|
120
|
+
pools_field.token0.id,
|
121
|
+
pools_field.token0.name,
|
122
|
+
pools_field.token0.symbol,
|
123
|
+
pools_field.token1.id,
|
124
|
+
pools_field.token1.name,
|
125
|
+
pools_field.token1.symbol,
|
126
|
+
]
|
127
|
+
return fields
|
128
|
+
|
129
|
+
def get_pools_for_market(self, market: SeerMarket) -> list[SeerPool]:
|
130
|
+
# We iterate through the wrapped tokens and put them in a where clause so that we hit the subgraph endpoint just once.
|
131
|
+
wheres = []
|
132
|
+
for wrapped_token in market.wrapped_tokens:
|
133
|
+
wheres.extend(
|
134
|
+
[
|
135
|
+
{"token0": wrapped_token.hex().lower()},
|
136
|
+
{"token1": wrapped_token.hex().lower()},
|
137
|
+
]
|
138
|
+
)
|
139
|
+
pools_field = self.swapr_algebra_subgraph.Query.pools(where={"or": wheres})
|
140
|
+
fields = self._get_fields_for_pools(pools_field)
|
141
|
+
pools = self.do_query(fields=fields, pydantic_model=SeerPool)
|
142
|
+
return pools
|
@@ -34,9 +34,10 @@ QUESTION_IS_INVALID_PROMPT = """Main signs about an invalid question (sometimes
|
|
34
34
|
- Which could give an incentive only to specific participants to commit an immoral violent action, but are in practice unlikely.
|
35
35
|
- Valid: Will the US be engaged in a military conflict with a UN member state in 2021? (It’s unlikely for the US to declare war in order to win a bet on this market).
|
36
36
|
- Valid: Will Derek Chauvin go to jail for the murder of George Flyod? (It’s unlikely that the jurors would collude to make a wrong verdict in order to win this market).
|
37
|
-
- Questions with relative dates will resolve as invalid. Dates must be stated in absolute terms, not relative depending on the current time.
|
37
|
+
- Questions with relative dates will resolve as invalid. Dates must be stated in absolute terms, not relative depending on the current time. But they can be relative to the event specified in the question itself.
|
38
38
|
- Invalid: Who will be the president of the United States in 6 months? ("in 6 months depends on the current time").
|
39
39
|
- Invalid: In the next 14 days, will Gnosis Chain gain another 1M users? ("in the next 14 days depends on the current time").
|
40
|
+
- Valid: Will GNO price go up 10 days after Gnosis Pay cashback program is annouced? ("10 days after" is relative to the event in the question, so we can determine absolute value).
|
40
41
|
- Questions about moral values and not facts will be resolved as invalid.
|
41
42
|
- Invalid: "Is it ethical to eat meat?".
|
42
43
|
|
@@ -17,7 +17,7 @@ prediction_market_agent_tooling/benchmark/agents.py,sha256=B1-uWdyeN4GGKMWGK_-Cc
|
|
17
17
|
prediction_market_agent_tooling/benchmark/benchmark.py,sha256=MqTiaaJ3cYiOLUVR7OyImLWxcEya3Rl5JyFYW-K0lwM,17097
|
18
18
|
prediction_market_agent_tooling/benchmark/utils.py,sha256=D0MfUkVZllmvcU0VOurk9tcKT7JTtwwOp-63zuCBVuc,2880
|
19
19
|
prediction_market_agent_tooling/config.py,sha256=114f3V9abaok27p5jX3UVr5b5gRUiSxBIYn8Snid34I,6731
|
20
|
-
prediction_market_agent_tooling/deploy/agent.py,sha256=
|
20
|
+
prediction_market_agent_tooling/deploy/agent.py,sha256=2IbMDMSXT_2r3rgIc9CHrd65DoPhbcvTTrNoat1iP5w,22550
|
21
21
|
prediction_market_agent_tooling/deploy/agent_example.py,sha256=dIIdZashExWk9tOdyDjw87AuUcGyM7jYxNChYrVK2dM,1001
|
22
22
|
prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=kMrIE3wMv_IB6nJd_1DmDXDkEZhsXFOgyTd7JZ0gqHI,13068
|
23
23
|
prediction_market_agent_tooling/deploy/constants.py,sha256=M5ty8URipYMGe_G-RzxRydK3AFL6CyvmqCraJUrLBnE,82
|
@@ -32,6 +32,7 @@ prediction_market_agent_tooling/jobs/jobs_models.py,sha256=I5uBTHJ2S1Wi3H4jDxxU7
|
|
32
32
|
prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=I2_vGrEJj1reSI8M377ab5QCsYNp_l4l4QeYEmDBkFM,3989
|
33
33
|
prediction_market_agent_tooling/loggers.py,sha256=Am6HHXRNO545BO3l7Ue9Wb2TkYE1OK8KKhGbI3XypVU,3751
|
34
34
|
prediction_market_agent_tooling/markets/agent_market.py,sha256=OgB6bvDGfTAxbh6cDGD3XFO0iy0MAaOQvXEP6nw8xW8,12817
|
35
|
+
prediction_market_agent_tooling/markets/base_subgraph_handler.py,sha256=IxDTwX4tej9j5olNkXcLIE0RCF1Nh2icZQUT2ERMmZo,1937
|
35
36
|
prediction_market_agent_tooling/markets/categorize.py,sha256=jsoHWvZk9pU6n17oWSCcCxNNYVwlb_NXsZxKRI7vmsk,1301
|
36
37
|
prediction_market_agent_tooling/markets/data_models.py,sha256=jMqrSFO_w2z-5N3PFVgZqTHdVdkzSDhhzky2lHsGGKA,3621
|
37
38
|
prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -49,12 +50,14 @@ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=nCjsc-ylIzQOC
|
|
49
50
|
prediction_market_agent_tooling/markets/omen/omen.py,sha256=LqNZjngo6LoktKecfYmGmJJ9D5rj-s0Poy4x4_GZfp0,51116
|
50
51
|
prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=Zq7SncCq-hvpgXKsVruGBGCn1OhKZTe7r1qLdCTrT2w,28297
|
51
52
|
prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=iDWdjICGkt968exwCjY-6nsnQyrrNAg3YjnDdP430GQ,9415
|
52
|
-
prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=
|
53
|
+
prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=UjKZir1z8wsr493kYm5kswC4kGFpR9H8tsq9DOgaaT4,35886
|
53
54
|
prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
|
54
55
|
prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=Fd5PI5y3mJM8VHExBhWFWEnuuIKxQmIAXgBuoPDvNjw,4341
|
55
56
|
prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=VZhVccTApygSKMmy6Au2G02JCJOKJnR_oVeKlaesuSg,12548
|
56
57
|
prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=NRoZK71PtH8kkangMqme7twcAXhRJSSabbmOir-UnAI,3418
|
57
58
|
prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=m4JG6WULh5epCJt4XBMHg0ae5NoVhqlOvAl0A7DR9iM,2023
|
59
|
+
prediction_market_agent_tooling/markets/seer/data_models.py,sha256=2f6DOXhGerYbTSk5vUvw_y87TcUxOtSfca8-Et7imtU,643
|
60
|
+
prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=Jola8AxmNDljBCzl6Gvjb9qH75Y7D5dAwbdZl_jndN8,5478
|
58
61
|
prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=TS4ERwTfQnot8dhekNyVNhJYf5ysYsjF-9v5_kM3aVI,3334
|
59
62
|
prediction_market_agent_tooling/monitor/markets/metaculus.py,sha256=LOnyWWBFdg10-cTWdb76nOsNjDloO8OfMT85GBzRCFI,1455
|
60
63
|
prediction_market_agent_tooling/monitor/markets/omen.py,sha256=EqiJYTvDbSu7fBpbrBmCuf3fc6GHr4MxWrBGa69MIyc,3305
|
@@ -80,7 +83,7 @@ prediction_market_agent_tooling/tools/httpx_cached_client.py,sha256=0-N1r0zcGKlY
|
|
80
83
|
prediction_market_agent_tooling/tools/image_gen/image_gen.py,sha256=HzRwBx62hOXBOmrtpkXaP9Qq1Ku03uUGdREocyjLQ_k,1266
|
81
84
|
prediction_market_agent_tooling/tools/image_gen/market_thumbnail_gen.py,sha256=8A3U2uxsCsOfLjru-6R_PPIAuiKY4qFkWp_GSBPV6-s,1280
|
82
85
|
prediction_market_agent_tooling/tools/ipfs/ipfs_handler.py,sha256=CTTMfTvs_8PH4kAtlQby2aeEKwgpmxtuGbd4oYIdJ2A,1201
|
83
|
-
prediction_market_agent_tooling/tools/is_invalid.py,sha256=
|
86
|
+
prediction_market_agent_tooling/tools/is_invalid.py,sha256=Tg5XZC3i3qNHmAjFvCZbuYsSCopEjUsbosbFgSbC_1E,5347
|
84
87
|
prediction_market_agent_tooling/tools/is_predictable.py,sha256=NIoR2bTNMmADcyNY2aKNMWkiDw7Z_9kZMcFXEdyewy4,6771
|
85
88
|
prediction_market_agent_tooling/tools/langfuse_.py,sha256=jI_4ROxqo41CCnWGS1vN_AeDVhRzLMaQLxH3kxDu3L8,1153
|
86
89
|
prediction_market_agent_tooling/tools/langfuse_client_utils.py,sha256=B0PhAQyviFnVbtOCYMxYmcCn66cu9nbqAOIAZcdgiRI,5771
|
@@ -97,8 +100,8 @@ prediction_market_agent_tooling/tools/tavily/tavily_search.py,sha256=UPSp0S5Sql5
|
|
97
100
|
prediction_market_agent_tooling/tools/tavily/tavily_storage.py,sha256=t-tZzbCzBBdFedRZDuVBn3A3mIDX8Z5wza6SxWswu_E,4093
|
98
101
|
prediction_market_agent_tooling/tools/utils.py,sha256=W-9SqeCKd51BYMRhDjYPQ7lfNO_zE9EvYpmu2r5WXGA,7163
|
99
102
|
prediction_market_agent_tooling/tools/web3_utils.py,sha256=44W8siSLNQxeib98bbwAe7V5C609NHNlUuxwuWIRDiY,11838
|
100
|
-
prediction_market_agent_tooling-0.55.2.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
|
101
|
-
prediction_market_agent_tooling-0.55.2.dist-info/METADATA,sha256=
|
102
|
-
prediction_market_agent_tooling-0.55.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
103
|
-
prediction_market_agent_tooling-0.55.2.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
|
104
|
-
prediction_market_agent_tooling-0.55.2.dist-info/RECORD,,
|
103
|
+
prediction_market_agent_tooling-0.55.2.dev120.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
|
104
|
+
prediction_market_agent_tooling-0.55.2.dev120.dist-info/METADATA,sha256=xUQyruFo82CnvirDLBDHfpEj3SjUzsL-nwrK8BOzTUc,8063
|
105
|
+
prediction_market_agent_tooling-0.55.2.dev120.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
106
|
+
prediction_market_agent_tooling-0.55.2.dev120.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
|
107
|
+
prediction_market_agent_tooling-0.55.2.dev120.dist-info/RECORD,,
|
File without changes
|
File without changes
|