agentx-python 0.3.1__py3-none-any.whl → 0.3.2__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: agentx-python
3
- Version: 0.3.1
3
+ Version: 0.3.2
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
- # AgentX Python SDK API library
26
+ ![Logo](agentx/images/LOGO.png)
27
27
 
28
28
  [![PyPI version](https://img.shields.io/pypi/v/agentx-python)](https://pypi.org/project/agentx-python/)
29
29
 
30
- The AgentX Python SDK provides a convenient way to access to your Agent programmatically.
31
- This is a python SDK for AgentX (https://www.agentx.so/)
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 agentx_python import AgentX
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
- print(my_agent.list_conversations())
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.chat("Hello, what is your name?", stream=True)
93
+ response = a_conversation.chat_stream("Hello, what is your name?")
75
94
  for chunk in response:
76
- print(chunk, end="")
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.2.dist-info/LICENSE,sha256=6ZbiPNFmv3xBb44LGhAa3PZYK0ROAztsd5LRFZDlGFE,1074
9
+ agentx_python-0.3.2.dist-info/METADATA,sha256=47m1FfWDCtAvT8frfeKYapKOBc-OHX_GSQxjhdMjDto,2956
10
+ agentx_python-0.3.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
11
+ agentx_python-0.3.2.dist-info/top_level.txt,sha256=s-q-HB9Gb_QdrZNacSeQyF_c25gQooMy7DlxzgLOHPk,7
12
+ agentx_python-0.3.2.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
@@ -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
@@ -1,5 +0,0 @@
1
- import os
2
-
3
-
4
- def get_headers(api_key: str = None):
5
- return {"accept": "*/*", "x-api-key": api_key or os.getenv("AGENTX_API_KEY")}
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,,