prediction-market-agent-tooling 0.49.2__py3-none-any.whl → 0.50.0__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.
Files changed (39) hide show
  1. prediction_market_agent_tooling/benchmark/agents.py +6 -6
  2. prediction_market_agent_tooling/deploy/agent.py +4 -4
  3. prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +3 -4
  4. prediction_market_agent_tooling/gtypes.py +3 -2
  5. prediction_market_agent_tooling/jobs/jobs_models.py +3 -3
  6. prediction_market_agent_tooling/jobs/omen/omen_jobs.py +2 -2
  7. prediction_market_agent_tooling/markets/agent_market.py +11 -17
  8. prediction_market_agent_tooling/markets/data_models.py +3 -3
  9. prediction_market_agent_tooling/markets/manifold/api.py +6 -6
  10. prediction_market_agent_tooling/markets/manifold/data_models.py +13 -23
  11. prediction_market_agent_tooling/markets/manifold/manifold.py +2 -2
  12. prediction_market_agent_tooling/markets/markets.py +7 -3
  13. prediction_market_agent_tooling/markets/metaculus/api.py +2 -3
  14. prediction_market_agent_tooling/markets/metaculus/data_models.py +11 -10
  15. prediction_market_agent_tooling/markets/metaculus/metaculus.py +2 -2
  16. prediction_market_agent_tooling/markets/omen/data_models.py +35 -22
  17. prediction_market_agent_tooling/markets/omen/omen.py +11 -8
  18. prediction_market_agent_tooling/markets/omen/omen_contracts.py +3 -2
  19. prediction_market_agent_tooling/markets/omen/omen_resolving.py +2 -3
  20. prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +36 -33
  21. prediction_market_agent_tooling/markets/polymarket/data_models.py +5 -6
  22. prediction_market_agent_tooling/markets/polymarket/data_models_web.py +14 -14
  23. prediction_market_agent_tooling/markets/polymarket/polymarket.py +2 -2
  24. prediction_market_agent_tooling/monitor/markets/manifold.py +2 -2
  25. prediction_market_agent_tooling/monitor/markets/metaculus.py +2 -2
  26. prediction_market_agent_tooling/monitor/markets/omen.py +2 -2
  27. prediction_market_agent_tooling/monitor/markets/polymarket.py +2 -2
  28. prediction_market_agent_tooling/monitor/monitor.py +5 -15
  29. prediction_market_agent_tooling/monitor/monitor_app.py +7 -8
  30. prediction_market_agent_tooling/tools/contract.py +3 -7
  31. prediction_market_agent_tooling/tools/datetime_utc.py +74 -0
  32. prediction_market_agent_tooling/tools/langfuse_client_utils.py +16 -11
  33. prediction_market_agent_tooling/tools/tavily_storage/tavily_models.py +4 -4
  34. prediction_market_agent_tooling/tools/utils.py +28 -52
  35. {prediction_market_agent_tooling-0.49.2.dist-info → prediction_market_agent_tooling-0.50.0.dist-info}/METADATA +4 -2
  36. {prediction_market_agent_tooling-0.49.2.dist-info → prediction_market_agent_tooling-0.50.0.dist-info}/RECORD +39 -38
  37. {prediction_market_agent_tooling-0.49.2.dist-info → prediction_market_agent_tooling-0.50.0.dist-info}/LICENSE +0 -0
  38. {prediction_market_agent_tooling-0.49.2.dist-info → prediction_market_agent_tooling-0.50.0.dist-info}/WHEEL +0 -0
  39. {prediction_market_agent_tooling-0.49.2.dist-info → prediction_market_agent_tooling-0.50.0.dist-info}/entry_points.txt +0 -0
@@ -8,7 +8,7 @@ import numpy as np
8
8
  import pandas as pd
9
9
  import streamlit as st
10
10
  from google.cloud.functions_v2.types.functions import Function
11
- from pydantic import BaseModel, field_validator
11
+ from pydantic import BaseModel
12
12
 
13
13
  from prediction_market_agent_tooling.config import APIKeys
14
14
  from prediction_market_agent_tooling.deploy.gcp.kubernetes_models import (
@@ -26,9 +26,8 @@ from prediction_market_agent_tooling.markets.agent_market import AgentMarket
26
26
  from prediction_market_agent_tooling.markets.data_models import Resolution, ResolvedBet
27
27
  from prediction_market_agent_tooling.tools.parallelism import par_map
28
28
  from prediction_market_agent_tooling.tools.utils import (
29
- DatetimeWithTimezone,
29
+ DatetimeUTC,
30
30
  check_not_none,
31
- convert_to_utc_datetime,
32
31
  should_not_happen,
33
32
  )
34
33
 
@@ -40,21 +39,12 @@ class DeployedAgent(BaseModel):
40
39
 
41
40
  name: str
42
41
 
43
- start_time: DatetimeWithTimezone
44
- end_time: t.Optional[
45
- DatetimeWithTimezone
46
- ] = None # TODO: If we want end time, we need to store agents somewhere, not just query them from functions.
42
+ start_time: DatetimeUTC
43
+ end_time: DatetimeUTC | None = None # TODO: If we want end time, we need to store agents somewhere, not just query them from functions.
47
44
 
48
45
  raw_labels: dict[str, str] | None = None
49
46
  raw_env_vars: dict[str, str] | None = None
50
47
 
51
- _add_timezone_validator_start_time = field_validator("start_time")(
52
- convert_to_utc_datetime
53
- )
54
- _add_timezone_validator_end_time = field_validator("end_time")(
55
- convert_to_utc_datetime
56
- )
57
-
58
48
  def model_dump_prefixed(self) -> dict[str, t.Any]:
59
49
  return {
60
50
  self.PREFIX + k: v for k, v in self.model_dump().items() if v is not None
@@ -93,7 +83,7 @@ class DeployedAgent(BaseModel):
93
83
  @staticmethod
94
84
  def from_api_keys(
95
85
  name: str,
96
- start_time: DatetimeWithTimezone,
86
+ start_time: DatetimeUTC,
97
87
  api_keys: APIKeys,
98
88
  ) -> "DeployedAgent":
99
89
  raise NotImplementedError("Subclasses must implement this method.")
@@ -1,7 +1,6 @@
1
1
  import typing as t
2
2
  from datetime import date, datetime, timedelta
3
3
 
4
- import pytz
5
4
  import streamlit as st
6
5
 
7
6
  from prediction_market_agent_tooling.markets.agent_market import (
@@ -27,9 +26,9 @@ from prediction_market_agent_tooling.monitor.monitor import (
27
26
  )
28
27
  from prediction_market_agent_tooling.monitor.monitor_settings import MonitorSettings
29
28
  from prediction_market_agent_tooling.tools.utils import (
30
- DatetimeWithTimezone,
29
+ DatetimeUTC,
31
30
  check_not_none,
32
- convert_to_utc_datetime,
31
+ utc_datetime,
33
32
  utcnow,
34
33
  )
35
34
 
@@ -46,7 +45,7 @@ MARKET_TYPE_TO_DEPLOYED_AGENT: dict[MarketType, type[DeployedAgent]] = {
46
45
  def get_deployed_agents(
47
46
  market_type: MarketType,
48
47
  settings: MonitorSettings,
49
- start_time: DatetimeWithTimezone | None,
48
+ start_time: DatetimeUTC | None,
50
49
  ) -> list[DeployedAgent]:
51
50
  cls = MARKET_TYPE_TO_DEPLOYED_AGENT.get(market_type)
52
51
  if cls is None:
@@ -76,7 +75,7 @@ def get_deployed_agents(
76
75
 
77
76
 
78
77
  def get_open_and_resolved_markets(
79
- start_time: datetime,
78
+ start_time: DatetimeUTC,
80
79
  market_type: MarketType,
81
80
  ) -> tuple[t.Sequence[AgentMarket], t.Sequence[AgentMarket]]:
82
81
  cls = market_type.market_class
@@ -103,8 +102,8 @@ def monitor_app(
103
102
  market_type: MarketType = check_not_none(
104
103
  st.selectbox(label="Market type", options=enabled_market_types, index=0)
105
104
  )
106
- start_time: DatetimeWithTimezone | None = (
107
- convert_to_utc_datetime(
105
+ start_time: DatetimeUTC | None = (
106
+ DatetimeUTC.from_datetime(
108
107
  datetime.combine(
109
108
  t.cast(
110
109
  # This will be always a date for us, so casting.
@@ -131,7 +130,7 @@ def monitor_app(
131
130
  oldest_start_time = (
132
131
  min(agent.start_time for agent in agents)
133
132
  if agents
134
- else datetime(2020, 1, 1, tzinfo=pytz.UTC)
133
+ else utc_datetime(2020, 1, 1)
135
134
  )
136
135
 
137
136
  st.header("Market Info")
@@ -22,11 +22,7 @@ from prediction_market_agent_tooling.tools.gnosis_rpc import (
22
22
  GNOSIS_NETWORK_ID,
23
23
  GNOSIS_RPC_URL,
24
24
  )
25
- from prediction_market_agent_tooling.tools.utils import (
26
- DatetimeWithTimezone,
27
- should_not_happen,
28
- utc_timestamp_to_utc_datetime,
29
- )
25
+ from prediction_market_agent_tooling.tools.utils import DatetimeUTC, should_not_happen
30
26
  from prediction_market_agent_tooling.tools.web3_utils import (
31
27
  call_function_on_contract,
32
28
  send_function_on_contract_tx,
@@ -457,8 +453,8 @@ class DebuggingContract(ContractOnGnosisChain):
457
453
  def get_now(
458
454
  self,
459
455
  web3: Web3 | None = None,
460
- ) -> DatetimeWithTimezone:
461
- return utc_timestamp_to_utc_datetime(self.getNow(web3))
456
+ ) -> DatetimeUTC:
457
+ return DatetimeUTC.to_datetime_utc(self.getNow(web3))
462
458
 
463
459
  def inc(
464
460
  self,
@@ -0,0 +1,74 @@
1
+ import typing as t
2
+ from datetime import datetime, timedelta
3
+
4
+ import pytz
5
+ from dateutil import parser
6
+ from pydantic import GetCoreSchemaHandler
7
+ from pydantic_core import CoreSchema, core_schema
8
+
9
+ from prediction_market_agent_tooling.loggers import logger
10
+
11
+
12
+ class DatetimeUTC(datetime):
13
+ """
14
+ As a subclass of `datetime` instead of `NewType` because otherwise it doesn't work with issubclass command which is required for SQLModel/Pydantic.
15
+ """
16
+
17
+ def __new__(cls, *args, **kwargs) -> "DatetimeUTC": # type: ignore[no-untyped-def] # Pickling doesn't work if I copy-paste arguments from datetime's __new__.
18
+ if len(args) >= 8:
19
+ # Start of Selection
20
+ args = args[:7] + (pytz.UTC,) + args[8:]
21
+ else:
22
+ kwargs["tzinfo"] = pytz.UTC
23
+ return super().__new__(cls, *args, **kwargs)
24
+
25
+ @classmethod
26
+ def _validate(cls, value: t.Any) -> "DatetimeUTC":
27
+ if not isinstance(value, (datetime, int, str)):
28
+ raise TypeError(
29
+ f"Expected datetime, timestamp or string, got {type(value)}"
30
+ )
31
+ return cls.to_datetime_utc(value)
32
+
33
+ @classmethod
34
+ def __get_pydantic_core_schema__(
35
+ cls, source_type: t.Any, handler: GetCoreSchemaHandler
36
+ ) -> CoreSchema:
37
+ dt_schema = handler(datetime)
38
+ return core_schema.no_info_after_validator_function(cls._validate, dt_schema)
39
+
40
+ @staticmethod
41
+ def from_datetime(dt: datetime) -> "DatetimeUTC":
42
+ """
43
+ Converts a datetime object to DatetimeUTC, ensuring it is timezone-aware in UTC.
44
+ """
45
+ if dt.tzinfo is None:
46
+ logger.warning(
47
+ f"tzinfo not provided, assuming the timezone of {dt=} is UTC."
48
+ )
49
+ dt = dt.replace(tzinfo=pytz.UTC)
50
+ else:
51
+ dt = dt.astimezone(pytz.UTC)
52
+ return DatetimeUTC(
53
+ dt.year,
54
+ dt.month,
55
+ dt.day,
56
+ dt.hour,
57
+ dt.minute,
58
+ dt.second,
59
+ dt.microsecond,
60
+ tzinfo=pytz.UTC,
61
+ )
62
+
63
+ @staticmethod
64
+ def to_datetime_utc(value: datetime | int | str) -> "DatetimeUTC":
65
+ if isinstance(value, int):
66
+ # Divide by 1000 if the timestamp is assumed to be in miliseconds (if not, 1e11 would be year 5138).
67
+ value = int(value / 1000) if value > 1e11 else value
68
+ # In the past, we had bugged data where timestamp was huge and Python errored out.
69
+ max_timestamp = int((datetime.max - timedelta(days=1)).timestamp())
70
+ value = min(value, max_timestamp)
71
+ value = datetime.fromtimestamp(value, tz=pytz.UTC)
72
+ elif isinstance(value, str):
73
+ value = parser.parse(value)
74
+ return DatetimeUTC.from_datetime(value)
@@ -1,5 +1,4 @@
1
1
  import typing as t
2
- from datetime import datetime
3
2
 
4
3
  import numpy as np
5
4
  from langfuse import Langfuse
@@ -14,15 +13,19 @@ from prediction_market_agent_tooling.markets.data_models import (
14
13
  TradeType,
15
14
  )
16
15
  from prediction_market_agent_tooling.markets.omen.omen import OmenAgentMarket
17
- from prediction_market_agent_tooling.tools.utils import convert_to_utc_datetime
16
+ from prediction_market_agent_tooling.tools.utils import DatetimeUTC
18
17
 
19
18
 
20
19
  class ProcessMarketTrace(BaseModel):
21
- timestamp: datetime
20
+ timestamp: int
22
21
  market: OmenAgentMarket
23
22
  answer: ProbabilisticAnswer
24
23
  trades: list[PlacedTrade]
25
24
 
25
+ @property
26
+ def timestamp_datetime(self) -> DatetimeUTC:
27
+ return DatetimeUTC.to_datetime_utc(self.timestamp)
28
+
26
29
  @property
27
30
  def buy_trade(self) -> PlacedTrade | None:
28
31
  buy_trades = [t for t in self.trades if t.trade_type == TradeType.BUY]
@@ -45,7 +48,7 @@ class ProcessMarketTrace(BaseModel):
45
48
  market=market,
46
49
  answer=answer,
47
50
  trades=trades,
48
- timestamp=trace.timestamp,
51
+ timestamp=int(trace.timestamp.timestamp()),
49
52
  )
50
53
 
51
54
 
@@ -57,7 +60,7 @@ class ResolvedBetWithTrace(BaseModel):
57
60
  def get_traces_for_agent(
58
61
  agent_name: str,
59
62
  trace_name: str,
60
- from_timestamp: datetime,
63
+ from_timestamp: DatetimeUTC,
61
64
  has_output: bool,
62
65
  client: Langfuse,
63
66
  ) -> list[TraceWithDetails]:
@@ -115,7 +118,7 @@ def trace_to_trades(trace: TraceWithDetails) -> list[PlacedTrade]:
115
118
 
116
119
 
117
120
  def get_closest_datetime_from_list(
118
- ref_datetime: datetime, datetimes: list[datetime]
121
+ ref_datetime: DatetimeUTC, datetimes: list[DatetimeUTC]
119
122
  ) -> int:
120
123
  """Get the index of the closest datetime to the reference datetime"""
121
124
  if len(datetimes) == 1:
@@ -149,20 +152,22 @@ def get_trace_for_bet(
149
152
  else:
150
153
  # In-case there are multiple traces for the same market, get the closest
151
154
  # trace to the bet
152
- bet_timestamp = convert_to_utc_datetime(bet.created_time)
153
155
  closest_trace_index = get_closest_datetime_from_list(
154
- bet_timestamp,
155
- [t.timestamp for t in traces_for_bet],
156
+ bet.created_time,
157
+ [t.timestamp_datetime for t in traces_for_bet],
156
158
  )
157
159
 
158
160
  # Sanity check: Let's say the upper bound for time between
159
161
  # `agent.process_market` being called and the bet being placed is 20
160
162
  # minutes
161
163
  candidate_trace = traces_for_bet[closest_trace_index]
162
- if abs(candidate_trace.timestamp - bet_timestamp).total_seconds() > 1200:
164
+ if (
165
+ abs(candidate_trace.timestamp_datetime - bet.created_time).total_seconds()
166
+ > 1200
167
+ ):
163
168
  logger.info(
164
169
  f"Closest trace to bet has timestamp {candidate_trace.timestamp}, "
165
- f"but bet was created at {bet_timestamp}. Not matching"
170
+ f"but bet was created at {bet.created_time}. Not matching"
166
171
  )
167
172
  return None
168
173
 
@@ -1,5 +1,5 @@
1
1
  import typing as t
2
- from datetime import datetime, timedelta
2
+ from datetime import timedelta
3
3
 
4
4
  import tenacity
5
5
  from pydantic import BaseModel
@@ -18,7 +18,7 @@ from sqlmodel import (
18
18
 
19
19
  from prediction_market_agent_tooling.config import APIKeys
20
20
  from prediction_market_agent_tooling.loggers import logger
21
- from prediction_market_agent_tooling.tools.utils import utcnow
21
+ from prediction_market_agent_tooling.tools.utils import DatetimeUTC, utcnow
22
22
 
23
23
 
24
24
  class TavilyResult(BaseModel):
@@ -59,7 +59,7 @@ class TavilyResponseModel(SQLModel, table=True):
59
59
  include_images: bool
60
60
  use_cache: bool
61
61
  # Datetime at the time of search response and response from the search
62
- datetime_: datetime = Field(index=True, nullable=False)
62
+ datetime_: DatetimeUTC = Field(index=True, nullable=False)
63
63
  response: dict[str, t.Any] = Field(sa_column=Column(JSONB, nullable=False))
64
64
 
65
65
  @staticmethod
@@ -89,7 +89,7 @@ class TavilyResponseModel(SQLModel, table=True):
89
89
  include_raw_content=include_raw_content,
90
90
  include_images=include_images,
91
91
  use_cache=use_cache,
92
- datetime_=datetime.now(),
92
+ datetime_=utcnow(),
93
93
  response=response.model_dump(),
94
94
  )
95
95
 
@@ -1,20 +1,18 @@
1
1
  import json
2
2
  import os
3
3
  import subprocess
4
- import typing as t
5
4
  from datetime import datetime
6
- from typing import Any, NoReturn, Optional, Type, TypeVar, cast
5
+ from typing import Any, NoReturn, Optional, Type, TypeVar
7
6
 
8
7
  import pytz
9
8
  import requests
10
9
  from google.cloud import secretmanager
11
10
  from pydantic import BaseModel, ValidationError
12
- from pydantic.functional_validators import BeforeValidator
13
11
  from scipy.optimize import newton
14
12
  from scipy.stats import entropy
15
13
 
16
14
  from prediction_market_agent_tooling.gtypes import (
17
- DatetimeWithTimezone,
15
+ DatetimeUTC,
18
16
  PrivateKey,
19
17
  Probability,
20
18
  SecretStr,
@@ -85,55 +83,33 @@ def export_requirements_from_toml(output_dir: str) -> None:
85
83
  logger.debug(f"Saved requirements to {output_dir}/requirements.txt")
86
84
 
87
85
 
88
- @t.overload
89
- def convert_to_utc_datetime(value: datetime) -> DatetimeWithTimezone:
90
- ...
91
-
92
-
93
- @t.overload
94
- def convert_to_utc_datetime(value: None) -> None:
95
- ...
96
-
97
-
98
- def convert_to_utc_datetime(value: datetime | None) -> DatetimeWithTimezone | None:
99
- """
100
- If datetime doesn't come with a timezone, we assume it to be UTC.
101
- Note: Not great, but at least the error will be constant.
102
- """
103
- if value is None:
104
- return None
105
- if value.tzinfo is None:
106
- value = value.replace(tzinfo=pytz.UTC)
107
- if value.tzinfo != pytz.UTC:
108
- value = value.astimezone(pytz.UTC)
109
- return cast(DatetimeWithTimezone, value)
110
-
111
-
112
- @t.overload
113
- def utc_timestamp_to_utc_datetime(ts: int) -> DatetimeWithTimezone:
114
- ...
115
-
116
-
117
- @t.overload
118
- def utc_timestamp_to_utc_datetime(ts: None) -> None:
119
- ...
120
-
121
-
122
- def utc_timestamp_to_utc_datetime(ts: int | None) -> DatetimeWithTimezone | None:
123
- return (
124
- convert_to_utc_datetime(datetime.fromtimestamp(ts, tz=pytz.UTC))
125
- if ts is not None
126
- else None
86
+ def utcnow() -> DatetimeUTC:
87
+ return DatetimeUTC.from_datetime(datetime.now(pytz.UTC))
88
+
89
+
90
+ def utc_datetime(
91
+ year: int,
92
+ month: int,
93
+ day: int,
94
+ hour: int = 0,
95
+ minute: int = 0,
96
+ second: int = 0,
97
+ microsecond: int = 0,
98
+ *,
99
+ fold: int = 0,
100
+ ) -> DatetimeUTC:
101
+ dt = datetime(
102
+ year=year,
103
+ month=month,
104
+ day=day,
105
+ hour=hour,
106
+ minute=minute,
107
+ second=second,
108
+ microsecond=microsecond,
109
+ tzinfo=pytz.UTC,
110
+ fold=fold,
127
111
  )
128
-
129
-
130
- UTCDatetimeFromUTCTimestamp = t.Annotated[
131
- datetime, BeforeValidator(utc_timestamp_to_utc_datetime)
132
- ]
133
-
134
-
135
- def utcnow() -> DatetimeWithTimezone:
136
- return convert_to_utc_datetime(datetime.now(pytz.UTC))
112
+ return DatetimeUTC.from_datetime(dt)
137
113
 
138
114
 
139
115
  def get_current_git_commit_sha() -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.49.2
3
+ Version: 0.50.0
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.12
@@ -36,16 +36,18 @@ Requires-Dist: psycopg2-binary (>=2.9.9,<3.0.0)
36
36
  Requires-Dist: pydantic (>=2.6.1,<3.0.0)
37
37
  Requires-Dist: pydantic-settings (>=2.4.0,<3.0.0)
38
38
  Requires-Dist: pymongo (>=4.8.0,<5.0.0)
39
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
39
40
  Requires-Dist: safe-cli (>=1.0.0,<2.0.0)
40
41
  Requires-Dist: safe-eth-py (>=6.0.0b14,<7.0.0)
41
42
  Requires-Dist: scikit-learn (>=1.3.1,<2.0.0)
42
- Requires-Dist: sqlmodel (>=0.0.21,<0.0.22)
43
+ Requires-Dist: sqlmodel (>=0.0.22,<0.0.23)
43
44
  Requires-Dist: streamlit (>=1.31.0,<2.0.0)
44
45
  Requires-Dist: subgrounds (>=1.9.1,<2.0.0)
45
46
  Requires-Dist: tabulate (>=0.9.0,<0.10.0)
46
47
  Requires-Dist: tavily-python (>=0.3.9,<0.4.0)
47
48
  Requires-Dist: tqdm (>=4.66.2,<5.0.0)
48
49
  Requires-Dist: typer (>=0.9.0,<1.0.0)
50
+ Requires-Dist: types-python-dateutil (>=2.9.0.20240906,<3.0.0.0)
49
51
  Requires-Dist: types-pytz (>=2024.1.0.20240203,<2025.0.0.0)
50
52
  Requires-Dist: types-requests (>=2.31.0.0,<3.0.0.0)
51
53
  Requires-Dist: web3 (>=6.15.1,<7.0.0)
@@ -13,52 +13,52 @@ prediction_market_agent_tooling/abis/omen_realitio.abi.json,sha256=7HmFkBF_rq83U
13
13
  prediction_market_agent_tooling/abis/omen_thumbnailmapping.abi.json,sha256=u1-3B8FB3Ys9KVJCH-lw9ArkicdxbNMf34dV-VEGMMU,930
14
14
  prediction_market_agent_tooling/abis/proxy.abi.json,sha256=h24GXZ6Q0bSZlwh7zOv0EiDvbqUz_PHtWfKHTyPJ1w4,644
15
15
  prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- prediction_market_agent_tooling/benchmark/agents.py,sha256=BwE3U11tQq0rfOJBn-Xn5ZgN1DTXBEehvmdZx6A7DuE,3918
16
+ prediction_market_agent_tooling/benchmark/agents.py,sha256=B1-uWdyeN4GGKMWGK_-CcAFJg1m9Y_XuaeIHPB29QR8,3971
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=LAOG22P7yi8zDBqMuhBD6FaoCG-w4_tE8rF14hqDffk,6519
20
- prediction_market_agent_tooling/deploy/agent.py,sha256=o1k7MbaprWHnznhW69YrwwmYl5KOpvPCkdGZ3QB61eM,21851
20
+ prediction_market_agent_tooling/deploy/agent.py,sha256=xCIisNL-WW96hlndI_Cfftv__Eb6X7-LghzNmovCbno,21817
21
21
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=dIIdZashExWk9tOdyDjw87AuUcGyM7jYxNChYrVK2dM,1001
22
22
  prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=cOPznMX0jd380qHw06A-l1XUyoicV54AXBghirtPw0Q,12127
23
23
  prediction_market_agent_tooling/deploy/constants.py,sha256=M5ty8URipYMGe_G-RzxRydK3AFL6CyvmqCraJUrLBnE,82
24
24
  prediction_market_agent_tooling/deploy/gcp/deploy.py,sha256=CYUgnfy-9XVk04kkxA_5yp0GE9Mw5caYqlFUZQ2j3ks,3739
25
- prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py,sha256=qYIHRxQLac3yxtZ8ChikiPG9O1aUQucHW0muTSm1nto,2627
25
+ prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py,sha256=OsPboCFGiZKsvGyntGZHwdqPlLTthITkNF5rJFvGgU8,2582
26
26
  prediction_market_agent_tooling/deploy/gcp/utils.py,sha256=oyW0jgrUT2Tr49c7GlpcMsYNQjoCSOcWis3q-MmVAhU,6089
27
- prediction_market_agent_tooling/gtypes.py,sha256=O77co9-GWmHJo_NyBzRVkli5L1xqweI28JmsyaAHUHs,2474
27
+ prediction_market_agent_tooling/gtypes.py,sha256=tqp03PyY0Yhievl4XELfwAn0xOoecaTvBZ1Co6b-A7o,2541
28
28
  prediction_market_agent_tooling/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  prediction_market_agent_tooling/jobs/jobs.py,sha256=I07yh0GJ-xhlvQaOUQB8xlSnihhcbU2c7DZ4ZND14c0,1246
30
- prediction_market_agent_tooling/jobs/jobs_models.py,sha256=8JS9n_EVgmNzqRg1YUjopPVZRjqFneVYCKnX4UEFy3I,1326
31
- prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=Mr6fZqfOs4tzGYsp7g0ygolYjQaFCLG7ljP1mKs71ng,3946
30
+ prediction_market_agent_tooling/jobs/jobs_models.py,sha256=I5uBTHJ2S1Wi3H4jDxxU7nsswSIP9r3BevHmljLh5Pg,1370
31
+ prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=TdQHFI8DTnCvZBhzpN-lJY2ozbmYg6xPCtZpHrGDjk0,3987
32
32
  prediction_market_agent_tooling/loggers.py,sha256=Am6HHXRNO545BO3l7Ue9Wb2TkYE1OK8KKhGbI3XypVU,3751
33
- prediction_market_agent_tooling/markets/agent_market.py,sha256=kQ56_bC7mW7Ql3AyCjmwVMnb06i5PJC1FSRZQfEi3W8,10534
33
+ prediction_market_agent_tooling/markets/agent_market.py,sha256=olfZ1S4T5Dut_072rsXreZpPAP4jctd5f50XpsKQtkk,10304
34
34
  prediction_market_agent_tooling/markets/categorize.py,sha256=jsoHWvZk9pU6n17oWSCcCxNNYVwlb_NXsZxKRI7vmsk,1301
35
- prediction_market_agent_tooling/markets/data_models.py,sha256=bS4r9IddE0l2m3u8h7_T-Z2gJr1C7BBLtZPtNnGJ-8c,3577
35
+ prediction_market_agent_tooling/markets/data_models.py,sha256=jMqrSFO_w2z-5N3PFVgZqTHdVdkzSDhhzky2lHsGGKA,3621
36
36
  prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- prediction_market_agent_tooling/markets/manifold/api.py,sha256=pliGOyehEcApj1l6OaoVDeuGrws8AN2bymiTuP1y4t0,7295
38
- prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=2Rh3j9SM2om-q61Mbxm_UjOzXfxnoej-f_Vyx0LMMfE,6467
39
- prediction_market_agent_tooling/markets/manifold/manifold.py,sha256=e4T6IAxV2OfIHsPMOTqSpfTRfLZ7CxegAYbCLc35Os8,4450
37
+ prediction_market_agent_tooling/markets/manifold/api.py,sha256=Fd0HYnstvvHO6AZkp1xiRlvCwQUc8kLR8DAj6PAZu0s,7297
38
+ prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=ylXIEHymx2RcCdOVUpKP4BcTqbzLu_Fd5gV1TGBntVk,6099
39
+ prediction_market_agent_tooling/markets/manifold/manifold.py,sha256=JEEIPz9-U3avWggciyNFzUVCpybGCcvGPwcJmNY0HqM,4491
40
40
  prediction_market_agent_tooling/markets/manifold/utils.py,sha256=cPPFWXm3vCYH1jy7_ctJZuQH9ZDaPL4_AgAYzGWkoow,513
41
- prediction_market_agent_tooling/markets/markets.py,sha256=EN0MgOBBk2ASSVTfqlk0MrsHxg3CVRyQl23jtzfeEi8,3222
42
- prediction_market_agent_tooling/markets/metaculus/api.py,sha256=gvPQVAM5NlCyWzEMt4WML9saRBsK9eiHAZP6jwirVqc,2750
43
- prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=6TBy17xntdLBR61QCE5wddwTa_k2D0D8ZgK6p7sGUuc,2448
44
- prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=hNn4-iD07TQIKrinZYc_iF-nvwLGQHLmgNz5AksSyKc,3633
41
+ prediction_market_agent_tooling/markets/markets.py,sha256=_3nV9QTT48G2oJ2egkuWA1UzrTOGY6x3mXqIRgDaVIo,3245
42
+ prediction_market_agent_tooling/markets/metaculus/api.py,sha256=4TRPGytQQbSdf42DCg2M_JWYPAuNjqZ3eBqaQBLkNks,2736
43
+ prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=PIRN2FAQ32vNj78JRZPB1pXK61B0w2RBJvJSJ7dvvrg,2514
44
+ prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=S-XpK6Ij5AZgGMFMdXXcHm7hH2o8BRU-a_XqaW4xC54,3674
45
45
  prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- prediction_market_agent_tooling/markets/omen/data_models.py,sha256=qu5B_hdexQ69TzOvJ8UhC6cyxamluLXXXLkQLL_vK-c,26270
47
- prediction_market_agent_tooling/markets/omen/omen.py,sha256=5w41_gPJbT4n0HT5qFvJHE9py3C-M--L8WFhjyuSUiY,47926
48
- prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=uabAiNxW1tnw2M-eqetUAB2s7BzTKdgg46SPlTMZmwM,28205
49
- prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=A2q8BR0o_0cdR2JxThtFzuO8yyaKMlx2OT_zCk5pya4,9525
50
- prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=EJnzZDF2ykY8WLpCMnjBzW76AUnWajHvZVAcLLp3B9U,32642
46
+ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=YRsdASXBp5sMKmSTbwkZDWh0iwNnMnmJwLfgY-oj21s,26748
47
+ prediction_market_agent_tooling/markets/omen/omen.py,sha256=6tBhn7qxtsdrk0xgDSqWy44f_m1qmhfXjvQUWXtW3TI,47974
48
+ prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=w_ClGd8U4w2pKH3HLZqy2bAFkqZMSAhVgGFGlUqET6Y,28266
49
+ prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=eBFzXYsSvGRrGjQ60_SDQr1ZiPTe6U2CcZkSuKt_Wxc,9551
50
+ prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=_KlGEOoGCnZ33p_CxOXnYZ5pWqMmsIsBF4Yi6YaZcuQ,32735
51
51
  prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
52
- prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=9CJzakyEcsn6DQBK2nOXjOMzTZBLAmK_KqevXvW17DI,4292
53
- prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=IPsFT3FX9Ge5l5zR1nBd2w-sd5ue7oR8PJSW710vFWY,12479
54
- prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=SONMs6gFAR_j8xgVK8MmQDTrFx64_JCi5IfVr52EeKE,2773
52
+ prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=Fd5PI5y3mJM8VHExBhWFWEnuuIKxQmIAXgBuoPDvNjw,4341
53
+ prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=VZhVccTApygSKMmy6Au2G02JCJOKJnR_oVeKlaesuSg,12548
54
+ prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=CE5h74VVwYb9FiLugfLozZZAolWAE-zB5jk9k7-xpqw,2814
55
55
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=m4JG6WULh5epCJt4XBMHg0ae5NoVhqlOvAl0A7DR9iM,2023
56
- prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=GdYpgRX1GahDi-75Mr53jgtEg6nWcs_rHDUkg4o_7dQ,3352
57
- prediction_market_agent_tooling/monitor/markets/metaculus.py,sha256=S8zeDVN2aA6yvQykQNPb8GUGohczfJuCYt9Ds9ESCzs,1473
58
- prediction_market_agent_tooling/monitor/markets/omen.py,sha256=jOLPnIbDU9syjnYtHfOb2xa6-Ize3vbplgh-8WWkuT4,3323
59
- prediction_market_agent_tooling/monitor/markets/polymarket.py,sha256=y7HVAEzeybfphB_VZPZpmAsQqjxPUM1uM7ZttQ56mm8,1888
60
- prediction_market_agent_tooling/monitor/monitor.py,sha256=TIA4GWXUgy4204ugh12M-Du1OHXvxjiZAhhy3Rba2EY,14627
61
- prediction_market_agent_tooling/monitor/monitor_app.py,sha256=gE5yrtQflXOb1Ocsso_uKFZ-DsVD1zMlRph0H9nfUP0,4833
56
+ prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=TS4ERwTfQnot8dhekNyVNhJYf5ysYsjF-9v5_kM3aVI,3334
57
+ prediction_market_agent_tooling/monitor/markets/metaculus.py,sha256=LOnyWWBFdg10-cTWdb76nOsNjDloO8OfMT85GBzRCFI,1455
58
+ prediction_market_agent_tooling/monitor/markets/omen.py,sha256=EqiJYTvDbSu7fBpbrBmCuf3fc6GHr4MxWrBGa69MIyc,3305
59
+ prediction_market_agent_tooling/monitor/markets/polymarket.py,sha256=wak8o4BYaGbLpshQD12OrsqNABdanyID6ql95lEG2io,1870
60
+ prediction_market_agent_tooling/monitor/monitor.py,sha256=-82COVrQwabUN7N-c8DbotRut9MbYcpfRGo6Cks92d0,14309
61
+ prediction_market_agent_tooling/monitor/monitor_app.py,sha256=zNHSwH_KEiv8aOwvfo1JrNuSFMefpzXPWtellhnJpTI,4775
62
62
  prediction_market_agent_tooling/monitor/monitor_settings.py,sha256=Xiozs3AsufuJ04JOe1vjUri-IAMWHjjmc2ugGGiHNH4,947
63
63
  prediction_market_agent_tooling/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  prediction_market_agent_tooling/tools/balances.py,sha256=nR8_dSfbm3yTOOmMAwhGlurftEiNo1w1WIVzbskjdmM,837
@@ -68,8 +68,9 @@ prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,s
68
68
  prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py,sha256=THMXwFlskvzbjnX_OiYtDSzI8XVFyULWfP2525_9UGc,429
69
69
  prediction_market_agent_tooling/tools/betting_strategies/utils.py,sha256=kpIb-ci67Vc1Yqqaa-_S4OUkbhWSIYog4_Iwp69HU_k,97
70
70
  prediction_market_agent_tooling/tools/cache.py,sha256=tGHHd9HCiE_hCCtPtloHZQdDfBuiow9YsqJNYi2Tx_0,499
71
- prediction_market_agent_tooling/tools/contract.py,sha256=JEZRusn_ZVUE7U1L27lXPBnmLxQlx9LqRo3f-SnaFvg,20987
71
+ prediction_market_agent_tooling/tools/contract.py,sha256=s3yo8IbXTcvAJcPfLM0_NbgaEsWwLsPmyVnOgyjq_xI,20919
72
72
  prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
73
+ prediction_market_agent_tooling/tools/datetime_utc.py,sha256=2JSWF7AXQnv04_D_cu9Vmdkq0TWmGJ1QcK9AeqrA-U8,2765
73
74
  prediction_market_agent_tooling/tools/gnosis_rpc.py,sha256=ctBfB1os-MvZ1tm0Rwdyn9b3dvFnlM9naKvZmzywc3A,197
74
75
  prediction_market_agent_tooling/tools/google.py,sha256=SfVDxb3oEOUK8mpd0l3mTX9ybrdrTPNM6HjfJ7kfNjA,1794
75
76
  prediction_market_agent_tooling/tools/hexbytes_custom.py,sha256=Bp94qgPjvjWf1Vb4lNzGFDXRdThw1rJ91vL6r2PWq5E,2096
@@ -79,18 +80,18 @@ prediction_market_agent_tooling/tools/image_gen/market_thumbnail_gen.py,sha256=8
79
80
  prediction_market_agent_tooling/tools/ipfs/ipfs_handler.py,sha256=CTTMfTvs_8PH4kAtlQby2aeEKwgpmxtuGbd4oYIdJ2A,1201
80
81
  prediction_market_agent_tooling/tools/is_predictable.py,sha256=NIoR2bTNMmADcyNY2aKNMWkiDw7Z_9kZMcFXEdyewy4,6771
81
82
  prediction_market_agent_tooling/tools/langfuse_.py,sha256=jI_4ROxqo41CCnWGS1vN_AeDVhRzLMaQLxH3kxDu3L8,1153
82
- prediction_market_agent_tooling/tools/langfuse_client_utils.py,sha256=oE4pwfsadbn_S0rGRAeQzv2D5CLAJQRXt7KW2-kq_7I,5480
83
+ prediction_market_agent_tooling/tools/langfuse_client_utils.py,sha256=7H9EzTA_q5TmuqoIeMpdVU2efF_RyttQEoTPLyS-ld4,5579
83
84
  prediction_market_agent_tooling/tools/omen/reality_accuracy.py,sha256=M1SF7iSW1gVlQSTskdVFTn09uPLST23YeipVIWj54io,2236
84
85
  prediction_market_agent_tooling/tools/parallelism.py,sha256=6Gou0hbjtMZrYvxjTDFUDZuxmE2nqZVbb6hkg1hF82A,1022
85
86
  prediction_market_agent_tooling/tools/safe.py,sha256=h0xOO0eNtitClf0fPkn-0oTc6A_bflDTee98V_aiV-A,5195
86
87
  prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0rnVhtQGzwoUdAgn_7u_GBM,729
87
88
  prediction_market_agent_tooling/tools/streamlit_user_login.py,sha256=NXEqfjT9Lc9QtliwSGRASIz1opjQ7Btme43H4qJbzgE,3010
88
- prediction_market_agent_tooling/tools/tavily_storage/tavily_models.py,sha256=KXRic0UlAyjWX0NADJUg1wEHaSzFdASMAOUQboUlt6A,6374
89
+ prediction_market_agent_tooling/tools/tavily_storage/tavily_models.py,sha256=99S7w8BvnJRMOnUArGN0g4GVRoG8M0C-XyIFU8HnLn0,6374
89
90
  prediction_market_agent_tooling/tools/tavily_storage/tavily_storage.py,sha256=xrtQH9v5pXycBRyc5j45pWqkSffkoc9efNIU1_G633Q,3706
90
- prediction_market_agent_tooling/tools/utils.py,sha256=zcen2m2JDdXNe0KnDdmfMczr4Z2QvoY8oFPbgDGmLzg,7886
91
+ prediction_market_agent_tooling/tools/utils.py,sha256=JZj_xM4VbsDSiDlbn2lZFZPEOBSYhqqxd1Y2NpCqnJ4,7117
91
92
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=dkcjG-LtuaWRh7WEMzRGmZ5B5rsxZTlliFOI6fj-EJ8,11842
92
- prediction_market_agent_tooling-0.49.2.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
93
- prediction_market_agent_tooling-0.49.2.dist-info/METADATA,sha256=GYwB197xs5Bwt54lhxYkmECyI1QhyTybyn9nAhCreUc,7937
94
- prediction_market_agent_tooling-0.49.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
95
- prediction_market_agent_tooling-0.49.2.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
96
- prediction_market_agent_tooling-0.49.2.dist-info/RECORD,,
93
+ prediction_market_agent_tooling-0.50.0.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
94
+ prediction_market_agent_tooling-0.50.0.dist-info/METADATA,sha256=WJM6adz0OH9KsvN-ZcCPV46AnEIEPNGio8ZXZFFeqbA,8056
95
+ prediction_market_agent_tooling-0.50.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
96
+ prediction_market_agent_tooling-0.50.0.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
97
+ prediction_market_agent_tooling-0.50.0.dist-info/RECORD,,