prediction-market-agent-tooling 0.57.0__py3-none-any.whl → 0.57.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- prediction_market_agent_tooling/config.py +2 -2
- prediction_market_agent_tooling/markets/omen/data_models.py +7 -3
- prediction_market_agent_tooling/markets/omen/omen_contracts.py +1 -1
- prediction_market_agent_tooling/monitor/monitor.py +1 -1
- prediction_market_agent_tooling/tools/caches/db_cache.py +9 -73
- prediction_market_agent_tooling/tools/caches/serializers.py +61 -0
- prediction_market_agent_tooling/tools/db/db_manager.py +76 -0
- prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py +7 -17
- {prediction_market_agent_tooling-0.57.0.dist-info → prediction_market_agent_tooling-0.57.1.dist-info}/METADATA +1 -1
- {prediction_market_agent_tooling-0.57.0.dist-info → prediction_market_agent_tooling-0.57.1.dist-info}/RECORD +13 -11
- {prediction_market_agent_tooling-0.57.0.dist-info → prediction_market_agent_tooling-0.57.1.dist-info}/LICENSE +0 -0
- {prediction_market_agent_tooling-0.57.0.dist-info → prediction_market_agent_tooling-0.57.1.dist-info}/WHEEL +0 -0
- {prediction_market_agent_tooling-0.57.0.dist-info → prediction_market_agent_tooling-0.57.1.dist-info}/entry_points.txt +0 -0
@@ -188,14 +188,14 @@ class APIKeys(BaseSettings):
|
|
188
188
|
return {
|
189
189
|
k: v
|
190
190
|
for k, v in self.model_dump().items()
|
191
|
-
if
|
191
|
+
if self.model_fields[k].annotation not in SECRET_TYPES and v is not None
|
192
192
|
}
|
193
193
|
|
194
194
|
def model_dump_secrets(self) -> dict[str, t.Any]:
|
195
195
|
return {
|
196
196
|
k: v.get_secret_value() if isinstance(v, SecretStr) else v
|
197
197
|
for k, v in self.model_dump().items()
|
198
|
-
if
|
198
|
+
if self.model_fields[k].annotation in SECRET_TYPES and v is not None
|
199
199
|
}
|
200
200
|
|
201
201
|
def check_if_is_safe_owner(self, ethereum_client: EthereumClient) -> bool:
|
@@ -797,9 +797,13 @@ class ContractPrediction(BaseModel):
|
|
797
797
|
return Web3.to_checksum_address(self.publisher)
|
798
798
|
|
799
799
|
@staticmethod
|
800
|
-
def from_tuple(values: tuple[t.Any]) -> "ContractPrediction":
|
801
|
-
|
802
|
-
|
800
|
+
def from_tuple(values: tuple[t.Any, ...]) -> "ContractPrediction":
|
801
|
+
return ContractPrediction(
|
802
|
+
publisher=values[0],
|
803
|
+
ipfs_hash=values[1],
|
804
|
+
tx_hashes=values[2],
|
805
|
+
estimated_probability_bps=values[3],
|
806
|
+
)
|
803
807
|
|
804
808
|
|
805
809
|
class IPFSAgentResult(BaseModel):
|
@@ -538,7 +538,7 @@ class OmenKlerosContract(ContractOnGnosisChain):
|
|
538
538
|
address = "0xe40DD83a262da3f56976038F1554Fe541Fa75ecd"
|
539
539
|
|
540
540
|
elif arbitrator == Arbitrator.KLEROS_31_JURORS_WITH_APPEAL:
|
541
|
-
address = "
|
541
|
+
address = "0x5562Ac605764DC4039fb6aB56a74f7321396Cdf2"
|
542
542
|
|
543
543
|
else:
|
544
544
|
raise ValueError(f"Unsupported arbitrator: {arbitrator=}")
|
@@ -223,7 +223,7 @@ def monitor_agent(agent: DeployedAgent) -> None:
|
|
223
223
|
)
|
224
224
|
.interactive()
|
225
225
|
)
|
226
|
-
st.altair_chart(
|
226
|
+
st.altair_chart(
|
227
227
|
per_day_accuracy_chart.mark_line()
|
228
228
|
+ per_day_accuracy_chart.transform_loess("x-axis-day", "Is Correct").mark_line(
|
229
229
|
color="red", strokeDash=[5, 5]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import hashlib
|
2
2
|
import inspect
|
3
3
|
import json
|
4
|
-
from datetime import
|
4
|
+
from datetime import timedelta
|
5
5
|
from functools import wraps
|
6
6
|
from typing import (
|
7
7
|
Any,
|
@@ -17,11 +17,12 @@ from typing import (
|
|
17
17
|
from pydantic import BaseModel
|
18
18
|
from sqlalchemy import Column
|
19
19
|
from sqlalchemy.dialects.postgresql import JSONB
|
20
|
-
from sqlmodel import Field,
|
20
|
+
from sqlmodel import Field, SQLModel, desc, select
|
21
21
|
|
22
22
|
from prediction_market_agent_tooling.config import APIKeys
|
23
23
|
from prediction_market_agent_tooling.loggers import logger
|
24
24
|
from prediction_market_agent_tooling.tools.datetime_utc import DatetimeUTC
|
25
|
+
from prediction_market_agent_tooling.tools.db.db_manager import DBManager
|
25
26
|
from prediction_market_agent_tooling.tools.utils import utcnow
|
26
27
|
|
27
28
|
FunctionT = TypeVar("FunctionT", bound=Callable[..., Any])
|
@@ -97,16 +98,7 @@ def db_cache(
|
|
97
98
|
if not api_keys.ENABLE_CACHE:
|
98
99
|
return func(*args, **kwargs)
|
99
100
|
|
100
|
-
|
101
|
-
api_keys.sqlalchemy_db_url.get_secret_value(),
|
102
|
-
# Use custom json serializer and deserializer, because otherwise, for example `datetime` serialization would fail.
|
103
|
-
json_serializer=json_serializer,
|
104
|
-
json_deserializer=json_deserializer,
|
105
|
-
pool_size=1,
|
106
|
-
)
|
107
|
-
|
108
|
-
# Create table if it doesn't exist
|
109
|
-
SQLModel.metadata.create_all(engine)
|
101
|
+
DBManager(api_keys).create_tables([FunctionCache])
|
110
102
|
|
111
103
|
# Convert *args and **kwargs to a single dictionary, where we have names for arguments passed as args as well.
|
112
104
|
signature = inspect.signature(func)
|
@@ -147,12 +139,11 @@ def db_cache(
|
|
147
139
|
|
148
140
|
# Determine if the function returns or contains Pydantic BaseModel(s)
|
149
141
|
return_type = func.__annotations__.get("return", None)
|
150
|
-
is_pydantic_model =
|
151
|
-
|
152
|
-
|
153
|
-
is_pydantic_model = True
|
142
|
+
is_pydantic_model = return_type is not None and contains_pydantic_model(
|
143
|
+
return_type
|
144
|
+
)
|
154
145
|
|
155
|
-
with
|
146
|
+
with DBManager(api_keys).get_session() as session:
|
156
147
|
# Try to get cached result
|
157
148
|
statement = (
|
158
149
|
select(FunctionCache)
|
@@ -205,12 +196,11 @@ def db_cache(
|
|
205
196
|
result=computed_result,
|
206
197
|
created_at=utcnow(),
|
207
198
|
)
|
208
|
-
with
|
199
|
+
with DBManager(api_keys).get_session() as session:
|
209
200
|
logger.info(f"Saving {cache_entry} into database.")
|
210
201
|
session.add(cache_entry)
|
211
202
|
session.commit()
|
212
203
|
|
213
|
-
engine.dispose()
|
214
204
|
return computed_result
|
215
205
|
|
216
206
|
return cast(FunctionT, wrapper)
|
@@ -230,60 +220,6 @@ def contains_pydantic_model(return_type: Any) -> bool:
|
|
230
220
|
return False
|
231
221
|
|
232
222
|
|
233
|
-
def json_serializer_default_fn(
|
234
|
-
y: DatetimeUTC | timedelta | date | BaseModel,
|
235
|
-
) -> str | dict[str, Any]:
|
236
|
-
"""
|
237
|
-
Used to serialize objects that don't support it by default into a specific string that can be deserialized out later.
|
238
|
-
If this function returns a dictionary, it will be called recursivelly.
|
239
|
-
If you add something here, also add it to `replace_custom_stringified_objects` below.
|
240
|
-
"""
|
241
|
-
if isinstance(y, DatetimeUTC):
|
242
|
-
return f"DatetimeUTC::{y.isoformat()}"
|
243
|
-
elif isinstance(y, timedelta):
|
244
|
-
return f"timedelta::{y.total_seconds()}"
|
245
|
-
elif isinstance(y, date):
|
246
|
-
return f"date::{y.isoformat()}"
|
247
|
-
elif isinstance(y, BaseModel):
|
248
|
-
return y.model_dump()
|
249
|
-
raise TypeError(
|
250
|
-
f"Unsuported type for the default json serialize function, value is {y}."
|
251
|
-
)
|
252
|
-
|
253
|
-
|
254
|
-
def json_serializer(x: Any) -> str:
|
255
|
-
return json.dumps(x, default=json_serializer_default_fn)
|
256
|
-
|
257
|
-
|
258
|
-
def replace_custom_stringified_objects(obj: Any) -> Any:
|
259
|
-
"""
|
260
|
-
Used to deserialize objects from `json_serializer_default_fn` into their proper form.
|
261
|
-
"""
|
262
|
-
if isinstance(obj, str):
|
263
|
-
if obj.startswith("DatetimeUTC::"):
|
264
|
-
iso_str = obj[len("DatetimeUTC::") :]
|
265
|
-
return DatetimeUTC.to_datetime_utc(iso_str)
|
266
|
-
elif obj.startswith("timedelta::"):
|
267
|
-
total_seconds_str = obj[len("timedelta::") :]
|
268
|
-
return timedelta(seconds=float(total_seconds_str))
|
269
|
-
elif obj.startswith("date::"):
|
270
|
-
iso_str = obj[len("date::") :]
|
271
|
-
return date.fromisoformat(iso_str)
|
272
|
-
else:
|
273
|
-
return obj
|
274
|
-
elif isinstance(obj, dict):
|
275
|
-
return {k: replace_custom_stringified_objects(v) for k, v in obj.items()}
|
276
|
-
elif isinstance(obj, list):
|
277
|
-
return [replace_custom_stringified_objects(item) for item in obj]
|
278
|
-
else:
|
279
|
-
return obj
|
280
|
-
|
281
|
-
|
282
|
-
def json_deserializer(s: str) -> Any:
|
283
|
-
data = json.loads(s)
|
284
|
-
return replace_custom_stringified_objects(data)
|
285
|
-
|
286
|
-
|
287
223
|
def convert_cached_output_to_pydantic(return_type: Any, data: Any) -> Any:
|
288
224
|
"""
|
289
225
|
Used to initialize Pydantic models from anything cached that was originally a Pydantic model in the output. Including models in nested structures.
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import json
|
2
|
+
import typing as t
|
3
|
+
from datetime import date, timedelta
|
4
|
+
|
5
|
+
from pydantic import BaseModel
|
6
|
+
|
7
|
+
from prediction_market_agent_tooling.tools.datetime_utc import DatetimeUTC
|
8
|
+
|
9
|
+
|
10
|
+
def json_serializer(x: t.Any) -> str:
|
11
|
+
return json.dumps(x, default=json_serializer_default_fn)
|
12
|
+
|
13
|
+
|
14
|
+
def json_serializer_default_fn(
|
15
|
+
y: DatetimeUTC | timedelta | date | BaseModel,
|
16
|
+
) -> str | dict[str, t.Any]:
|
17
|
+
"""
|
18
|
+
Used to serialize objects that don't support it by default into a specific string that can be deserialized out later.
|
19
|
+
If this function returns a dictionary, it will be called recursivelly.
|
20
|
+
If you add something here, also add it to `replace_custom_stringified_objects` below.
|
21
|
+
"""
|
22
|
+
if isinstance(y, DatetimeUTC):
|
23
|
+
return f"DatetimeUTC::{y.isoformat()}"
|
24
|
+
elif isinstance(y, timedelta):
|
25
|
+
return f"timedelta::{y.total_seconds()}"
|
26
|
+
elif isinstance(y, date):
|
27
|
+
return f"date::{y.isoformat()}"
|
28
|
+
elif isinstance(y, BaseModel):
|
29
|
+
return y.model_dump()
|
30
|
+
raise TypeError(
|
31
|
+
f"Unsuported type for the default json serialize function, value is {y}."
|
32
|
+
)
|
33
|
+
|
34
|
+
|
35
|
+
def json_deserializer(s: str) -> t.Any:
|
36
|
+
data = json.loads(s)
|
37
|
+
return replace_custom_stringified_objects(data)
|
38
|
+
|
39
|
+
|
40
|
+
def replace_custom_stringified_objects(obj: t.Any) -> t.Any:
|
41
|
+
"""
|
42
|
+
Used to deserialize objects from `json_serializer_default_fn` into their proper form.
|
43
|
+
"""
|
44
|
+
if isinstance(obj, str):
|
45
|
+
if obj.startswith("DatetimeUTC::"):
|
46
|
+
iso_str = obj[len("DatetimeUTC::") :]
|
47
|
+
return DatetimeUTC.to_datetime_utc(iso_str)
|
48
|
+
elif obj.startswith("timedelta::"):
|
49
|
+
total_seconds_str = obj[len("timedelta::") :]
|
50
|
+
return timedelta(seconds=float(total_seconds_str))
|
51
|
+
elif obj.startswith("date::"):
|
52
|
+
iso_str = obj[len("date::") :]
|
53
|
+
return date.fromisoformat(iso_str)
|
54
|
+
else:
|
55
|
+
return obj
|
56
|
+
elif isinstance(obj, dict):
|
57
|
+
return {k: replace_custom_stringified_objects(v) for k, v in obj.items()}
|
58
|
+
elif isinstance(obj, list):
|
59
|
+
return [replace_custom_stringified_objects(item) for item in obj]
|
60
|
+
else:
|
61
|
+
return obj
|
@@ -0,0 +1,76 @@
|
|
1
|
+
import hashlib
|
2
|
+
from contextlib import contextmanager
|
3
|
+
from typing import Generator, Sequence
|
4
|
+
|
5
|
+
from sqlalchemy import Connection
|
6
|
+
from sqlmodel import Session, SQLModel, create_engine
|
7
|
+
|
8
|
+
from prediction_market_agent_tooling.config import APIKeys
|
9
|
+
from prediction_market_agent_tooling.tools.caches.serializers import (
|
10
|
+
json_deserializer,
|
11
|
+
json_serializer,
|
12
|
+
)
|
13
|
+
|
14
|
+
|
15
|
+
class DBManager:
|
16
|
+
_instances: dict[str, "DBManager"] = {}
|
17
|
+
|
18
|
+
def __new__(cls, api_keys: APIKeys | None = None) -> "DBManager":
|
19
|
+
sqlalchemy_db_url = (api_keys or APIKeys()).sqlalchemy_db_url
|
20
|
+
# Hash the secret value to not store secrets in plain text.
|
21
|
+
url_hash = hashlib.md5(
|
22
|
+
sqlalchemy_db_url.get_secret_value().encode()
|
23
|
+
).hexdigest()
|
24
|
+
# Return singleton per database connection.
|
25
|
+
if url_hash not in cls._instances:
|
26
|
+
instance = super(DBManager, cls).__new__(cls)
|
27
|
+
cls._instances[url_hash] = instance
|
28
|
+
return cls._instances[url_hash]
|
29
|
+
|
30
|
+
def __init__(self, api_keys: APIKeys | None = None) -> None:
|
31
|
+
sqlalchemy_db_url = (api_keys or APIKeys()).sqlalchemy_db_url
|
32
|
+
self._engine = create_engine(
|
33
|
+
sqlalchemy_db_url.get_secret_value(),
|
34
|
+
json_serializer=json_serializer,
|
35
|
+
json_deserializer=json_deserializer,
|
36
|
+
pool_size=20,
|
37
|
+
pool_recycle=3600,
|
38
|
+
echo=True,
|
39
|
+
)
|
40
|
+
self.cache_table_initialized: dict[str, bool] = {}
|
41
|
+
|
42
|
+
@contextmanager
|
43
|
+
def get_session(self) -> Generator[Session, None, None]:
|
44
|
+
with Session(self._engine) as session:
|
45
|
+
yield session
|
46
|
+
|
47
|
+
@contextmanager
|
48
|
+
def get_connection(self) -> Generator[Connection, None, None]:
|
49
|
+
with self.get_session() as session:
|
50
|
+
yield session.connection()
|
51
|
+
|
52
|
+
def create_tables(
|
53
|
+
self, sqlmodel_tables: Sequence[type[SQLModel]] | None = None
|
54
|
+
) -> None:
|
55
|
+
# Determine tables to create
|
56
|
+
if sqlmodel_tables is not None:
|
57
|
+
tables_to_create = []
|
58
|
+
for sqlmodel_table in sqlmodel_tables:
|
59
|
+
table_name = (
|
60
|
+
sqlmodel_table.__tablename__()
|
61
|
+
if callable(sqlmodel_table.__tablename__)
|
62
|
+
else sqlmodel_table.__tablename__
|
63
|
+
)
|
64
|
+
table = SQLModel.metadata.tables[table_name]
|
65
|
+
if not self.cache_table_initialized.get(table.name):
|
66
|
+
tables_to_create.append(table)
|
67
|
+
else:
|
68
|
+
tables_to_create = None
|
69
|
+
|
70
|
+
# Create tables in the database
|
71
|
+
SQLModel.metadata.create_all(self._engine, tables=tables_to_create)
|
72
|
+
|
73
|
+
# Update cache to mark tables as initialized
|
74
|
+
if tables_to_create:
|
75
|
+
for table in tables_to_create:
|
76
|
+
self.cache_table_initialized[table.name] = True
|
@@ -1,10 +1,11 @@
|
|
1
1
|
from datetime import datetime, timedelta
|
2
2
|
|
3
3
|
from pydantic import ValidationError
|
4
|
-
from sqlmodel import Field,
|
4
|
+
from sqlmodel import Field, SQLModel, desc, select
|
5
5
|
|
6
6
|
from prediction_market_agent_tooling.config import APIKeys
|
7
7
|
from prediction_market_agent_tooling.loggers import logger
|
8
|
+
from prediction_market_agent_tooling.tools.db.db_manager import DBManager
|
8
9
|
from prediction_market_agent_tooling.tools.relevant_news_analysis.data_models import (
|
9
10
|
NoRelevantNews,
|
10
11
|
RelevantNews,
|
@@ -23,33 +24,22 @@ class RelevantNewsCacheModel(SQLModel, table=True):
|
|
23
24
|
|
24
25
|
|
25
26
|
class RelevantNewsResponseCache:
|
26
|
-
def __init__(self,
|
27
|
-
self.
|
28
|
-
(
|
29
|
-
sqlalchemy_db_url
|
30
|
-
if sqlalchemy_db_url
|
31
|
-
else APIKeys().sqlalchemy_db_url.get_secret_value()
|
32
|
-
),
|
33
|
-
pool_size=1,
|
34
|
-
)
|
27
|
+
def __init__(self, api_keys: APIKeys | None = None):
|
28
|
+
self.db_manager = DBManager(api_keys)
|
35
29
|
self._initialize_db()
|
36
30
|
|
37
31
|
def _initialize_db(self) -> None:
|
38
32
|
"""
|
39
33
|
Creates the tables if they don't exist
|
40
34
|
"""
|
41
|
-
|
42
|
-
SQLModel.metadata.create_all(
|
43
|
-
conn,
|
44
|
-
tables=[SQLModel.metadata.tables[RelevantNewsCacheModel.__tablename__]],
|
45
|
-
)
|
35
|
+
self.db_manager.create_tables([RelevantNewsCacheModel])
|
46
36
|
|
47
37
|
def find(
|
48
38
|
self,
|
49
39
|
question: str,
|
50
40
|
days_ago: int,
|
51
41
|
) -> RelevantNews | NoRelevantNews | None:
|
52
|
-
with
|
42
|
+
with self.db_manager.get_session() as session:
|
53
43
|
query = (
|
54
44
|
select(RelevantNewsCacheModel)
|
55
45
|
.where(RelevantNewsCacheModel.question == question)
|
@@ -82,7 +72,7 @@ class RelevantNewsResponseCache:
|
|
82
72
|
days_ago: int,
|
83
73
|
relevant_news: RelevantNews | None,
|
84
74
|
) -> None:
|
85
|
-
with
|
75
|
+
with self.db_manager.get_session() as session:
|
86
76
|
cached = RelevantNewsCacheModel(
|
87
77
|
question=question,
|
88
78
|
days_ago=days_ago,
|
@@ -16,7 +16,7 @@ prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-
|
|
16
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
|
-
prediction_market_agent_tooling/config.py,sha256=
|
19
|
+
prediction_market_agent_tooling/config.py,sha256=Ffb1ftRiguAxa5cS0nXvKK01HomdqzFDCsp8rFd5taM,7553
|
20
20
|
prediction_market_agent_tooling/deploy/agent.py,sha256=58Ms6wFcRM3yhpdDVT-ohryZhHJNinn1Z4MdrmCMXvM,23627
|
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
|
@@ -45,9 +45,9 @@ prediction_market_agent_tooling/markets/metaculus/api.py,sha256=4TRPGytQQbSdf42D
|
|
45
45
|
prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=Suxa7xELdYuFNKqvGvFh8qyfVtAg79E-vaQ6dqNZOtA,3261
|
46
46
|
prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=86TIx6cavEWc8Cv4KpZxSvwiSw9oFybXE3YB49pg-CA,4377
|
47
47
|
prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
prediction_market_agent_tooling/markets/omen/data_models.py,sha256=
|
48
|
+
prediction_market_agent_tooling/markets/omen/data_models.py,sha256=sUiv8xdccvw15ndgbHIavwz7O_eBxp4wGX2zuuZkd2g,27768
|
49
49
|
prediction_market_agent_tooling/markets/omen/omen.py,sha256=6zo8iBBLdI9g9keJ1dw9PXs4rf4V4tCW8D4e08f3g0Q,51349
|
50
|
-
prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=
|
50
|
+
prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=baXJwk-jSI3-FV-k239oCNOA4oKz6LT47juX8AKpW3A,28297
|
51
51
|
prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=iDWdjICGkt968exwCjY-6nsnQyrrNAg3YjnDdP430GQ,9415
|
52
52
|
prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=lG-2hCmmkjKHX1Ca-SipLBeETnTheXpjg5Qfed0tqFo,36506
|
53
53
|
prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
|
@@ -62,7 +62,7 @@ prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=TS4ERwTfQnot8
|
|
62
62
|
prediction_market_agent_tooling/monitor/markets/metaculus.py,sha256=LOnyWWBFdg10-cTWdb76nOsNjDloO8OfMT85GBzRCFI,1455
|
63
63
|
prediction_market_agent_tooling/monitor/markets/omen.py,sha256=EqiJYTvDbSu7fBpbrBmCuf3fc6GHr4MxWrBGa69MIyc,3305
|
64
64
|
prediction_market_agent_tooling/monitor/markets/polymarket.py,sha256=wak8o4BYaGbLpshQD12OrsqNABdanyID6ql95lEG2io,1870
|
65
|
-
prediction_market_agent_tooling/monitor/monitor.py,sha256
|
65
|
+
prediction_market_agent_tooling/monitor/monitor.py,sha256=4kMev1iGHQiEFslEqt5bWiXAyM_Qxb4rdMVKx2H9e1U,14235
|
66
66
|
prediction_market_agent_tooling/monitor/monitor_app.py,sha256=zNHSwH_KEiv8aOwvfo1JrNuSFMefpzXPWtellhnJpTI,4775
|
67
67
|
prediction_market_agent_tooling/monitor/monitor_settings.py,sha256=Xiozs3AsufuJ04JOe1vjUri-IAMWHjjmc2ugGGiHNH4,947
|
68
68
|
prediction_market_agent_tooling/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -72,12 +72,14 @@ prediction_market_agent_tooling/tools/betting_strategies/market_moving.py,sha256
|
|
72
72
|
prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,sha256=-FUSuQQgjcWSSnoFxnlAyTeilY6raJABJVM2QKkFqAY,438
|
73
73
|
prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py,sha256=THMXwFlskvzbjnX_OiYtDSzI8XVFyULWfP2525_9UGc,429
|
74
74
|
prediction_market_agent_tooling/tools/betting_strategies/utils.py,sha256=kpIb-ci67Vc1Yqqaa-_S4OUkbhWSIYog4_Iwp69HU_k,97
|
75
|
-
prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=
|
75
|
+
prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=rkA7somZZo5G6OZVvNrCuCVc4kn7TUoPxmOq4J6BZ54,10391
|
76
76
|
prediction_market_agent_tooling/tools/caches/inmemory_cache.py,sha256=tGHHd9HCiE_hCCtPtloHZQdDfBuiow9YsqJNYi2Tx_0,499
|
77
|
+
prediction_market_agent_tooling/tools/caches/serializers.py,sha256=upSXN5__rmRlzJ6tv1h7FodKzJu9eCkFrN_zeuwroJM,2151
|
77
78
|
prediction_market_agent_tooling/tools/contract.py,sha256=Um_nQlpYJRBy4MnNR1CPKESehVwx_w35LwYX6T6py_0,20837
|
78
79
|
prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
|
79
80
|
prediction_market_agent_tooling/tools/custom_exceptions.py,sha256=Fh8z1fbwONvP4-j7AmV_PuEcoqb6-QXa9PJ9m7guMcM,93
|
80
81
|
prediction_market_agent_tooling/tools/datetime_utc.py,sha256=2JSWF7AXQnv04_D_cu9Vmdkq0TWmGJ1QcK9AeqrA-U8,2765
|
82
|
+
prediction_market_agent_tooling/tools/db/db_manager.py,sha256=-WGYY-ZyqPveXb642gw4-Zh-RicMrBFgx7uqCB8TuDg,2801
|
81
83
|
prediction_market_agent_tooling/tools/google_utils.py,sha256=t3_UEEvKX3L0biSIQ560GdRbllQ6eprhK_upE243A-0,3185
|
82
84
|
prediction_market_agent_tooling/tools/hexbytes_custom.py,sha256=Bp94qgPjvjWf1Vb4lNzGFDXRdThw1rJ91vL6r2PWq5E,2096
|
83
85
|
prediction_market_agent_tooling/tools/httpx_cached_client.py,sha256=0-N1r0zcGKlY9Rk-Ab8hbqwc54eMbsoa3jXL0_yCCiM,355
|
@@ -92,7 +94,7 @@ prediction_market_agent_tooling/tools/omen/reality_accuracy.py,sha256=M1SF7iSW1g
|
|
92
94
|
prediction_market_agent_tooling/tools/parallelism.py,sha256=6Gou0hbjtMZrYvxjTDFUDZuxmE2nqZVbb6hkg1hF82A,1022
|
93
95
|
prediction_market_agent_tooling/tools/relevant_news_analysis/data_models.py,sha256=95l84aztFaxcRLLcRQ46yKJbIlOEuDAbIGLouyliDzA,1316
|
94
96
|
prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_analysis.py,sha256=CddJem7tk15NAudJDwmuL8znTycbR-YI8kTNtd3LzG8,5474
|
95
|
-
prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py,sha256=
|
97
|
+
prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py,sha256=ErLp284YlD7k_M8Si9OT86HuzfmSo1bPlLJtegXx1TA,3011
|
96
98
|
prediction_market_agent_tooling/tools/safe.py,sha256=9vxGGLvSPnfy-sxUFDpBTe8omqpGXP7MzvGPp6bRxrU,5197
|
97
99
|
prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0rnVhtQGzwoUdAgn_7u_GBM,729
|
98
100
|
prediction_market_agent_tooling/tools/streamlit_user_login.py,sha256=NXEqfjT9Lc9QtliwSGRASIz1opjQ7Btme43H4qJbzgE,3010
|
@@ -101,8 +103,8 @@ prediction_market_agent_tooling/tools/tavily/tavily_search.py,sha256=Kw2mXNkMTYT
|
|
101
103
|
prediction_market_agent_tooling/tools/transaction_cache.py,sha256=C96OHkNqPJr_yDiHesSRgekeXIbX62qFl9qldArleuo,1800
|
102
104
|
prediction_market_agent_tooling/tools/utils.py,sha256=WvuUCHgMCiMq8_wMm5PHNwvLhcdDk2zGKaAM8OUC-qY,6438
|
103
105
|
prediction_market_agent_tooling/tools/web3_utils.py,sha256=hWDa7D-jP-iW647t0ATPyiUgKbAq25iH97KUnha25SQ,11944
|
104
|
-
prediction_market_agent_tooling-0.57.
|
105
|
-
prediction_market_agent_tooling-0.57.
|
106
|
-
prediction_market_agent_tooling-0.57.
|
107
|
-
prediction_market_agent_tooling-0.57.
|
108
|
-
prediction_market_agent_tooling-0.57.
|
106
|
+
prediction_market_agent_tooling-0.57.1.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
|
107
|
+
prediction_market_agent_tooling-0.57.1.dist-info/METADATA,sha256=dOd_dooUIoLkSfsh7mHctHKfDM1W4fCmqu-Xgr_8gAY,8106
|
108
|
+
prediction_market_agent_tooling-0.57.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
109
|
+
prediction_market_agent_tooling-0.57.1.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
|
110
|
+
prediction_market_agent_tooling-0.57.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|