mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
feat: refactor node spec and add mcp tools (#244)
* refactor: carve out extraction panel * refactor: create spec versions for node types * refactor: create a GenericNode and remove custom nodes * feat: add python and typescript sdk * add dograh sdk * fix: fetch draft workflow definition over published one * fix: fix routes of SDKs to use code gen * chore: remove doclink dependency to reduce image size * chore: format files * chore: bump pipecat * feat: let mcp fetch archived workflows on demand * chore: fix tests * feat: add sdk documentation * chore: change banner and add badge
This commit is contained in:
parent
0a61ef295f
commit
00a1a22b74
162 changed files with 14355 additions and 3554 deletions
77
sdk/python/README.md
Normal file
77
sdk/python/README.md
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# dograh-sdk
|
||||
|
||||
Typed builder for Dograh voice-AI workflows. Fetches the node-spec catalog from
|
||||
the Dograh backend at session start, validates every call against it at the
|
||||
call site, and produces `ReactFlowDTO`-compatible JSON.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
pip install dograh-sdk
|
||||
```
|
||||
|
||||
For local development against a checked-out monorepo:
|
||||
|
||||
```bash
|
||||
pip install -e sdk/python/
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```python
|
||||
from dograh_sdk import DograhClient, Workflow
|
||||
|
||||
with DograhClient(base_url="http://localhost:8000", api_key="...") as client:
|
||||
wf = Workflow(client=client, name="loan_qualification")
|
||||
|
||||
start = wf.add(
|
||||
type="startCall",
|
||||
name="greeting",
|
||||
prompt="You are Sarah from Acme Loans. Greet the caller warmly.",
|
||||
greeting_type="text",
|
||||
greeting="Hi {{first_name}}, this is Sarah.",
|
||||
)
|
||||
qualify = wf.add(
|
||||
type="agentNode",
|
||||
name="qualify",
|
||||
prompt="Ask about loan amount and timeline.",
|
||||
)
|
||||
done = wf.add(type="endCall", name="done", prompt="Thank the caller.")
|
||||
|
||||
wf.edge(start, qualify, label="interested", condition="Caller expressed interest.")
|
||||
wf.edge(qualify, done, label="done", condition="Qualification complete.")
|
||||
|
||||
client.save_workflow(workflow_id=123, workflow=wf)
|
||||
```
|
||||
|
||||
## What gets validated at the call site
|
||||
|
||||
The SDK fetches the spec for each node type via `get_node_type` and raises
|
||||
`ValidationError` immediately when:
|
||||
|
||||
- an unknown field is passed (catches typos)
|
||||
- a required field is missing or empty
|
||||
- a scalar type is wrong (e.g., string for a boolean)
|
||||
- an `options` value isn't in the allowed list
|
||||
|
||||
When a spec carries an `llm_hint`, the hint is appended to the error message so
|
||||
an LLM agent can self-correct on retry:
|
||||
|
||||
```
|
||||
tool_uuids: expected tool_refs, got str
|
||||
Hint: List of tool UUIDs from `list_tools`.
|
||||
```
|
||||
|
||||
Server-side Pydantic validators run on save and surface anything the SDK lets
|
||||
through (compound invariants, cross-field rules).
|
||||
|
||||
## Environment
|
||||
|
||||
```bash
|
||||
DOGRAH_API_URL=http://localhost:8000 # default
|
||||
DOGRAH_API_KEY=sk-... # sent as X-API-Key
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
BSD 2-Clause — see `LICENSE`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue