mezoAgent 0.6.4__py3-none-any.whl → 0.7.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.
- {mezoAgent-0.6.4.dist-info → mezoAgent-0.7.0.dist-info}/METADATA +1 -1
- mezoAgent-0.7.0.dist-info/RECORD +18 -0
- mezo_agent/__init__.py +3 -1
- mezo_agent/token_balance_tool.py +2 -1
- mezo_agent/token_price_tool.py +2 -3
- mezo_agent/token_utils.py +32 -0
- mezo_agent/twitter_client.py +78 -0
- mezo_agent/twitter_manager.py +0 -0
- mezo_agent/utils.py +3 -34
- mezoAgent-0.6.4.dist-info/RECORD +0 -16
- {mezoAgent-0.6.4.dist-info → mezoAgent-0.7.0.dist-info}/WHEEL +0 -0
- {mezoAgent-0.6.4.dist-info → mezoAgent-0.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
mezo_agent/__init__.py,sha256=1UatqstSlOF8pU5-fu675ONGteB6INqyE74xMi8S1o4,752
|
2
|
+
mezo_agent/characters.py,sha256=wub7y9BrAAdAKWwcNAdgrvhRi2zHMaZNzTr2y3qtbsw,515
|
3
|
+
mezo_agent/chat.py,sha256=ZtNurUDV7UzJjbFyU96DNGy37hO3gl0osn19mRu7ER8,859
|
4
|
+
mezo_agent/config.py,sha256=6xFgk80eiBLTasKGW73Ne8hNhMtx8BbQ_Ef79YOyDlc,3233
|
5
|
+
mezo_agent/parsing.py,sha256=dnS5Qw9V8qvSA_IPgn6nCUnyEfZP9TphO8DnH8oUuiM,5080
|
6
|
+
mezo_agent/swap_musd_btc.py,sha256=Co-XcfK73spm94VC6qzGY0VYoGwsMDKKHM8ToGh2JxU,4289
|
7
|
+
mezo_agent/token_balance_tool.py,sha256=n5xkHWGhkJdQZILN0fDe-n4NHgXSHTSloEHJfkLMsWE,1442
|
8
|
+
mezo_agent/token_price_tool.py,sha256=vD-ukq0D_4zmjIy9bZ9qL44nGctf-hWzkQuTd-0wy2U,930
|
9
|
+
mezo_agent/token_utils.py,sha256=3NH_Z_vbZ0uupuuGjEbmwsbUkubluQbL-0xR9kia7nU,1118
|
10
|
+
mezo_agent/transaction.py,sha256=YpfWrkEaf0YGM_Kc4cFwlT9GmBGZkeJHWm0VGHs9Gks,4199
|
11
|
+
mezo_agent/twitter_client.py,sha256=yR2RE0HTieUafXLWwbxGV2hgZrYc79w_gloBWy--fO8,2924
|
12
|
+
mezo_agent/twitter_manager.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
|
+
mezo_agent/utils.py,sha256=hsGtL_iXvUVGnY5aHPQ0v6Jejxd4P4qw0yOtS1omToU,1397
|
14
|
+
mezo_agent/data/new_router.json,sha256=A8U-NVfe1F-hDyR90_SuH8jDAxmzyyHWdJW62j9TZsc,26756
|
15
|
+
mezoAgent-0.7.0.dist-info/METADATA,sha256=Kasssjau3C2NXCJTop0zeZOlAvq8W-R6xiTIE_Lj3Us,273
|
16
|
+
mezoAgent-0.7.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
17
|
+
mezoAgent-0.7.0.dist-info/top_level.txt,sha256=rrAci_NyTR9z6w_BrQhQrAhzMW_A0NYhVa0x2USl0nQ,11
|
18
|
+
mezoAgent-0.7.0.dist-info/RECORD,,
|
mezo_agent/__init__.py
CHANGED
@@ -4,7 +4,8 @@ from .chat import mezo_character_chat
|
|
4
4
|
from .characters import get_character_prompt
|
5
5
|
from .token_balance_tool import mezo_agent_token_balance_tool
|
6
6
|
from .token_price_tool import mezo_agent_token_price_tool
|
7
|
-
from .token_utils import get_token_address_by_symbol
|
7
|
+
from .token_utils import get_token_address_by_symbol
|
8
|
+
from .twitter_manager import TwitterManager
|
8
9
|
|
9
10
|
__all__ = [
|
10
11
|
"mezo_agent_transaction_btc",
|
@@ -14,5 +15,6 @@ __all__ = [
|
|
14
15
|
"mezo_agent_token_balance_tool",
|
15
16
|
"mezo_agent_token_price_tool",
|
16
17
|
"get_token_address_by_symbol",
|
18
|
+
"TwitterManager",
|
17
19
|
"get_character_prompt"
|
18
20
|
]
|
mezo_agent/token_balance_tool.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from langchain.tools import tool
|
2
2
|
from mezo_agent.config import web3_instance, sender_address, ERC20_ABI
|
3
3
|
from mezo_agent.parsing import extract_balance_details
|
4
|
-
from mezo_agent.token_utils import get_token_address_by_symbol # ✅
|
4
|
+
from mezo_agent.token_utils import get_token_address_by_symbol # ✅ Correct import
|
5
5
|
|
6
6
|
@tool
|
7
7
|
def mezo_agent_token_balance_tool(balance_prompt: str) -> str:
|
@@ -33,3 +33,4 @@ def mezo_agent_token_balance_tool(balance_prompt: str) -> str:
|
|
33
33
|
return f"✅ {token_symbol.upper()} Balance: {balance}"
|
34
34
|
except Exception as e:
|
35
35
|
return f"❌ Failed to fetch balance: {str(e)}"
|
36
|
+
|
mezo_agent/token_price_tool.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from langchain.tools import tool
|
2
2
|
from mezo_agent.config import query_graph
|
3
3
|
from mezo_agent.parsing import extract_price_details
|
4
|
-
from mezo_agent.
|
4
|
+
from mezo_agent.utils import get_token_price # ✅ Correct import
|
5
5
|
|
6
6
|
@tool
|
7
7
|
def mezo_agent_token_price_tool(price_prompt: str) -> str:
|
@@ -11,8 +11,6 @@ def mezo_agent_token_price_tool(price_prompt: str) -> str:
|
|
11
11
|
:param price_prompt: User query containing the token symbol.
|
12
12
|
:return: Token price details.
|
13
13
|
"""
|
14
|
-
from mezo_agent.utils import get_token_price # ✅ Import moved inside function
|
15
|
-
|
16
14
|
details = extract_price_details(price_prompt)
|
17
15
|
|
18
16
|
if isinstance(details, str): # Handle extraction errors
|
@@ -27,3 +25,4 @@ def mezo_agent_token_price_tool(price_prompt: str) -> str:
|
|
27
25
|
return get_token_price(token_symbol)
|
28
26
|
except Exception as e:
|
29
27
|
return f"❌ Failed to fetch token price: {str(e)}"
|
28
|
+
|
mezo_agent/token_utils.py
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
from mezo_agent.config import query_graph, web3_instance
|
2
|
+
|
3
|
+
def get_token_address_by_symbol(symbol: str) -> str:
|
4
|
+
"""
|
5
|
+
Fetches the token contract address dynamically from the Goldsky subgraph.
|
6
|
+
:param symbol: Token symbol (e.g., 'MUSD', 'WBTC').
|
7
|
+
:return: Ethereum checksum address of the token.
|
8
|
+
"""
|
9
|
+
if symbol.lower() == "btc":
|
10
|
+
symbol = "wtbtc"
|
11
|
+
|
12
|
+
query_all = '''
|
13
|
+
{
|
14
|
+
tokens(first: 100) {
|
15
|
+
id
|
16
|
+
symbol
|
17
|
+
}
|
18
|
+
}
|
19
|
+
'''
|
20
|
+
data = query_graph(query_all)
|
21
|
+
tokens = data.get("data", {}).get("tokens", [])
|
22
|
+
|
23
|
+
matching_tokens = [t for t in tokens if t["symbol"].lower() == symbol.lower()]
|
24
|
+
|
25
|
+
if matching_tokens:
|
26
|
+
token_address = matching_tokens[0]["id"]
|
27
|
+
checksum_address = web3_instance.to_checksum_address(token_address)
|
28
|
+
print(f"✅ Token {symbol} found at address: {checksum_address}") # Debugging
|
29
|
+
return checksum_address
|
30
|
+
else:
|
31
|
+
available_symbols = [t["symbol"] for t in tokens]
|
32
|
+
raise Exception(f"❌ Token '{symbol}' not found. Available: {', '.join(available_symbols)}")
|
@@ -0,0 +1,78 @@
|
|
1
|
+
import tweepy
|
2
|
+
import time
|
3
|
+
import random
|
4
|
+
from datetime import datetime, timedelta
|
5
|
+
from threading import Thread
|
6
|
+
from mezo_agent.config import load_dotenv
|
7
|
+
import os
|
8
|
+
|
9
|
+
# Load environment variables
|
10
|
+
load_dotenv()
|
11
|
+
|
12
|
+
class TwitterClient:
|
13
|
+
"""
|
14
|
+
A modular Twitter client for MezoAgent that allows characters to tweet automatically.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def __init__(self, character_name: str, api_key: str, api_secret: str, access_token: str, access_secret: str):
|
18
|
+
"""
|
19
|
+
Initializes the Twitter client for a given character.
|
20
|
+
|
21
|
+
:param character_name: Name of the AI character.
|
22
|
+
:param api_key: Twitter API Key.
|
23
|
+
:param api_secret: Twitter API Secret Key.
|
24
|
+
:param access_token: Twitter Access Token.
|
25
|
+
:param access_secret: Twitter Access Token Secret.
|
26
|
+
"""
|
27
|
+
self.character_name = character_name
|
28
|
+
|
29
|
+
# Authenticate with Twitter API
|
30
|
+
auth = tweepy.OAuthHandler(api_key, api_secret)
|
31
|
+
auth.set_access_token(access_token, access_secret)
|
32
|
+
self.api = tweepy.API(auth, wait_on_rate_limit=True)
|
33
|
+
|
34
|
+
# Schedule tweets
|
35
|
+
self.schedule_tweets()
|
36
|
+
|
37
|
+
def generate_tweet(self) -> str:
|
38
|
+
"""
|
39
|
+
Generates a tweet using AI for the character.
|
40
|
+
This function can be modified to pull from AI-generated content.
|
41
|
+
|
42
|
+
:return: A string containing the tweet.
|
43
|
+
"""
|
44
|
+
tweet_templates = [
|
45
|
+
f"{self.character_name} is thinking about the future of DeFi... 🚀",
|
46
|
+
f"GM! {self.character_name} says stay bullish today. 🌞",
|
47
|
+
f"On-chain or it didn't happen! - {self.character_name} ⛓️",
|
48
|
+
f"{self.character_name} is stacking sats and stacking wisdom. 💡",
|
49
|
+
f"Wen moon? {self.character_name} says HODL tight! 🌙"
|
50
|
+
]
|
51
|
+
return random.choice(tweet_templates)
|
52
|
+
|
53
|
+
def post_tweet(self):
|
54
|
+
"""
|
55
|
+
Posts a tweet for the character.
|
56
|
+
"""
|
57
|
+
try:
|
58
|
+
tweet_content = self.generate_tweet()
|
59
|
+
self.api.update_status(tweet_content)
|
60
|
+
print(f"✅ {self.character_name} tweeted: {tweet_content}")
|
61
|
+
except Exception as e:
|
62
|
+
print(f"❌ Failed to post tweet for {self.character_name}: {e}")
|
63
|
+
|
64
|
+
def schedule_tweets(self):
|
65
|
+
"""
|
66
|
+
Schedules tweets to be sent 5 times per 24-hour period.
|
67
|
+
Runs in a separate thread to avoid blocking the main agent process.
|
68
|
+
"""
|
69
|
+
def tweet_scheduler():
|
70
|
+
while True:
|
71
|
+
for _ in range(5): # Post 5 tweets per day
|
72
|
+
self.post_tweet()
|
73
|
+
sleep_time = (24 * 60 * 60) // 5 # Spread tweets across 24 hours
|
74
|
+
print(f"⏳ Next tweet in {sleep_time // 60} minutes...")
|
75
|
+
time.sleep(sleep_time)
|
76
|
+
|
77
|
+
thread = Thread(target=tweet_scheduler, daemon=True)
|
78
|
+
thread.start()
|
File without changes
|
mezo_agent/utils.py
CHANGED
@@ -1,36 +1,5 @@
|
|
1
1
|
from mezo_agent.config import web3_instance, query_graph
|
2
|
-
from mezo_agent.
|
3
|
-
|
4
|
-
def get_token_address_by_symbol(symbol: str) -> str:
|
5
|
-
"""
|
6
|
-
Fetches the token contract address dynamically from the Goldsky subgraph.
|
7
|
-
:param symbol: Token symbol (e.g., 'MUSD', 'WBTC').
|
8
|
-
:return: Ethereum checksum address of the token.
|
9
|
-
"""
|
10
|
-
if symbol.lower() == "btc":
|
11
|
-
symbol = "wtbtc"
|
12
|
-
|
13
|
-
query_all = '''
|
14
|
-
{
|
15
|
-
tokens(first: 100) {
|
16
|
-
id
|
17
|
-
symbol
|
18
|
-
}
|
19
|
-
}
|
20
|
-
'''
|
21
|
-
data = query_graph(query_all)
|
22
|
-
tokens = data.get("data", {}).get("tokens", [])
|
23
|
-
matching_tokens = [t for t in tokens if t["symbol"].lower() == symbol.lower()]
|
24
|
-
|
25
|
-
if matching_tokens:
|
26
|
-
token_address = matching_tokens[0]["id"]
|
27
|
-
checksum_address = web3_instance.to_checksum_address(token_address)
|
28
|
-
print(f"✅ Token {symbol} found at address: {checksum_address}") # Debugging
|
29
|
-
return checksum_address
|
30
|
-
else:
|
31
|
-
available_symbols = [t["symbol"] for t in tokens]
|
32
|
-
raise Exception(f"Token '{symbol}' not found. Available: {', '.join(available_symbols)}")
|
33
|
-
|
2
|
+
from mezo_agent.token_utils import get_token_address_by_symbol # ✅ Import from token_utils.py
|
34
3
|
|
35
4
|
def get_token_price(token_symbol: str) -> str:
|
36
5
|
"""
|
@@ -43,7 +12,7 @@ def get_token_price(token_symbol: str) -> str:
|
|
43
12
|
token_symbol = "wtbtc"
|
44
13
|
|
45
14
|
try:
|
46
|
-
token_address = get_token_address_by_symbol(token_symbol)
|
15
|
+
token_address = get_token_address_by_symbol(token_symbol) # ✅ Now correctly imported
|
47
16
|
except Exception as e:
|
48
17
|
return f"❌ Token lookup error: {e}"
|
49
18
|
|
@@ -67,4 +36,4 @@ def get_token_price(token_symbol: str) -> str:
|
|
67
36
|
derivedETH = token_data.get("derivedETH", "N/A")
|
68
37
|
return f"✅ Price of {token_symbol.upper()}: {derivedUSD} USD, {derivedETH} ETH."
|
69
38
|
except Exception as e:
|
70
|
-
return f"❌ Failed to get price data: {e}"
|
39
|
+
return f"❌ Failed to get price data: {e}"
|
mezoAgent-0.6.4.dist-info/RECORD
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
mezo_agent/__init__.py,sha256=8QYgneMYLO5-VzBT-4YiIJ_o1rgGq1EJDVrwvLi9hsQ,707
|
2
|
-
mezo_agent/characters.py,sha256=wub7y9BrAAdAKWwcNAdgrvhRi2zHMaZNzTr2y3qtbsw,515
|
3
|
-
mezo_agent/chat.py,sha256=ZtNurUDV7UzJjbFyU96DNGy37hO3gl0osn19mRu7ER8,859
|
4
|
-
mezo_agent/config.py,sha256=6xFgk80eiBLTasKGW73Ne8hNhMtx8BbQ_Ef79YOyDlc,3233
|
5
|
-
mezo_agent/parsing.py,sha256=dnS5Qw9V8qvSA_IPgn6nCUnyEfZP9TphO8DnH8oUuiM,5080
|
6
|
-
mezo_agent/swap_musd_btc.py,sha256=Co-XcfK73spm94VC6qzGY0VYoGwsMDKKHM8ToGh2JxU,4289
|
7
|
-
mezo_agent/token_balance_tool.py,sha256=DoNuHLr_b8P-g3AGYO3_D80Z6tDd9LR-kRdxcKAPN38,1448
|
8
|
-
mezo_agent/token_price_tool.py,sha256=9oayEJm_-lS7SXEcvoKPyJOEVY7EiUO3t_IzKrutgx8,1042
|
9
|
-
mezo_agent/token_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
-
mezo_agent/transaction.py,sha256=YpfWrkEaf0YGM_Kc4cFwlT9GmBGZkeJHWm0VGHs9Gks,4199
|
11
|
-
mezo_agent/utils.py,sha256=XRq--PRJbWlG9kpz99QHWu7mLpYY4MYblm38U1xK4YE,2381
|
12
|
-
mezo_agent/data/new_router.json,sha256=A8U-NVfe1F-hDyR90_SuH8jDAxmzyyHWdJW62j9TZsc,26756
|
13
|
-
mezoAgent-0.6.4.dist-info/METADATA,sha256=Qoep4c59KYhXpQJIO3G_DKBuQ9zgueA2RIpIdqbUses,273
|
14
|
-
mezoAgent-0.6.4.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
15
|
-
mezoAgent-0.6.4.dist-info/top_level.txt,sha256=rrAci_NyTR9z6w_BrQhQrAhzMW_A0NYhVa0x2USl0nQ,11
|
16
|
-
mezoAgent-0.6.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|