prediction-market-agent-tooling 0.65.10__tar.gz → 0.65.11__tar.gz

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 (130) hide show
  1. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/PKG-INFO +1 -1
  2. prediction_market_agent_tooling-0.65.11/prediction_market_agent_tooling/data_download/langfuse_data_downloader.py +268 -0
  3. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/loggers.py +9 -1
  4. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/omen_resolving.py +3 -0
  5. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/pyproject.toml +1 -1
  6. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/LICENSE +0 -0
  7. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/README.md +0 -0
  8. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/debuggingcontract.abi.json +0 -0
  9. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/depositablewrapper_erc20.abi.json +0 -0
  10. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/erc20.abi.json +0 -0
  11. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/erc4626.abi.json +0 -0
  12. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/erc721.abi.json +0 -0
  13. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/gvp2_settlement.abi.json +0 -0
  14. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_agentresultmapping.abi.json +0 -0
  15. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_dxdao.abi.json +0 -0
  16. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_fpmm.abi.json +0 -0
  17. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json +0 -0
  18. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_fpmm_factory.abi.json +0 -0
  19. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_kleros.abi.json +0 -0
  20. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_oracle.abi.json +0 -0
  21. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_realitio.abi.json +0 -0
  22. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/omen_thumbnailmapping.abi.json +0 -0
  23. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/ownable.abi.json +0 -0
  24. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/ownable_erc721.abi.json +0 -0
  25. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/proxy.abi.json +0 -0
  26. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/seer_gnosis_router.abi.json +0 -0
  27. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/seer_market_factory.abi.json +0 -0
  28. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/abis/swapr_router.abi.json +0 -0
  29. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/benchmark/__init__.py +0 -0
  30. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/benchmark/agents.py +0 -0
  31. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/benchmark/benchmark.py +0 -0
  32. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/benchmark/utils.py +0 -0
  33. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/chains.py +0 -0
  34. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/config.py +0 -0
  35. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/agent.py +0 -0
  36. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/agent_example.py +0 -0
  37. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/betting_strategy.py +0 -0
  38. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/constants.py +0 -0
  39. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/gcp/deploy.py +0 -0
  40. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +0 -0
  41. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/gcp/utils.py +0 -0
  42. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/deploy/trade_interval.py +0 -0
  43. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/gtypes.py +0 -0
  44. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/jobs/__init__.py +0 -0
  45. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/jobs/jobs_models.py +0 -0
  46. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/jobs/omen/omen_jobs.py +0 -0
  47. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/logprobs_parser.py +0 -0
  48. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/agent_market.py +0 -0
  49. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/base_subgraph_handler.py +0 -0
  50. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/blockchain_utils.py +0 -0
  51. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/categorize.py +0 -0
  52. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/data_models.py +0 -0
  53. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/manifold/__init__.py +0 -0
  54. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/manifold/api.py +0 -0
  55. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/manifold/data_models.py +0 -0
  56. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/manifold/manifold.py +0 -0
  57. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/manifold/utils.py +0 -0
  58. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/market_fees.py +0 -0
  59. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/markets.py +0 -0
  60. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/metaculus/api.py +0 -0
  61. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/metaculus/data_models.py +0 -0
  62. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/metaculus/metaculus.py +0 -0
  63. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/__init__.py +0 -0
  64. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/cow_contracts.py +0 -0
  65. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/data_models.py +0 -0
  66. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/omen.py +0 -0
  67. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/omen_constants.py +0 -0
  68. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/omen_contracts.py +0 -0
  69. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +0 -0
  70. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/polymarket/api.py +0 -0
  71. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/polymarket/data_models.py +0 -0
  72. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/polymarket/data_models_web.py +0 -0
  73. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/polymarket/polymarket.py +0 -0
  74. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/polymarket/utils.py +0 -0
  75. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/data_models.py +0 -0
  76. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/exceptions.py +0 -0
  77. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/price_manager.py +0 -0
  78. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/seer.py +0 -0
  79. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/seer_contracts.py +0 -0
  80. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py +0 -0
  81. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/subgraph_data_models.py +0 -0
  82. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/markets/seer/swap_pool_handler.py +0 -0
  83. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/py.typed +0 -0
  84. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/_generic_value.py +0 -0
  85. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/balances.py +0 -0
  86. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py +0 -0
  87. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py +0 -0
  88. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/betting_strategies/utils.py +0 -0
  89. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/caches/db_cache.py +0 -0
  90. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/caches/inmemory_cache.py +0 -0
  91. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/caches/serializers.py +0 -0
  92. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/contract.py +0 -0
  93. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/costs.py +0 -0
  94. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/cow/cow_order.py +0 -0
  95. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/cow/models.py +0 -0
  96. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/custom_exceptions.py +0 -0
  97. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/datetime_utc.py +0 -0
  98. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/db/db_manager.py +0 -0
  99. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/google_utils.py +0 -0
  100. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/hexbytes_custom.py +0 -0
  101. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/httpx_cached_client.py +0 -0
  102. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/image_gen/image_gen.py +0 -0
  103. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/image_gen/market_thumbnail_gen.py +0 -0
  104. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/ipfs/ipfs_handler.py +0 -0
  105. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/is_invalid.py +0 -0
  106. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/is_predictable.py +0 -0
  107. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/langfuse_.py +0 -0
  108. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/langfuse_client_utils.py +0 -0
  109. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/omen/reality_accuracy.py +0 -0
  110. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/omen/sell_positions.py +0 -0
  111. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/parallelism.py +0 -0
  112. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/perplexity/perplexity_client.py +0 -0
  113. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/perplexity/perplexity_models.py +0 -0
  114. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/perplexity/perplexity_search.py +0 -0
  115. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/relevant_news_analysis/data_models.py +0 -0
  116. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_analysis.py +0 -0
  117. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py +0 -0
  118. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/safe.py +0 -0
  119. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/singleton.py +0 -0
  120. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/streamlit_user_login.py +0 -0
  121. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tavily/tavily_models.py +0 -0
  122. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tavily/tavily_search.py +0 -0
  123. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tokens/auto_deposit.py +0 -0
  124. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tokens/auto_withdraw.py +0 -0
  125. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tokens/main_token.py +0 -0
  126. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tokens/token_utils.py +0 -0
  127. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/tokens/usd.py +0 -0
  128. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/transaction_cache.py +0 -0
  129. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/utils.py +0 -0
  130. {prediction_market_agent_tooling-0.65.10 → prediction_market_agent_tooling-0.65.11}/prediction_market_agent_tooling/tools/web3_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.65.10
3
+ Version: 0.65.11
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -0,0 +1,268 @@
1
+ import os
2
+ from datetime import datetime, timedelta
3
+ from pathlib import Path
4
+ from typing import Any
5
+
6
+ import pandas as pd
7
+ import typer
8
+ from langfuse import Langfuse
9
+ from langfuse.client import TraceWithDetails
10
+ from pydantic import BaseModel
11
+
12
+ from prediction_market_agent_tooling.config import APIKeys
13
+ from prediction_market_agent_tooling.gtypes import DatetimeUTC, OutcomeStr, OutcomeToken
14
+ from prediction_market_agent_tooling.loggers import logger
15
+ from prediction_market_agent_tooling.markets.agent_market import AgentMarket
16
+ from prediction_market_agent_tooling.markets.data_models import Resolution
17
+ from prediction_market_agent_tooling.markets.omen.omen import OmenAgentMarket
18
+ from prediction_market_agent_tooling.markets.seer.seer import SeerAgentMarket
19
+ from prediction_market_agent_tooling.markets.seer.seer_subgraph_handler import (
20
+ SeerSubgraphHandler,
21
+ )
22
+ from prediction_market_agent_tooling.tools.hexbytes_custom import HexBytes
23
+ from prediction_market_agent_tooling.tools.httpx_cached_client import HttpxCachedClient
24
+ from prediction_market_agent_tooling.tools.langfuse_client_utils import (
25
+ get_traces_for_agent,
26
+ )
27
+ from prediction_market_agent_tooling.tools.parallelism import par_map
28
+
29
+ PREDICTION_STATES = [
30
+ "predict_market",
31
+ "_make_prediction_categorical",
32
+ "make_prediction",
33
+ ]
34
+ REPORT_STATES = ["prepare_report"]
35
+
36
+ MARKET_RESOLUTION_PROVIDERS = {
37
+ "omen": lambda market_id: OmenAgentMarket.get_binary_market(market_id),
38
+ "seer": lambda market_id: SeerAgentMarket.from_data_model_with_subgraph(
39
+ model=SeerSubgraphHandler().get_market_by_id(HexBytes(market_id)),
40
+ seer_subgraph=SeerSubgraphHandler(),
41
+ must_have_prices=False,
42
+ ),
43
+ }
44
+
45
+
46
+ class TraceResult(BaseModel):
47
+ agent_name: str
48
+ trace_id: str
49
+ market_id: str
50
+ market_type: str
51
+ market_question: str
52
+ market_outcomes: list[str]
53
+ market_outcome_token_pool: dict[OutcomeStr, OutcomeToken] | None
54
+ market_created_time: DatetimeUTC | None
55
+ market_close_time: DatetimeUTC | None
56
+ analysis: str
57
+ prediction_reasoning: str
58
+ prediction_decision: str
59
+ prediction_p_yes: float
60
+ prediction_info_utility: float
61
+ market_resolution: str | None
62
+ resolution_is_valid: bool | None
63
+
64
+
65
+ def get_langfuse_client() -> Langfuse:
66
+ api_keys = APIKeys()
67
+ return Langfuse(
68
+ secret_key=api_keys.langfuse_secret_key.get_secret_value(),
69
+ public_key=api_keys.langfuse_public_key,
70
+ host=api_keys.langfuse_host,
71
+ httpx_client=HttpxCachedClient().get_client(),
72
+ )
73
+
74
+
75
+ def download_data(
76
+ agent_name: str,
77
+ date_from: DatetimeUTC,
78
+ date_to: DatetimeUTC,
79
+ only_resolved: bool,
80
+ output_folder: str,
81
+ ) -> None:
82
+ Path(output_folder).mkdir(parents=True, exist_ok=True)
83
+ index = 0
84
+ default_file_name = f"{agent_name}_{date_from.date()}_{date_to.date()}"
85
+ output_file = os.path.join(output_folder, f"{default_file_name}.csv")
86
+
87
+ if os.path.exists(output_file):
88
+ while os.path.exists(output_file):
89
+ index += 1
90
+ output_file = os.path.join(
91
+ output_folder, f"{default_file_name}_v{index}.csv"
92
+ )
93
+
94
+ langfuse_client_for_traces = get_langfuse_client()
95
+
96
+ traces = get_traces_for_agent(
97
+ agent_name=agent_name,
98
+ trace_name="process_market",
99
+ from_timestamp=date_from,
100
+ to_timestamp=date_to,
101
+ has_output=True,
102
+ client=langfuse_client_for_traces,
103
+ tags=["answered"],
104
+ )
105
+
106
+ if not traces:
107
+ raise ValueError("No traces found for the specified criteria")
108
+
109
+ trace_args = [
110
+ (
111
+ trace,
112
+ only_resolved,
113
+ )
114
+ for trace in traces
115
+ ]
116
+
117
+ results = par_map(
118
+ items=trace_args,
119
+ func=lambda args: process_trace(*args),
120
+ max_workers=5,
121
+ )
122
+
123
+ successful_results = [r for r in results if r is not None]
124
+ if successful_results:
125
+ results_data = [result.model_dump() for result in successful_results]
126
+ pd.DataFrame(results_data).to_csv(output_file, index=False)
127
+ logger.info(f"Saved {len(successful_results)} records to {output_file}")
128
+ else:
129
+ logger.warning("No results to save")
130
+
131
+
132
+ def process_trace(
133
+ trace: TraceWithDetails,
134
+ only_resolved: bool,
135
+ ) -> TraceResult | None:
136
+ langfuse_client = get_langfuse_client()
137
+ try:
138
+ observations = langfuse_client.fetch_observations(trace_id=trace.id)
139
+
140
+ market_state, market_type = get_agent_market_state(trace.input)
141
+
142
+ prepare_report_obs = [
143
+ obs for obs in observations.data if obs.name in REPORT_STATES
144
+ ]
145
+ predict_market_obs = [
146
+ obs for obs in observations.data if obs.name in PREDICTION_STATES
147
+ ]
148
+
149
+ if not prepare_report_obs or not predict_market_obs:
150
+ raise ValueError(f"Missing required observations for trace {trace.id}")
151
+
152
+ analysis = prepare_report_obs[0].output
153
+ prediction = predict_market_obs[0].output
154
+
155
+ resolution = get_market_resolution(market_state.id, market_type)
156
+
157
+ if only_resolved and not resolution:
158
+ raise ValueError(f"No resolution found for market {market_state.id}")
159
+
160
+ result = TraceResult(
161
+ agent_name=trace.metadata["agent_class"],
162
+ trace_id=trace.id,
163
+ market_id=market_state.id,
164
+ market_type=market_type,
165
+ market_question=market_state.question,
166
+ market_outcomes=list(market_state.outcomes),
167
+ market_outcome_token_pool=market_state.outcome_token_pool,
168
+ market_created_time=market_state.created_time,
169
+ market_close_time=market_state.close_time,
170
+ analysis=analysis,
171
+ prediction_reasoning=prediction["reasoning"],
172
+ prediction_decision="YES" if prediction["decision"] == "y" else "NO",
173
+ prediction_p_yes=prediction["p_yes"],
174
+ prediction_info_utility=prediction["info_utility"],
175
+ market_resolution=resolution.outcome if resolution else None,
176
+ resolution_is_valid=not resolution.invalid if resolution else None,
177
+ )
178
+
179
+ return result
180
+
181
+ except Exception as e:
182
+ logger.exception(f"Error processing trace {trace.id}: {e}")
183
+ return None
184
+
185
+
186
+ def get_agent_market_state(input_data: dict[str, Any]) -> tuple[AgentMarket, str]:
187
+ if not input_data or "args" not in input_data:
188
+ raise ValueError("Invalid input data: missing args")
189
+
190
+ args = input_data["args"]
191
+ if len(args) < 2:
192
+ raise ValueError("Invalid args: expected at least 2 elements")
193
+
194
+ market_type = args[0] # e.g., "omen", "seer"
195
+
196
+ if market_type not in MARKET_RESOLUTION_PROVIDERS:
197
+ raise ValueError(f"Unknown market type: {market_type}")
198
+
199
+ market_data = args[1] # market object data
200
+ market_state = AgentMarket.model_construct(**market_data)
201
+
202
+ return market_state, market_type
203
+
204
+
205
+ def get_market_resolution(market_id: str, market_type: str) -> Resolution:
206
+ market_type_lower = market_type.lower()
207
+
208
+ if market_type_lower not in MARKET_RESOLUTION_PROVIDERS:
209
+ raise ValueError(f"Unknown market type: {market_type}")
210
+
211
+ try:
212
+ market: AgentMarket | None = MARKET_RESOLUTION_PROVIDERS[market_type_lower](
213
+ market_id
214
+ )
215
+
216
+ if not market or not market.resolution:
217
+ raise ValueError(f"No resolution found for market: {market_id}")
218
+
219
+ return market.resolution
220
+
221
+ except Exception as e:
222
+ raise ValueError(
223
+ f"Failed to fetch {market_type} market {market_id} resolution: {e}"
224
+ ) from e
225
+
226
+
227
+ def parse_date(date_str: str, param_name: str) -> DatetimeUTC:
228
+ try:
229
+ return DatetimeUTC.to_datetime_utc(date_str)
230
+ except ValueError as e:
231
+ typer.echo(f"Error: Invalid date format for {param_name}: {date_str}")
232
+ typer.echo("Expected format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS")
233
+ raise typer.Exit(1) from e
234
+
235
+
236
+ def main(
237
+ agent_name: str = "DeployablePredictionProphetGPT4oAgent",
238
+ only_resolved: bool = True,
239
+ date_from: str = typer.Option(
240
+ None, help="Start date in ISO format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)"
241
+ ),
242
+ date_to: str = typer.Option(
243
+ None, help="End date in ISO format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)"
244
+ ),
245
+ output_folder: str = "./agent_trades_output/",
246
+ ) -> None:
247
+ date_from_dt = (
248
+ parse_date(date_from, "date_from")
249
+ if date_from
250
+ else DatetimeUTC.from_datetime(datetime.now() - timedelta(days=1))
251
+ )
252
+ date_to_dt = (
253
+ parse_date(date_to, "date_to")
254
+ if date_to
255
+ else DatetimeUTC.from_datetime(datetime.now())
256
+ )
257
+
258
+ download_data(
259
+ agent_name=agent_name,
260
+ date_from=date_from_dt,
261
+ date_to=date_to_dt,
262
+ only_resolved=only_resolved,
263
+ output_folder=output_folder,
264
+ )
265
+
266
+
267
+ if __name__ == "__main__":
268
+ typer.run(main)
@@ -10,6 +10,8 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
10
10
  from pythonjsonlogger import jsonlogger
11
11
  from tenacity import RetryError
12
12
 
13
+ UNPATCHED_PRINT_FN = builtins.print
14
+
13
15
 
14
16
  class LogFormat(str, Enum):
15
17
  DEFAULT = "default"
@@ -153,7 +155,13 @@ def print_using_logger_info(
153
155
  end: str = "\n",
154
156
  **kwargs: t.Any,
155
157
  ) -> None:
156
- logger.info(sep.join(map(str, values)) + end)
158
+ # If `logger.exception` is used, loguru+traceback somehow uses `print` statement to format the error stack,
159
+ # if that happens, without this if condition, it errors out because of deadlock and/or recursion errors.
160
+ # This is hacky, but that's exactly how loguru is checking for it internally..
161
+ if getattr(logger._core.handlers[1]._lock_acquired, "acquired", False): # type: ignore # They use stubs and didn't type this.
162
+ UNPATCHED_PRINT_FN(*values, sep=sep, end=end, **kwargs)
163
+ else:
164
+ logger.info(sep.join(map(str, values)) + end)
157
165
 
158
166
 
159
167
  patch_logger()
@@ -284,6 +284,9 @@ def omen_resolve_market_tx(
284
284
  logger.warning(
285
285
  f"Market {market.url=} not resolved, because `condition not prepared or found`, skipping."
286
286
  )
287
+ elif "payout denominator already set" in str(e):
288
+ # We can just skip, it's been resolved already.
289
+ logger.info(f"Market {market.url=} is already resolved.")
287
290
  else:
288
291
  raise
289
292
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "prediction-market-agent-tooling"
3
- version = "0.65.10"
3
+ version = "0.65.11"
4
4
  description = "Tools to benchmark, deploy and monitor prediction market agents."
5
5
  authors = ["Gnosis"]
6
6
  readme = "README.md"