intentkit 0.7.5.dev27__py3-none-any.whl → 0.7.5.dev29__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.

Potentially problematic release.


This version of intentkit might be problematic. Click here for more details.

intentkit/__init__.py CHANGED
@@ -3,7 +3,7 @@
3
3
  A powerful platform for building AI agents with blockchain and cryptocurrency capabilities.
4
4
  """
5
5
 
6
- __version__ = "0.7.5-dev27"
6
+ __version__ = "0.7.5-dev29"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
intentkit/core/agent.py CHANGED
@@ -2,7 +2,7 @@ import logging
2
2
  import time
3
3
  from datetime import datetime, timedelta, timezone
4
4
  from decimal import Decimal
5
- from typing import Any, Dict, List, Optional, Tuple
5
+ from typing import Any, AsyncGenerator, Dict, List, Optional, Tuple
6
6
 
7
7
  from sqlalchemy import func, select, text, update
8
8
 
@@ -17,7 +17,13 @@ from intentkit.models.agent import (
17
17
  AgentUpdate,
18
18
  )
19
19
  from intentkit.models.agent_data import AgentData, AgentQuota, AgentQuotaTable
20
- from intentkit.models.credit import CreditEventTable, EventType, UpstreamType
20
+ from intentkit.models.credit import (
21
+ CreditAccount,
22
+ CreditEventTable,
23
+ EventType,
24
+ OwnerType,
25
+ UpstreamType,
26
+ )
21
27
  from intentkit.models.db import get_session
22
28
  from intentkit.models.skill import (
23
29
  AgentSkillData,
@@ -660,7 +666,31 @@ class AgentStore(SkillStoreABC):
660
666
  agent_store = AgentStore()
661
667
 
662
668
 
663
- async def update_agent_action_cost():
669
+ async def _iterate_agent_id_batches(
670
+ batch_size: int = 100,
671
+ ) -> AsyncGenerator[list[str], None]:
672
+ """Yield agent IDs in ascending batches to limit memory usage."""
673
+
674
+ last_id: Optional[str] = None
675
+ while True:
676
+ async with get_session() as session:
677
+ query = select(AgentTable.id).order_by(AgentTable.id)
678
+
679
+ if last_id:
680
+ query = query.where(AgentTable.id > last_id)
681
+
682
+ query = query.limit(batch_size)
683
+ result = await session.execute(query)
684
+ agent_ids = [row[0] for row in result]
685
+
686
+ if not agent_ids:
687
+ break
688
+
689
+ yield agent_ids
690
+ last_id = agent_ids[-1]
691
+
692
+
693
+ async def update_agent_action_cost(batch_size: int = 100) -> None:
664
694
  """
665
695
  Update action costs for all agents.
666
696
 
@@ -677,42 +707,20 @@ async def update_agent_action_cost():
677
707
  """
678
708
  logger.info("Starting update of agent average action costs")
679
709
  start_time = time.time()
680
- batch_size = 100
681
- last_id = None
682
710
  total_updated = 0
683
711
 
684
- while True:
685
- # Get a batch of agent IDs ordered by ID
686
- async with get_session() as session:
687
- query = select(AgentTable.id).order_by(AgentTable.id)
688
-
689
- # Apply pagination if we have a last_id from previous batch
690
- if last_id:
691
- query = query.where(AgentTable.id > last_id)
692
-
693
- query = query.limit(batch_size)
694
- result = await session.execute(query)
695
- agent_ids = [row[0] for row in result]
696
-
697
- # If no more agents, we're done
698
- if not agent_ids:
699
- break
700
-
701
- # Update last_id for next batch
702
- last_id = agent_ids[-1]
703
-
704
- # Process this batch of agents
712
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
705
713
  logger.info(
706
- f"Processing batch of {len(agent_ids)} agents starting with ID {agent_ids[0]}"
714
+ "Processing batch of %s agents starting with ID %s",
715
+ len(agent_ids),
716
+ agent_ids[0],
707
717
  )
708
718
  batch_start_time = time.time()
709
719
 
710
720
  for agent_id in agent_ids:
711
721
  try:
712
- # Calculate action costs for this agent
713
722
  costs = await agent_action_cost(agent_id)
714
723
 
715
- # Update the agent's quota record
716
724
  async with get_session() as session:
717
725
  update_stmt = (
718
726
  update(AgentQuotaTable)
@@ -730,17 +738,188 @@ async def update_agent_action_cost():
730
738
  await session.commit()
731
739
 
732
740
  total_updated += 1
733
- except Exception as e:
741
+ except Exception as e: # pragma: no cover - log path only
742
+ logger.error(
743
+ "Error updating action costs for agent %s: %s", agent_id, str(e)
744
+ )
745
+
746
+ batch_time = time.time() - batch_start_time
747
+ logger.info("Completed batch in %.3fs", batch_time)
748
+
749
+ total_time = time.time() - start_time
750
+ logger.info(
751
+ "Finished updating action costs for %s agents in %.3fs",
752
+ total_updated,
753
+ total_time,
754
+ )
755
+
756
+
757
+ async def update_agents_account_snapshot(batch_size: int = 100) -> None:
758
+ """Refresh the cached credit account snapshot for every agent."""
759
+
760
+ logger.info("Starting update of agent account snapshots")
761
+ start_time = time.time()
762
+ total_updated = 0
763
+
764
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
765
+ logger.info(
766
+ "Processing snapshot batch of %s agents starting with ID %s",
767
+ len(agent_ids),
768
+ agent_ids[0],
769
+ )
770
+ batch_start_time = time.time()
771
+
772
+ for agent_id in agent_ids:
773
+ try:
774
+ async with get_session() as session:
775
+ account = await CreditAccount.get_or_create_in_session(
776
+ session, OwnerType.AGENT, agent_id
777
+ )
778
+ await session.execute(
779
+ update(AgentTable)
780
+ .where(AgentTable.id == agent_id)
781
+ .values(
782
+ account_snapshot=account.model_dump(mode="json"),
783
+ )
784
+ )
785
+ await session.commit()
786
+
787
+ total_updated += 1
788
+ except Exception as exc: # pragma: no cover - log path only
789
+ logger.error(
790
+ "Error updating account snapshot for agent %s: %s",
791
+ agent_id,
792
+ exc,
793
+ )
794
+
795
+ batch_time = time.time() - batch_start_time
796
+ logger.info("Completed snapshot batch in %.3fs", batch_time)
797
+
798
+ total_time = time.time() - start_time
799
+ logger.info(
800
+ "Finished updating account snapshots for %s agents in %.3fs",
801
+ total_updated,
802
+ total_time,
803
+ )
804
+
805
+
806
+ async def update_agents_assets(batch_size: int = 100) -> None:
807
+ """Refresh cached asset information for all agents."""
808
+
809
+ from intentkit.core.asset import agent_asset
810
+
811
+ logger.info("Starting update of agent assets")
812
+ start_time = time.time()
813
+ total_updated = 0
814
+
815
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
816
+ logger.info(
817
+ "Processing asset batch of %s agents starting with ID %s",
818
+ len(agent_ids),
819
+ agent_ids[0],
820
+ )
821
+ batch_start_time = time.time()
822
+
823
+ for agent_id in agent_ids:
824
+ try:
825
+ assets = await agent_asset(agent_id)
826
+ except IntentKitAPIError as exc: # pragma: no cover - log path only
827
+ logger.warning(
828
+ "Skipping asset update for agent %s due to API error: %s",
829
+ agent_id,
830
+ exc,
831
+ )
832
+ continue
833
+ except Exception as exc: # pragma: no cover - log path only
834
+ logger.error("Error retrieving assets for agent %s: %s", agent_id, exc)
835
+ continue
836
+
837
+ try:
838
+ async with get_session() as session:
839
+ await session.execute(
840
+ update(AgentTable)
841
+ .where(AgentTable.id == agent_id)
842
+ .values(assets=assets.model_dump(mode="json"))
843
+ )
844
+ await session.commit()
845
+
846
+ total_updated += 1
847
+ except Exception as exc: # pragma: no cover - log path only
848
+ logger.error(
849
+ "Error updating asset cache for agent %s: %s", agent_id, exc
850
+ )
851
+
852
+ batch_time = time.time() - batch_start_time
853
+ logger.info("Completed asset batch in %.3fs", batch_time)
854
+
855
+ total_time = time.time() - start_time
856
+ logger.info(
857
+ "Finished updating assets for %s agents in %.3fs",
858
+ total_updated,
859
+ total_time,
860
+ )
861
+
862
+
863
+ async def update_agents_statistics(
864
+ *, end_time: Optional[datetime] = None, batch_size: int = 100
865
+ ) -> None:
866
+ """Refresh cached statistics for every agent."""
867
+
868
+ from intentkit.core.statistics import get_agent_statistics
869
+
870
+ if end_time is None:
871
+ end_time = datetime.now(timezone.utc)
872
+ elif end_time.tzinfo is None:
873
+ end_time = end_time.replace(tzinfo=timezone.utc)
874
+ else:
875
+ end_time = end_time.astimezone(timezone.utc)
876
+
877
+ logger.info("Starting update of agent statistics using end_time %s", end_time)
878
+ start_time = time.time()
879
+ total_updated = 0
880
+
881
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
882
+ logger.info(
883
+ "Processing statistics batch of %s agents starting with ID %s",
884
+ len(agent_ids),
885
+ agent_ids[0],
886
+ )
887
+ batch_start_time = time.time()
888
+
889
+ for agent_id in agent_ids:
890
+ try:
891
+ statistics = await get_agent_statistics(agent_id, end_time=end_time)
892
+ except Exception as exc: # pragma: no cover - log path only
893
+ logger.error(
894
+ "Error computing statistics for agent %s: %s", agent_id, exc
895
+ )
896
+ continue
897
+
898
+ try:
899
+ async with get_session() as session:
900
+ await session.execute(
901
+ update(AgentTable)
902
+ .where(AgentTable.id == agent_id)
903
+ .values(statistics=statistics.model_dump(mode="json"))
904
+ )
905
+ await session.commit()
906
+
907
+ total_updated += 1
908
+ except Exception as exc: # pragma: no cover - log path only
734
909
  logger.error(
735
- f"Error updating action costs for agent {agent_id}: {str(e)}"
910
+ "Error updating statistics cache for agent %s: %s",
911
+ agent_id,
912
+ exc,
736
913
  )
737
914
 
738
915
  batch_time = time.time() - batch_start_time
739
- logger.info(f"Completed batch in {batch_time:.3f}s")
916
+ logger.info("Completed statistics batch in %.3fs", batch_time)
740
917
 
741
918
  total_time = time.time() - start_time
742
919
  logger.info(
743
- f"Finished updating action costs for {total_updated} agents in {total_time:.3f}s"
920
+ "Finished updating statistics for %s agents in %.3fs",
921
+ total_updated,
922
+ total_time,
744
923
  )
745
924
 
746
925
 
@@ -0,0 +1,169 @@
1
+ """Agent statistics utilities."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime, timedelta, timezone
6
+ from decimal import Decimal
7
+ from typing import Optional
8
+
9
+ from pydantic import BaseModel, Field
10
+ from sqlalchemy import func, select
11
+ from sqlalchemy.ext.asyncio import AsyncSession
12
+
13
+ from intentkit.models.agent_data import AgentQuota, AgentQuotaTable
14
+ from intentkit.models.credit import CreditAccount, CreditEventTable, OwnerType
15
+ from intentkit.models.db import get_session
16
+
17
+
18
+ class AgentStatistics(BaseModel):
19
+ """Aggregated statistics for an agent credit account."""
20
+
21
+ agent_id: str = Field(description="ID of the agent")
22
+ account_id: str = Field(description="ID of the associated credit account")
23
+ balance: Decimal = Field(description="Current credit account balance")
24
+ total_income: Decimal = Field(description="Total income across all events")
25
+ net_income: Decimal = Field(description="Net income from fee allocations")
26
+ permanent_income: Decimal = Field(
27
+ description="Total permanent income across all events"
28
+ )
29
+ permanent_profit: Decimal = Field(
30
+ description="Permanent profit allocated to the agent"
31
+ )
32
+ last_24h_income: Decimal = Field(
33
+ description="Income generated during the last 24 hours"
34
+ )
35
+ last_24h_permanent_income: Decimal = Field(
36
+ description="Permanent income generated during the last 24 hours"
37
+ )
38
+ avg_action_cost: Decimal = Field(description="Average action cost")
39
+ min_action_cost: Decimal = Field(description="Minimum action cost")
40
+ max_action_cost: Decimal = Field(description="Maximum action cost")
41
+ low_action_cost: Decimal = Field(description="20th percentile action cost")
42
+ medium_action_cost: Decimal = Field(description="60th percentile action cost")
43
+ high_action_cost: Decimal = Field(description="80th percentile action cost")
44
+
45
+
46
+ async def get_agent_statistics(
47
+ agent_id: str,
48
+ *,
49
+ end_time: Optional[datetime] = None,
50
+ session: Optional[AsyncSession] = None,
51
+ ) -> AgentStatistics:
52
+ """Calculate statistics for an agent credit account.
53
+
54
+ Args:
55
+ agent_id: ID of the agent.
56
+ end_time: Optional end time used as the inclusive boundary for
57
+ time-windowed aggregations. Defaults to the current UTC time.
58
+ session: Optional database session to reuse. When omitted, a
59
+ standalone session will be created and committed automatically.
60
+
61
+ Returns:
62
+ Aggregated statistics for the agent.
63
+ """
64
+
65
+ managed_session = session is None
66
+ if end_time is None:
67
+ end_time = datetime.now(timezone.utc)
68
+ elif end_time.tzinfo is None:
69
+ end_time = end_time.replace(tzinfo=timezone.utc)
70
+ else:
71
+ end_time = end_time.astimezone(timezone.utc)
72
+
73
+ async def _compute(session: AsyncSession) -> AgentStatistics:
74
+ account = await CreditAccount.get_or_create_in_session(
75
+ session, OwnerType.AGENT, agent_id
76
+ )
77
+ balance = account.free_credits + account.reward_credits + account.credits
78
+
79
+ totals_stmt = select(
80
+ func.sum(CreditEventTable.total_amount).label("total_income"),
81
+ func.sum(CreditEventTable.fee_agent_amount).label("net_income"),
82
+ func.sum(CreditEventTable.permanent_amount).label("permanent_income"),
83
+ func.sum(CreditEventTable.fee_agent_permanent_amount).label(
84
+ "permanent_profit"
85
+ ),
86
+ ).where(CreditEventTable.agent_id == agent_id)
87
+ totals_result = await session.execute(totals_stmt)
88
+ totals_row = totals_result.first()
89
+
90
+ total_income = (
91
+ totals_row.total_income
92
+ if totals_row and totals_row.total_income
93
+ else Decimal("0")
94
+ )
95
+ net_income = (
96
+ totals_row.net_income
97
+ if totals_row and totals_row.net_income
98
+ else Decimal("0")
99
+ )
100
+ permanent_income = (
101
+ totals_row.permanent_income
102
+ if totals_row and totals_row.permanent_income
103
+ else Decimal("0")
104
+ )
105
+ permanent_profit = (
106
+ totals_row.permanent_profit
107
+ if totals_row and totals_row.permanent_profit
108
+ else Decimal("0")
109
+ )
110
+
111
+ window_start = end_time - timedelta(hours=24)
112
+ window_stmt = select(
113
+ func.sum(CreditEventTable.total_amount).label("last_24h_income"),
114
+ func.sum(CreditEventTable.permanent_amount).label(
115
+ "last_24h_permanent_income"
116
+ ),
117
+ ).where(
118
+ CreditEventTable.agent_id == agent_id,
119
+ CreditEventTable.created_at >= window_start,
120
+ CreditEventTable.created_at <= end_time,
121
+ )
122
+ window_result = await session.execute(window_stmt)
123
+ window_row = window_result.first()
124
+
125
+ last_24h_income = (
126
+ window_row.last_24h_income
127
+ if window_row and window_row.last_24h_income
128
+ else Decimal("0")
129
+ )
130
+ last_24h_permanent_income = (
131
+ window_row.last_24h_permanent_income
132
+ if window_row and window_row.last_24h_permanent_income
133
+ else Decimal("0")
134
+ )
135
+
136
+ quota_row = await session.get(AgentQuotaTable, agent_id)
137
+ quota = (
138
+ AgentQuota.model_validate(quota_row)
139
+ if quota_row
140
+ else AgentQuota(id=agent_id)
141
+ )
142
+
143
+ return AgentStatistics(
144
+ agent_id=agent_id,
145
+ account_id=account.id,
146
+ balance=balance,
147
+ total_income=total_income,
148
+ net_income=net_income,
149
+ permanent_income=permanent_income,
150
+ permanent_profit=permanent_profit,
151
+ last_24h_income=last_24h_income,
152
+ last_24h_permanent_income=last_24h_permanent_income,
153
+ avg_action_cost=quota.avg_action_cost,
154
+ min_action_cost=quota.min_action_cost,
155
+ max_action_cost=quota.max_action_cost,
156
+ low_action_cost=quota.low_action_cost,
157
+ medium_action_cost=quota.medium_action_cost,
158
+ high_action_cost=quota.high_action_cost,
159
+ )
160
+
161
+ if managed_session:
162
+ async with get_session() as managed:
163
+ statistics = await _compute(managed)
164
+ await managed.commit()
165
+ return statistics
166
+ return await _compute(session)
167
+
168
+
169
+ __all__ = ["AgentStatistics", "get_agent_statistics"]
intentkit/models/agent.py CHANGED
@@ -1042,7 +1042,7 @@ class AgentPublicInfo(BaseModel):
1042
1042
  PydanticField(
1043
1043
  default=None,
1044
1044
  description="Token address of the agent",
1045
- max_length=42,
1045
+ max_length=66,
1046
1046
  json_schema_extra={
1047
1047
  "x-placeholder": "The contract address of the agent token",
1048
1048
  },
@@ -1053,7 +1053,7 @@ class AgentPublicInfo(BaseModel):
1053
1053
  PydanticField(
1054
1054
  default=None,
1055
1055
  description="Pool of the agent token",
1056
- max_length=42,
1056
+ max_length=66,
1057
1057
  json_schema_extra={
1058
1058
  "x-placeholder": "The contract address of the agent token pool",
1059
1059
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.7.5.dev27
3
+ Version: 0.7.5.dev29
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestalnetwork/intentkit
6
6
  Project-URL: Repository, https://github.com/crestalnetwork/intentkit
@@ -46,7 +46,7 @@ Requires-Dist: bip32>=2.0.0
46
46
  Requires-Dist: boto3<2.0.0,>=1.37.23
47
47
  Requires-Dist: botocore>=1.35.97
48
48
  Requires-Dist: cdp-sdk>=1.31.1
49
- Requires-Dist: coinbase-agentkit<0.8.0,>=0.7.2
49
+ Requires-Dist: coinbase-agentkit>=0.7.2
50
50
  Requires-Dist: cron-validator<2.0.0,>=1.0.8
51
51
  Requires-Dist: epyxid>=0.3.3
52
52
  Requires-Dist: eth-keys>=0.4.0
@@ -63,10 +63,10 @@ Requires-Dist: langchain-openai>=0.3.8
63
63
  Requires-Dist: langchain-text-splitters>=0.3.8
64
64
  Requires-Dist: langchain-xai>=0.2.1
65
65
  Requires-Dist: langchain<0.4.0,>=0.3.25
66
- Requires-Dist: langgraph-checkpoint-postgres<2.0.23,>=2.0.16
66
+ Requires-Dist: langgraph-checkpoint-postgres>=2.0.16
67
67
  Requires-Dist: langgraph-checkpoint>=2.0.18
68
- Requires-Dist: langgraph-prebuilt<0.7.0,>=0.6.1
69
- Requires-Dist: langgraph<0.7.0,>=0.6.1
68
+ Requires-Dist: langgraph-prebuilt>=0.6.1
69
+ Requires-Dist: langgraph>=0.6.1
70
70
  Requires-Dist: langmem>=0.0.27
71
71
  Requires-Dist: mypy-boto3-s3<2.0.0,>=1.37.24
72
72
  Requires-Dist: openai>=1.59.6
@@ -1,4 +1,4 @@
1
- intentkit/__init__.py,sha256=ZlI7silpSeAQckf-Hy1KZV1XxlGwfAHEN388zXvsYHg,384
1
+ intentkit/__init__.py,sha256=tJjaL8_qqYuZr4UA4t4mHxDVn6uz-PzDM2XTpSS5e7A,384
2
2
  intentkit/abstracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  intentkit/abstracts/agent.py,sha256=108gb5W8Q1Sy4G55F2_ZFv2-_CnY76qrBtpIr0Oxxqk,1489
4
4
  intentkit/abstracts/api.py,sha256=ZUc24vaQvQVbbjznx7bV0lbbQxdQPfEV8ZxM2R6wZWo,166
@@ -13,7 +13,7 @@ intentkit/clients/web3.py,sha256=A-w4vBPXHpDh8svsEFj_LkmvRgoDTZw4E-84S-UC9ws,102
13
13
  intentkit/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  intentkit/config/config.py,sha256=kw9F-uLsJd-knCKmYNb-hqR7x7HUXUkNg5FZCgOPH54,8868
15
15
  intentkit/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- intentkit/core/agent.py,sha256=7WTUouAV3uLvsJxHq4JziCMO8YdYeVujtmc--9L5ZJc,31981
16
+ intentkit/core/agent.py,sha256=YeeaqSMHIRAWUihL4OsWwrbZy8QbV26ORddMgPtRqMc,37932
17
17
  intentkit/core/api.py,sha256=WfoaHNquujYJIpNPuTR1dSaaxog0S3X2W4lG9Ehmkm4,3284
18
18
  intentkit/core/asset.py,sha256=mswjgAhSkAzdkz8VlFCWFMrE4Di5R3tZlkHtC0Rt4D0,7397
19
19
  intentkit/core/chat.py,sha256=YN20CnDazWLjiOZFOHgV6uHmA2DKkvPCsD5Q5sfNcZg,1685
@@ -22,7 +22,8 @@ intentkit/core/credit.py,sha256=b4f4T6G6eeBTMe0L_r8awWtXgUnqiog4IUaymDPYym0,7558
22
22
  intentkit/core/engine.py,sha256=8-dlYnwg8BIViAWIAFj65s3O29EXCeQlTjf5Yg9Xfww,37597
23
23
  intentkit/core/node.py,sha256=Cjekrg5RFtNNj3k_pLAWTZVGzm33Wnn2JtE__RSNMA8,8880
24
24
  intentkit/core/prompt.py,sha256=idNx1ono4Maz2i6IBKfaKOBBbEQiWbaSxr2Eb1vZTI4,15482
25
- intentkit/models/agent.py,sha256=-nRcaH5b-iMyds02KvjOlogHAfOC5X184qJZj_Gung4,69074
25
+ intentkit/core/statistics.py,sha256=-IZmxIBzyzZuai7QyfPEY1tx8Q8ydmmcm6eqbSSy_6o,6366
26
+ intentkit/models/agent.py,sha256=2uz2YlyfqbSH4APycI7kQuBen25Tn07cSvgqQivUWWM,69074
26
27
  intentkit/models/agent_data.py,sha256=5zq3EPKnygT2P1OHc2IfEmL8hXkjeBND6sJ0JJsvQJg,28370
27
28
  intentkit/models/agent_public.json,sha256=0X8Bd2WOobDJLsok8avWNzmzu4uvKSGEyy6Myn53eT4,2802
28
29
  intentkit/models/agent_schema.json,sha256=dIg1Fwe4edQsypMTE1__84ihe4ZiV_c0WpjDcEjPZ1U,11719
@@ -449,7 +450,7 @@ intentkit/utils/random.py,sha256=DymMxu9g0kuQLgJUqalvgksnIeLdS-v0aRk5nQU0mLI,452
449
450
  intentkit/utils/s3.py,sha256=A8Nsx5QJyLsxhj9g7oHNy2-m24tjQUhC9URm8Qb1jFw,10057
450
451
  intentkit/utils/slack_alert.py,sha256=s7UpRgyzLW7Pbmt8cKzTJgMA9bm4EP-1rQ5KXayHu6E,2264
451
452
  intentkit/utils/tx.py,sha256=2yLLGuhvfBEY5n_GJ8wmIWLCzn0FsYKv5kRNzw_sLUI,1454
452
- intentkit-0.7.5.dev27.dist-info/METADATA,sha256=YHQ44tLldCDRz_-fIBT0fvgJbBzf1xirCpNtCNRLTN0,6360
453
- intentkit-0.7.5.dev27.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
454
- intentkit-0.7.5.dev27.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
455
- intentkit-0.7.5.dev27.dist-info/RECORD,,
453
+ intentkit-0.7.5.dev29.dist-info/METADATA,sha256=PC_cU6vvY-YXD7v7LU4E80AJjDnCAEvryoHSJQ9tKJg,6331
454
+ intentkit-0.7.5.dev29.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
455
+ intentkit-0.7.5.dev29.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
456
+ intentkit-0.7.5.dev29.dist-info/RECORD,,