agentx-python 0.3.1__py3-none-any.whl → 0.3.3__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.
- {agentx_python-0.3.1.dist-info → agentx_python-0.3.3.dist-info}/METADATA +42 -10
- agentx_python-0.3.3.dist-info/RECORD +12 -0
- agentx_python/__init__.py +0 -13
- agentx_python/agentx.py +0 -51
- agentx_python/resources/__init__.py +0 -0
- agentx_python/resources/agent.py +0 -46
- agentx_python/resources/conversation.py +0 -63
- agentx_python/util.py +0 -5
- agentx_python/version.py +0 -1
- agentx_python-0.3.1.dist-info/RECORD +0 -19
- {agentx_python-0.3.1.dist-info → agentx_python-0.3.3.dist-info}/LICENSE +0 -0
- {agentx_python-0.3.1.dist-info → agentx_python-0.3.3.dist-info}/WHEEL +0 -0
- {agentx_python-0.3.1.dist-info → agentx_python-0.3.3.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: agentx-python
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Offical Python SDK for AgentX (https://www.agentx.so/)
|
|
5
5
|
Home-page: https://github.com/AgentX-ai/AgentX-python-sdk
|
|
6
6
|
Author: Robin Wang and AgentX Team
|
|
@@ -23,12 +23,25 @@ Dynamic: requires-dist
|
|
|
23
23
|
Dynamic: requires-python
|
|
24
24
|
Dynamic: summary
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+

|
|
27
27
|
|
|
28
28
|
[](https://pypi.org/project/agentx-python/)
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Fast way to build AI Agents and create agent workforce
|
|
33
|
+
|
|
34
|
+
The official AgentX Python SDK for [AgentX](https://www.agentx.so/)
|
|
35
|
+
|
|
36
|
+
Why build AI agent with AgentX?
|
|
37
|
+
|
|
38
|
+
- Simplicity, Agent - Conversation - Message structure.
|
|
39
|
+
- Include chain-of-thoughts.
|
|
40
|
+
- Choose from most open and closed sourced LLM vendors.
|
|
41
|
+
- Built-in Voice(ASR, TTS), Image Gen, Document, CSV/excel tool, OCR, etc.
|
|
42
|
+
- Support all running MCP (model context protocol).
|
|
43
|
+
- Support RAG with built-in re-rank.
|
|
44
|
+
- Multi-agent workforce orchestration.
|
|
32
45
|
|
|
33
46
|
## Installation
|
|
34
47
|
|
|
@@ -44,7 +57,7 @@ You can get an API key from https://app.agentx.so
|
|
|
44
57
|
### Agent
|
|
45
58
|
|
|
46
59
|
```python
|
|
47
|
-
from
|
|
60
|
+
from agentx import AgentX
|
|
48
61
|
|
|
49
62
|
client = AgentX(api_key="<your api key here>")
|
|
50
63
|
|
|
@@ -61,7 +74,13 @@ Each Conversation has `agents` and `users` tied to it.
|
|
|
61
74
|
my_agent = client.get_agent(id="<agent id here>")
|
|
62
75
|
|
|
63
76
|
# Get the list of conversation from this agent
|
|
64
|
-
|
|
77
|
+
existing_conversations = my_agent.list_conversations()
|
|
78
|
+
print(existing_conversations)
|
|
79
|
+
|
|
80
|
+
# Get the list of history messages from a conversation
|
|
81
|
+
last_conversation = existing_conversations[-1]
|
|
82
|
+
msgs = last_conversation.list_messages()
|
|
83
|
+
print(msgs)
|
|
65
84
|
```
|
|
66
85
|
|
|
67
86
|
### Chat
|
|
@@ -71,10 +90,23 @@ A `chat` needs to happen in the conversation. You can do `stream` response too,
|
|
|
71
90
|
```python
|
|
72
91
|
a_conversation = my_agent.get_conversation(id="<conversation id here>")
|
|
73
92
|
|
|
74
|
-
response = a_conversation.
|
|
93
|
+
response = a_conversation.chat_stream("Hello, what is your name?")
|
|
75
94
|
for chunk in response:
|
|
76
|
-
print(chunk
|
|
95
|
+
print(chunk)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
output looks like:
|
|
77
99
|
|
|
78
|
-
# output:
|
|
79
|
-
# My name is Rosita. I'm an AI assistant created by AgentX. It's nice to meet you! How can I help you today?
|
|
80
100
|
```
|
|
101
|
+
text=None cot='The user is greeting and asking for my ' botId='xxx'
|
|
102
|
+
text=None cot='name, which are casual, straightforward questions.' botId='xxx'
|
|
103
|
+
text=None cot=' I can answer these directly' botId='xxx'
|
|
104
|
+
text='Hello' cot=None botId='xxx'
|
|
105
|
+
text='!' cot=None botId='xxx'
|
|
106
|
+
text=' I' cot=None botId='xxx'
|
|
107
|
+
text=' am' cot=None botId='xxx'
|
|
108
|
+
text=' AgentX' cot=None botId='xxx'
|
|
109
|
+
text=None cot=None botId='xxx'
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
\*`cot` stands for chain-of-thoughts
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
agentx/__init__.py,sha256=AiY83tsCtjSMIBVsvNuxOgSU4i-rCREQrqDrNmCoSd0,279
|
|
2
|
+
agentx/agentx.py,sha256=kmpAgnvtLdA3ytn0TJuDmchOQZydjuD4NSP77K3tsYM,1859
|
|
3
|
+
agentx/util.py,sha256=grYAa8YTvoQSyuy4GvUOwq6SVBRr4DdrBlcTuZwQpzw,132
|
|
4
|
+
agentx/version.py,sha256=OgfvlOui_Z4FwAja2bTJgiUkMeuAXZ561wYewaEr6SQ,18
|
|
5
|
+
agentx/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
agentx/resources/agent.py,sha256=SMu4H1UDL31Bub4hnaySoySeckgAchRSaAaHDpXa1L8,1521
|
|
7
|
+
agentx/resources/conversation.py,sha256=Xwy3IfFF6C7U7Xu6BNC32IOPqmaKNwCBTbN2w4FpI8w,4485
|
|
8
|
+
agentx_python-0.3.3.dist-info/LICENSE,sha256=6ZbiPNFmv3xBb44LGhAa3PZYK0ROAztsd5LRFZDlGFE,1074
|
|
9
|
+
agentx_python-0.3.3.dist-info/METADATA,sha256=HErykm3XrfFIvbeXV_WBgCbIOpU0Dz3yW4YJp5EZu2Q,3008
|
|
10
|
+
agentx_python-0.3.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
11
|
+
agentx_python-0.3.3.dist-info/top_level.txt,sha256=s-q-HB9Gb_QdrZNacSeQyF_c25gQooMy7DlxzgLOHPk,7
|
|
12
|
+
agentx_python-0.3.3.dist-info/RECORD,,
|
agentx_python/__init__.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from agentx.agentx import AgentX
|
|
4
|
-
from agentx.version import VERSION
|
|
5
|
-
|
|
6
|
-
logging.basicConfig(
|
|
7
|
-
level=logging.INFO,
|
|
8
|
-
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
9
|
-
datefmt="%Y-%m-%d %H:%M:%S %Z",
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
__all__ = ["AgentX"]
|
|
13
|
-
__version__ = VERSION
|
agentx_python/agentx.py
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
import requests
|
|
3
|
-
import os
|
|
4
|
-
import logging
|
|
5
|
-
|
|
6
|
-
from agentx.util import get_headers
|
|
7
|
-
from agentx.resources.agent import Agent
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class AgentX:
|
|
11
|
-
|
|
12
|
-
def __init__(self, api_key: str = None):
|
|
13
|
-
self.api_key = api_key or os.getenv("AGENTX_API_KEY")
|
|
14
|
-
if self.api_key and not os.getenv("AGENTX_API_KEY"):
|
|
15
|
-
os.environ["AGENTX_API_KEY"] = self.api_key
|
|
16
|
-
|
|
17
|
-
def get_agent(self, id: str) -> Agent:
|
|
18
|
-
url = f"https://api.agentx.so/api/v1/access/agents/{id}"
|
|
19
|
-
# Make a GET request to the AgentX API
|
|
20
|
-
response = requests.get(url, headers=get_headers())
|
|
21
|
-
# Check if response was successful
|
|
22
|
-
if response.status_code == 200:
|
|
23
|
-
agent_res = response.json()
|
|
24
|
-
return Agent(
|
|
25
|
-
id=agent_res.get("_id"),
|
|
26
|
-
name=agent_res.get("name"),
|
|
27
|
-
avatar=agent_res.get("avatar"),
|
|
28
|
-
createdAt=agent_res.get("createdAt"),
|
|
29
|
-
updatedAt=agent_res.get("updatedAt"),
|
|
30
|
-
)
|
|
31
|
-
else:
|
|
32
|
-
raise Exception(f"Failed to retrieve agent: {response.reason}")
|
|
33
|
-
|
|
34
|
-
def list_agents(self) -> List[Agent]:
|
|
35
|
-
url = "https://api.agentx.so/api/v1/access/agents"
|
|
36
|
-
# Make a GET request to the AgentX API
|
|
37
|
-
response = requests.get(url, headers=get_headers())
|
|
38
|
-
# Check if response was successful
|
|
39
|
-
if response.status_code == 200:
|
|
40
|
-
return [
|
|
41
|
-
Agent(
|
|
42
|
-
id=agent_res.get("_id"),
|
|
43
|
-
name=agent_res.get("name"),
|
|
44
|
-
avatar=agent_res.get("avatar"),
|
|
45
|
-
createdAt=agent_res.get("createdAt"),
|
|
46
|
-
updatedAt=agent_res.get("updatedAt"),
|
|
47
|
-
)
|
|
48
|
-
for agent_res in response.json()
|
|
49
|
-
]
|
|
50
|
-
else:
|
|
51
|
-
raise Exception(f"Failed to list agents: {response.reason}")
|
|
File without changes
|
agentx_python/resources/agent.py
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
from typing import Optional, List
|
|
2
|
-
from pydantic import BaseModel, Field
|
|
3
|
-
import requests
|
|
4
|
-
import os
|
|
5
|
-
import logging
|
|
6
|
-
from dataclasses import dataclass
|
|
7
|
-
from agentx.util import get_headers
|
|
8
|
-
from .conversation import Conversation
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@dataclass
|
|
12
|
-
class Agent(BaseModel):
|
|
13
|
-
id: str
|
|
14
|
-
name: str
|
|
15
|
-
avatar: Optional[str]
|
|
16
|
-
createdAt: Optional[str]
|
|
17
|
-
updatedAt: Optional[str]
|
|
18
|
-
|
|
19
|
-
def __init__(self, **data):
|
|
20
|
-
super().__init__(**data)
|
|
21
|
-
|
|
22
|
-
def get_conversation(self, id: str) -> Conversation:
|
|
23
|
-
list_of_conversations = self.list_conversations()
|
|
24
|
-
return next(
|
|
25
|
-
(conv for conv in list_of_conversations if conv.id == id),
|
|
26
|
-
Exception("404 - Conversation not found"),
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
def list_conversations(self) -> List[Conversation]:
|
|
30
|
-
url = f"https://api.agentx.so/api/v1/access/agents/{self.id}/conversations"
|
|
31
|
-
response = requests.get(url, headers=get_headers())
|
|
32
|
-
if response.status_code == 200:
|
|
33
|
-
return [
|
|
34
|
-
Conversation(
|
|
35
|
-
agent_id=self.id,
|
|
36
|
-
id=conv_res.get("_id"),
|
|
37
|
-
title=conv_res.get("title"),
|
|
38
|
-
users=conv_res.get("users"),
|
|
39
|
-
agents=conv_res.get("bots"),
|
|
40
|
-
createdAt=conv_res.get("createdAt"),
|
|
41
|
-
updatedAt=conv_res.get("updatedAt"),
|
|
42
|
-
)
|
|
43
|
-
for conv_res in response.json()
|
|
44
|
-
]
|
|
45
|
-
else:
|
|
46
|
-
raise Exception(f"Failed to retrieve agent details: {response.reason}")
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
from typing import Optional, List
|
|
2
|
-
from pydantic import BaseModel, Field
|
|
3
|
-
import os
|
|
4
|
-
import requests
|
|
5
|
-
from agentx.util import get_headers
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class Conversation(BaseModel):
|
|
9
|
-
agent_id: str
|
|
10
|
-
id: str
|
|
11
|
-
title: Optional[str] = Field(default=None) # conversation customized title
|
|
12
|
-
users: List[str]
|
|
13
|
-
agents: List[str]
|
|
14
|
-
createdAt: Optional[str]
|
|
15
|
-
updatedAt: Optional[str]
|
|
16
|
-
|
|
17
|
-
def __init__(self, **data):
|
|
18
|
-
super().__init__(**data)
|
|
19
|
-
|
|
20
|
-
def generate_conversation_id(self):
|
|
21
|
-
return "generate new_conversation_id"
|
|
22
|
-
|
|
23
|
-
def list_messages(self):
|
|
24
|
-
url = f"https://api.agentx.so/api/v1/access/agents/{self.agent_id}/conversations/{self.id}"
|
|
25
|
-
response = requests.get(url, headers=get_headers())
|
|
26
|
-
if response.status_code == 200:
|
|
27
|
-
return response.json()
|
|
28
|
-
else:
|
|
29
|
-
raise Exception(
|
|
30
|
-
f"Failed to retrieve agent details: {response.status_code} - {response.reason}"
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
def chat(self, message: str, stream: bool = False, context: int = None):
|
|
34
|
-
if stream:
|
|
35
|
-
return self._chat_stream(message, context)
|
|
36
|
-
else:
|
|
37
|
-
url = f"https://api.agentx.so/api/v1/access/conversations/{self.id}/message"
|
|
38
|
-
response = requests.post(
|
|
39
|
-
url,
|
|
40
|
-
headers=get_headers(),
|
|
41
|
-
json={"message": message, "context": context},
|
|
42
|
-
)
|
|
43
|
-
return response.json()
|
|
44
|
-
|
|
45
|
-
def _chat_stream(self, message: str, context: int = None):
|
|
46
|
-
url = f"https://api.agentx.so/api/v1/access/conversations/{self.id}/messagesse"
|
|
47
|
-
response = requests.post(
|
|
48
|
-
url, headers=get_headers(), json={"message": message, "context": context}
|
|
49
|
-
)
|
|
50
|
-
if response.status_code == 200:
|
|
51
|
-
buf = b""
|
|
52
|
-
for chunk in response.iter_content():
|
|
53
|
-
buf += chunk
|
|
54
|
-
try:
|
|
55
|
-
chunk = buf.decode("utf-8")
|
|
56
|
-
yield chunk
|
|
57
|
-
except UnicodeDecodeError:
|
|
58
|
-
continue
|
|
59
|
-
buf = b""
|
|
60
|
-
else:
|
|
61
|
-
raise Exception(
|
|
62
|
-
f"Failed to send message: {response.status_code} - {response.reason}"
|
|
63
|
-
)
|
agentx_python/util.py
DELETED
agentx_python/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "0.1.0"
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
agentx/__init__.py,sha256=AiY83tsCtjSMIBVsvNuxOgSU4i-rCREQrqDrNmCoSd0,279
|
|
2
|
-
agentx/agentx.py,sha256=kmpAgnvtLdA3ytn0TJuDmchOQZydjuD4NSP77K3tsYM,1859
|
|
3
|
-
agentx/util.py,sha256=grYAa8YTvoQSyuy4GvUOwq6SVBRr4DdrBlcTuZwQpzw,132
|
|
4
|
-
agentx/version.py,sha256=OgfvlOui_Z4FwAja2bTJgiUkMeuAXZ561wYewaEr6SQ,18
|
|
5
|
-
agentx/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
agentx/resources/agent.py,sha256=SMu4H1UDL31Bub4hnaySoySeckgAchRSaAaHDpXa1L8,1521
|
|
7
|
-
agentx/resources/conversation.py,sha256=Xwy3IfFF6C7U7Xu6BNC32IOPqmaKNwCBTbN2w4FpI8w,4485
|
|
8
|
-
agentx_python/__init__.py,sha256=AiY83tsCtjSMIBVsvNuxOgSU4i-rCREQrqDrNmCoSd0,279
|
|
9
|
-
agentx_python/agentx.py,sha256=kmpAgnvtLdA3ytn0TJuDmchOQZydjuD4NSP77K3tsYM,1859
|
|
10
|
-
agentx_python/util.py,sha256=grYAa8YTvoQSyuy4GvUOwq6SVBRr4DdrBlcTuZwQpzw,132
|
|
11
|
-
agentx_python/version.py,sha256=CpXi3jGlx23RvRyU7iytOMZrnspdWw4yofS8lpP1AJU,18
|
|
12
|
-
agentx_python/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
-
agentx_python/resources/agent.py,sha256=SMu4H1UDL31Bub4hnaySoySeckgAchRSaAaHDpXa1L8,1521
|
|
14
|
-
agentx_python/resources/conversation.py,sha256=MR0ZBkpSWxUdWoN5HklaoP79zKxp-uzrnX5koX3m504,2179
|
|
15
|
-
agentx_python-0.3.1.dist-info/LICENSE,sha256=6ZbiPNFmv3xBb44LGhAa3PZYK0ROAztsd5LRFZDlGFE,1074
|
|
16
|
-
agentx_python-0.3.1.dist-info/METADATA,sha256=YHCO7IJsO9XajdldjKJtWvgIwVhRRj8z3ffISqzarIs,2065
|
|
17
|
-
agentx_python-0.3.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
18
|
-
agentx_python-0.3.1.dist-info/top_level.txt,sha256=s-q-HB9Gb_QdrZNacSeQyF_c25gQooMy7DlxzgLOHPk,7
|
|
19
|
-
agentx_python-0.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|