dashscope 1.27.2__tar.gz → 1.27.3__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 (360) hide show
  1. {dashscope-1.27.2 → dashscope-1.27.3}/PKG-INFO +30 -13
  2. {dashscope-1.27.2 → dashscope-1.27.3}/README.md +11 -5
  3. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/__init__.py +6 -0
  4. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/repl.py +4 -0
  5. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/runners.py +4 -0
  6. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/tongyi.py +6 -0
  7. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/browser.py +3 -2
  8. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/camera.py +2 -2
  9. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/registry.py +1 -0
  10. dashscope-1.27.3/dashscope/acli/tools/vision.py +263 -0
  11. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/ui/tui.py +5 -0
  12. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/transport.py +2 -0
  13. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/video_synthesis.py +25 -1
  14. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/api_request_factory.py +5 -1
  15. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/base_request.py +2 -1
  16. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/__init__.py +3 -1
  17. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/utils.py +18 -0
  18. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/__init__.py +10 -0
  19. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/version.py +1 -1
  20. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/PKG-INFO +30 -13
  21. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/SOURCES.txt +1 -0
  22. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/requires.txt +22 -7
  23. dashscope-1.27.3/requirements.txt +10 -0
  24. {dashscope-1.27.2 → dashscope-1.27.3}/setup.py +20 -0
  25. dashscope-1.27.2/requirements.txt +0 -15
  26. {dashscope-1.27.2 → dashscope-1.27.3}/LICENSE +0 -0
  27. {dashscope-1.27.2 → dashscope-1.27.3}/LICENSE.certifi +0 -0
  28. {dashscope-1.27.2 → dashscope-1.27.3}/MANIFEST.in +0 -0
  29. {dashscope-1.27.2 → dashscope-1.27.3}/NOTICE +0 -0
  30. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/__init__.py +0 -0
  31. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/__init__.pyi +0 -0
  32. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/__main__.py +0 -0
  33. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/agent.py +0 -0
  34. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/agents/__init__.py +0 -0
  35. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/agents/delegate.py +0 -0
  36. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/agents/subagent.py +0 -0
  37. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/agents/subagents.py +0 -0
  38. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/audit.py +0 -0
  39. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/capabilities/__init__.py +0 -0
  40. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/capabilities/local_memory.py +0 -0
  41. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/__init__.py +0 -0
  42. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/completer.py +0 -0
  43. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/constants.py +0 -0
  44. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/dispatch.py +0 -0
  45. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/examples.py +0 -0
  46. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_capability.py +0 -0
  47. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_config.py +0 -0
  48. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_device.py +0 -0
  49. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_key.py +0 -0
  50. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_misc.py +0 -0
  51. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_profile.py +0 -0
  52. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_provider.py +0 -0
  53. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_session.py +0 -0
  54. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_setup.py +0 -0
  55. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/handlers_skill.py +0 -0
  56. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/mcp.py +0 -0
  57. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/multimodal.py +0 -0
  58. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/startup.py +0 -0
  59. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/cli/streaming.py +0 -0
  60. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/commands.py +0 -0
  61. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/compression.py +0 -0
  62. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/config.py +0 -0
  63. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/debuglog.py +0 -0
  64. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/deliverable.py +0 -0
  65. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/dev.py +0 -0
  66. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/eval/__init__.py +0 -0
  67. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/config.toml +0 -0
  68. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/custom-extensions.toml +0 -0
  69. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/hooks.toml +0 -0
  70. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/skills/explain-code.md +0 -0
  71. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/skills/research-topic.md +0 -0
  72. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/skills/translate.md +0 -0
  73. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/skills/write-poem.md +0 -0
  74. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/.acli/system-prompt.md +0 -0
  75. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/basic-chat/README.md +0 -0
  76. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/config.toml +0 -0
  77. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/custom-extensions.toml +0 -0
  78. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/hooks.toml +0 -0
  79. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/agent.md +0 -0
  80. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/api-doc.md +0 -0
  81. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/cli.md +0 -0
  82. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/diagnose.md +0 -0
  83. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/error-code.md +0 -0
  84. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/explain-code.md +0 -0
  85. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/fine-tuning.md +0 -0
  86. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/multimodal.md +0 -0
  87. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/retrieval.md +0 -0
  88. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/sdk-example.md +0 -0
  89. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/speech.md +0 -0
  90. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/text-generation.md +0 -0
  91. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/translate.md +0 -0
  92. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/.acli/system-prompt.md +0 -0
  93. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/examples/dashscope-sdk-expert/README.md +0 -0
  94. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/executor.py +0 -0
  95. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/extensions.py +0 -0
  96. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/hooks.py +0 -0
  97. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/mcp_server.py +0 -0
  98. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/mcp_stdio.py +0 -0
  99. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/__init__.py +0 -0
  100. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/directives_learning.py +0 -0
  101. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/experience.py +0 -0
  102. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/manager.py +0 -0
  103. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/plan.py +0 -0
  104. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/reflection.py +0 -0
  105. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/skill_evolution.py +0 -0
  106. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/tool_chains.py +0 -0
  107. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/memory/trace.py +0 -0
  108. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/permission.py +0 -0
  109. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/__init__.py +0 -0
  110. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/bailian/__init__.py +0 -0
  111. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/bailian/cli.py +0 -0
  112. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/bailian/mcp.py +0 -0
  113. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/base.py +0 -0
  114. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/local/__init__.py +0 -0
  115. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/local/history.py +0 -0
  116. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/platforms/local/memory.py +0 -0
  117. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/prompt.py +0 -0
  118. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/prompt_pipeline.py +0 -0
  119. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/__init__.py +0 -0
  120. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/adapter.py +0 -0
  121. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/anthropic.py +0 -0
  122. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/base.py +0 -0
  123. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/hardening.py +0 -0
  124. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/openai.py +0 -0
  125. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/providers/profile.py +0 -0
  126. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/sandbox.py +0 -0
  127. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/scheduler.py +0 -0
  128. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/sdk.py +0 -0
  129. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/session.py +0 -0
  130. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/session_events.py +0 -0
  131. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/skills/__init__.py +0 -0
  132. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/skills/base.py +0 -0
  133. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/skills/manager.py +0 -0
  134. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/skills/package.py +0 -0
  135. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/skills/store.py +0 -0
  136. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/__init__.py +0 -0
  137. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/checkpoint.py +0 -0
  138. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/evolution.py +0 -0
  139. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/filesystem.py +0 -0
  140. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/platform.py +0 -0
  141. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/session.py +0 -0
  142. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/shell.py +0 -0
  143. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/skills.py +0 -0
  144. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/tools/web_search.py +0 -0
  145. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/ui/__init__.py +0 -0
  146. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/ui/camera.py +0 -0
  147. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/ui/embedded.py +0 -0
  148. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/ui/tts.py +0 -0
  149. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/ui/voice.py +0 -0
  150. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/__init__.py +0 -0
  151. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/clipboard.py +0 -0
  152. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/crypto.py +0 -0
  153. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/exceptions.py +0 -0
  154. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/ids.py +0 -0
  155. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/images.py +0 -0
  156. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/keywords.py +0 -0
  157. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/messages.py +0 -0
  158. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/paths.py +0 -0
  159. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/sanitizer.py +0 -0
  160. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/spinner.py +0 -0
  161. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/template.py +0 -0
  162. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/text.py +0 -0
  163. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/toml.py +0 -0
  164. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/acli/utils/validation.py +0 -0
  165. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/__init__.py +0 -0
  166. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/client.py +0 -0
  167. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/constants.py +0 -0
  168. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/exceptions.py +0 -0
  169. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/pagination.py +0 -0
  170. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/__init__.py +0 -0
  171. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/_helpers.py +0 -0
  172. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/agents.py +0 -0
  173. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/deployments.py +0 -0
  174. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/environments.py +0 -0
  175. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/files.py +0 -0
  176. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/session_events.py +0 -0
  177. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/sessions.py +0 -0
  178. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/skills.py +0 -0
  179. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/resources/vaults.py +0 -0
  180. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/streaming.py +0 -0
  181. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/types/__init__.py +0 -0
  182. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/types/models.py +0 -0
  183. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/agentstudio/types/params.py +0 -0
  184. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/__init__.py +0 -0
  185. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/chat_completion.py +0 -0
  186. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/code_generation.py +0 -0
  187. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/conversation.py +0 -0
  188. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/generation.py +0 -0
  189. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/image_generation.py +0 -0
  190. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/image_synthesis.py +0 -0
  191. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/aigc/multimodal_conversation.py +0 -0
  192. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/__init__.py +0 -0
  193. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/aio_session.py +0 -0
  194. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/aiohttp_request.py +0 -0
  195. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/api_request_data.py +0 -0
  196. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/chat_completion_types.py +0 -0
  197. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/dashscope_response.py +0 -0
  198. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/encryption.py +0 -0
  199. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/http_request.py +0 -0
  200. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/api_entities/websocket_request.py +0 -0
  201. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/app/__init__.py +0 -0
  202. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/app/application.py +0 -0
  203. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/app/application_response.py +0 -0
  204. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/assistants/__init__.py +0 -0
  205. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/assistants/assistant_types.py +0 -0
  206. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/assistants/assistants.py +0 -0
  207. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/assistants/files.py +0 -0
  208. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/__init__.py +0 -0
  209. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/asr/__init__.py +0 -0
  210. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/asr/asr_phrase_manager.py +0 -0
  211. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/asr/recognition.py +0 -0
  212. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/asr/transcription.py +0 -0
  213. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/asr/translation_recognizer.py +0 -0
  214. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/asr/vocabulary.py +0 -0
  215. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/http_tts/__init__.py +0 -0
  216. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/http_tts/http_speech_synthesizer.py +0 -0
  217. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_asr/__init__.py +0 -0
  218. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_asr/qwen_transcription.py +0 -0
  219. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_omni/__init__.py +0 -0
  220. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_omni/omni_realtime.py +0 -0
  221. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_tts/__init__.py +0 -0
  222. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_tts/speech_synthesizer.py +0 -0
  223. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_tts_realtime/__init__.py +0 -0
  224. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/qwen_tts_realtime/qwen_tts_realtime.py +0 -0
  225. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/tts/__init__.py +0 -0
  226. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/tts/speech_synthesizer.py +0 -0
  227. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/tts_v2/__init__.py +0 -0
  228. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/tts_v2/enrollment.py +0 -0
  229. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/audio/tts_v2/speech_synthesizer.py +0 -0
  230. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/__main__.py +0 -0
  231. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/agentic_rl.py +0 -0
  232. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/application.py +0 -0
  233. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/auth.py +0 -0
  234. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/code_generation.py +0 -0
  235. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/common.py +0 -0
  236. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/deployments.py +0 -0
  237. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/embeddings.py +0 -0
  238. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/files.py +0 -0
  239. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/fine_tunes.py +0 -0
  240. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/generation.py +0 -0
  241. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/image_generation.py +0 -0
  242. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/image_synthesis.py +0 -0
  243. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/models.py +0 -0
  244. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/multimodal_conversation.py +0 -0
  245. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/multimodal_embedding.py +0 -0
  246. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/oss.py +0 -0
  247. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/rerank.py +0 -0
  248. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/speech_synthesis.py +0 -0
  249. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/tokenization.py +0 -0
  250. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/transcription.py +0 -0
  251. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/understanding.py +0 -0
  252. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/cli/video_synthesis.py +0 -0
  253. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/client/__init__.py +0 -0
  254. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/client/base_api.py +0 -0
  255. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/__init__.py +0 -0
  256. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/api_key.py +0 -0
  257. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/base_type.py +0 -0
  258. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/constants.py +0 -0
  259. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/env.py +0 -0
  260. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/error.py +0 -0
  261. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/logging.py +0 -0
  262. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/common/message_manager.py +0 -0
  263. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/embeddings/__init__.py +0 -0
  264. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/embeddings/batch_text_embedding.py +0 -0
  265. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/embeddings/batch_text_embedding_response.py +0 -0
  266. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/embeddings/multimodal_embedding.py +0 -0
  267. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/embeddings/text_embedding.py +0 -0
  268. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/files.py +0 -0
  269. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/__init__.py +0 -0
  270. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/agentic_rl.py +0 -0
  271. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/customize_types.py +0 -0
  272. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/deployments.py +0 -0
  273. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/finetunes.py +0 -0
  274. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/__init__.py +0 -0
  275. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/constants.py +0 -0
  276. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/errors.py +0 -0
  277. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/log.py +0 -0
  278. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/model.py +0 -0
  279. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/model_types.py +0 -0
  280. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/common/utils.py +0 -0
  281. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/__init__.py +0 -0
  282. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/__init__.py +0 -0
  283. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/base_data_model.py +0 -0
  284. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/group_reward_input.py +0 -0
  285. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/group_reward_output.py +0 -0
  286. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/reward_input.py +0 -0
  287. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/reward_output.py +0 -0
  288. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/rollout_input.py +0 -0
  289. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/data/rollout_output.py +0 -0
  290. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/demo/__init__.py +0 -0
  291. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/demo/group_reward_processor_demo.py +0 -0
  292. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/demo/reward_processor_demo.py +0 -0
  293. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/demo/rollout_processor_demo.py +0 -0
  294. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/func_decorator.py +0 -0
  295. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/func_manager.py +0 -0
  296. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/__init__.py +0 -0
  297. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/__init__.py +0 -0
  298. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/_core.py +0 -0
  299. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/llm_dashscope.py +0 -0
  300. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/llm_openai.py +0 -0
  301. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/llm_span.py +0 -0
  302. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/messages.py +0 -0
  303. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/genai/tools.py +0 -0
  304. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/processor_span.py +0 -0
  305. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/observability/tracing.py +0 -0
  306. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/parser/__init__.py +0 -0
  307. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/parser/base_parser.py +0 -0
  308. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/parser/group_reward_parser.py +0 -0
  309. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/parser/reward_parser.py +0 -0
  310. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/parser/rollout_parser.py +0 -0
  311. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/processor/__init__.py +0 -0
  312. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/processor/abstract_group_reward_processor.py +0 -0
  313. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/processor/abstract_processor.py +0 -0
  314. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/processor/abstract_reward_processor.py +0 -0
  315. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/processor/abstract_rollout_processor.py +0 -0
  316. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/server/__init__.py +0 -0
  317. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/finetune/reinforcement/component/server/server.py +0 -0
  318. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/io/__init__.py +0 -0
  319. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/io/input_output.py +0 -0
  320. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/model.py +0 -0
  321. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/models.py +0 -0
  322. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/__init__.py +0 -0
  323. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/dialog_state.py +0 -0
  324. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/multimodal_constants.py +0 -0
  325. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/multimodal_dialog.py +0 -0
  326. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/multimodal_request_params.py +0 -0
  327. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/tingwu/__init__.py +0 -0
  328. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/tingwu/tingwu.py +0 -0
  329. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/multimodal/tingwu/tingwu_realtime.py +0 -0
  330. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/nlp/__init__.py +0 -0
  331. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/nlp/understanding.py +0 -0
  332. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/protocol/__init__.py +0 -0
  333. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/protocol/websocket.py +0 -0
  334. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/py.typed +0 -0
  335. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/rerank/__init__.py +0 -0
  336. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/rerank/text_rerank.py +0 -0
  337. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/resources/qwen.tiktoken +0 -0
  338. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/__init__.py +0 -0
  339. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/messages/__init__.py +0 -0
  340. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/messages/files.py +0 -0
  341. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/messages/messages.py +0 -0
  342. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/runs/__init__.py +0 -0
  343. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/runs/runs.py +0 -0
  344. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/runs/steps.py +0 -0
  345. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/thread_types.py +0 -0
  346. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/threads/threads.py +0 -0
  347. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/tokenizers/__init__.py +0 -0
  348. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/tokenizers/qwen_tokenizer.py +0 -0
  349. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/tokenizers/tokenization.py +0 -0
  350. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/tokenizers/tokenizer.py +0 -0
  351. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/tokenizers/tokenizer_base.py +0 -0
  352. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/utils/__init__.py +0 -0
  353. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/utils/message_utils.py +0 -0
  354. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/utils/oss_utils.py +0 -0
  355. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope/utils/param_utils.py +0 -0
  356. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/dependency_links.txt +0 -0
  357. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/entry_points.txt +0 -0
  358. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/not-zip-safe +0 -0
  359. {dashscope-1.27.2 → dashscope-1.27.3}/dashscope.egg-info/top_level.txt +0 -0
  360. {dashscope-1.27.2 → dashscope-1.27.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dashscope
3
- Version: 1.27.2
3
+ Version: 1.27.3
4
4
  Summary: dashscope client sdk library
5
5
  Home-page: https://dashscope.aliyun.com/
6
6
  Author: Alibaba Cloud
@@ -28,16 +28,16 @@ Requires-Dist: cryptography
28
28
  Requires-Dist: certifi
29
29
  Requires-Dist: typer>=0.9.0
30
30
  Requires-Dist: rich>=13.0.0
31
- Requires-Dist: httpx>=0.27.0
31
+ Requires-Dist: httpx>=0.25.0
32
32
  Requires-Dist: httpx-sse>=0.4.0
33
- Requires-Dist: prompt-toolkit>=3.0
34
- Requires-Dist: pydantic>=2.0
35
- Requires-Dist: tenacity
36
- Requires-Dist: tomli>=2.0; python_version < "3.11"
37
- Requires-Dist: PyYAML>=6.0
38
- Requires-Dist: textual>=0.50
33
+ Requires-Dist: typing_extensions>=4.0
39
34
  Provides-Extra: tokenizer
40
35
  Requires-Dist: tiktoken; extra == "tokenizer"
36
+ Provides-Extra: acli
37
+ Requires-Dist: prompt-toolkit>=3.0; extra == "acli"
38
+ Requires-Dist: textual>=0.50; extra == "acli"
39
+ Requires-Dist: PyYAML>=6.0; extra == "acli"
40
+ Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "acli"
41
41
  Provides-Extra: acli-anthropic
42
42
  Requires-Dist: anthropic>=0.40; extra == "acli-anthropic"
43
43
  Provides-Extra: acli-openai
@@ -48,11 +48,22 @@ Requires-Dist: numpy>=1.20; extra == "acli-voice"
48
48
  Provides-Extra: acli-camera
49
49
  Requires-Dist: opencv-python>=4.5; extra == "acli-camera"
50
50
  Provides-Extra: acli-all
51
+ Requires-Dist: prompt-toolkit>=3.0; extra == "acli-all"
52
+ Requires-Dist: textual>=0.50; extra == "acli-all"
53
+ Requires-Dist: PyYAML>=6.0; extra == "acli-all"
54
+ Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "acli-all"
51
55
  Requires-Dist: anthropic>=0.40; extra == "acli-all"
52
56
  Requires-Dist: openai>=1.30; extra == "acli-all"
53
57
  Requires-Dist: sounddevice>=0.4; extra == "acli-all"
54
58
  Requires-Dist: numpy>=1.20; extra == "acli-all"
55
59
  Requires-Dist: opencv-python>=4.5; extra == "acli-all"
60
+ Provides-Extra: rl
61
+ Requires-Dist: pydantic>=2.0; extra == "rl"
62
+ Requires-Dist: tenacity; extra == "rl"
63
+ Requires-Dist: PyYAML>=6.0; extra == "rl"
64
+ Requires-Dist: fastapi>=0.100; extra == "rl"
65
+ Requires-Dist: uvicorn>=0.20; extra == "rl"
66
+ Requires-Dist: opentelemetry-sdk>=1.20; extra == "rl"
56
67
  Dynamic: author
57
68
  Dynamic: author-email
58
69
  Dynamic: classifier
@@ -69,6 +80,8 @@ Dynamic: summary
69
80
 
70
81
  # DashScope Python SDK
71
82
 
83
+ > **English** | [中文](README_zh.md)
84
+
72
85
  The DashScope Python SDK provides a comprehensive interface to [Alibaba Cloud Model Studio (Bailian)](https://www.alibabacloud.com/help/en/model-studio/) APIs, covering text generation, multi-modal understanding, embeddings, reranking, image/video generation, speech synthesis & recognition, and more.
73
86
 
74
87
  ## What is New
@@ -81,16 +94,20 @@ To install the DashScope Python SDK, simply run:
81
94
  pip install dashscope
82
95
  ```
83
96
 
97
+ The base install covers SDK API calls and the `dashscope` CLI command.
98
+ Optional feature groups are available as extras:
99
+
100
+ | Extra | Provides | Install |
101
+ |-------|----------|---------|
102
+ | `acli` | Interactive AI assistant (DashScope SDK Expert) | `pip install "dashscope[acli]"` |
103
+ | `rl` | Agentic RL fine-tuning | `pip install "dashscope[rl]"` |
104
+ | `tokenizer` | Local tokenizer without downloads | `pip install "dashscope[tokenizer]"` |
105
+
84
106
  If you clone the code from github, you can install from source by running:
85
107
  ```shell
86
108
  pip install -e .
87
109
  ```
88
110
 
89
- To use tokenizer in local mode without downloading any files, run:
90
- ```shell
91
- pip install dashscope[tokenizer]
92
- ```
93
-
94
111
 
95
112
  ## Quick Start
96
113
 
@@ -1,5 +1,7 @@
1
1
  # DashScope Python SDK
2
2
 
3
+ > **English** | [中文](README_zh.md)
4
+
3
5
  The DashScope Python SDK provides a comprehensive interface to [Alibaba Cloud Model Studio (Bailian)](https://www.alibabacloud.com/help/en/model-studio/) APIs, covering text generation, multi-modal understanding, embeddings, reranking, image/video generation, speech synthesis & recognition, and more.
4
6
 
5
7
  ## What is New
@@ -12,16 +14,20 @@ To install the DashScope Python SDK, simply run:
12
14
  pip install dashscope
13
15
  ```
14
16
 
17
+ The base install covers SDK API calls and the `dashscope` CLI command.
18
+ Optional feature groups are available as extras:
19
+
20
+ | Extra | Provides | Install |
21
+ |-------|----------|---------|
22
+ | `acli` | Interactive AI assistant (DashScope SDK Expert) | `pip install "dashscope[acli]"` |
23
+ | `rl` | Agentic RL fine-tuning | `pip install "dashscope[rl]"` |
24
+ | `tokenizer` | Local tokenizer without downloads | `pip install "dashscope[tokenizer]"` |
25
+
15
26
  If you clone the code from github, you can install from source by running:
16
27
  ```shell
17
28
  pip install -e .
18
29
  ```
19
30
 
20
- To use tokenizer in local mode without downloading any files, run:
21
- ```shell
22
- pip install dashscope[tokenizer]
23
- ```
24
-
25
31
 
26
32
  ## Quick Start
27
33
 
@@ -1,8 +1,14 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  from __future__ import annotations
3
3
 
4
+ import uuid
5
+
4
6
  __version__ = "0.6.2"
5
7
 
8
+ # Per-process identifier sent as x-dashscope-sdk-session-id so the
9
+ # backend can group multi-turn requests from one CLI run.
10
+ SDK_SESSION_ID = uuid.uuid4().hex
11
+
6
12
  # Expose the lightweight programmatic SDK at the package root.
7
13
  try:
8
14
  from dashscope.acli.sdk import (
@@ -195,6 +195,10 @@ async def _run_loop(config: Config):
195
195
  get_mcp_clients_fn=lambda: _mcp_clients,
196
196
  )
197
197
 
198
+ from dashscope.acli.tools.vision import register_vision_tools
199
+
200
+ register_vision_tools(config, get_provider_fn=get_provider)
201
+
198
202
  from dashscope.acli.tools.evolution import register_evolution_tools
199
203
 
200
204
  register_evolution_tools(get_agent=lambda: agent)
@@ -358,6 +358,10 @@ def _run_tui_mode(config: Config):
358
358
  get_mcp_clients_fn=lambda: _mcp_clients,
359
359
  )
360
360
 
361
+ from dashscope.acli.tools.vision import register_vision_tools
362
+
363
+ register_vision_tools(config, get_provider_fn=get_provider)
364
+
361
365
  from dashscope.acli.tools.evolution import register_evolution_tools
362
366
 
363
367
  register_evolution_tools(get_agent=lambda: agent)
@@ -3,10 +3,12 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import json
6
+ import os
6
7
  from typing import AsyncIterator
7
8
 
8
9
  import httpx
9
10
 
11
+ from dashscope.acli import SDK_SESSION_ID, __version__
10
12
  from dashscope.acli.providers.base import LLMChunk, LLMResponse, ToolCall
11
13
 
12
14
  DASHSCOPE_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
@@ -123,6 +125,10 @@ class TongyiProvider:
123
125
  headers = {"Content-Type": "application/json"}
124
126
  if self.api_key:
125
127
  headers["Authorization"] = f"Bearer {self.api_key}"
128
+ if not os.environ.get("DASHSCOPE_DISABLE_SDK_HEADERS"):
129
+ headers["x-dashscope-sdk-client"] = "acli"
130
+ headers["x-dashscope-sdk-version"] = __version__
131
+ headers["x-dashscope-sdk-session-id"] = SDK_SESSION_ID
126
132
  return headers
127
133
 
128
134
  async def chat(
@@ -488,6 +488,7 @@ async def scrape_web_screenshot(
488
488
  return f"Error: screenshot failed — {e}"
489
489
 
490
490
  return (
491
- f"Screenshot saved to {output_path}. Reference it with @path "
492
- f"to send the image to a vision model for analysis."
491
+ f"Screenshot saved to {output_path}. Call the view_image tool "
492
+ f"with this path to analyze it (the user can also attach it "
493
+ f"via @path)."
493
494
  )
@@ -11,8 +11,8 @@ from dashscope.acli.tools.registry import PermissionLevel, tool
11
11
  name="camera_capture",
12
12
  description=(
13
13
  "Take a photo with the webcam and save it to the given path. "
14
- "The user can then reference it via @path to send it to a "
15
- "vision model for analysis."
14
+ "The photo can then be analyzed with the view_image tool (the "
15
+ "user can also attach it via @path)."
16
16
  ),
17
17
  permission=PermissionLevel.CONFIRM,
18
18
  )
@@ -368,6 +368,7 @@ class ToolRegistry:
368
368
  "switch_provider",
369
369
  "capability_enable",
370
370
  "capability_disable",
371
+ "view_image",
371
372
  ],
372
373
  )
373
374
  include_tools.update(["mcp_connect", "mcp_disconnect"])
@@ -0,0 +1,263 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Built-in vision tool — let the agent analyze local images itself.
3
+
4
+ Previously the only multimodal entry point was user-input ``@path``
5
+ expansion, so after ``scrape_web_screenshot`` / ``camera_capture`` the
6
+ model could not see the saved image and sometimes echoed the
7
+ user-facing ``@path`` hint verbatim, ending the turn prematurely.
8
+ ``view_image`` closes that gap by routing the image to a
9
+ vision-capable model on the active provider.
10
+
11
+ Very tall/wide images (e.g. a long announcement table) get downscaled
12
+ or truncated by vision-model backends until text is illegible, so
13
+ ``view_image`` auto-slices them with Pillow (when installed) and runs
14
+ one vision call per slice. Without Pillow it falls back to sending the
15
+ whole image as-is.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import asyncio
21
+ import base64
22
+ import io
23
+ import math
24
+ from typing import Callable
25
+
26
+ from dashscope.acli.config import Config, is_vision_model
27
+ from dashscope.acli.tools.registry import (
28
+ PermissionLevel,
29
+ ToolDefinition,
30
+ registry,
31
+ )
32
+
33
+ _FALLBACK_VISION_MODELS = {
34
+ "tongyi": "qwen-vl-max",
35
+ "openai": "gpt-4o",
36
+ "anthropic": "claude-sonnet-4-20250514",
37
+ }
38
+
39
+ # Slicing triggers: beyond these the model backend downscales or
40
+ # truncates the image and fine text becomes unreadable.
41
+ _SLICE_MAX_LONG_SIDE = 8000
42
+ _SLICE_MAX_RATIO = 4.0
43
+ _SLICE_STEP = 2000
44
+ _SLICE_OVERLAP = 100
45
+ _SLICE_MAX_COUNT = 32
46
+ _SLICE_JPEG_QUALITY = 88
47
+
48
+
49
+ def pick_vision_model(config: Config) -> str:
50
+ """Choose a vision-capable model on the active provider.
51
+
52
+ Preference: the active model when it accepts images, then the first
53
+ vision model declared on the provider's extension block, then a
54
+ per-provider built-in fallback.
55
+ """
56
+ if is_vision_model(config.model):
57
+ return config.model
58
+
59
+ from dashscope.acli.extensions import find_provider
60
+
61
+ ext = find_provider(config.provider)
62
+ if ext and ext.vision_models:
63
+ return ext.vision_models[0]
64
+ return _FALLBACK_VISION_MODELS.get(config.provider, "qwen-vl-max")
65
+
66
+
67
+ def plan_slices(width: int, height: int):
68
+ """Return crop boxes for an oversized image, or None if it fits.
69
+
70
+ Slices run along the long axis with a small overlap so rows cut at
71
+ a box boundary still appear complete in one of the two neighbors.
72
+ """
73
+ long_side = max(width, height)
74
+ short_side = max(min(width, height), 1)
75
+ if (
76
+ long_side <= _SLICE_MAX_LONG_SIDE
77
+ and long_side / short_side <= _SLICE_MAX_RATIO
78
+ ):
79
+ return None
80
+
81
+ step = _SLICE_STEP
82
+ overlap = _SLICE_OVERLAP
83
+ count = math.ceil((long_side - overlap) / (step - overlap))
84
+ if count > _SLICE_MAX_COUNT:
85
+ # Re-derive a coarser step; drop the overlap so the cap holds.
86
+ step = math.ceil(long_side / _SLICE_MAX_COUNT)
87
+ overlap = 0
88
+
89
+ boxes = []
90
+ if height >= width:
91
+ y = 0
92
+ while y < height:
93
+ y2 = min(y + step, height)
94
+ boxes.append((0, y, width, y2))
95
+ if y2 == height:
96
+ break
97
+ y = y2 - overlap
98
+ else:
99
+ x = 0
100
+ while x < width:
101
+ x2 = min(x + step, width)
102
+ boxes.append((x, 0, x2, height))
103
+ if x2 == width:
104
+ break
105
+ x = x2 - overlap
106
+ return boxes
107
+
108
+
109
+ def _slice_data_urls(image, boxes) -> list:
110
+ """Crop ``boxes`` out of a PIL image, JPEG-encode as data URLs."""
111
+ urls = []
112
+ for box in boxes:
113
+ crop = image.crop(box)
114
+ if crop.mode not in ("RGB", "L"):
115
+ crop = crop.convert("RGB")
116
+ buf = io.BytesIO()
117
+ crop.save(buf, format="JPEG", quality=_SLICE_JPEG_QUALITY)
118
+ b64 = base64.b64encode(buf.getvalue()).decode()
119
+ urls.append(f"data:image/jpeg;base64,{b64}")
120
+ return urls
121
+
122
+
123
+ async def _ask_vision(provider, data_url: str, text: str) -> str:
124
+ messages = [
125
+ {
126
+ "role": "user",
127
+ "content": [
128
+ {"type": "text", "text": text},
129
+ {"type": "image_url", "image_url": {"url": data_url}},
130
+ ],
131
+ },
132
+ ]
133
+ response = await provider.chat(messages)
134
+ return response.content or "(vision model returned no content)"
135
+
136
+
137
+ def register_vision_tools(config: Config, *, get_provider_fn: Callable):
138
+ """Register ``view_image``; called once after agent construction."""
139
+
140
+ async def view_image(
141
+ image_path: str,
142
+ question: str = (
143
+ "Describe this image in detail. If it contains text or "
144
+ "tables, transcribe them verbatim."
145
+ ),
146
+ slice_mode: str = "auto",
147
+ ) -> str:
148
+ from dashscope.acli.utils.paths import validate_path
149
+
150
+ try:
151
+ safe_path = validate_path(image_path)
152
+ except (ValueError, OSError) as e:
153
+ return f"Error: failed to read image: {e}"
154
+
155
+ model = pick_vision_model(config)
156
+ provider = get_provider_fn(
157
+ config.provider,
158
+ model,
159
+ config.api_key,
160
+ base_url=config.base_url or None,
161
+ )
162
+
163
+ boxes = None
164
+ image = None
165
+ if slice_mode != "never":
166
+ try:
167
+ from PIL import Image
168
+
169
+ image = Image.open(safe_path)
170
+ image.load()
171
+ boxes = plan_slices(*image.size)
172
+ except Exception: # pylint: disable=broad-except
173
+ # No Pillow, or not a decodable image: fall back to the
174
+ # whole-image path and let it report the real error.
175
+ boxes = None
176
+ image = None
177
+
178
+ if boxes:
179
+ axis = (
180
+ "top-to-bottom"
181
+ if image.height >= image.width
182
+ else ("left-to-right")
183
+ )
184
+ urls = _slice_data_urls(image, boxes)
185
+ image.close()
186
+ total = len(urls)
187
+ tasks = [
188
+ _ask_vision(
189
+ provider,
190
+ url,
191
+ (
192
+ f"Slice {i + 1}/{total} ({axis}) of one large "
193
+ "image. " + question
194
+ ),
195
+ )
196
+ for i, url in enumerate(urls)
197
+ ]
198
+ results = await asyncio.gather(*tasks, return_exceptions=True)
199
+ parts = [
200
+ f"(Image auto-split into {total} slices {axis}; "
201
+ "results per slice below.)",
202
+ ]
203
+ for i, r in enumerate(results, start=1):
204
+ if isinstance(r, BaseException):
205
+ parts.append(f"--- slice {i}/{total} ---\nError: {r}")
206
+ else:
207
+ parts.append(f"--- slice {i}/{total} ---\n{r}")
208
+ return "\n\n".join(parts)
209
+
210
+ try:
211
+ from dashscope.acli.utils.images import image_to_data_url
212
+
213
+ data_url = image_to_data_url(safe_path)
214
+ except (ValueError, OSError) as e:
215
+ return f"Error: failed to read image: {e}"
216
+ try:
217
+ return await _ask_vision(provider, data_url, question)
218
+ except Exception as e: # pylint: disable=broad-except
219
+ return f"Error: vision call failed: {e}"
220
+
221
+ registry.register(
222
+ ToolDefinition(
223
+ name="view_image",
224
+ description=(
225
+ "Analyze a local image file (screenshot, photo, chart) "
226
+ "with a vision model: OCR/transcribe text, describe "
227
+ "layout or content. Very tall/wide images are split "
228
+ "automatically. Use after scrape_web_screenshot or "
229
+ "camera_capture, or whenever you need to read an image."
230
+ ),
231
+ permission=PermissionLevel.AUTO,
232
+ func=view_image,
233
+ parameters={
234
+ "type": "object",
235
+ "properties": {
236
+ "image_path": {
237
+ "type": "string",
238
+ "description": (
239
+ "Path to the image file (relative to the "
240
+ "workspace or absolute)"
241
+ ),
242
+ },
243
+ "question": {
244
+ "type": "string",
245
+ "description": (
246
+ "What to extract from the image; defaults "
247
+ "to a full description + verbatim OCR"
248
+ ),
249
+ },
250
+ "slice_mode": {
251
+ "type": "string",
252
+ "enum": ["auto", "never"],
253
+ "description": (
254
+ "auto (default): split oversized images "
255
+ "into slices; never: always send the whole "
256
+ "image in one call"
257
+ ),
258
+ },
259
+ },
260
+ "required": ["image_path"],
261
+ },
262
+ ),
263
+ )
@@ -2651,6 +2651,11 @@ class AgenticCLIApp(App):
2651
2651
  except Exception as e:
2652
2652
  output.write(Text(f"Error: {e}", style="red"))
2653
2653
 
2654
+ # Commands like /model switch the model inside the executor
2655
+ # thread, after the post-submission hint refresh already ran;
2656
+ # re-read agent.model_name so the status line is current.
2657
+ self._refresh_hint_label()
2658
+
2654
2659
  try:
2655
2660
  input_widget = self.query_one("#command-input", CommandInput)
2656
2661
  input_widget.focus()
@@ -32,6 +32,7 @@ from dashscope.agentstudio.constants import (
32
32
  AGENTSTUDIO_DEFAULT_TIMEOUT,
33
33
  AGENTSTUDIO_MAX_RETRIES,
34
34
  )
35
+ from dashscope.common.utils import get_sdk_headers
35
36
 
36
37
  logger = logging.getLogger("dashscope.agentstudio")
37
38
 
@@ -229,6 +230,7 @@ def build_headers(
229
230
  HEADER_AUTHORIZATION: f"Bearer {api_key}",
230
231
  HEADER_USER_AGENT: user_agent,
231
232
  }
233
+ headers.update(get_sdk_headers())
232
234
  if json_body:
233
235
  headers["Content-Type"] = "application/json"
234
236
  headers["Accept"] = "application/json"
@@ -47,9 +47,12 @@ class VideoSynthesis(BaseAsyncApi):
47
47
  REFERENCE_IMAGE = "reference_image"
48
48
  REFERENCE_VIDEO = "reference_video"
49
49
  REFERENCE_VOICE = "reference_voice"
50
+ REFERENCE_AUDIO = "reference_audio"
50
51
  VIDEO = "video"
51
52
  FIRST_CLIP = "first_clip"
52
53
  DRIVING_AUDIO = "driving_audio"
54
+ FILE = "file"
55
+ LINK = "link"
53
56
 
54
57
  @classmethod
55
58
  def call( # type: ignore[override]
@@ -84,6 +87,7 @@ class VideoSynthesis(BaseAsyncApi):
84
87
  ratio: Optional[str] = None,
85
88
  shot_type: Optional[str] = None,
86
89
  audio_setting: Optional[str] = None,
90
+ enable_thinking: Optional[bool] = None,
87
91
  **kwargs,
88
92
  ) -> VideoSynthesisResponse:
89
93
  """Call video synthesis service and get result.
@@ -126,6 +130,7 @@ class VideoSynthesis(BaseAsyncApi):
126
130
  shot_type (str, optional): Shot type for video generation.
127
131
  audio_setting (str, optional): Audio setting for video,
128
132
  "auto" or "origin".
133
+ enable_thinking (bool, optional): Whether to use Agentic PE.
129
134
  **kwargs: Additional parameters passed to the API.
130
135
 
131
136
  Raises:
@@ -152,6 +157,8 @@ class VideoSynthesis(BaseAsyncApi):
152
157
  kwargs["shot_type"] = shot_type
153
158
  if audio_setting is not None:
154
159
  kwargs["audio_setting"] = audio_setting
160
+ if enable_thinking is not None:
161
+ kwargs["enable_thinking"] = enable_thinking
155
162
  return super().call( # type: ignore[return-value]
156
163
  model,
157
164
  prompt,
@@ -263,7 +270,8 @@ class VideoSynthesis(BaseAsyncApi):
263
270
  if media:
264
271
  for i, m_file in enumerate(media):
265
272
  if isinstance(m_file, dict):
266
- if m_file.get("url"):
273
+ # exclude when media is a link
274
+ if m_file.get("url") and m_file.get("type") != "link":
267
275
  tasks.append(
268
276
  {
269
277
  "type": "media",
@@ -397,6 +405,7 @@ class VideoSynthesis(BaseAsyncApi):
397
405
  ratio: Optional[str] = None,
398
406
  shot_type: Optional[str] = None,
399
407
  audio_setting: Optional[str] = None,
408
+ enable_thinking: Optional[bool] = None,
400
409
  **kwargs,
401
410
  ) -> VideoSynthesisResponse:
402
411
  """Create a video synthesis task, and return task information.
@@ -435,6 +444,7 @@ class VideoSynthesis(BaseAsyncApi):
435
444
  shot_type (str, optional): Shot type for video generation.
436
445
  audio_setting (str, optional): Audio setting for video,
437
446
  "auto" or "origin".
447
+ enable_thinking (bool, optional): Whether to use Agentic PE.
438
448
  **kwargs: Additional parameters passed to the API.
439
449
 
440
450
  Raises:
@@ -462,6 +472,8 @@ class VideoSynthesis(BaseAsyncApi):
462
472
  kwargs["shot_type"] = shot_type
463
473
  if audio_setting is not None:
464
474
  kwargs["audio_setting"] = audio_setting
475
+ if enable_thinking is not None:
476
+ kwargs["enable_thinking"] = enable_thinking
465
477
  task_group, function = _get_task_group_and_task(__name__)
466
478
 
467
479
  inputs, kwargs, task = cls._get_input(
@@ -656,6 +668,7 @@ class AioVideoSynthesis(BaseAsyncAioApi):
656
668
  ratio: str = None,
657
669
  shot_type: str = None,
658
670
  audio_setting: str = None,
671
+ enable_thinking: bool = None,
659
672
  **kwargs,
660
673
  ) -> VideoSynthesisResponse:
661
674
  """Call video synthesis service and get result.
@@ -694,6 +707,7 @@ class AioVideoSynthesis(BaseAsyncAioApi):
694
707
  shot_type (str, optional): Shot type for video generation.
695
708
  audio_setting (str, optional): Audio setting for video,
696
709
  "auto" or "origin".
710
+ enable_thinking (bool, optional): Whether to use Agentic PE.
697
711
  **kwargs: Additional parameters passed to the API.
698
712
 
699
713
  Raises:
@@ -720,6 +734,8 @@ class AioVideoSynthesis(BaseAsyncAioApi):
720
734
  kwargs["shot_type"] = shot_type
721
735
  if audio_setting is not None:
722
736
  kwargs["audio_setting"] = audio_setting
737
+ if enable_thinking is not None:
738
+ kwargs["enable_thinking"] = enable_thinking
723
739
  task_group, f = _get_task_group_and_task(__name__)
724
740
  # pylint: disable=protected-access
725
741
  inputs, kwargs, task = VideoSynthesis._get_input(
@@ -792,6 +808,8 @@ class AioVideoSynthesis(BaseAsyncAioApi):
792
808
  resolution: str = None,
793
809
  ratio: str = None,
794
810
  shot_type: str = None,
811
+ audio_setting: str = None,
812
+ enable_thinking: bool = None,
795
813
  **kwargs,
796
814
  ) -> VideoSynthesisResponse:
797
815
  """Create a video synthesis task, and return task information.
@@ -828,6 +846,8 @@ class AioVideoSynthesis(BaseAsyncAioApi):
828
846
  resolution (str, optional): Output resolution.
829
847
  ratio (str, optional): Aspect ratio, e.g. "16:9".
830
848
  shot_type (str, optional): Shot type for video generation.
849
+ enable_thinking (bool, optional): Whether to use Agentic PE.
850
+ audio_setting (str, optional): Audio setting for video,
831
851
  **kwargs: Additional parameters passed to the API.
832
852
 
833
853
  Raises:
@@ -853,6 +873,10 @@ class AioVideoSynthesis(BaseAsyncAioApi):
853
873
  kwargs["ratio"] = ratio
854
874
  if shot_type is not None:
855
875
  kwargs["shot_type"] = shot_type
876
+ if audio_setting is not None:
877
+ kwargs["audio_setting"] = audio_setting
878
+ if enable_thinking is not None:
879
+ kwargs["enable_thinking"] = enable_thinking
856
880
  task_group, function = _get_task_group_and_task(__name__)
857
881
 
858
882
  # pylint: disable=protected-access
@@ -18,6 +18,7 @@ from dashscope.common.constants import (
18
18
  )
19
19
  from dashscope.common.error import InputDataRequired, UnsupportedApiProtocol
20
20
  from dashscope.common.logging import logger
21
+ from dashscope.common.utils import get_sdk_headers
21
22
  from dashscope.protocol.websocket import WebsocketStreamingMode
22
23
 
23
24
 
@@ -191,8 +192,11 @@ def _build_api_request( # pylint: disable=too-many-branches
191
192
  "websocket]",
192
193
  )
193
194
 
195
+ merged_headers = dict(get_sdk_headers())
194
196
  if headers is not None:
195
- request.add_headers(headers=headers)
197
+ merged_headers.update(headers)
198
+ if merged_headers:
199
+ request.add_headers(headers=merged_headers)
196
200
 
197
201
  if input is None and form is None:
198
202
  raise InputDataRequired("There is no input data and form data")
@@ -5,7 +5,7 @@ import os
5
5
  from abc import ABC, abstractmethod
6
6
 
7
7
  from dashscope.common.constants import DASHSCOPE_DISABLE_DATA_INSPECTION_ENV
8
- from dashscope.common.utils import get_user_agent
8
+ from dashscope.common.utils import get_sdk_headers, get_user_agent
9
9
 
10
10
 
11
11
  class BaseRequest(ABC):
@@ -17,6 +17,7 @@ class BaseRequest(ABC):
17
17
  ua += "; " + user_agent
18
18
 
19
19
  self.headers = {"user-agent": ua}
20
+ self.headers.update(get_sdk_headers())
20
21
  disable_data_inspection = os.environ.get(
21
22
  DASHSCOPE_DISABLE_DATA_INSPECTION_ENV,
22
23
  "true",