persona-sdk-python 0.2.19__tar.gz → 0.2.21__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.
Files changed (33) hide show
  1. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/PKG-INFO +1 -1
  2. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/__init__.py +11 -5
  3. persona_sdk_python-0.2.21/persona_sdk/api/markup_rules.py +50 -0
  4. persona_sdk_python-0.2.21/persona_sdk/api/providers.py +65 -0
  5. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/pyproject.toml +1 -1
  6. persona_sdk_python-0.2.19/persona_sdk/api/known_models.py +0 -49
  7. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/.gitignore +0 -0
  8. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/DEPLOY.md +0 -0
  9. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/README.md +0 -0
  10. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/bitbucket-pipelines.yml +0 -0
  11. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/_serde.py +0 -0
  12. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/__init__.py +0 -0
  13. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/agents.py +0 -0
  14. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/credentials.py +0 -0
  15. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/features.py +0 -0
  16. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/human_tasks.py +0 -0
  17. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/knowledge_bases.py +0 -0
  18. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/missions.py +0 -0
  19. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/projects.py +0 -0
  20. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/service_prices.py +0 -0
  21. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/sessions.py +0 -0
  22. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/triggers.py +0 -0
  23. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/api/workflows.py +0 -0
  24. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/auth/__init__.py +0 -0
  25. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/auth/api_key_auth.py +0 -0
  26. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/auth/base.py +0 -0
  27. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/auth/bearer_token_auth.py +0 -0
  28. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/client.py +0 -0
  29. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/runners/__init__.py +0 -0
  30. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/runners/agent_runner.py +0 -0
  31. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/runners/resource_retriever.py +0 -0
  32. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/persona_sdk/runners/tool_invoker.py +0 -0
  33. {persona_sdk_python-0.2.19 → persona_sdk_python-0.2.21}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: persona-sdk-python
3
- Version: 0.2.19
3
+ Version: 0.2.21
4
4
  Summary: Async Python SDK for the Persona AI platform
5
5
  Project-URL: Homepage, https://persona.applica.guru
6
6
  Project-URL: Repository, https://bitbucket.org/applicaguru/persona-sdk-python
@@ -3,10 +3,11 @@ from typing import Union
3
3
  from persona_sdk.api.agents import AgentsApi
4
4
  from persona_sdk.api.credentials import CredentialsApi
5
5
  from persona_sdk.api.features import FeaturesApi
6
- from persona_sdk.api.known_models import KnownModelsApi
7
6
  from persona_sdk.api.knowledge_bases import KnowledgeBasesApi
7
+ from persona_sdk.api.markup_rules import MarkupRulesApi
8
8
  from persona_sdk.api.missions import MissionsApi
9
9
  from persona_sdk.api.projects import ProjectsApi
10
+ from persona_sdk.api.providers import ProvidersApi
10
11
  from persona_sdk.api.service_prices import ServicePricesApi
11
12
  from persona_sdk.api.sessions import SessionsApi
12
13
  from persona_sdk.api.triggers import TriggersApi
@@ -31,10 +32,11 @@ from persona_models.knowledge_bases import (
31
32
  KnowledgeBaseDocument,
32
33
  SearchChunksRequest,
33
34
  )
34
- from persona_models.known_models import KnownModel
35
+ from persona_models.markup import MarkupRule
35
36
  from persona_models.mcp import GenerationRequest
36
37
  from persona_models.missions import CreateMissionRequest, Mission
37
38
  from persona_models.projects import Project
39
+ from persona_models.providers import Provider, ProviderModel
38
40
  from persona_models.service_prices import ServicePrice, UsageCost
39
41
  from persona_models.sessions import GenerationResponse, Message, Session
40
42
  from persona_models.triggers import Trigger, TriggerExecutionResult
@@ -49,10 +51,11 @@ __all__ = [
49
51
  "AgentsApi",
50
52
  "CredentialsApi",
51
53
  "FeaturesApi",
52
- "KnownModelsApi",
53
54
  "KnowledgeBasesApi",
55
+ "MarkupRulesApi",
54
56
  "MissionsApi",
55
57
  "ProjectsApi",
58
+ "ProvidersApi",
56
59
  "ServicePricesApi",
57
60
  "SessionsApi",
58
61
  "TriggersApi",
@@ -68,12 +71,14 @@ __all__ = [
68
71
  "KnowledgeBase",
69
72
  "KnowledgeBaseDocument",
70
73
  "SearchChunksRequest",
71
- "KnownModel",
72
74
  "GenerationRequest",
73
75
  "GenerationResponse",
74
76
  "CreateMissionRequest",
75
77
  "Mission",
76
78
  "Project",
79
+ "Provider",
80
+ "ProviderModel",
81
+ "MarkupRule",
77
82
  "ServicePrice",
78
83
  "UsageCost",
79
84
  "Message",
@@ -142,7 +147,8 @@ class PersonaSdk:
142
147
  self.features = FeaturesApi(self.client)
143
148
  self.missions = MissionsApi(self.client)
144
149
  self.service_prices = ServicePricesApi(self.client)
145
- self.known_models = KnownModelsApi(self.client)
150
+ self.providers = ProvidersApi(self.client)
151
+ self.markup_rules = MarkupRulesApi(self.client)
146
152
 
147
153
  async def close(self):
148
154
  await self.client.close()
@@ -0,0 +1,50 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from persona_models.common import Paginated
6
+ from persona_models.markup import MarkupRule
7
+
8
+ from persona_sdk._serde import dump_payload
9
+ from persona_sdk.client import PersonaClient
10
+
11
+
12
+ class MarkupRulesApi:
13
+ """Markup rules (super admin). Global or per-project."""
14
+
15
+ def __init__(self, client: PersonaClient):
16
+ self._client = client
17
+
18
+ async def list(
19
+ self,
20
+ project_id: str | None = None,
21
+ keyword: str | None = None,
22
+ page: int = 1,
23
+ size: int = 50,
24
+ ) -> Paginated[MarkupRule]:
25
+ params: dict[str, Any] = {"page": page, "size": size}
26
+ if project_id:
27
+ params["projectId"] = project_id
28
+ if keyword:
29
+ params["keyword"] = keyword
30
+ data = await self._client.get("/markup-rules", params=params)
31
+ return Paginated[MarkupRule].model_validate(data)
32
+
33
+ async def get(self, markup_rule_id: str) -> MarkupRule:
34
+ data = await self._client.get(f"/markup-rules/{markup_rule_id}")
35
+ return MarkupRule.model_validate(data)
36
+
37
+ async def create(self, markup_rule: MarkupRule | dict[str, Any]) -> MarkupRule:
38
+ data = await self._client.post("/markup-rules", json=dump_payload(markup_rule))
39
+ return MarkupRule.model_validate(data)
40
+
41
+ async def update(
42
+ self, markup_rule_id: str, markup_rule: MarkupRule | dict[str, Any]
43
+ ) -> MarkupRule:
44
+ data = await self._client.put(
45
+ f"/markup-rules/{markup_rule_id}", json=dump_payload(markup_rule)
46
+ )
47
+ return MarkupRule.model_validate(data)
48
+
49
+ async def delete(self, markup_rule_id: str) -> None:
50
+ await self._client.delete(f"/markup-rules/{markup_rule_id}")
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from persona_models.common import Paginated
6
+ from persona_models.providers import Provider, ProviderModel
7
+
8
+ from persona_sdk._serde import dump_payload
9
+ from persona_sdk.client import PersonaClient
10
+
11
+
12
+ class ProvidersApi:
13
+ """Managed LLM providers (super admin). Global or per-project; api keys are
14
+ stored encrypted and returned masked."""
15
+
16
+ def __init__(self, client: PersonaClient):
17
+ self._client = client
18
+
19
+ async def list(
20
+ self,
21
+ project_id: str | None = None,
22
+ keyword: str | None = None,
23
+ page: int = 1,
24
+ size: int = 100,
25
+ ) -> Paginated[Provider]:
26
+ params: dict[str, Any] = {"page": page, "size": size}
27
+ if project_id:
28
+ params["projectId"] = project_id
29
+ if keyword:
30
+ params["keyword"] = keyword
31
+ data = await self._client.get("/providers", params=params)
32
+ return Paginated[Provider].model_validate(data)
33
+
34
+ async def get(self, provider_id: str) -> Provider:
35
+ data = await self._client.get(f"/providers/{provider_id}")
36
+ return Provider.model_validate(data)
37
+
38
+ async def create(self, provider: Provider | dict[str, Any]) -> Provider:
39
+ data = await self._client.post("/providers", json=dump_payload(provider))
40
+ return Provider.model_validate(data)
41
+
42
+ async def update(
43
+ self, provider_id: str, provider: Provider | dict[str, Any]
44
+ ) -> Provider:
45
+ data = await self._client.put(
46
+ f"/providers/{provider_id}", json=dump_payload(provider)
47
+ )
48
+ return Provider.model_validate(data)
49
+
50
+ async def delete(self, provider_id: str) -> None:
51
+ await self._client.delete(f"/providers/{provider_id}")
52
+
53
+ async def available(self) -> list[str]:
54
+ """Provider names litellm supports (for the 'add provider' picker). Admin."""
55
+ return await self._client.get("/providers/available")
56
+
57
+ async def names(self) -> list[str]:
58
+ """Names of providers configured for the caller (global + their project),
59
+ no credentials. Authenticated (not admin) — for the model selector."""
60
+ return await self._client.get("/provider-names")
61
+
62
+ async def models(self, provider: str) -> list[ProviderModel]:
63
+ """Model suggestions (chat, with capabilities) for a provider, from litellm."""
64
+ data = await self._client.get("/provider-models", params={"provider": provider})
65
+ return [ProviderModel.model_validate(m) for m in data]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "persona-sdk-python"
3
- version = "0.2.19"
3
+ version = "0.2.21"
4
4
  description = "Async Python SDK for the Persona AI platform"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1,49 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Any
4
-
5
- from persona_models.common import Paginated
6
- from persona_models.known_models import KnownModel
7
-
8
- from persona_sdk._serde import dump_payload
9
- from persona_sdk.client import PersonaClient
10
-
11
-
12
- class KnownModelsApi:
13
- def __init__(self, client: PersonaClient):
14
- self._client = client
15
-
16
- async def list(
17
- self, keyword: str | None = None, page: int = 1, size: int = 100
18
- ) -> Paginated[KnownModel]:
19
- params: dict[str, Any] = {"page": page, "size": size}
20
- if keyword:
21
- params["keyword"] = keyword
22
- data = await self._client.get("/known-models", params=params)
23
- return Paginated[KnownModel].model_validate(data)
24
-
25
- async def get(self, known_model_id: str) -> KnownModel:
26
- data = await self._client.get(f"/known-models/{known_model_id}")
27
- return KnownModel.model_validate(data)
28
-
29
- async def create(
30
- self, known_model: KnownModel | dict[str, Any]
31
- ) -> KnownModel:
32
- data = await self._client.post(
33
- "/known-models", json=dump_payload(known_model)
34
- )
35
- return KnownModel.model_validate(data)
36
-
37
- async def update(
38
- self,
39
- known_model_id: str,
40
- known_model: KnownModel | dict[str, Any],
41
- ) -> KnownModel:
42
- data = await self._client.put(
43
- f"/known-models/{known_model_id}", json=dump_payload(known_model)
44
- )
45
- return KnownModel.model_validate(data)
46
-
47
- async def delete(self, known_model_id: str) -> KnownModel:
48
- data = await self._client.delete(f"/known-models/{known_model_id}")
49
- return KnownModel.model_validate(data)