modus-sdk 0.2.2__tar.gz → 0.3.0__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.
- modus_sdk-0.3.0/CHANGELOG.md +89 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/PKG-INFO +1 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/apps/modus_skill_chat/README.md +1 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/apps/modus_skill_chat/app.py +3 -3
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/__init__.py +21 -3
- modus_sdk-0.3.0/modus/_agent_run_request.py +22 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_chat.py +2 -3
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_deprecation.py +4 -3
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_generated/__init__.py +8 -4
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_generated/models.py +170 -155
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_generated/operations.py +31 -31
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_http.py +60 -2
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_pagination.py +21 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_version.py +2 -2
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/__init__.py +15 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/_client.py +0 -6
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/__init__.py +0 -3
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/context/custom_items.py +16 -4
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/scopes.py +16 -7
- modus_sdk-0.3.0/modus/management/resources/usage.py +142 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/workflows/interfaces.py +20 -7
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/workflows/workflows.py +17 -8
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/__init__.py +9 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/agents.py +1 -1
- modus_sdk-0.3.0/modus/management/types/scopes.py +5 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/skills.py +1 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/toolset.py +1 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/usage.py +11 -1
- modus_sdk-0.3.0/modus/management/types/workflows.py +5 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/modus/conversations.py +5 -5
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/scopes/scopes.py +4 -4
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/suggestions/suggestions.py +39 -25
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/workflows/runs.py +3 -1
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/workflows/workflows.py +4 -4
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/__init__.py +18 -1
- modus_sdk-0.3.0/modus/types/agents.py +23 -0
- modus_sdk-0.3.0/modus/types/conversations.py +43 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/pagination.py +3 -3
- modus_sdk-0.3.0/modus/types/scopes.py +25 -0
- modus_sdk-0.3.0/modus/types/skills.py +22 -0
- modus_sdk-0.3.0/modus/types/workflows.py +26 -0
- modus_sdk-0.2.2/CHANGELOG.md +0 -40
- modus_sdk-0.2.2/modus/management/resources/organization.py +0 -52
- modus_sdk-0.2.2/modus/management/resources/usage.py +0 -92
- modus_sdk-0.2.2/modus/types/agents.py +0 -17
- modus_sdk-0.2.2/modus/types/conversations.py +0 -30
- modus_sdk-0.2.2/modus/types/skills.py +0 -16
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/.gitignore +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/CONTRIBUTING.md +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/LICENSE +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/README.md +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/assets/modus-logo.png +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/assets/modus-logo.svg +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/apps/modus_skill_chat/.streamlit/config.toml +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/apps/modus_skill_chat/pyproject.toml +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/scripts/chat.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/scripts/manage_skill.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/scripts/modus_chat.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/examples/scripts/quickstart.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_auth.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_client.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_config.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_exceptions.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_openapi_invoke.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_query.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_retry.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_streaming.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/_validation.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/_access_config_write.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/context/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/context/_content_merge.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/context/context.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/context/items.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/_update_body.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/conversations.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/evaluations.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/memories.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/scopes/supervision.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/users.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/workflows/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/resources/workflows/_update_body.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/_guardrails_access.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/_serialize.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/agent_selection.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/context.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/conversations.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/evaluations.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/json_blob.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/memories.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/ownership.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/triggers.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/management/types/workflow.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/py.typed +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/connections/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/connections/connections.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/context/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/context/context.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/context/items.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/modus/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/modus/modus.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/scopes/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/scopes/conversations.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/suggestions/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/workflows/__init__.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/resources/workflows/workflow_actions.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/agent_runs.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/chat.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/compose.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/connections.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/context.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/context_accessors.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/context_compose.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/context_values.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/json_blob.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/runs.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/suggestions.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/tool_calls.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/modus/types/views.py +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/project.json +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/pyproject.toml +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/pyrightconfig.json +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/requirements.txt +0 -0
- {modus_sdk-0.2.2 → modus_sdk-0.3.0}/uv.lock +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
**Current release:** [`0.3.0`](https://pypi.org/project/modus-sdk/0.3.0/).
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## [0.3.0] — 2026-07-26
|
|
8
|
+
|
|
9
|
+
> Breaking surface vs `0.2.x` (pre-1.0 minor bump). See `distribution/docs/COMPATIBILITY.md`.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `mgmt.usage.list()` / `list_async()` gain an optional `user_email` filter (repeated query param).
|
|
14
|
+
- `mgmt.usage.list_users(since, until)` (sync + async) — distinct acting-user emails observed in the window.
|
|
15
|
+
|
|
16
|
+
### Deprecated
|
|
17
|
+
|
|
18
|
+
- **`Skill` / `Agent` type names** — use `Scope` / `Workflow` (and `ScopeStatus` / `WorkflowStatus`, `WorkflowType`, etc.). `Skill` and `Agent` remain as aliases.
|
|
19
|
+
- **`conversation_skill_id()`** — use `conversation_scope_id()`.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- SDK read types are now exported as `Scope` / `Workflow` backed by generated `ScopeDto` / `WorkflowDto`.
|
|
24
|
+
- Custom context create responses always expose `.uid` (same value as `contextItemId`).
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
|
|
28
|
+
- Dual list/deploy envelopes — responses use `scopes` / `workflows` and `scope` / `workflow` only (no `skills` / `agents` / `skill` / `agent` aliases).
|
|
29
|
+
- Public Python type aliases **`SkillDto` / `AgentDto`** — use `ScopeDto` / `WorkflowDto` (thin `Skill` / `Agent` aliases remain).
|
|
30
|
+
- Conversation `kind=skills` — use `kind=scopes` (`all` | `modus` | `scopes`).
|
|
31
|
+
- `ModusManagement.organization.delete()` — organization deletion is no longer
|
|
32
|
+
part of the public API / PAT surface (SPA-only).
|
|
33
|
+
- `GET /api/v1/users/member-groups` and `/org-members` no longer advertise `pageSize` /
|
|
34
|
+
`pageToken` query params or an always-`None` `next_page_token` response field (OpenAPI /
|
|
35
|
+
Management MCP surface — `ModusManagement.users.list_member_groups()` /
|
|
36
|
+
`list_org_members()` never exposed either). Both endpoints return the full org-bounded
|
|
37
|
+
roster; pagination was never honored server-side.
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- `examples/apps/modus_skill_chat/app.py` called the removed `client.skills` accessor
|
|
42
|
+
(raised `AttributeError`); switched to `client.scopes.chat()` / `chat_stream()`.
|
|
43
|
+
|
|
44
|
+
## [Unreleased]
|
|
45
|
+
|
|
46
|
+
## [0.2.3] — 2026-07-20
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- Streaming requests send `Accept: text/event-stream`; a non-SSE response (e.g. JSON polling body) raises `ModusError` instead of being silently treated as an empty stream.
|
|
51
|
+
- `runs.create()` / `create_modus()` / `create_scope()` / `resume()` always mint (or reuse) a `sessionId`, matching `chat_stream`'s existing behavior.
|
|
52
|
+
|
|
53
|
+
## [0.2.2] — 2026-07-20
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Streaming always sends `sessionId` (thread id or generated UUID) on agent-host runs.
|
|
58
|
+
- Optional `organization_id` / `MODUS_ORGANIZATION_ID` for stream bodies; agent-service accepts omitted org and uses the PAT principal.
|
|
59
|
+
- Default API/agent hosts are `*.getmodus.com` (no longer `*.modus.com`).
|
|
60
|
+
- `base_urls['agent-service']` drives the streaming agent-host client (parity with TypeScript).
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- Create responses expose `.uid` as an alias of `context_item_id`.
|
|
65
|
+
|
|
66
|
+
## [0.2.0] — 2026-07-20
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
|
|
70
|
+
- **`modus.Modus` / `AsyncModus`** — read and invoke: scopes, workflows, context, connections, Modus assistant chat, runs, suggestions.
|
|
71
|
+
- **`modus.management.ModusManagement` / `AsyncModusManagement`** — configure: CRUD, deploy, context creators, usage, org admin, scope evaluations.
|
|
72
|
+
- Canonical **`client.scopes` / `client.workflows`** (and management equivalents) against `/api/v1/scopes` and `/api/v1/workflows`.
|
|
73
|
+
- **`client.modus`** — org-wide Modus assistant (`chat`, `chat_stream`, `get_context`, `conversations`).
|
|
74
|
+
- **`client.suggestions`** — list approved suggested questions; record impression/click/dismiss events.
|
|
75
|
+
- **`client.workflows.runs.active()` / `active_by_session(...)`** — list or look up active conversation runs.
|
|
76
|
+
- **`mgmt.scopes.evaluations(scope_id)`** — evaluation config, manual trigger, run history.
|
|
77
|
+
- Bounded conversation windows via optional `message_limit` / `before_message_index` on `conversations(...).get()`.
|
|
78
|
+
- MCP **`get_context_data`** batch + ACL: `{ items: [{ itemId, field?, mode?, limit? }, …], sessionId? }` → `{ results: [...] }` (max 20; per-item partial failures).
|
|
79
|
+
- Cursor pagination, retries on 429/5xx, SSE streaming chat.
|
|
80
|
+
- Full public OpenAPI operation coverage (contract-tested).
|
|
81
|
+
|
|
82
|
+
### Changed
|
|
83
|
+
|
|
84
|
+
- Public surface uses **Scope** / **Workflow** vocabulary (types remain `Skill` / `Agent` where the API still uses those names).
|
|
85
|
+
- Scope-run helper: `client.workflows.runs.create_scope(scope_id, body)` (not `create_skill`).
|
|
86
|
+
|
|
87
|
+
### Removed
|
|
88
|
+
|
|
89
|
+
- Legacy **`client.skills` / `client.agents`** accessors (and management equivalents).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Modus Skill Chat (Streamlit)
|
|
2
2
|
|
|
3
|
-
Optional interactive demo: compare **streaming** (`client.
|
|
3
|
+
Optional interactive demo: compare **streaming** (`client.scopes.chat_stream()`) vs **buffered** (`client.scopes.chat()`) scope chat side by side.
|
|
4
4
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
@@ -80,7 +80,7 @@ def get_buffered_client() -> modus.Modus:
|
|
|
80
80
|
def load_active_skills() -> list[dict[str, Any]]:
|
|
81
81
|
client = get_list_client()
|
|
82
82
|
skills = []
|
|
83
|
-
for skill in client.
|
|
83
|
+
for skill in client.scopes.list().auto_paging_iter():
|
|
84
84
|
if skill.status == "active":
|
|
85
85
|
skills.append(
|
|
86
86
|
{
|
|
@@ -105,7 +105,7 @@ def _run_buffered_chat(
|
|
|
105
105
|
thread_id: str | None,
|
|
106
106
|
) -> ChatResult | BaseException:
|
|
107
107
|
try:
|
|
108
|
-
return get_buffered_client().
|
|
108
|
+
return get_buffered_client().scopes.chat(
|
|
109
109
|
skill_id,
|
|
110
110
|
message,
|
|
111
111
|
model=model,
|
|
@@ -178,7 +178,7 @@ def _handle_parallel_send(
|
|
|
178
178
|
stream_placeholder = st.empty()
|
|
179
179
|
accumulated = ""
|
|
180
180
|
try:
|
|
181
|
-
with get_stream_client().
|
|
181
|
+
with get_stream_client().scopes.chat_stream(
|
|
182
182
|
skill_id,
|
|
183
183
|
prompt,
|
|
184
184
|
model=model,
|
|
@@ -6,13 +6,13 @@ Quick start:
|
|
|
6
6
|
|
|
7
7
|
client = modus.Modus(api_key="modus_xxx")
|
|
8
8
|
|
|
9
|
-
for
|
|
10
|
-
print(
|
|
9
|
+
for scope in client.scopes.list():
|
|
10
|
+
print(scope.name, scope.status)
|
|
11
11
|
|
|
12
12
|
for item in client.context.items.list():
|
|
13
13
|
print(modus.context_item_label(item))
|
|
14
14
|
|
|
15
|
-
To create or configure
|
|
15
|
+
To create or configure scopes, use modus.management.ModusManagement.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
from importlib.metadata import PackageNotFoundError
|
|
@@ -53,6 +53,9 @@ from .types import (
|
|
|
53
53
|
ModusRunCreateRequest,
|
|
54
54
|
Page,
|
|
55
55
|
ResumeRunRequest,
|
|
56
|
+
Scope,
|
|
57
|
+
ScopeStatus,
|
|
58
|
+
ScopeVariation,
|
|
56
59
|
Skill,
|
|
57
60
|
SkillContextComposition,
|
|
58
61
|
SkillRunCreateRequest,
|
|
@@ -60,8 +63,14 @@ from .types import (
|
|
|
60
63
|
SuggestionEventSource,
|
|
61
64
|
SuggestionEventType,
|
|
62
65
|
SuggestionQuestion,
|
|
66
|
+
Workflow,
|
|
63
67
|
WorkflowActionRequest,
|
|
68
|
+
WorkflowStatus,
|
|
69
|
+
WorkflowType,
|
|
70
|
+
WorkflowVariation,
|
|
64
71
|
context_item_label,
|
|
72
|
+
conversation_scope_id,
|
|
73
|
+
conversation_skill_id,
|
|
65
74
|
is_verified,
|
|
66
75
|
link_title,
|
|
67
76
|
link_url,
|
|
@@ -128,6 +137,9 @@ __all__ = [
|
|
|
128
137
|
"RateLimitError",
|
|
129
138
|
"ResumeRunRequest",
|
|
130
139
|
"RunCancelledError",
|
|
140
|
+
"Scope",
|
|
141
|
+
"ScopeStatus",
|
|
142
|
+
"ScopeVariation",
|
|
131
143
|
"Skill",
|
|
132
144
|
"SkillContextComposition",
|
|
133
145
|
"SkillRunCreateRequest",
|
|
@@ -139,6 +151,12 @@ __all__ = [
|
|
|
139
151
|
"StreamTimeoutEvent",
|
|
140
152
|
"TokenEvent",
|
|
141
153
|
"UnprocessableError",
|
|
154
|
+
"Workflow",
|
|
142
155
|
"WorkflowActionRequest",
|
|
156
|
+
"WorkflowStatus",
|
|
157
|
+
"WorkflowType",
|
|
158
|
+
"WorkflowVariation",
|
|
159
|
+
"conversation_scope_id",
|
|
160
|
+
"conversation_skill_id",
|
|
143
161
|
"__version__",
|
|
144
162
|
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Shared agent-host run request helpers (chat_stream + runs.create*)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Mapping, Optional
|
|
6
|
+
from uuid import uuid4
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def resolve_agent_run_session_id(session_id: Optional[str] = None) -> str:
|
|
10
|
+
"""Mint or reuse a non-empty sessionId for agent-host runs."""
|
|
11
|
+
if isinstance(session_id, str) and session_id.strip():
|
|
12
|
+
return session_id.strip()
|
|
13
|
+
return str(uuid4())
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def with_agent_run_session_id(body: Mapping[str, Any]) -> dict[str, Any]:
|
|
17
|
+
"""Copy body and ensure sessionId is set (parity with chat_stream)."""
|
|
18
|
+
out: dict[str, Any] = dict(body)
|
|
19
|
+
out["sessionId"] = resolve_agent_run_session_id(
|
|
20
|
+
out.get("sessionId") if isinstance(out.get("sessionId"), str) else None
|
|
21
|
+
)
|
|
22
|
+
return out
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import uuid
|
|
6
5
|
from typing import Any, AsyncIterator, Dict, Iterator, List, Literal, Optional, Union
|
|
7
6
|
from urllib.parse import quote
|
|
8
7
|
|
|
8
|
+
from ._agent_run_request import resolve_agent_run_session_id
|
|
9
9
|
from ._exceptions import ModusError, RunCancelledError, StreamTimeoutError
|
|
10
10
|
from ._generated.models import SkillChatRequestDto, SkillChatResponseDto
|
|
11
11
|
from ._http import AsyncHttpClient, HttpClient
|
|
@@ -37,8 +37,7 @@ def _effective_thread_id(thread_id: Optional[str]) -> Optional[str]:
|
|
|
37
37
|
|
|
38
38
|
def _resolve_session_id(thread_id: Optional[str]) -> str:
|
|
39
39
|
"""Agent-host runs always require sessionId — reuse thread_id or mint a UUID."""
|
|
40
|
-
|
|
41
|
-
return tid if tid is not None else str(uuid.uuid4())
|
|
40
|
+
return resolve_agent_run_session_id(_effective_thread_id(thread_id))
|
|
42
41
|
|
|
43
42
|
|
|
44
43
|
def _chat_path(
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"""Shared deprecation warnings for public SDK surfaces.
|
|
2
2
|
|
|
3
3
|
Call :func:`warn_deprecated` at the start of any public method that still
|
|
4
|
-
invokes an OpenAPI operation marked ``deprecated: true``.
|
|
5
|
-
method working and
|
|
4
|
+
invokes an OpenAPI operation marked ``deprecated: true``. Soft deprecation is
|
|
5
|
+
optional — keep the method working and warn; remove it in a later **MAJOR**
|
|
6
|
+
when the operation leaves the public spec.
|
|
6
7
|
"""
|
|
7
8
|
|
|
8
9
|
from __future__ import annotations
|
|
@@ -23,7 +24,7 @@ def warn_deprecated(*, old: str, new: str, stacklevel: int = 2) -> None:
|
|
|
23
24
|
Passed to :func:`warnings.warn` (default 2 points at the caller).
|
|
24
25
|
"""
|
|
25
26
|
warnings.warn(
|
|
26
|
-
f"{old} is deprecated and
|
|
27
|
+
f"{old} is deprecated and may be removed in a future MAJOR release; use {new} instead.",
|
|
27
28
|
DeprecationWarning,
|
|
28
29
|
stacklevel=stacklevel,
|
|
29
30
|
)
|
|
@@ -10,7 +10,6 @@ from .models import (
|
|
|
10
10
|
AddAgentInterfaceDto,
|
|
11
11
|
AgentAccessConfigDto,
|
|
12
12
|
AgentDeployResponseDto,
|
|
13
|
-
AgentDto,
|
|
14
13
|
AgentGroupPermissionDto,
|
|
15
14
|
AgentInterfaceDto,
|
|
16
15
|
AgentInterfaceType,
|
|
@@ -94,6 +93,7 @@ from .models import (
|
|
|
94
93
|
ListSkillsResponseDto,
|
|
95
94
|
ListSuggestionQuestionsResponseDto,
|
|
96
95
|
ListUsageResponseDto,
|
|
96
|
+
ListUsageUsersResponseDto,
|
|
97
97
|
LookupContextItemDto,
|
|
98
98
|
LookupContextItemResponseDto,
|
|
99
99
|
LookupContextItemRowDto,
|
|
@@ -121,13 +121,13 @@ from .models import (
|
|
|
121
121
|
RunReasoningEffort,
|
|
122
122
|
RunSource,
|
|
123
123
|
Scope,
|
|
124
|
+
ScopeDto,
|
|
124
125
|
SearchMemoriesRequestDto,
|
|
125
126
|
SetSupervisionRequestDto,
|
|
126
127
|
SharedUserDto,
|
|
127
128
|
SharedUserPermission,
|
|
128
129
|
SkillChatRequestDto,
|
|
129
130
|
SkillChatResponseDto,
|
|
130
|
-
SkillDto,
|
|
131
131
|
SkillMcpInterfaceConfigDto,
|
|
132
132
|
SkillRunDto,
|
|
133
133
|
SkillVariationDto,
|
|
@@ -156,6 +156,7 @@ from .models import (
|
|
|
156
156
|
UpdateSkillDto,
|
|
157
157
|
UsageBucketDto,
|
|
158
158
|
UsageTotalsDto,
|
|
159
|
+
UsageUserDto,
|
|
159
160
|
UserContextDto,
|
|
160
161
|
UserFeedback,
|
|
161
162
|
Version,
|
|
@@ -163,6 +164,7 @@ from .models import (
|
|
|
163
164
|
Weekday,
|
|
164
165
|
WorkflowActionDto,
|
|
165
166
|
WorkflowActionSource,
|
|
167
|
+
WorkflowDto,
|
|
166
168
|
WorkflowEdgeDto,
|
|
167
169
|
WorkflowNodeDto,
|
|
168
170
|
WorkflowNodePositionDto,
|
|
@@ -180,7 +182,6 @@ __all__ = [
|
|
|
180
182
|
"AddAgentInterfaceDto",
|
|
181
183
|
"AgentAccessConfigDto",
|
|
182
184
|
"AgentDeployResponseDto",
|
|
183
|
-
"AgentDto",
|
|
184
185
|
"AgentGroupPermissionDto",
|
|
185
186
|
"AgentInterfaceDto",
|
|
186
187
|
"AgentInterfaceType",
|
|
@@ -264,6 +265,7 @@ __all__ = [
|
|
|
264
265
|
"ListSkillsResponseDto",
|
|
265
266
|
"ListSuggestionQuestionsResponseDto",
|
|
266
267
|
"ListUsageResponseDto",
|
|
268
|
+
"ListUsageUsersResponseDto",
|
|
267
269
|
"LookupContextItemDto",
|
|
268
270
|
"LookupContextItemResponseDto",
|
|
269
271
|
"LookupContextItemRowDto",
|
|
@@ -291,13 +293,13 @@ __all__ = [
|
|
|
291
293
|
"RunReasoningEffort",
|
|
292
294
|
"RunSource",
|
|
293
295
|
"Scope",
|
|
296
|
+
"ScopeDto",
|
|
294
297
|
"SearchMemoriesRequestDto",
|
|
295
298
|
"SetSupervisionRequestDto",
|
|
296
299
|
"SharedUserDto",
|
|
297
300
|
"SharedUserPermission",
|
|
298
301
|
"SkillChatRequestDto",
|
|
299
302
|
"SkillChatResponseDto",
|
|
300
|
-
"SkillDto",
|
|
301
303
|
"SkillMcpInterfaceConfigDto",
|
|
302
304
|
"SkillRunDto",
|
|
303
305
|
"SkillVariationDto",
|
|
@@ -326,6 +328,7 @@ __all__ = [
|
|
|
326
328
|
"UpdateSkillDto",
|
|
327
329
|
"UsageBucketDto",
|
|
328
330
|
"UsageTotalsDto",
|
|
331
|
+
"UsageUserDto",
|
|
329
332
|
"UserContextDto",
|
|
330
333
|
"UserFeedback",
|
|
331
334
|
"Version",
|
|
@@ -333,6 +336,7 @@ __all__ = [
|
|
|
333
336
|
"Weekday",
|
|
334
337
|
"WorkflowActionDto",
|
|
335
338
|
"WorkflowActionSource",
|
|
339
|
+
"WorkflowDto",
|
|
336
340
|
"WorkflowEdgeDto",
|
|
337
341
|
"WorkflowNodeDto",
|
|
338
342
|
"WorkflowNodePositionDto",
|