jambonz-python-sdk 0.2.0__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.
Files changed (120) hide show
  1. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/.gitignore +0 -1
  2. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/PKG-INFO +5 -5
  3. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/README.md +4 -4
  4. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/pyproject.toml +1 -1
  5. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/client/api.py +4 -4
  6. jambonz_python_sdk-0.2.0/src/jambonz_sdk/schema/callbacks/pipeline-turn.schema.json → jambonz_python_sdk-0.3.0/src/jambonz_sdk/schema/callbacks/agent-turn.schema.json +4 -4
  7. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer.schema.json +18 -3
  8. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/jambonz-app.schema.json +1 -1
  9. jambonz_python_sdk-0.2.0/src/jambonz_sdk/schema/verbs/pipeline.schema.json → jambonz_python_sdk-0.3.0/src/jambonz_sdk/schema/verbs/agent.schema.json +15 -15
  10. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/types/__init__.py +2 -2
  11. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/types/verbs.py +4 -4
  12. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/verb_builder.pyi +174 -332
  13. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/verb_registry.py +3 -3
  14. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/session.py +5 -5
  15. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/__init__.py +0 -0
  16. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/_signature.py +0 -0
  17. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/client/__init__.py +0 -0
  18. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/amd.schema.json +0 -0
  19. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/base.schema.json +0 -0
  20. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/call-status.schema.json +0 -0
  21. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/conference-status.schema.json +0 -0
  22. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/conference-wait.schema.json +0 -0
  23. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/conference.schema.json +0 -0
  24. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/dequeue.schema.json +0 -0
  25. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/dial-dtmf.schema.json +0 -0
  26. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/dial-hold.schema.json +0 -0
  27. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/dial-refer.schema.json +0 -0
  28. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/dial.schema.json +0 -0
  29. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/enqueue-wait.schema.json +0 -0
  30. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/enqueue.schema.json +0 -0
  31. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/gather-partial.schema.json +0 -0
  32. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/gather.schema.json +0 -0
  33. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/listen.schema.json +0 -0
  34. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/llm.schema.json +0 -0
  35. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/message.schema.json +0 -0
  36. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/play.schema.json +0 -0
  37. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/session-new.schema.json +0 -0
  38. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/session-reconnect.schema.json +0 -0
  39. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/session-redirect.schema.json +0 -0
  40. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/sip-refer-event.schema.json +0 -0
  41. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/sip-refer.schema.json +0 -0
  42. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/sip-request.schema.json +0 -0
  43. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/transcribe-translation.schema.json +0 -0
  44. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/transcribe.schema.json +0 -0
  45. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/tts-streaming-event.schema.json +0 -0
  46. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/callbacks/verb-status.schema.json +0 -0
  47. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/actionHook.schema.json +0 -0
  48. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/actionHookDelayAction.schema.json +0 -0
  49. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/amd.schema.json +0 -0
  50. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/auth.schema.json +0 -0
  51. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/bidirectionalAudio.schema.json +0 -0
  52. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/fillerNoise.schema.json +0 -0
  53. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/llm-base.schema.json +0 -0
  54. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-assemblyAiOptions.schema.json +0 -0
  55. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-awsOptions.schema.json +0 -0
  56. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-azureOptions.schema.json +0 -0
  57. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-cobaltOptions.schema.json +0 -0
  58. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-customOptions.schema.json +0 -0
  59. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-deepgramOptions.schema.json +0 -0
  60. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-elevenlabsOptions.schema.json +0 -0
  61. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-gladiaOptions.schema.json +0 -0
  62. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-googleOptions.schema.json +0 -0
  63. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-houndifyOptions.schema.json +0 -0
  64. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-ibmOptions.schema.json +0 -0
  65. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-nuanceOptions.schema.json +0 -0
  66. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-nvidiaOptions.schema.json +0 -0
  67. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-openaiOptions.schema.json +0 -0
  68. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-sonioxOptions.schema.json +0 -0
  69. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-speechmaticsOptions.schema.json +0 -0
  70. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/recognizer-verbioOptions.schema.json +0 -0
  71. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/synthesizer.schema.json +0 -0
  72. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/target.schema.json +0 -0
  73. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/components/vad.schema.json +0 -0
  74. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/alert.schema.json +0 -0
  75. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/answer.schema.json +0 -0
  76. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/conference.schema.json +0 -0
  77. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/config.schema.json +0 -0
  78. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/deepgram_s2s.schema.json +0 -0
  79. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/dequeue.schema.json +0 -0
  80. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/dial.schema.json +0 -0
  81. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/dialogflow.schema.json +0 -0
  82. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/dtmf.schema.json +0 -0
  83. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/dub.schema.json +0 -0
  84. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/elevenlabs_s2s.schema.json +0 -0
  85. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/enqueue.schema.json +0 -0
  86. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/gather.schema.json +0 -0
  87. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/google_s2s.schema.json +0 -0
  88. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/hangup.schema.json +0 -0
  89. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/leave.schema.json +0 -0
  90. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/listen.schema.json +0 -0
  91. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/llm.schema.json +0 -0
  92. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/message.schema.json +0 -0
  93. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/openai_s2s.schema.json +0 -0
  94. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/pause.schema.json +0 -0
  95. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/play.schema.json +0 -0
  96. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/redirect.schema.json +0 -0
  97. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/rest_dial.schema.json +0 -0
  98. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/s2s.schema.json +0 -0
  99. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/say.schema.json +0 -0
  100. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/sip-decline.schema.json +0 -0
  101. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/sip-refer.schema.json +0 -0
  102. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/sip-request.schema.json +0 -0
  103. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/stream.schema.json +0 -0
  104. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/tag.schema.json +0 -0
  105. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/transcribe.schema.json +0 -0
  106. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/schema/verbs/ultravox_s2s.schema.json +0 -0
  107. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/types/components.py +0 -0
  108. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/types/rest.py +0 -0
  109. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/types/session.py +0 -0
  110. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/validator.py +0 -0
  111. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/verb_builder.py +0 -0
  112. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/webhook/__init__.py +0 -0
  113. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/webhook/middleware.py +0 -0
  114. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/webhook/response.py +0 -0
  115. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/__init__.py +0 -0
  116. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/audio_client.py +0 -0
  117. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/audio_stream.py +0 -0
  118. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/client.py +0 -0
  119. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/endpoint.py +0 -0
  120. {jambonz_python_sdk-0.2.0 → jambonz_python_sdk-0.3.0}/src/jambonz_sdk/websocket/router.py +0 -0
@@ -12,5 +12,4 @@ build/
12
12
  htmlcov/
13
13
  .coverage
14
14
  *.egg
15
- mcp.json
16
15
  .vscode/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jambonz-python-sdk
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Python SDK for jambonz CPaaS platform
5
5
  Project-URL: Homepage, https://github.com/jambonz/jambonz-python-sdk
6
6
  Project-URL: Repository, https://github.com/jambonz/jambonz-python-sdk
@@ -106,7 +106,7 @@ async with JambonzClient(
106
106
 
107
107
  ### Spec-driven verb generation
108
108
 
109
- The SDK does **not** hardcode verb method signatures. Instead, verb methods (`.say()`, `.gather()`, `.dial()`, `.pipeline()`, etc.) are **auto-generated at import time** from [JSON Schema](https://github.com/jambonz/schema) files — the same schemas used by the Node.js SDK and the jambonz server.
109
+ The SDK does **not** hardcode verb method signatures. Instead, verb methods (`.say()`, `.gather()`, `.dial()`, `.agent()`, etc.) are **auto-generated at import time** from [JSON Schema](https://github.com/jambonz/schema) files — the same schemas used by the Node.js SDK and the jambonz server.
110
110
 
111
111
  **What this means:**
112
112
 
@@ -132,7 +132,7 @@ VerbDef("new_verb", "new_verb", doc="Description.")
132
132
 
133
133
  ## Features
134
134
 
135
- - **All 31 jambonz verbs**: say, play, gather, dial, conference, enqueue/dequeue, hangup, pause, redirect, config, tag, dtmf, dub, message, alert, answer, leave, listen/stream, transcribe, openai_s2s, google_s2s, deepgram_s2s, elevenlabs_s2s, ultravox_s2s, s2s, llm, dialogflow, pipeline, sip_decline, sip_request, sip_refer
135
+ - **All 31 jambonz verbs**: say, play, gather, dial, conference, enqueue/dequeue, hangup, pause, redirect, config, tag, dtmf, dub, message, alert, answer, leave, listen/stream, transcribe, openai_s2s, google_s2s, deepgram_s2s, elevenlabs_s2s, ultravox_s2s, s2s, llm, dialogflow, agent, sip_decline, sip_request, sip_refer
136
136
  - **Fluent chainable API**: `.say(...).gather(...).hangup()`
137
137
  - **Webhook transport**: `WebhookResponse` for HTTP apps (works with aiohttp, FastAPI, Flask, etc.)
138
138
  - **WebSocket transport**: `create_endpoint` with `Session`, event handling, `send()`/`reply()`
@@ -140,7 +140,7 @@ VerbDef("new_verb", "new_verb", doc="Description.")
140
140
  - **Audio streaming**: Bidirectional audio via `AudioStream`
141
141
  - **Mid-call control**: inject commands (mute, whisper, record, DTMF, tag)
142
142
  - **TTS token streaming**: `send_tts_tokens()` / `flush_tts_tokens()`
143
- - **Pipeline updates**: `update_pipeline()` for mid-conversation LLM changes
143
+ - **Agent updates**: `update_agent()` for mid-conversation LLM changes
144
144
  - **Signature verification**: HMAC-SHA256 webhook signature validation
145
145
  - **Env vars**: Portal discovery via OPTIONS + runtime reading
146
146
 
@@ -153,7 +153,7 @@ See the [`examples/`](examples/) directory:
153
153
  | hello-world | [webhook](examples/hello-world/webhook_app.py) | [websocket](examples/hello-world/websocket_app.py) | Minimal greeting |
154
154
  | echo | [webhook](examples/echo/webhook_app.py) | [websocket](examples/echo/websocket_app.py) | Speech echo with gather |
155
155
  | ivr-menu | [webhook](examples/ivr-menu/webhook_app.py) | — | IVR menu with speech + DTMF |
156
- | voice-agent | [webhook](examples/voice-agent/webhook_app.py) | [websocket](examples/voice-agent/websocket_app.py) | LLM pipeline with tool calls |
156
+ | voice-agent | [webhook](examples/voice-agent/webhook_app.py) | [websocket](examples/voice-agent/websocket_app.py) | LLM agent with tool calls |
157
157
  | dial | [webhook](examples/dial/webhook_app.py) | — | Outbound dial with fallback |
158
158
  | listen-record | [webhook](examples/listen-record/webhook_app.py) | [websocket](examples/listen-record/websocket_app.py) | Audio recording |
159
159
 
@@ -72,7 +72,7 @@ async with JambonzClient(
72
72
 
73
73
  ### Spec-driven verb generation
74
74
 
75
- The SDK does **not** hardcode verb method signatures. Instead, verb methods (`.say()`, `.gather()`, `.dial()`, `.pipeline()`, etc.) are **auto-generated at import time** from [JSON Schema](https://github.com/jambonz/schema) files — the same schemas used by the Node.js SDK and the jambonz server.
75
+ The SDK does **not** hardcode verb method signatures. Instead, verb methods (`.say()`, `.gather()`, `.dial()`, `.agent()`, etc.) are **auto-generated at import time** from [JSON Schema](https://github.com/jambonz/schema) files — the same schemas used by the Node.js SDK and the jambonz server.
76
76
 
77
77
  **What this means:**
78
78
 
@@ -98,7 +98,7 @@ VerbDef("new_verb", "new_verb", doc="Description.")
98
98
 
99
99
  ## Features
100
100
 
101
- - **All 31 jambonz verbs**: say, play, gather, dial, conference, enqueue/dequeue, hangup, pause, redirect, config, tag, dtmf, dub, message, alert, answer, leave, listen/stream, transcribe, openai_s2s, google_s2s, deepgram_s2s, elevenlabs_s2s, ultravox_s2s, s2s, llm, dialogflow, pipeline, sip_decline, sip_request, sip_refer
101
+ - **All 31 jambonz verbs**: say, play, gather, dial, conference, enqueue/dequeue, hangup, pause, redirect, config, tag, dtmf, dub, message, alert, answer, leave, listen/stream, transcribe, openai_s2s, google_s2s, deepgram_s2s, elevenlabs_s2s, ultravox_s2s, s2s, llm, dialogflow, agent, sip_decline, sip_request, sip_refer
102
102
  - **Fluent chainable API**: `.say(...).gather(...).hangup()`
103
103
  - **Webhook transport**: `WebhookResponse` for HTTP apps (works with aiohttp, FastAPI, Flask, etc.)
104
104
  - **WebSocket transport**: `create_endpoint` with `Session`, event handling, `send()`/`reply()`
@@ -106,7 +106,7 @@ VerbDef("new_verb", "new_verb", doc="Description.")
106
106
  - **Audio streaming**: Bidirectional audio via `AudioStream`
107
107
  - **Mid-call control**: inject commands (mute, whisper, record, DTMF, tag)
108
108
  - **TTS token streaming**: `send_tts_tokens()` / `flush_tts_tokens()`
109
- - **Pipeline updates**: `update_pipeline()` for mid-conversation LLM changes
109
+ - **Agent updates**: `update_agent()` for mid-conversation LLM changes
110
110
  - **Signature verification**: HMAC-SHA256 webhook signature validation
111
111
  - **Env vars**: Portal discovery via OPTIONS + runtime reading
112
112
 
@@ -119,7 +119,7 @@ See the [`examples/`](examples/) directory:
119
119
  | hello-world | [webhook](examples/hello-world/webhook_app.py) | [websocket](examples/hello-world/websocket_app.py) | Minimal greeting |
120
120
  | echo | [webhook](examples/echo/webhook_app.py) | [websocket](examples/echo/websocket_app.py) | Speech echo with gather |
121
121
  | ivr-menu | [webhook](examples/ivr-menu/webhook_app.py) | — | IVR menu with speech + DTMF |
122
- | voice-agent | [webhook](examples/voice-agent/webhook_app.py) | [websocket](examples/voice-agent/websocket_app.py) | LLM pipeline with tool calls |
122
+ | voice-agent | [webhook](examples/voice-agent/webhook_app.py) | [websocket](examples/voice-agent/websocket_app.py) | LLM agent with tool calls |
123
123
  | dial | [webhook](examples/dial/webhook_app.py) | — | Outbound dial with fallback |
124
124
  | listen-record | [webhook](examples/listen-record/webhook_app.py) | [websocket](examples/listen-record/websocket_app.py) | Audio recording |
125
125
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "jambonz-python-sdk"
7
- version = "0.2.0"
7
+ version = "0.3.0"
8
8
  description = "Python SDK for jambonz CPaaS platform"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -100,16 +100,16 @@ class CallsResource(_Resource):
100
100
  """
101
101
  return await self.update(call_sid, {"mute_status": status})
102
102
 
103
- async def update_pipeline(
103
+ async def update_agent(
104
104
  self, call_sid: str, data: dict[str, Any]
105
105
  ) -> dict[str, Any]:
106
- """Send a mid-conversation pipeline update.
106
+ """Send a mid-conversation agent update.
107
107
 
108
108
  Args:
109
109
  call_sid: The call to update.
110
- data: Pipeline update payload.
110
+ data: Agent update payload.
111
111
  """
112
- return await self.update(call_sid, {"pipeline_update": data})
112
+ return await self.update(call_sid, {"agent_update": data})
113
113
 
114
114
  async def noise_isolation(
115
115
  self, call_sid: str, status: str, opts: dict[str, Any] | None = None
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://jambonz.org/schema/callbacks/pipeline-turn",
4
- "title": "Pipeline EventHook Events",
5
- "description": "Events sent to the pipeline verb's eventHook during a conversation. These are sent as 'pipeline:event' messages over the WebSocket connection.",
3
+ "$id": "https://jambonz.org/schema/callbacks/agent-turn",
4
+ "title": "Agent EventHook Events",
5
+ "description": "Events sent to the agent verb's eventHook during a conversation. These are sent as 'agent:event' messages over the WebSocket connection.",
6
6
  "type": "object",
7
7
  "oneOf": [
8
8
  {
@@ -84,7 +84,7 @@
84
84
  {
85
85
  "properties": {
86
86
  "type": {
87
- "const": "agent_response",
87
+ "const": "llm_response",
88
88
  "description": "Sent when the LLM has finished generating its response for the current turn. Contains the complete response text."
89
89
  },
90
90
  "response": {
@@ -41,9 +41,24 @@
41
41
  },
42
42
  "hints": {
43
43
  "type": "array",
44
- "items": { "type": "string" },
45
- "description": "An array of words or phrases that the recognizer should favor. Use this to improve accuracy for domain-specific terminology, product names, or proper nouns.",
46
- "examples": [["jambonz", "drachtio", "SIP", "WebRTC"]]
44
+ "items": {
45
+ "oneOf": [
46
+ { "type": "string" },
47
+ {
48
+ "type": "object",
49
+ "properties": {
50
+ "phrase": { "type": "string" },
51
+ "boost": { "type": "number" }
52
+ },
53
+ "required": ["phrase"]
54
+ }
55
+ ]
56
+ },
57
+ "description": "An array of words or phrases that the recognizer should favor. Each item can be a plain string or an object with 'phrase' and optional 'boost' properties.",
58
+ "examples": [
59
+ ["jambonz", "drachtio", "SIP", "WebRTC"],
60
+ [{"phrase": "jambonz", "boost": 20}, {"phrase": "drachtio", "boost": 10}]
61
+ ]
47
62
  },
48
63
  "hintsBoost": {
49
64
  "type": "number",
@@ -28,7 +28,7 @@
28
28
  { "$ref": "verbs/deepgram_s2s" },
29
29
  { "$ref": "verbs/ultravox_s2s" },
30
30
  { "$ref": "verbs/dialogflow" },
31
- { "$ref": "verbs/pipeline" },
31
+ { "$ref": "verbs/agent" },
32
32
  { "$ref": "verbs/conference" },
33
33
  { "$ref": "verbs/transcribe" },
34
34
  { "$ref": "verbs/enqueue" },
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://jambonz.org/schema/verbs/pipeline",
3
+ "$id": "https://jambonz.org/schema/verbs/agent",
4
4
  "minVersion": "10.1.0",
5
- "title": "Pipeline",
6
- "description": "Configures a complete STT → LLM → TTS voice AI pipeline with integrated turn detection. Provides a higher-level abstraction than manually orchestrating the individual components. Optimized for building voice AI agents with proper turn-taking behavior.",
5
+ "title": "Agent",
6
+ "description": "Configures a complete voice AI agent by wiring together STT → LLM → TTS with integrated turn detection. Provides a higher-level abstraction than manually orchestrating the individual components. Optimized for building voice AI agents with proper turn-taking behavior.",
7
7
  "type": "object",
8
8
  "properties": {
9
9
  "verb": {
10
- "const": "pipeline"
10
+ "const": "agent"
11
11
  },
12
12
  "id": {
13
13
  "type": "string",
@@ -15,11 +15,11 @@
15
15
  },
16
16
  "stt": {
17
17
  "$ref": "../components/recognizer",
18
- "description": "Speech-to-text configuration for the pipeline."
18
+ "description": "Speech-to-text configuration for the agent."
19
19
  },
20
20
  "tts": {
21
21
  "$ref": "../components/synthesizer",
22
- "description": "Text-to-speech configuration for the pipeline."
22
+ "description": "Text-to-speech configuration for the agent."
23
23
  },
24
24
  "turnDetection": {
25
25
  "oneOf": [
@@ -53,7 +53,7 @@
53
53
  }
54
54
  ],
55
55
  "default": "stt",
56
- "description": "Turn detection strategy. Controls when the pipeline decides the user has finished speaking. STT vendors with native turn-taking (deepgramflux, assemblyai, speechmatics) always use their built-in detection regardless of this setting."
56
+ "description": "Turn detection strategy. Controls when the agent decides the user has finished speaking. STT vendors with native turn-taking (deepgramflux, assemblyai, speechmatics) always use their built-in detection regardless of this setting."
57
57
  },
58
58
  "bargeIn": {
59
59
  "type": "object",
@@ -86,16 +86,16 @@
86
86
  },
87
87
  "llm": {
88
88
  "type": "object",
89
- "description": "LLM configuration for the pipeline. See the 'llm' verb schema for details.",
89
+ "description": "LLM configuration for the agent. See the 'llm' verb schema for details.",
90
90
  "additionalProperties": true
91
91
  },
92
92
  "actionHook": {
93
93
  "$ref": "../components/actionHook",
94
- "description": "A webhook invoked when the pipeline ends."
94
+ "description": "A webhook invoked when the agent ends."
95
95
  },
96
96
  "eventHook": {
97
97
  "$ref": "../components/actionHook",
98
- "description": "A webhook invoked for pipeline events. Receives event types: 'user_transcript' (user speech recognized), 'agent_response' (assistant reply), 'user_interruption' (barge-in detected), and 'turn_end' (end-of-turn summary with transcript, response, and latency metrics)."
98
+ "description": "A webhook invoked for agent events. Receives event types: 'user_transcript' (user speech recognized), 'llm_response' (assistant reply), 'user_interruption' (barge-in detected), and 'turn_end' (end-of-turn summary with transcript, response, and latency metrics)."
99
99
  },
100
100
  "toolHook": {
101
101
  "$ref": "../components/actionHook",
@@ -171,7 +171,7 @@
171
171
  },
172
172
  "required": ["url"]
173
173
  },
174
- "description": "External MCP servers that provide tools to the LLM. The pipeline connects at startup via SSE, discovers available tools, and makes them callable by the LLM."
174
+ "description": "External MCP servers that provide tools to the LLM. The agent connects at startup via SSE, discovers available tools, and makes them callable by the LLM."
175
175
  }
176
176
  },
177
177
  "required": [
@@ -179,7 +179,7 @@
179
179
  ],
180
180
  "examples": [
181
181
  {
182
- "verb": "pipeline",
182
+ "verb": "agent",
183
183
  "stt": {
184
184
  "vendor": "deepgram",
185
185
  "language": "en-US"
@@ -201,10 +201,10 @@
201
201
  }
202
202
  },
203
203
  "turnDetection": "stt",
204
- "actionHook": "/pipeline-complete"
204
+ "actionHook": "/agent-complete"
205
205
  },
206
206
  {
207
- "verb": "pipeline",
207
+ "verb": "agent",
208
208
  "stt": {
209
209
  "vendor": "deepgram",
210
210
  "language": "en-US"
@@ -234,7 +234,7 @@
234
234
  "minSpeechDuration": 0.3,
235
235
  "sticky": false
236
236
  },
237
- "actionHook": "/pipeline-complete"
237
+ "actionHook": "/agent-complete"
238
238
  }
239
239
  ]
240
240
  }
@@ -34,6 +34,7 @@ from jambonz_sdk.types.session import (
34
34
  WsMessageType,
35
35
  )
36
36
  from jambonz_sdk.types.verbs import (
37
+ AgentVerb,
37
38
  AlertVerb,
38
39
  AnswerVerb,
39
40
  AnyVerb,
@@ -56,7 +57,6 @@ from jambonz_sdk.types.verbs import (
56
57
  MessageVerb,
57
58
  OpenaiS2sVerb,
58
59
  PauseVerb,
59
- PipelineVerb,
60
60
  PlayVerb,
61
61
  RedirectVerb,
62
62
  S2sVerb,
@@ -92,6 +92,7 @@ __all__ = [
92
92
  "TurnTaking",
93
93
  "Vad",
94
94
  # Verbs
95
+ "AgentVerb",
95
96
  "AlertVerb",
96
97
  "AnswerVerb",
97
98
  "AnyVerb",
@@ -114,7 +115,6 @@ __all__ = [
114
115
  "MessageVerb",
115
116
  "OpenaiS2sVerb",
116
117
  "PauseVerb",
117
- "PipelineVerb",
118
118
  "PlayVerb",
119
119
  "RedirectVerb",
120
120
  "S2sVerb",
@@ -514,10 +514,10 @@ class DialogflowVerb(TypedDict, total=False):
514
514
  tts: Synthesizer
515
515
 
516
516
 
517
- class PipelineVerb(TypedDict, total=False):
518
- """Integrated STT -> LLM -> TTS voice AI pipeline."""
517
+ class AgentVerb(TypedDict, total=False):
518
+ """Integrated STT -> LLM -> TTS voice AI agent."""
519
519
 
520
- verb: str # "pipeline"
520
+ verb: str # "agent"
521
521
  id: str
522
522
  stt: Recognizer
523
523
  tts: Synthesizer
@@ -568,5 +568,5 @@ AnyVerb = Union[
568
568
  ElevenlabsS2sVerb,
569
569
  UltravoxS2sVerb,
570
570
  DialogflowVerb,
571
- PipelineVerb,
571
+ AgentVerb,
572
572
  ]