persona-sdk-python 0.1.0__tar.gz → 0.1.1__tar.gz
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.
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/PKG-INFO +2 -2
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/__init__.py +3 -6
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/agents.py +1 -1
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/features.py +1 -1
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/knowledge_bases.py +2 -2
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/missions.py +1 -1
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/projects.py +1 -1
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/service_prices.py +1 -1
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/sessions.py +2 -2
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/triggers.py +2 -2
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/workflows.py +2 -2
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/client.py +2 -1
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/pyproject.toml +5 -2
- persona_sdk_python-0.1.0/README.md +0 -351
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/.gitignore +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/__init__.py +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/api/credentials.py +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/runners/__init__.py +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/runners/agent_runner.py +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/runners/resource_retriever.py +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/runners/tool_invoker.py +0 -0
- {persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/uv.lock +0 -0
|
@@ -12,11 +12,10 @@ from persona_sdk.api.service_prices import ServicePricesApi
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class PersonaSdk:
|
|
15
|
-
def __init__(self, base_url: str, api_key: str,
|
|
16
|
-
self.client = PersonaClient(base_url, api_key)
|
|
17
|
-
self.workflows_client = PersonaClient(workflows_url, api_key) if workflows_url else self.client
|
|
15
|
+
def __init__(self, base_url: str, api_key: str, proxy: str = None):
|
|
16
|
+
self.client = PersonaClient(base_url, api_key, proxy=proxy)
|
|
18
17
|
self.agents = AgentsApi(self.client)
|
|
19
|
-
self.workflows = WorkflowsApi(self.
|
|
18
|
+
self.workflows = WorkflowsApi(self.client)
|
|
20
19
|
self.triggers = TriggersApi(self.client)
|
|
21
20
|
self.sessions = SessionsApi(self.client)
|
|
22
21
|
self.credentials = CredentialsApi(self.client)
|
|
@@ -28,5 +27,3 @@ class PersonaSdk:
|
|
|
28
27
|
|
|
29
28
|
async def close(self):
|
|
30
29
|
await self.client.close()
|
|
31
|
-
if self.workflows_client is not self.client:
|
|
32
|
-
await self.workflows_client.close()
|
|
@@ -5,7 +5,7 @@ class AgentsApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -5,7 +5,7 @@ class FeaturesApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -5,7 +5,7 @@ class KnowledgeBasesApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -23,7 +23,7 @@ class KnowledgeBasesApi:
|
|
|
23
23
|
async def delete(self, knowledge_base_id: str) -> dict:
|
|
24
24
|
return await self._client.delete(f"/knowledges/{knowledge_base_id}")
|
|
25
25
|
|
|
26
|
-
async def list_documents(self, knowledge_base_id: str, page: int =
|
|
26
|
+
async def list_documents(self, knowledge_base_id: str, page: int = 0, size: int = 20) -> dict:
|
|
27
27
|
params = {"page": page, "size": size}
|
|
28
28
|
return await self._client.get(f"/knowledges/{knowledge_base_id}/documents", params=params)
|
|
29
29
|
|
|
@@ -5,7 +5,7 @@ class MissionsApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, status: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, status: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -5,7 +5,7 @@ class ProjectsApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -5,7 +5,7 @@ class ServicePricesApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -11,7 +11,7 @@ class SessionsApi:
|
|
|
11
11
|
status: str = None,
|
|
12
12
|
agent_id: str = None,
|
|
13
13
|
user_id: str = None,
|
|
14
|
-
page: int =
|
|
14
|
+
page: int = 0,
|
|
15
15
|
size: int = 20,
|
|
16
16
|
) -> dict:
|
|
17
17
|
params = {"page": page, "size": size}
|
|
@@ -34,7 +34,7 @@ class SessionsApi:
|
|
|
34
34
|
async def generate_message(self, code: str, request: dict) -> dict:
|
|
35
35
|
return await self._client.post(f"/sessions/{code}/messages", json=request)
|
|
36
36
|
|
|
37
|
-
async def get_messages(self, code: str, page: int =
|
|
37
|
+
async def get_messages(self, code: str, page: int = 0, size: int = 20) -> dict:
|
|
38
38
|
params = {"page": page, "size": size}
|
|
39
39
|
return await self._client.get(f"/sessions/{code}/messages", params=params)
|
|
40
40
|
|
|
@@ -5,7 +5,7 @@ class TriggersApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -26,7 +26,7 @@ class TriggersApi:
|
|
|
26
26
|
async def execute(self, trigger_id: str) -> dict:
|
|
27
27
|
return await self._client.post(f"/triggers/{trigger_id}/executions")
|
|
28
28
|
|
|
29
|
-
async def list_executions(self, trigger_id: str, page: int =
|
|
29
|
+
async def list_executions(self, trigger_id: str, page: int = 0, size: int = 20) -> dict:
|
|
30
30
|
params = {"page": page, "size": size}
|
|
31
31
|
return await self._client.get(f"/triggers/{trigger_id}/executions", params=params)
|
|
32
32
|
|
|
@@ -5,7 +5,7 @@ class WorkflowsApi:
|
|
|
5
5
|
def __init__(self, client: PersonaClient):
|
|
6
6
|
self._client = client
|
|
7
7
|
|
|
8
|
-
async def list(self, keyword: str = None, page: int =
|
|
8
|
+
async def list(self, keyword: str = None, page: int = 0, size: int = 20) -> dict:
|
|
9
9
|
params = {"page": page, "size": size}
|
|
10
10
|
if keyword:
|
|
11
11
|
params["keyword"] = keyword
|
|
@@ -29,6 +29,6 @@ class WorkflowsApi:
|
|
|
29
29
|
async def queue(self, workflow_id: str, data: dict = None) -> dict:
|
|
30
30
|
return await self._client.post(f"/workflows/{workflow_id}/queue", json=data or {})
|
|
31
31
|
|
|
32
|
-
async def list_executions(self, workflow_id: str, page: int =
|
|
32
|
+
async def list_executions(self, workflow_id: str, page: int = 0, size: int = 20) -> dict:
|
|
33
33
|
params = {"page": page, "size": size}
|
|
34
34
|
return await self._client.get(f"/workflows/{workflow_id}/executions", params=params)
|
|
@@ -12,13 +12,14 @@ class PersonaClient:
|
|
|
12
12
|
JWT tokens are automatically detected and validated by the server.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
def __init__(self, base_url: str, api_key: str):
|
|
15
|
+
def __init__(self, base_url: str, api_key: str, proxy: str = None):
|
|
16
16
|
self.base_url = base_url.rstrip("/")
|
|
17
17
|
self.api_key = api_key
|
|
18
18
|
self._client = httpx.AsyncClient(
|
|
19
19
|
base_url=self.base_url,
|
|
20
20
|
headers={"x-persona-apikey": self.api_key},
|
|
21
21
|
timeout=30.0,
|
|
22
|
+
proxy=proxy,
|
|
22
23
|
)
|
|
23
24
|
|
|
24
25
|
async def get(self, path: str, params: dict = None) -> dict:
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "persona-sdk-python"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.1"
|
|
4
4
|
description = "Python SDK client for Persona AI platform"
|
|
5
5
|
requires-python = ">=3.10"
|
|
6
6
|
dependencies = [
|
|
7
|
-
"persona-models
|
|
7
|
+
"persona-models",
|
|
8
8
|
"httpx>=0.27.0",
|
|
9
9
|
]
|
|
10
10
|
|
|
11
|
+
[tool.uv.sources]
|
|
12
|
+
persona-models = { path = "../persona-models" }
|
|
13
|
+
|
|
11
14
|
[build-system]
|
|
12
15
|
requires = ["hatchling"]
|
|
13
16
|
build-backend = "hatchling.build"
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
# Persona Python SDK
|
|
2
|
-
|
|
3
|
-
Python SDK client for the Persona AI platform.
|
|
4
|
-
|
|
5
|
-
## Installation & Setup
|
|
6
|
-
|
|
7
|
-
```python
|
|
8
|
-
# Requirements: Python >= 3.10, httpx>=0.27.0, persona-models
|
|
9
|
-
from persona_sdk import PersonaSdk
|
|
10
|
-
|
|
11
|
-
sdk = PersonaSdk(
|
|
12
|
-
base_url="http://localhost:8000",
|
|
13
|
-
api_key="<api-key-or-jwt-token>",
|
|
14
|
-
workflows_url="http://...", # optional, defaults to base_url
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
# Always close the client when done
|
|
18
|
-
await sdk.close()
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
All methods are **async**. The SDK exposes: `sdk.agents`, `sdk.sessions`, `sdk.workflows`, `sdk.knowledge_bases`, `sdk.triggers`, `sdk.credentials`, `sdk.projects`, `sdk.features`, `sdk.missions`, `sdk.service_prices`.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Sending Messages to an Agent — `AgentRunner`
|
|
26
|
-
|
|
27
|
-
```python
|
|
28
|
-
from persona_sdk.runners import AgentRunner
|
|
29
|
-
|
|
30
|
-
async with AgentRunner(
|
|
31
|
-
client=sdk.client,
|
|
32
|
-
agent_id="my-agent",
|
|
33
|
-
session_code="session-123", # optional, auto-generated if omitted
|
|
34
|
-
parent_session_id=None, # optional
|
|
35
|
-
user_id="user-456", # optional
|
|
36
|
-
session_type="async", # "async" | "realtime"
|
|
37
|
-
) as runner:
|
|
38
|
-
|
|
39
|
-
# Plain string
|
|
40
|
-
response = await runner.run("Hello!")
|
|
41
|
-
|
|
42
|
-
# Structured Message object
|
|
43
|
-
from persona_models.sessions import Message
|
|
44
|
-
response = await runner.run(Message(role="user", text="Hello!"))
|
|
45
|
-
|
|
46
|
-
# List of messages
|
|
47
|
-
response = await runner.run([Message(...), Message(...)])
|
|
48
|
-
|
|
49
|
-
# Force structured JSON output (Pydantic schema)
|
|
50
|
-
from pydantic import BaseModel
|
|
51
|
-
class MyOutput(BaseModel):
|
|
52
|
-
answer: str
|
|
53
|
-
response = await runner.run("Tell me something", response_schema=MyOutput)
|
|
54
|
-
|
|
55
|
-
# With initial context (data + optional files)
|
|
56
|
-
from persona_models.sessions import AgentContext
|
|
57
|
-
response = await runner.run("Hello!", context=AgentContext(data={"user_name": "Alice"}))
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### `AgentResponse`
|
|
61
|
-
|
|
62
|
-
```python
|
|
63
|
-
response.text # str — concatenated text from all messages
|
|
64
|
-
response.messages # List[Message]
|
|
65
|
-
response.is_json() # bool
|
|
66
|
-
response.to_json() # dict | list | None
|
|
67
|
-
response.function_calls # List[FunctionCall]
|
|
68
|
-
response.first_function_call # FunctionCall | None
|
|
69
|
-
response.is_transfer() # bool — True if agent delegated to another agent
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### `Message` fields
|
|
73
|
-
|
|
74
|
-
| Field | Type | Notes |
|
|
75
|
-
|---|---|---|
|
|
76
|
-
| `id` | `str` | auto-generated UUID |
|
|
77
|
-
| `role` | `"user"`, `"assistant"`, `"function"`, `"tool"` | |
|
|
78
|
-
| `text` | `str \| None` | |
|
|
79
|
-
| `image` | `Image \| None` | base64-encoded |
|
|
80
|
-
| `file` | `File \| None` | name, url or base64, content_type |
|
|
81
|
-
| `function_calls` | `List[FunctionCall] \| None` | |
|
|
82
|
-
| `function_response` | `FunctionResponse \| None` | |
|
|
83
|
-
| `finish_reason` | `"stop"`, `"function_call"`, `None` | |
|
|
84
|
-
| `thought` | `bool` | True for reasoning/thought messages |
|
|
85
|
-
| `sources` | `list \| None` | RAG sources |
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Agent Schema — `AgentConfiguration`
|
|
90
|
-
|
|
91
|
-
Used when creating or updating agents via `sdk.agents.create(agent.model_dump(by_alias=True))`.
|
|
92
|
-
|
|
93
|
-
```python
|
|
94
|
-
from persona_models.agents import (
|
|
95
|
-
AgentConfiguration, ModelConfiguration, SynthesizerConfiguration,
|
|
96
|
-
TranscriberConfiguration, ToolkitConfiguration, Tool, ToolRemoteConfig,
|
|
97
|
-
KnowledgeConfiguration, CollaborationConfiguration,
|
|
98
|
-
WakeupConfiguration, TelegramConfiguration, WhatsAppConfiguration,
|
|
99
|
-
StmConfiguration, Variable, Collaborator,
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
agent = AgentConfiguration(
|
|
103
|
-
name="MyAgent",
|
|
104
|
-
description="An assistant agent",
|
|
105
|
-
model=ModelConfiguration(
|
|
106
|
-
model_name="gemini-2.0-flash", # see supported models below
|
|
107
|
-
temperature=1.0,
|
|
108
|
-
reasoning_effort=None, # "minimal"|"low"|"medium"|"high"|None
|
|
109
|
-
),
|
|
110
|
-
system_instructions="You are a helpful assistant.",
|
|
111
|
-
language_code="en-US", # "en-US"|"it-IT"|"es-ES"|"fr-FR"|"de-DE"|"pt-BR"
|
|
112
|
-
initial_message="Hello! How can I help?",
|
|
113
|
-
enabled_protocols=["rest", "websocket"], # "webrtc"|"twilio"|"rest"|"websocket"|"telegram"
|
|
114
|
-
variables=[Variable(name="company", value="Acme", description="Company name")],
|
|
115
|
-
|
|
116
|
-
# Voice synthesis (optional)
|
|
117
|
-
synthesizer=SynthesizerConfiguration(
|
|
118
|
-
enabled=True,
|
|
119
|
-
synthesizer_name="gcloud", # "gcloud"|"elevenlabs"|"gtts"|"openai"
|
|
120
|
-
language_code="en-US",
|
|
121
|
-
voice="en-US-Neural2-A",
|
|
122
|
-
sample_rate_hertz=24000,
|
|
123
|
-
),
|
|
124
|
-
|
|
125
|
-
# Speech transcription (optional)
|
|
126
|
-
transcriber=TranscriberConfiguration(
|
|
127
|
-
enabled=True,
|
|
128
|
-
transcriber_name="gcloud", # "gcloud"|"deepgram"
|
|
129
|
-
language_code="en-US",
|
|
130
|
-
),
|
|
131
|
-
|
|
132
|
-
# Tools (optional)
|
|
133
|
-
toolkit=ToolkitConfiguration(tools=[
|
|
134
|
-
Tool(
|
|
135
|
-
type="remote", # "remote"|"local"
|
|
136
|
-
name="my_tool",
|
|
137
|
-
description="Does something",
|
|
138
|
-
config=ToolRemoteConfig(service_url="https://...", secret="s3cr3t", timeout=60),
|
|
139
|
-
)
|
|
140
|
-
]),
|
|
141
|
-
|
|
142
|
-
# Knowledge base / RAG (optional)
|
|
143
|
-
knowledge=KnowledgeConfiguration(
|
|
144
|
-
enabled=True,
|
|
145
|
-
knowledge_type="simple", # "simple"|"multi_hop"
|
|
146
|
-
knowledge_base_id="kb-id",
|
|
147
|
-
namespace="my-namespace",
|
|
148
|
-
number_of_entries=3,
|
|
149
|
-
),
|
|
150
|
-
|
|
151
|
-
# Multi-agent collaboration (optional)
|
|
152
|
-
collaboration=CollaborationConfiguration(
|
|
153
|
-
enabled=True,
|
|
154
|
-
mode="delegate_and_return", # "persistent_transfer"|"delegate_and_return"|"consult_then_respond"
|
|
155
|
-
max_number_of_iterations=10,
|
|
156
|
-
collaborators=[Collaborator(agent_id="other-agent-id", scope="handle billing questions")],
|
|
157
|
-
),
|
|
158
|
-
|
|
159
|
-
# Short-term memory (optional)
|
|
160
|
-
short_term_memory=StmConfiguration(
|
|
161
|
-
type="summary", # "simple"|"summary"
|
|
162
|
-
max_messages=10,
|
|
163
|
-
max_number_of_words=50,
|
|
164
|
-
include_tool_calls=False,
|
|
165
|
-
),
|
|
166
|
-
|
|
167
|
-
verbose_errors=False,
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
result = await sdk.agents.create(agent.model_dump(by_alias=True))
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Supported `model_name` values
|
|
174
|
-
|
|
175
|
-
| Provider | Models |
|
|
176
|
-
|---|---|
|
|
177
|
-
| Google | `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite`, `gemini-2.0-flash`, `gemini-1.5-pro`, `gemini-1.5-flash`, … |
|
|
178
|
-
| OpenAI | `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-4o`, `gpt-4o-mini`, `o4-mini`, `o3-mini`, `o1`, `o1-mini`, … |
|
|
179
|
-
| Grok | `grok-4-0709`, `grok-3`, `grok-3-mini`, `grok-2-vision-1212`, … |
|
|
180
|
-
| Fireworks | `accounts/fireworks/models/deepseek-v3p2`, `accounts/fireworks/models/kimi-k2p5`, … |
|
|
181
|
-
| Other | `ollama` (requires `url` and `ollama_model_name` in `ModelConfiguration`) |
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## Agents API
|
|
186
|
-
|
|
187
|
-
```python
|
|
188
|
-
agents = await sdk.agents.list(keyword="chatbot", page=1, size=20)
|
|
189
|
-
agent = await sdk.agents.get("agent-id")
|
|
190
|
-
agent = await sdk.agents.create({...}) # AgentConfiguration.model_dump(by_alias=True)
|
|
191
|
-
agent = await sdk.agents.update("agent-id", {...})
|
|
192
|
-
await sdk.agents.delete("agent-id")
|
|
193
|
-
voices = await sdk.agents.get_voices("elevenlabs") # "gcloud"|"elevenlabs"|"gtts"|"openai"
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## Sessions API
|
|
199
|
-
|
|
200
|
-
```python
|
|
201
|
-
sessions = await sdk.sessions.list(keyword=None, status=None, agent_id=None, user_id=None, page=1, size=20)
|
|
202
|
-
session = await sdk.sessions.get("session-id")
|
|
203
|
-
usage = await sdk.sessions.get_usage("session-id")
|
|
204
|
-
messages = await sdk.sessions.get_messages("session-code", page=1, size=20)
|
|
205
|
-
result = await sdk.sessions.generate_message("session-code", request_dict)
|
|
206
|
-
await sdk.sessions.delete("session-code")
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## Workflows API
|
|
212
|
-
|
|
213
|
-
### `Workflow` schema
|
|
214
|
-
|
|
215
|
-
```python
|
|
216
|
-
from persona_models.workflows import Workflow, Node, Connection
|
|
217
|
-
|
|
218
|
-
workflow = Workflow(
|
|
219
|
-
name="My Workflow",
|
|
220
|
-
description="Does something useful",
|
|
221
|
-
nodes=[
|
|
222
|
-
Node(id="node-1", type="agent", label="Step 1", data={"agentId": "agent-id"}),
|
|
223
|
-
Node(id="node-2", type="agent", label="Step 2", data={"agentId": "agent-id-2"}),
|
|
224
|
-
],
|
|
225
|
-
connections=[
|
|
226
|
-
Connection(source_id="node-1", target_id="node-2"),
|
|
227
|
-
],
|
|
228
|
-
root_node=Node(id="node-0", type="trigger", label="Start"),
|
|
229
|
-
)
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
```python
|
|
233
|
-
workflows = await sdk.workflows.list(keyword=None, page=1, size=20)
|
|
234
|
-
wf = await sdk.workflows.get("wf-id")
|
|
235
|
-
wf = await sdk.workflows.create(workflow.model_dump(by_alias=True))
|
|
236
|
-
wf = await sdk.workflows.update("wf-id", {...})
|
|
237
|
-
await sdk.workflows.delete("wf-id")
|
|
238
|
-
|
|
239
|
-
# Synchronous execution — waits for result
|
|
240
|
-
result = await sdk.workflows.execute("wf-id", data={"input": "value"})
|
|
241
|
-
|
|
242
|
-
# Async execution — enqueues, returns immediately
|
|
243
|
-
result = await sdk.workflows.queue("wf-id", data={"input": "value"})
|
|
244
|
-
|
|
245
|
-
# Past executions
|
|
246
|
-
execs = await sdk.workflows.list_executions("wf-id", page=1, size=20)
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## Knowledge Bases API
|
|
252
|
-
|
|
253
|
-
### `KnowledgeBase` schema
|
|
254
|
-
|
|
255
|
-
```python
|
|
256
|
-
from persona_models.knowledge_bases import KnowledgeBase
|
|
257
|
-
|
|
258
|
-
kb = KnowledgeBase(
|
|
259
|
-
name="My KB",
|
|
260
|
-
description="Product documentation",
|
|
261
|
-
quality="high", # "extremely_high"|"very_high"|"high"|"medium"|"low"
|
|
262
|
-
chunk_size="medium", # "small"|"medium"|"large"
|
|
263
|
-
embedding_model="text-multilingual-embedding-002",
|
|
264
|
-
)
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
```python
|
|
268
|
-
kbs = await sdk.knowledge_bases.list()
|
|
269
|
-
kb = await sdk.knowledge_bases.get("kb-id")
|
|
270
|
-
kb = await sdk.knowledge_bases.create(kb.model_dump(by_alias=True))
|
|
271
|
-
kb = await sdk.knowledge_bases.update("kb-id", {...})
|
|
272
|
-
await sdk.knowledge_bases.delete("kb-id")
|
|
273
|
-
|
|
274
|
-
docs = await sdk.knowledge_bases.list_documents("kb-id", page=1, size=20)
|
|
275
|
-
await sdk.knowledge_bases.delete_document("kb-id", "doc-id")
|
|
276
|
-
|
|
277
|
-
# Semantic search
|
|
278
|
-
results = await sdk.knowledge_bases.search_chunks("kb-id", {
|
|
279
|
-
"query": "search text",
|
|
280
|
-
"topK": 5,
|
|
281
|
-
"threshold": 0.7, # optional, float 0-1
|
|
282
|
-
})
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## MCP Tools — `ToolInvoker`
|
|
288
|
-
|
|
289
|
-
```python
|
|
290
|
-
from persona_sdk.runners import ToolInvoker
|
|
291
|
-
from persona_models.mcp import McpTransport
|
|
292
|
-
|
|
293
|
-
result = await ToolInvoker.invoke(
|
|
294
|
-
client=sdk.client,
|
|
295
|
-
mcp_server_name="my-mcp-server",
|
|
296
|
-
transport=McpTransport(...),
|
|
297
|
-
tool_name="my_tool",
|
|
298
|
-
args={"param1": "value1"},
|
|
299
|
-
session_id="session-123", # optional
|
|
300
|
-
user_id="user-456", # optional
|
|
301
|
-
billing_disabled=False,
|
|
302
|
-
)
|
|
303
|
-
# returns ToolInvokeResponse
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## MCP Resources — `ResourceRetriever`
|
|
307
|
-
|
|
308
|
-
```python
|
|
309
|
-
from persona_sdk.runners import ResourceRetriever
|
|
310
|
-
|
|
311
|
-
content = await ResourceRetriever.retrieve(
|
|
312
|
-
client=sdk.client,
|
|
313
|
-
mcp_server_name="my-mcp-server",
|
|
314
|
-
transport=McpTransport(...),
|
|
315
|
-
uri="resource://...",
|
|
316
|
-
session_id="session-123",
|
|
317
|
-
)
|
|
318
|
-
# returns: str (text), dict {"content": ..., "content_type": ...} (blob), or None
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## Complete Example
|
|
324
|
-
|
|
325
|
-
```python
|
|
326
|
-
import asyncio
|
|
327
|
-
from persona_sdk import PersonaSdk
|
|
328
|
-
from persona_sdk.runners import AgentRunner
|
|
329
|
-
from persona_models.agents import AgentConfiguration, ModelConfiguration
|
|
330
|
-
|
|
331
|
-
async def main():
|
|
332
|
-
sdk = PersonaSdk(base_url="http://localhost:8000", api_key="my-key")
|
|
333
|
-
try:
|
|
334
|
-
# Create an agent
|
|
335
|
-
agent = AgentConfiguration(
|
|
336
|
-
name="Assistant",
|
|
337
|
-
model=ModelConfiguration(model_name="gemini-2.0-flash"),
|
|
338
|
-
system_instructions="You are a helpful assistant.",
|
|
339
|
-
)
|
|
340
|
-
created = await sdk.agents.create(agent.model_dump(by_alias=True))
|
|
341
|
-
agent_id = created["id"]
|
|
342
|
-
|
|
343
|
-
# Run a conversation
|
|
344
|
-
async with AgentRunner(sdk.client, agent_id=agent_id) as runner:
|
|
345
|
-
response = await runner.run("What is the capital of France?")
|
|
346
|
-
print(response.text)
|
|
347
|
-
finally:
|
|
348
|
-
await sdk.close()
|
|
349
|
-
|
|
350
|
-
asyncio.run(main())
|
|
351
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_sdk_python-0.1.0 → persona_sdk_python-0.1.1}/persona_sdk/runners/resource_retriever.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|