agentx-python 0.2.1__py3-none-any.whl → 0.3.1__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/__init__.py ADDED
@@ -0,0 +1,13 @@
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/agentx.py ADDED
@@ -0,0 +1,51 @@
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
@@ -0,0 +1,46 @@
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}")
@@ -0,0 +1,128 @@
1
+ import json
2
+ import requests
3
+ from typing import Optional, List, Any, Iterator
4
+ from pydantic import BaseModel, Field
5
+ from agentx.util import get_headers
6
+
7
+
8
+ class ChatResponse(BaseModel):
9
+ text: str | None
10
+ cot: str | None
11
+ botId: str
12
+ reference: Optional[Any]
13
+ tasks: Optional[Any]
14
+
15
+
16
+ class Message(BaseModel):
17
+ id: str = Field(alias="_id")
18
+ conversationId: str
19
+ role: str # user or bot
20
+ botId: Optional[str] = Field(alias="bot", default=None)
21
+ userId: Optional[str] = Field(alias="user", default=None)
22
+ text: str | None
23
+ cot: str | None
24
+ createdAt: str
25
+ updatedAt: str
26
+
27
+ class Config:
28
+ populate_by_name = True
29
+ extra = "ignore"
30
+
31
+
32
+ class Conversation(BaseModel):
33
+ agent_id: str
34
+ id: str = Field(alias="_id")
35
+ title: Optional[str] = Field(default=None) # conversation customized title
36
+ users: List[str]
37
+ agents: List[str] = Field(alias="bots")
38
+ createdAt: Optional[str]
39
+ updatedAt: Optional[str]
40
+
41
+ class Config:
42
+ populate_by_name = True
43
+ extra = "ignore"
44
+
45
+ def __init__(self, **data):
46
+ super().__init__(**data)
47
+
48
+ def new_conversation(self) -> "Conversation":
49
+ url = f"https://api.agentx.so/api/v1/access/agents/{self.agent_id}/conversations/new"
50
+ response = requests.post(
51
+ url,
52
+ headers=get_headers(),
53
+ json={"type": "chat"},
54
+ )
55
+ if response.status_code == 200:
56
+ new_conv = response.json()
57
+ new_conv["agent_id"] = self.agent_id
58
+ return Conversation(**new_conv)
59
+ else:
60
+ raise Exception(
61
+ f"Failed to create new conversation: {response.status_code} - {response.reason}"
62
+ )
63
+
64
+ def list_messages(self) -> List[Message]:
65
+ url = f"https://api.agentx.so/api/v1/access/agents/{self.agent_id}/conversations/{self.id}"
66
+ response = requests.get(url, headers=get_headers())
67
+ if response.status_code == 200:
68
+ res = response.json()
69
+ if res.get("messages"):
70
+ message_list = []
71
+ for message in res["messages"]:
72
+ if message.get("bot"):
73
+ message["role"] = "bot"
74
+ else:
75
+ message["role"] = "user"
76
+ message_list.append(Message(**message))
77
+ return message_list
78
+ else:
79
+ raise Exception("No messages found in the conversation.")
80
+ else:
81
+ raise Exception(
82
+ f"Failed to retrieve agent details: {response.status_code} - {response.reason}"
83
+ )
84
+
85
+ def chat(self, message: str, context: int = None):
86
+ url = f"https://api.agentx.so/api/v1/access/conversations/{self.id}/message"
87
+ response = requests.post(
88
+ url,
89
+ headers=get_headers(),
90
+ json={"message": message, "context": context},
91
+ )
92
+ return response.json()
93
+
94
+ def chat_stream(self, message: str, context: int = None) -> Iterator[ChatResponse]:
95
+ url = f"https://api.agentx.so/api/v1/access/conversations/{self.id}/jsonmessagesse"
96
+ response = requests.post(
97
+ url, headers=get_headers(), json={"message": message, "context": context}
98
+ )
99
+ result = ""
100
+ if response.status_code == 200:
101
+ buf = b""
102
+ for chunk in response.iter_content():
103
+ buf += chunk
104
+ try:
105
+ chunk = buf.decode("utf-8")
106
+ # yield chunk
107
+ except UnicodeDecodeError:
108
+ continue
109
+ result += chunk
110
+ buf = b""
111
+ try:
112
+ if result.count("{") == result.count("}"):
113
+ catch_json = json.loads(result)
114
+ if catch_json:
115
+ result = ""
116
+ yield ChatResponse(
117
+ text=catch_json.get("text"),
118
+ cot=catch_json.get("cot"),
119
+ botId=catch_json.get("botId"),
120
+ reference=catch_json.get("reference"),
121
+ tasks=catch_json.get("tasks"),
122
+ )
123
+ except json.JSONDecodeError:
124
+ continue
125
+ else:
126
+ raise Exception(
127
+ f"Failed to send message: {response.status_code} - {response.reason}"
128
+ )
agentx/util.py ADDED
@@ -0,0 +1,5 @@
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/version.py ADDED
@@ -0,0 +1 @@
1
+ VERSION = "0.3.0"
agentx_python/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
 
3
- from agentx_python.agentx import AgentX
4
- from agentx_python.version import VERSION
3
+ from agentx.agentx import AgentX
4
+ from agentx.version import VERSION
5
5
 
6
6
  logging.basicConfig(
7
7
  level=logging.INFO,
agentx_python/agentx.py CHANGED
@@ -3,8 +3,8 @@ import requests
3
3
  import os
4
4
  import logging
5
5
 
6
- from agentx_python.util import get_headers
7
- from agentx_python.resources.agent import Agent
6
+ from agentx.util import get_headers
7
+ from agentx.resources.agent import Agent
8
8
 
9
9
 
10
10
  class AgentX:
@@ -4,7 +4,7 @@ import requests
4
4
  import os
5
5
  import logging
6
6
  from dataclasses import dataclass
7
- from agentx_python.util import get_headers
7
+ from agentx.util import get_headers
8
8
  from .conversation import Conversation
9
9
 
10
10
 
@@ -2,7 +2,7 @@ from typing import Optional, List
2
2
  from pydantic import BaseModel, Field
3
3
  import os
4
4
  import requests
5
- from agentx_python.util import get_headers
5
+ from agentx.util import get_headers
6
6
 
7
7
 
8
8
  class Conversation(BaseModel):
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: agentx-python
3
- Version: 0.2.1
3
+ Version: 0.3.1
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
@@ -11,8 +11,17 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.6
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: urllib3 >=1.26.11
14
+ Requires-Dist: urllib3>=1.26.11
15
15
  Requires-Dist: certifi
16
+ Dynamic: author
17
+ Dynamic: author-email
18
+ Dynamic: classifier
19
+ Dynamic: description
20
+ Dynamic: description-content-type
21
+ Dynamic: home-page
22
+ Dynamic: requires-dist
23
+ Dynamic: requires-python
24
+ Dynamic: summary
16
25
 
17
26
  # AgentX Python SDK API library
18
27
 
@@ -34,7 +43,7 @@ You can get an API key from https://app.agentx.so
34
43
 
35
44
  ### Agent
36
45
 
37
- ```
46
+ ```python
38
47
  from agentx_python import AgentX
39
48
 
40
49
  client = AgentX(api_key="<your api key here>")
@@ -47,7 +56,7 @@ print(client.list_agents())
47
56
 
48
57
  Each Conversation has `agents` and `users` tied to it.
49
58
 
50
- ```
59
+ ```python
51
60
  # get agent
52
61
  my_agent = client.get_agent(id="<agent id here>")
53
62
 
@@ -59,7 +68,7 @@ print(my_agent.list_conversations())
59
68
 
60
69
  A `chat` needs to happen in the conversation. You can do `stream` response too, default `False`.
61
70
 
62
- ```
71
+ ```python
63
72
  a_conversation = my_agent.get_conversation(id="<conversation id here>")
64
73
 
65
74
  response = a_conversation.chat("Hello, what is your name?", stream=True)
@@ -0,0 +1,19 @@
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1 @@
1
+ agentx
@@ -1,12 +0,0 @@
1
- agentx_python/__init__.py,sha256=5VThp1fX_kBYM2afhhiTQZxcbg_kBeDiPExAH88ZPT4,293
2
- agentx_python/agentx.py,sha256=D4R8cAam0LF8_PuHmAN7FXaRmrMTKsdzPdSs0HJkf6I,1873
3
- agentx_python/util.py,sha256=grYAa8YTvoQSyuy4GvUOwq6SVBRr4DdrBlcTuZwQpzw,132
4
- agentx_python/version.py,sha256=CpXi3jGlx23RvRyU7iytOMZrnspdWw4yofS8lpP1AJU,18
5
- agentx_python/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- agentx_python/resources/agent.py,sha256=wpsiiYp3ZjYaonq9wL2KDrUuCnFHvrxS9xfQgaKlLrk,1528
7
- agentx_python/resources/conversation.py,sha256=zpGOpSJsRTtHbeK_pizOtuGsYxpvLOUCkb-zThB0-cs,2186
8
- agentx_python-0.2.1.dist-info/LICENSE,sha256=6ZbiPNFmv3xBb44LGhAa3PZYK0ROAztsd5LRFZDlGFE,1074
9
- agentx_python-0.2.1.dist-info/METADATA,sha256=oJwDiWb1rt6LXftOI5fLuswBUANA9irYFFkL7jWMP1U,1851
10
- agentx_python-0.2.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
11
- agentx_python-0.2.1.dist-info/top_level.txt,sha256=YYLKtZsKSxhcVZ9ijHXupbsRJ7lhEjETXLwAB7lG2Y8,14
12
- agentx_python-0.2.1.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- agentx_python