dashscope 1.27.2__tar.gz → 1.27.4__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 (366) hide show
  1. {dashscope-1.27.2 → dashscope-1.27.4}/PKG-INFO +30 -13
  2. {dashscope-1.27.2 → dashscope-1.27.4}/README.md +11 -5
  3. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/__init__.py +2 -0
  4. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/__init__.pyi +1 -0
  5. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/__init__.py +7 -1
  6. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agent.py +206 -43
  7. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/__init__.py +36 -22
  8. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_setup.py +2 -2
  9. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/repl.py +9 -2
  10. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/runners.py +13 -2
  11. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/config.py +26 -5
  12. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/config.toml +1 -1
  13. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/custom-extensions.toml +2 -1
  14. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/README.md +3 -3
  15. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/custom-extensions.toml +1 -1
  16. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/README.md +1 -1
  17. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/executor.py +25 -1
  18. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/manager.py +6 -1
  19. dashscope-1.27.4/dashscope/acli/memory/reflection.py +337 -0
  20. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/hardening.py +17 -6
  21. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/profile.py +1 -1
  22. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/tongyi.py +11 -1
  23. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/sdk.py +1 -1
  24. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/browser.py +3 -2
  25. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/camera.py +2 -2
  26. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/registry.py +1 -0
  27. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/shell.py +42 -13
  28. dashscope-1.27.4/dashscope/acli/tools/vision.py +263 -0
  29. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/embedded.py +2 -2
  30. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/tui.py +69 -3
  31. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/__init__.py +16 -0
  32. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/client.py +6 -0
  33. dashscope-1.27.4/dashscope/agentstudio/constants.py +205 -0
  34. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/__init__.py +6 -0
  35. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/_helpers.py +17 -0
  36. dashscope-1.27.4/dashscope/agentstudio/resources/webhook_endpoints.py +280 -0
  37. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/transport.py +2 -0
  38. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/types/__init__.py +9 -0
  39. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/types/models.py +91 -0
  40. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/types/params.py +23 -0
  41. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/video_synthesis.py +25 -1
  42. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/api_request_factory.py +7 -1
  43. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/base_request.py +2 -1
  44. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/encryption.py +2 -0
  45. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/http_request.py +99 -4
  46. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/app/application.py +1 -0
  47. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/http_tts/http_speech_synthesizer.py +4 -1
  48. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_omni/omni_realtime.py +2 -1
  49. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts_realtime/qwen_tts_realtime.py +2 -1
  50. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts_v2/speech_synthesizer.py +2 -1
  51. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/__init__.py +6 -1
  52. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/deployments.py +12 -5
  53. dashscope-1.27.4/dashscope/cli/image_generation.py +193 -0
  54. dashscope-1.27.4/dashscope/cli/image_synthesis.py +177 -0
  55. dashscope-1.27.4/dashscope/cli/transcription.py +211 -0
  56. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/client/base_api.py +44 -14
  57. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/utils.py +58 -1
  58. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/deployments.py +11 -0
  59. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/__init__.py +10 -0
  60. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/utils.py +6 -1
  61. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/models.py +2 -1
  62. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/multimodal_dialog.py +2 -1
  63. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/tingwu/tingwu.py +1 -0
  64. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/tingwu/tingwu_realtime.py +2 -1
  65. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/version.py +1 -1
  66. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/PKG-INFO +30 -13
  67. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/SOURCES.txt +2 -0
  68. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/requires.txt +22 -7
  69. dashscope-1.27.4/requirements.txt +10 -0
  70. {dashscope-1.27.2 → dashscope-1.27.4}/setup.py +20 -0
  71. dashscope-1.27.2/dashscope/acli/memory/reflection.py +0 -69
  72. dashscope-1.27.2/dashscope/agentstudio/constants.py +0 -95
  73. dashscope-1.27.2/dashscope/cli/image_generation.py +0 -88
  74. dashscope-1.27.2/dashscope/cli/image_synthesis.py +0 -68
  75. dashscope-1.27.2/dashscope/cli/transcription.py +0 -102
  76. dashscope-1.27.2/requirements.txt +0 -15
  77. {dashscope-1.27.2 → dashscope-1.27.4}/LICENSE +0 -0
  78. {dashscope-1.27.2 → dashscope-1.27.4}/LICENSE.certifi +0 -0
  79. {dashscope-1.27.2 → dashscope-1.27.4}/MANIFEST.in +0 -0
  80. {dashscope-1.27.2 → dashscope-1.27.4}/NOTICE +0 -0
  81. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/__main__.py +0 -0
  82. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/__init__.py +0 -0
  83. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/delegate.py +0 -0
  84. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/subagent.py +0 -0
  85. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/subagents.py +0 -0
  86. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/audit.py +0 -0
  87. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/capabilities/__init__.py +0 -0
  88. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/capabilities/local_memory.py +0 -0
  89. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/completer.py +0 -0
  90. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/constants.py +0 -0
  91. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/dispatch.py +0 -0
  92. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/examples.py +0 -0
  93. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_capability.py +0 -0
  94. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_config.py +0 -0
  95. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_device.py +0 -0
  96. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_key.py +0 -0
  97. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_misc.py +0 -0
  98. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_profile.py +0 -0
  99. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_provider.py +0 -0
  100. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_session.py +0 -0
  101. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_skill.py +0 -0
  102. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/mcp.py +0 -0
  103. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/multimodal.py +0 -0
  104. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/startup.py +0 -0
  105. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/streaming.py +0 -0
  106. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/commands.py +0 -0
  107. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/compression.py +0 -0
  108. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/debuglog.py +0 -0
  109. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/deliverable.py +0 -0
  110. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/dev.py +0 -0
  111. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/eval/__init__.py +0 -0
  112. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/hooks.toml +0 -0
  113. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/explain-code.md +0 -0
  114. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/research-topic.md +0 -0
  115. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/translate.md +0 -0
  116. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/write-poem.md +0 -0
  117. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/system-prompt.md +0 -0
  118. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/config.toml +0 -0
  119. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/hooks.toml +0 -0
  120. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/agent.md +0 -0
  121. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/api-doc.md +0 -0
  122. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/cli.md +0 -0
  123. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/diagnose.md +0 -0
  124. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/error-code.md +0 -0
  125. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/explain-code.md +0 -0
  126. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/fine-tuning.md +0 -0
  127. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/multimodal.md +0 -0
  128. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/retrieval.md +0 -0
  129. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/sdk-example.md +0 -0
  130. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/speech.md +0 -0
  131. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/text-generation.md +0 -0
  132. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/translate.md +0 -0
  133. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/system-prompt.md +0 -0
  134. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/extensions.py +0 -0
  135. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/hooks.py +0 -0
  136. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/mcp_server.py +0 -0
  137. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/mcp_stdio.py +0 -0
  138. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/__init__.py +0 -0
  139. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/directives_learning.py +0 -0
  140. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/experience.py +0 -0
  141. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/plan.py +0 -0
  142. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/skill_evolution.py +0 -0
  143. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/tool_chains.py +0 -0
  144. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/trace.py +0 -0
  145. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/permission.py +0 -0
  146. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/__init__.py +0 -0
  147. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/bailian/__init__.py +0 -0
  148. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/bailian/cli.py +0 -0
  149. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/bailian/mcp.py +0 -0
  150. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/base.py +0 -0
  151. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/local/__init__.py +0 -0
  152. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/local/history.py +0 -0
  153. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/local/memory.py +0 -0
  154. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/prompt.py +0 -0
  155. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/prompt_pipeline.py +0 -0
  156. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/__init__.py +0 -0
  157. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/adapter.py +0 -0
  158. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/anthropic.py +0 -0
  159. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/base.py +0 -0
  160. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/openai.py +0 -0
  161. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/sandbox.py +0 -0
  162. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/scheduler.py +0 -0
  163. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/session.py +0 -0
  164. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/session_events.py +0 -0
  165. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/__init__.py +0 -0
  166. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/base.py +0 -0
  167. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/manager.py +0 -0
  168. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/package.py +0 -0
  169. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/store.py +0 -0
  170. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/__init__.py +0 -0
  171. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/checkpoint.py +0 -0
  172. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/evolution.py +0 -0
  173. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/filesystem.py +0 -0
  174. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/platform.py +0 -0
  175. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/session.py +0 -0
  176. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/skills.py +0 -0
  177. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/web_search.py +0 -0
  178. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/__init__.py +0 -0
  179. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/camera.py +0 -0
  180. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/tts.py +0 -0
  181. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/voice.py +0 -0
  182. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/__init__.py +0 -0
  183. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/clipboard.py +0 -0
  184. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/crypto.py +0 -0
  185. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/exceptions.py +0 -0
  186. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/ids.py +0 -0
  187. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/images.py +0 -0
  188. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/keywords.py +0 -0
  189. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/messages.py +0 -0
  190. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/paths.py +0 -0
  191. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/sanitizer.py +0 -0
  192. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/spinner.py +0 -0
  193. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/template.py +0 -0
  194. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/text.py +0 -0
  195. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/toml.py +0 -0
  196. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/validation.py +0 -0
  197. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/exceptions.py +0 -0
  198. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/pagination.py +0 -0
  199. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/agents.py +0 -0
  200. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/deployments.py +0 -0
  201. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/environments.py +0 -0
  202. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/files.py +0 -0
  203. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/session_events.py +0 -0
  204. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/sessions.py +0 -0
  205. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/skills.py +0 -0
  206. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/vaults.py +0 -0
  207. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/streaming.py +0 -0
  208. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/__init__.py +0 -0
  209. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/chat_completion.py +0 -0
  210. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/code_generation.py +0 -0
  211. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/conversation.py +0 -0
  212. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/generation.py +0 -0
  213. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/image_generation.py +0 -0
  214. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/image_synthesis.py +0 -0
  215. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/multimodal_conversation.py +0 -0
  216. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/__init__.py +0 -0
  217. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/aio_session.py +0 -0
  218. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/aiohttp_request.py +0 -0
  219. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/api_request_data.py +0 -0
  220. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/chat_completion_types.py +0 -0
  221. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/dashscope_response.py +0 -0
  222. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/websocket_request.py +0 -0
  223. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/app/__init__.py +0 -0
  224. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/app/application_response.py +0 -0
  225. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/__init__.py +0 -0
  226. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/assistant_types.py +0 -0
  227. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/assistants.py +0 -0
  228. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/files.py +0 -0
  229. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/__init__.py +0 -0
  230. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/__init__.py +0 -0
  231. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/asr_phrase_manager.py +0 -0
  232. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/recognition.py +0 -0
  233. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/transcription.py +0 -0
  234. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/translation_recognizer.py +0 -0
  235. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/vocabulary.py +0 -0
  236. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/http_tts/__init__.py +0 -0
  237. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_asr/__init__.py +0 -0
  238. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_asr/qwen_transcription.py +0 -0
  239. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_omni/__init__.py +0 -0
  240. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts/__init__.py +0 -0
  241. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts/speech_synthesizer.py +0 -0
  242. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts_realtime/__init__.py +0 -0
  243. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts/__init__.py +0 -0
  244. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts/speech_synthesizer.py +0 -0
  245. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts_v2/__init__.py +0 -0
  246. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts_v2/enrollment.py +0 -0
  247. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/__main__.py +0 -0
  248. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/agentic_rl.py +0 -0
  249. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/application.py +0 -0
  250. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/auth.py +0 -0
  251. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/code_generation.py +0 -0
  252. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/common.py +0 -0
  253. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/embeddings.py +0 -0
  254. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/files.py +0 -0
  255. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/fine_tunes.py +0 -0
  256. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/generation.py +0 -0
  257. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/models.py +0 -0
  258. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/multimodal_conversation.py +0 -0
  259. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/multimodal_embedding.py +0 -0
  260. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/oss.py +0 -0
  261. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/rerank.py +0 -0
  262. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/speech_synthesis.py +0 -0
  263. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/tokenization.py +0 -0
  264. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/understanding.py +0 -0
  265. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/video_synthesis.py +0 -0
  266. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/client/__init__.py +0 -0
  267. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/__init__.py +0 -0
  268. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/api_key.py +0 -0
  269. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/base_type.py +0 -0
  270. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/constants.py +0 -0
  271. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/env.py +0 -0
  272. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/error.py +0 -0
  273. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/logging.py +0 -0
  274. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/message_manager.py +0 -0
  275. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/__init__.py +0 -0
  276. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/batch_text_embedding.py +0 -0
  277. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/batch_text_embedding_response.py +0 -0
  278. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/multimodal_embedding.py +0 -0
  279. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/text_embedding.py +0 -0
  280. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/files.py +0 -0
  281. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/__init__.py +0 -0
  282. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/agentic_rl.py +0 -0
  283. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/customize_types.py +0 -0
  284. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/finetunes.py +0 -0
  285. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/__init__.py +0 -0
  286. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/constants.py +0 -0
  287. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/errors.py +0 -0
  288. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/log.py +0 -0
  289. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/model.py +0 -0
  290. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/model_types.py +0 -0
  291. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/__init__.py +0 -0
  292. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/__init__.py +0 -0
  293. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/base_data_model.py +0 -0
  294. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/group_reward_input.py +0 -0
  295. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/group_reward_output.py +0 -0
  296. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/reward_input.py +0 -0
  297. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/reward_output.py +0 -0
  298. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/rollout_input.py +0 -0
  299. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/rollout_output.py +0 -0
  300. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/__init__.py +0 -0
  301. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/group_reward_processor_demo.py +0 -0
  302. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/reward_processor_demo.py +0 -0
  303. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/rollout_processor_demo.py +0 -0
  304. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/func_decorator.py +0 -0
  305. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/func_manager.py +0 -0
  306. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/__init__.py +0 -0
  307. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/__init__.py +0 -0
  308. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/_core.py +0 -0
  309. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/llm_dashscope.py +0 -0
  310. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/llm_openai.py +0 -0
  311. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/llm_span.py +0 -0
  312. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/messages.py +0 -0
  313. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/tools.py +0 -0
  314. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/processor_span.py +0 -0
  315. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/tracing.py +0 -0
  316. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/__init__.py +0 -0
  317. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/base_parser.py +0 -0
  318. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/group_reward_parser.py +0 -0
  319. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/reward_parser.py +0 -0
  320. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/rollout_parser.py +0 -0
  321. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/__init__.py +0 -0
  322. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_group_reward_processor.py +0 -0
  323. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_processor.py +0 -0
  324. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_reward_processor.py +0 -0
  325. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_rollout_processor.py +0 -0
  326. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/server/__init__.py +0 -0
  327. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/server/server.py +0 -0
  328. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/io/__init__.py +0 -0
  329. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/io/input_output.py +0 -0
  330. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/model.py +0 -0
  331. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/__init__.py +0 -0
  332. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/dialog_state.py +0 -0
  333. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/multimodal_constants.py +0 -0
  334. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/multimodal_request_params.py +0 -0
  335. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/tingwu/__init__.py +0 -0
  336. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/nlp/__init__.py +0 -0
  337. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/nlp/understanding.py +0 -0
  338. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/protocol/__init__.py +0 -0
  339. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/protocol/websocket.py +0 -0
  340. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/py.typed +0 -0
  341. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/rerank/__init__.py +0 -0
  342. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/rerank/text_rerank.py +0 -0
  343. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/resources/qwen.tiktoken +0 -0
  344. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/__init__.py +0 -0
  345. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/messages/__init__.py +0 -0
  346. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/messages/files.py +0 -0
  347. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/messages/messages.py +0 -0
  348. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/runs/__init__.py +0 -0
  349. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/runs/runs.py +0 -0
  350. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/runs/steps.py +0 -0
  351. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/thread_types.py +0 -0
  352. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/threads.py +0 -0
  353. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/__init__.py +0 -0
  354. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/qwen_tokenizer.py +0 -0
  355. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/tokenization.py +0 -0
  356. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/tokenizer.py +0 -0
  357. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/tokenizer_base.py +0 -0
  358. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/__init__.py +0 -0
  359. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/message_utils.py +0 -0
  360. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/oss_utils.py +0 -0
  361. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/param_utils.py +0 -0
  362. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/dependency_links.txt +0 -0
  363. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/entry_points.txt +0 -0
  364. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/not-zip-safe +0 -0
  365. {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/top_level.txt +0 -0
  366. {dashscope-1.27.2 → dashscope-1.27.4}/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.4
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
 
@@ -31,6 +31,7 @@ from dashscope.audio.http_tts.http_speech_synthesizer import (
31
31
  )
32
32
  from dashscope.audio.tts.speech_synthesizer import SpeechSynthesizer
33
33
  from dashscope.api_entities.aio_session import close_shared_aio_session
34
+ from dashscope.api_entities.http_request import close_shared_sync_session
34
35
  from dashscope.common.api_key import save_api_key
35
36
  from dashscope.common.env import (
36
37
  api_key,
@@ -89,6 +90,7 @@ __all__ = [
89
90
  "api_key_file_path",
90
91
  "save_api_key",
91
92
  "close_shared_aio_session",
93
+ "close_shared_sync_session",
92
94
  "AioGeneration",
93
95
  "Conversation",
94
96
  "Generation",
@@ -22,6 +22,7 @@ base_websocket_api_url: str
22
22
 
23
23
  def save_api_key(api_key: str, file_path: Optional[str] = ...) -> None: ...
24
24
  def close_shared_aio_session() -> None: ...
25
+ def close_shared_sync_session() -> None: ...
25
26
 
26
27
  # ---------------------------------------------------------------------------
27
28
  # Response types
@@ -1,7 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  from __future__ import annotations
3
3
 
4
- __version__ = "0.6.2"
4
+ import uuid
5
+
6
+ __version__ = "0.6.4"
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
5
11
 
6
12
  # Expose the lightweight programmatic SDK at the package root.
7
13
  try:
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import asyncio
6
6
  import json
7
+ import os
7
8
  import time
8
9
  from pathlib import Path
9
10
  from typing import AsyncIterator
@@ -21,9 +22,14 @@ from dashscope.acli.config import WORKSPACE_DIR, context_window_for_model
21
22
  from dashscope.acli.executor import EXEC_ERROR_PREFIX, Executor
22
23
  from dashscope.acli.hooks import HookBus, HookContext, create_hook_bus
23
24
  from dashscope.acli.memory.manager import MemoryManager
25
+ from dashscope.acli.memory.reflection import (
26
+ convergence_hint,
27
+ is_readonly_tool_call,
28
+ )
24
29
  from dashscope.acli.platforms.base import MemoryProvider
25
30
  from dashscope.acli.prompt_pipeline import PromptContext, default_pipeline
26
31
  from dashscope.acli.providers.base import LLMProvider, LLMResponse, ToolCall
32
+ from dashscope.acli.providers.hardening import is_retryable_error
27
33
  from dashscope.acli.skills import get_skill_manager, skills_summary_for_llm
28
34
  from dashscope.acli.tools.registry import PermissionLevel, registry
29
35
  from dashscope.acli.utils import (
@@ -74,11 +80,16 @@ Rules:
74
80
  2. Only use file paths inside the current working directory, paths explicitly
75
81
  given by the user, or paths relative to the CWD. Never invent, guess, or
76
82
  reuse paths seen in training data (e.g. /Users/xxx/...)
77
- 3. For clear-intent requests (git commit, read file, search, edit code), call
78
- tools directly without stating a plan first. Only for irreversible
79
- operations (delete, overwrite, force push) or complex multi-step tasks,
80
- briefly explain and wait for user confirmation
81
- 4. If a task needs multiple steps, execute them one by one and report progress
83
+ 3. For clear-intent requests (git commit, read file, search), call tools
84
+ directly without stating a plan first. For code changes, go straight to
85
+ the edit — but you must verify it afterwards (rule 18). Only for
86
+ irreversible operations (delete, overwrite, force push) or complex
87
+ multi-step tasks, briefly explain and wait for user confirmation
88
+ 4. If a task needs several steps (refactor, new feature, multi-file change),
89
+ call create_plan with the goal and its steps first, then execute them one
90
+ by one, marking each with complete_step — the plan is echoed back to you
91
+ as "## Current plan" on every later turn. For a 2-3 step task, skip the
92
+ plan and just do it
82
93
  5. When a tool call fails, do not retry the same call; report the error to
83
94
  the user with a suggestion
84
95
  6. Tools prefixed [MCP:xxx] come from Bailian MCP services; call them directly
@@ -110,10 +121,15 @@ Rules:
110
121
  but lengthy subtask (whole-file review, multi-file scan) → call
111
122
  subagent_invoke for isolated execution and take back only the conclusion.
112
123
  Do not grind through them serially yourself
124
+ 18. **Verify code changes before reporting done.** Run the tests that cover
125
+ what you touched; if nothing covers it, add a focused test for the new
126
+ behaviour and run that. Report the command and its pass/fail result —
127
+ never claim a change works without having executed it
113
128
 
114
129
  Reply style:
115
- - **Concise**. No filler like "let me see / test this / verify / let me help
116
- you / I'll analyze it"; just act or give the answer
130
+ - **Concise**. No filler like "let me see / let me help you / I'll analyze
131
+ it"; just act or give the answer. Announcing that you are about to verify
132
+ is filler; running the check and reporting its result is not
117
133
  - **One shot**. Read files with read_file (use offset/limit for large spans);
118
134
  never use python3 -c inline scripts for file I/O
119
135
  - **Batch in parallel**. Issue multiple independent tool calls for the same
@@ -121,8 +137,9 @@ Reply style:
121
137
  - **No re-confirmation**. Do not re-read facts already fetched; if a tool
122
138
  fails once, report the error to the user instead of retrying a rephrased
123
139
  version of the same action
124
- - Do not summarize what you just did unless asked — the user can see the
125
- diff / output
140
+ - Do not recap the diff or restate what you just did unless asked — but do
141
+ report verification results (command + pass/fail), which the user cannot
142
+ see for themselves
126
143
  - User input may come from voice transcription (/v command); just understand
127
144
  the intent and do not comment on the voice/recording feature itself"""
128
145
 
@@ -146,6 +163,7 @@ class Agent:
146
163
  hook_bus: HookBus | None = None,
147
164
  memory_manager: MemoryManager | None = None,
148
165
  json_mode: bool = False,
166
+ oneshot: bool = False,
149
167
  ):
150
168
  self.provider = provider
151
169
  self.executor = executor
@@ -155,6 +173,46 @@ class Agent:
155
173
  self.allowed_tools = allowed_tools
156
174
  self.hook_bus = hook_bus or create_hook_bus()
157
175
  self.json_mode = json_mode
176
+ self.oneshot = oneshot
177
+ # Hard stop for read-only stalls in oneshot (benchmark/script) mode.
178
+ # Env override: ACLI_READONLY_HARD_CAP (0 disables).
179
+ try:
180
+ self.readonly_hard_cap = int(
181
+ os.environ.get("ACLI_READONLY_HARD_CAP", "40"),
182
+ )
183
+ except ValueError:
184
+ self.readonly_hard_cap = 40
185
+ # Turn-level retry: a transient model-API failure that exhausts the
186
+ # provider's own retries must not kill a long run. Re-run the current
187
+ # turn (only when nothing was streamed yet, to avoid duplicate output)
188
+ # up to turn_retry_max times with capped exponential backoff.
189
+ # Env override: ACLI_TURN_RETRY_MAX (0 disables).
190
+ try:
191
+ self.turn_retry_max = int(
192
+ os.environ.get("ACLI_TURN_RETRY_MAX", "2"),
193
+ )
194
+ except ValueError:
195
+ self.turn_retry_max = 2
196
+ self.turn_retry_delay = 5.0
197
+ self.turn_retry_backoff_cap = 30.0
198
+ # Budget-aware convergence nudge (oneshot only): as the turn budget is
199
+ # consumed, tell the agent to switch approach if plateaued, lock in an
200
+ # already-passing result, then finalize. Covers productive-but-stuck
201
+ # iteration that ReflectionTracker (failures) and StagnationTracker
202
+ # (read-only stalls) both miss. Env: ACLI_CONVERGE_SOFT/_HARD (ratios;
203
+ # soft >= 1.0 disables).
204
+ try:
205
+ self.converge_soft_ratio = float(
206
+ os.environ.get("ACLI_CONVERGE_SOFT", "0.6"),
207
+ )
208
+ except ValueError:
209
+ self.converge_soft_ratio = 0.6
210
+ try:
211
+ self.converge_hard_ratio = float(
212
+ os.environ.get("ACLI_CONVERGE_HARD", "0.85"),
213
+ )
214
+ except ValueError:
215
+ self.converge_hard_ratio = 0.85
158
216
  # Load custom system prompt: workspace .acli/system-prompt.md first,
159
217
  # then global ~/.acli/system-prompt.md, then built-in default.
160
218
  # runners.py pre-populates system_prompt via _load_system_prompt();
@@ -167,6 +225,26 @@ class Agent:
167
225
  )
168
226
 
169
227
  self.system_prompt = _compose_system_prompt(_load_system_prompt())
228
+ if self.oneshot:
229
+ self.system_prompt = (self.system_prompt or SYSTEM_PROMPT) + (
230
+ "\n\nTask execution policy (autonomous mode):\n"
231
+ "- If the request has a measurable acceptance criterion "
232
+ "(numeric threshold, size/time limit, test suite, "
233
+ "similarity/accuracy target), iterate until it is met: "
234
+ "implement -> measure against the criterion -> refine. Do "
235
+ "not stop at the first version that merely runs; optimize "
236
+ "toward the target — but once the criterion is met, lock it "
237
+ "in and finish rather than risk regressing a passing result. "
238
+ "Heed any budget-check hint: it tells you when to converge "
239
+ "or switch to a different approach.\n"
240
+ "- Before reporting completion, self-verify with the same "
241
+ "check the requester will apply (run the tests, recompute "
242
+ "the metric, validate the format). Fix what fails instead "
243
+ "of handing back a near miss.\n"
244
+ "- When a check fails close to the target, treat it as "
245
+ "actionable feedback: change the approach based on what "
246
+ "the measurement shows, then re-measure."
247
+ )
170
248
  # Discover project instructions from CWD (rules.jsonl,
171
249
  # .cursorrules, etc.)
172
250
  from dashscope.acli.prompt import discover_project_instructions
@@ -390,6 +468,29 @@ class Agent:
390
468
  return tracker.get_reflection_hint()
391
469
  return ""
392
470
 
471
+ def _stagnation_section(self) -> str:
472
+ """Inject a convergence nudge on long read-only streaks."""
473
+ tracker = self.memory_manager.session.stagnation
474
+ if not tracker.needs_nudge():
475
+ return ""
476
+ cap = self.readonly_hard_cap if self.oneshot else None
477
+ return tracker.get_stagnation_hint(hard_cap=cap)
478
+
479
+ def _convergence_section(self, loop_index: int) -> str:
480
+ """Inject a budget-aware converge/switch nudge in oneshot runs.
481
+
482
+ Fires on the fraction of the turn budget consumed, covering the
483
+ productive-but-plateaued loop that failure/read-only trackers miss.
484
+ """
485
+ if not self.oneshot:
486
+ return ""
487
+ return convergence_hint(
488
+ loop_index,
489
+ self.max_turns,
490
+ self.converge_soft_ratio,
491
+ self.converge_hard_ratio,
492
+ )
493
+
393
494
  async def _recall_memory(self, user_input) -> str:
394
495
  """Search for relevant profile info and format as context.
395
496
 
@@ -486,6 +587,7 @@ class Agent:
486
587
 
487
588
  # Reset reflection tracker for new turn
488
589
  self.memory_manager.session.reflection.reset()
590
+ self.memory_manager.session.stagnation.reset()
489
591
 
490
592
  # Recall relevant memories
491
593
  memory_context = await self._recall_memory(user_input_text)
@@ -548,9 +650,29 @@ class Agent:
548
650
  # The hint is appended, keeping the cache-friendly prefix stable.
549
651
  reflection_hint = self._reflection_section()
550
652
  messages_with_system[0]["content"] = (
551
- system_prompt + reflection_hint
653
+ system_prompt
654
+ + reflection_hint
655
+ + self._stagnation_section()
656
+ + self._convergence_section(_loop_i)
552
657
  )
553
658
 
659
+ # Hard stop for read-only stalls in oneshot mode: finish with
660
+ # whatever is on hand instead of inspecting forever.
661
+ if (
662
+ self.oneshot
663
+ and self.readonly_hard_cap
664
+ and self.memory_manager.session.stagnation.readonly_streak
665
+ >= self.readonly_hard_cap
666
+ ):
667
+ stop_msg = (
668
+ f"\n[Stopped: {self.readonly_hard_cap} consecutive "
669
+ "read-only tool calls with no progress. Ending the run "
670
+ "to avoid an infinite verification loop.]\n"
671
+ )
672
+ yield stop_msg
673
+ last_content = stop_msg
674
+ break
675
+
554
676
  full_content = ""
555
677
  full_reasoning = ""
556
678
  tool_calls: list[ToolCall] = []
@@ -558,41 +680,79 @@ class Agent:
558
680
  last_chunk = None
559
681
  llm_start = time.monotonic()
560
682
 
561
- async for chunk in self.provider.chat_stream(
562
- normalize_for_model(messages_with_system, self.model_name),
563
- tools_schema,
564
- response_format=(
565
- {"type": "json_object"} if self.json_mode else None
566
- ),
567
- ):
568
- if chunk.delta_content:
569
- full_content += chunk.delta_content
570
-
571
- yield chunk.delta_content
572
-
573
- if chunk.delta_reasoning_content:
574
- full_reasoning += chunk.delta_reasoning_content
575
-
576
- if chunk.tool_calls:
577
- for tc in chunk.tool_calls:
578
- key = (
579
- tc.name,
580
- json.dumps(
581
- tc.arguments,
582
- sort_keys=True,
583
- ensure_ascii=False,
683
+ # Turn-level retry around the streaming call. A transient
684
+ # model-API failure that survives the provider's own retries is
685
+ # re-attempted here so a single network blip cannot abort a long
686
+ # run. We only retry when nothing has been streamed yet; once
687
+ # content is yielded, a retry would duplicate output, so we let
688
+ # the error propagate.
689
+ turn_attempt = 0
690
+ while True:
691
+ full_content = ""
692
+ full_reasoning = ""
693
+ tool_calls = []
694
+ seen_tool_calls = set()
695
+ last_chunk = None
696
+ emitted = False
697
+ try:
698
+ async for chunk in self.provider.chat_stream(
699
+ normalize_for_model(
700
+ messages_with_system,
701
+ self.model_name,
702
+ ),
703
+ tools_schema,
704
+ response_format=(
705
+ {"type": "json_object"} if self.json_mode else None
706
+ ),
707
+ ):
708
+ if chunk.delta_content:
709
+ emitted = True
710
+ full_content += chunk.delta_content
711
+
712
+ yield chunk.delta_content
713
+
714
+ if chunk.delta_reasoning_content:
715
+ emitted = True
716
+ full_reasoning += chunk.delta_reasoning_content
717
+
718
+ if chunk.tool_calls:
719
+ emitted = True
720
+ for tc in chunk.tool_calls:
721
+ key = (
722
+ tc.name,
723
+ json.dumps(
724
+ tc.arguments,
725
+ sort_keys=True,
726
+ ensure_ascii=False,
727
+ ),
728
+ )
729
+ if key in seen_tool_calls:
730
+ continue
731
+ seen_tool_calls.add(key)
732
+ tool_calls.append(tc)
733
+
734
+ # Record token usage from the last chunk
735
+
736
+ if chunk.usage:
737
+ self.executor.record_api_call(chunk.usage)
738
+ last_chunk = chunk
739
+ break
740
+ except Exception as e:
741
+ if (
742
+ not emitted
743
+ and is_retryable_error(e)
744
+ and turn_attempt < self.turn_retry_max
745
+ ):
746
+ turn_attempt += 1
747
+ await asyncio.sleep(
748
+ min(
749
+ self.turn_retry_delay
750
+ * (2 ** (turn_attempt - 1)),
751
+ self.turn_retry_backoff_cap,
584
752
  ),
585
753
  )
586
- if key in seen_tool_calls:
587
- continue
588
- seen_tool_calls.add(key)
589
- tool_calls.append(tc)
590
-
591
- # Record token usage from the last chunk
592
-
593
- if chunk.usage:
594
- self.executor.record_api_call(chunk.usage)
595
- last_chunk = chunk
754
+ continue
755
+ raise
596
756
 
597
757
  # Log LLM call trace
598
758
  self.executor.record_prompt_composition(
@@ -1018,6 +1178,9 @@ class Agent:
1018
1178
  # is neutral and must not feed the consecutive-failure counter.
1019
1179
  if not result.startswith(_TOOL_CANCEL_PREFIXES):
1020
1180
  self.memory_manager.record_tool_execution(tool_call.name, success)
1181
+ self.memory_manager.session.stagnation.record(
1182
+ is_readonly_tool_call(tool_call.name, tool_call.arguments),
1183
+ )
1021
1184
  if success:
1022
1185
  self._turn_tool_successes += 1
1023
1186
  else:
@@ -86,6 +86,33 @@ from dashscope.acli.cli.streaming import ( # noqa: F401,E402
86
86
  _scheduler = None
87
87
 
88
88
 
89
+ def _apply_cli_overrides(
90
+ config: Config,
91
+ protocol_override: str | None,
92
+ max_turns_override: str | None,
93
+ ) -> None:
94
+ """Apply --protocol/--max-turns to a loaded config; exit on bad input."""
95
+ if protocol_override:
96
+ if protocol_override.lower() in ("openai", "anthropic"):
97
+ config.protocol = protocol_override.lower()
98
+ else:
99
+ print(
100
+ f"Error: unknown protocol '{protocol_override}' "
101
+ f"(choices: openai, anthropic)",
102
+ )
103
+ sys.exit(1)
104
+
105
+ if max_turns_override is not None:
106
+ try:
107
+ config.max_turns = int(max_turns_override)
108
+ except ValueError:
109
+ print(
110
+ f"Error: --max-turns must be an integer, got "
111
+ f"'{max_turns_override}'",
112
+ )
113
+ sys.exit(1)
114
+
115
+
89
116
  def main():
90
117
  # Parse --cli / --tui / --dry-run flags (can appear anywhere in argv)
91
118
  use_cli = "--cli" in sys.argv
@@ -146,7 +173,7 @@ def main():
146
173
  )
147
174
  print(
148
175
  " --max-turns <n> Override max conversation "
149
- "turns (default 1000)",
176
+ "turns (default from config: 50)",
150
177
  )
151
178
  print(
152
179
  " --dry-run Preview current config (loaded "
@@ -175,6 +202,13 @@ def main():
175
202
  print('Usage: acli -c "your request"')
176
203
  sys.exit(1)
177
204
  config = Config.load()
205
+ # This branch returns before main()'s override tail, so the
206
+ # flags must be applied here or oneshot silently ignores them.
207
+ _apply_cli_overrides(
208
+ config,
209
+ protocol_override,
210
+ max_turns_override,
211
+ )
178
212
  asyncio.run(_run_oneshot(config, prompt))
179
213
  return
180
214
  elif arg in ("example", "examples"):
@@ -186,27 +220,7 @@ def main():
186
220
  _mcp_server_main()
187
221
  return
188
222
  config = Config.load()
189
- # Apply --protocol override
190
- if protocol_override:
191
- if protocol_override.lower() in ("openai", "anthropic"):
192
- config.protocol = protocol_override.lower()
193
- else:
194
- print(
195
- f"Error: unknown protocol '{protocol_override}' "
196
- f"(choices: openai, anthropic)",
197
- )
198
- sys.exit(1)
199
-
200
- # Apply --max-turns override
201
- if max_turns_override is not None:
202
- try:
203
- config.max_turns = int(max_turns_override)
204
- except ValueError:
205
- print(
206
- f"Error: --max-turns must be an integer, got "
207
- f"'{max_turns_override}'",
208
- )
209
- sys.exit(1)
223
+ _apply_cli_overrides(config, protocol_override, max_turns_override)
210
224
 
211
225
  # Handle --dry-run: preview configuration without starting the agent
212
226
  if use_dry_run:
@@ -192,7 +192,7 @@ def _setup_finalize(config: Config, agent) -> None:
192
192
 
193
193
  def _apply_preset_bailian(config: Config) -> None:
194
194
  config.provider = "tongyi"
195
- config.model = "qwen3.7-plus"
195
+ config.model = "qwen3.8-max"
196
196
  config.enabled_capabilities = [
197
197
  "bailian.mcp",
198
198
  "bailian.cli",
@@ -284,7 +284,7 @@ async def _handle_setup(config: Config, agent) -> None:
284
284
  console.print("\nSelect a configuration mode:")
285
285
  console.print(
286
286
  " [cyan][1][/cyan] [bold]Alibaba/Bailian[/bold] (default) — "
287
- "tongyi/qwen3.7-plus + bailian.mcp/cli",
287
+ "tongyi/qwen3.8-max + bailian.mcp/cli",
288
288
  )
289
289
  console.print(
290
290
  " [cyan][2][/cyan] China general — "
@@ -102,7 +102,10 @@ async def _run_loop(config: Config):
102
102
  sync_extensions_into_catalog(_ext)
103
103
  # _load_plugins() — deprecated; plugins load via the hooks mechanism
104
104
  provider = get_provider_chain(config)
105
- executor = Executor(auto_approve=config.auto_approve)
105
+ executor = Executor(
106
+ auto_approve=config.auto_approve,
107
+ confirm_mode=config.confirm_mode,
108
+ )
106
109
 
107
110
  # Initialize memory
108
111
  # Memory client managed by handlers_profile
@@ -195,6 +198,10 @@ async def _run_loop(config: Config):
195
198
  get_mcp_clients_fn=lambda: _mcp_clients,
196
199
  )
197
200
 
201
+ from dashscope.acli.tools.vision import register_vision_tools
202
+
203
+ register_vision_tools(config, get_provider_fn=get_provider)
204
+
198
205
  from dashscope.acli.tools.evolution import register_evolution_tools
199
206
 
200
207
  register_evolution_tools(get_agent=lambda: agent)
@@ -244,7 +251,7 @@ async def _run_loop(config: Config):
244
251
  if not WORKSPACE_CONFIG_FILE.exists():
245
252
  has_api_key = bool(config.api_key)
246
253
  using_defaults = (
247
- config.provider == "tongyi" and config.model == "qwen3.7-plus"
254
+ config.provider == "tongyi" and config.model == "qwen3.8-max"
248
255
  )
249
256
  if not has_api_key or using_defaults:
250
257
  await _handle_setup(config, agent)