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.
- {dashscope-1.27.2 → dashscope-1.27.4}/PKG-INFO +30 -13
- {dashscope-1.27.2 → dashscope-1.27.4}/README.md +11 -5
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/__init__.py +2 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/__init__.pyi +1 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/__init__.py +7 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agent.py +206 -43
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/__init__.py +36 -22
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_setup.py +2 -2
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/repl.py +9 -2
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/runners.py +13 -2
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/config.py +26 -5
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/config.toml +1 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/custom-extensions.toml +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/README.md +3 -3
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/custom-extensions.toml +1 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/README.md +1 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/executor.py +25 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/manager.py +6 -1
- dashscope-1.27.4/dashscope/acli/memory/reflection.py +337 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/hardening.py +17 -6
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/profile.py +1 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/tongyi.py +11 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/sdk.py +1 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/browser.py +3 -2
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/camera.py +2 -2
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/registry.py +1 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/shell.py +42 -13
- dashscope-1.27.4/dashscope/acli/tools/vision.py +263 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/embedded.py +2 -2
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/tui.py +69 -3
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/__init__.py +16 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/client.py +6 -0
- dashscope-1.27.4/dashscope/agentstudio/constants.py +205 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/__init__.py +6 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/_helpers.py +17 -0
- dashscope-1.27.4/dashscope/agentstudio/resources/webhook_endpoints.py +280 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/transport.py +2 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/types/__init__.py +9 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/types/models.py +91 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/types/params.py +23 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/video_synthesis.py +25 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/api_request_factory.py +7 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/base_request.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/encryption.py +2 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/http_request.py +99 -4
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/app/application.py +1 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/http_tts/http_speech_synthesizer.py +4 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_omni/omni_realtime.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts_realtime/qwen_tts_realtime.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts_v2/speech_synthesizer.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/__init__.py +6 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/deployments.py +12 -5
- dashscope-1.27.4/dashscope/cli/image_generation.py +193 -0
- dashscope-1.27.4/dashscope/cli/image_synthesis.py +177 -0
- dashscope-1.27.4/dashscope/cli/transcription.py +211 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/client/base_api.py +44 -14
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/utils.py +58 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/deployments.py +11 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/__init__.py +10 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/utils.py +6 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/models.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/multimodal_dialog.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/tingwu/tingwu.py +1 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/tingwu/tingwu_realtime.py +2 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/version.py +1 -1
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/PKG-INFO +30 -13
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/SOURCES.txt +2 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/requires.txt +22 -7
- dashscope-1.27.4/requirements.txt +10 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/setup.py +20 -0
- dashscope-1.27.2/dashscope/acli/memory/reflection.py +0 -69
- dashscope-1.27.2/dashscope/agentstudio/constants.py +0 -95
- dashscope-1.27.2/dashscope/cli/image_generation.py +0 -88
- dashscope-1.27.2/dashscope/cli/image_synthesis.py +0 -68
- dashscope-1.27.2/dashscope/cli/transcription.py +0 -102
- dashscope-1.27.2/requirements.txt +0 -15
- {dashscope-1.27.2 → dashscope-1.27.4}/LICENSE +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/LICENSE.certifi +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/MANIFEST.in +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/NOTICE +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/__main__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/delegate.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/subagent.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/agents/subagents.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/audit.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/capabilities/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/capabilities/local_memory.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/completer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/constants.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/dispatch.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/examples.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_capability.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_config.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_device.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_key.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_misc.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_profile.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_provider.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_session.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/handlers_skill.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/mcp.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/multimodal.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/startup.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/cli/streaming.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/commands.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/compression.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/debuglog.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/deliverable.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/dev.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/eval/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/hooks.toml +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/explain-code.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/research-topic.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/translate.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/skills/write-poem.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/basic-chat/.acli/system-prompt.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/config.toml +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/hooks.toml +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/agent.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/api-doc.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/cli.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/diagnose.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/error-code.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/explain-code.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/fine-tuning.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/multimodal.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/retrieval.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/sdk-example.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/speech.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/text-generation.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/skills/translate.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/examples/dashscope-sdk-expert/.acli/system-prompt.md +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/extensions.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/hooks.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/mcp_server.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/mcp_stdio.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/directives_learning.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/experience.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/plan.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/skill_evolution.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/tool_chains.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/memory/trace.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/permission.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/bailian/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/bailian/cli.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/bailian/mcp.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/base.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/local/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/local/history.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/platforms/local/memory.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/prompt.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/prompt_pipeline.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/adapter.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/anthropic.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/base.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/providers/openai.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/sandbox.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/scheduler.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/session.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/session_events.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/base.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/manager.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/package.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/skills/store.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/checkpoint.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/evolution.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/filesystem.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/platform.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/session.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/skills.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/tools/web_search.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/camera.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/tts.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/ui/voice.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/clipboard.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/crypto.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/exceptions.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/ids.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/images.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/keywords.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/messages.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/paths.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/sanitizer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/spinner.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/template.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/text.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/toml.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/acli/utils/validation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/exceptions.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/pagination.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/agents.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/deployments.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/environments.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/files.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/session_events.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/sessions.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/skills.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/resources/vaults.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/agentstudio/streaming.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/chat_completion.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/code_generation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/conversation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/generation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/image_generation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/image_synthesis.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/aigc/multimodal_conversation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/aio_session.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/aiohttp_request.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/api_request_data.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/chat_completion_types.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/dashscope_response.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/api_entities/websocket_request.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/app/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/app/application_response.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/assistant_types.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/assistants.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/assistants/files.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/asr_phrase_manager.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/recognition.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/transcription.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/translation_recognizer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/asr/vocabulary.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/http_tts/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_asr/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_asr/qwen_transcription.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_omni/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts/speech_synthesizer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/qwen_tts_realtime/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts/speech_synthesizer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts_v2/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/audio/tts_v2/enrollment.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/__main__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/agentic_rl.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/application.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/auth.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/code_generation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/common.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/embeddings.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/files.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/fine_tunes.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/generation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/models.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/multimodal_conversation.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/multimodal_embedding.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/oss.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/rerank.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/speech_synthesis.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/tokenization.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/understanding.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/cli/video_synthesis.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/client/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/api_key.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/base_type.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/constants.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/env.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/error.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/logging.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/common/message_manager.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/batch_text_embedding.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/batch_text_embedding_response.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/multimodal_embedding.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/embeddings/text_embedding.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/files.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/agentic_rl.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/customize_types.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/finetunes.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/constants.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/errors.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/log.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/model.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/common/model_types.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/base_data_model.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/group_reward_input.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/group_reward_output.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/reward_input.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/reward_output.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/rollout_input.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/data/rollout_output.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/group_reward_processor_demo.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/reward_processor_demo.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/demo/rollout_processor_demo.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/func_decorator.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/func_manager.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/_core.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/llm_dashscope.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/llm_openai.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/llm_span.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/messages.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/genai/tools.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/processor_span.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/observability/tracing.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/base_parser.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/group_reward_parser.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/reward_parser.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/parser/rollout_parser.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_group_reward_processor.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_processor.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_reward_processor.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/processor/abstract_rollout_processor.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/server/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/finetune/reinforcement/component/server/server.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/io/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/io/input_output.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/model.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/dialog_state.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/multimodal_constants.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/multimodal_request_params.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/multimodal/tingwu/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/nlp/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/nlp/understanding.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/protocol/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/protocol/websocket.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/py.typed +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/rerank/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/rerank/text_rerank.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/resources/qwen.tiktoken +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/messages/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/messages/files.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/messages/messages.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/runs/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/runs/runs.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/runs/steps.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/thread_types.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/threads/threads.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/qwen_tokenizer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/tokenization.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/tokenizer.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/tokenizers/tokenizer_base.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/__init__.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/message_utils.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/oss_utils.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope/utils/param_utils.py +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/dependency_links.txt +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/entry_points.txt +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/not-zip-safe +0 -0
- {dashscope-1.27.2 → dashscope-1.27.4}/dashscope.egg-info/top_level.txt +0 -0
- {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.
|
|
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.
|
|
31
|
+
Requires-Dist: httpx>=0.25.0
|
|
32
32
|
Requires-Dist: httpx-sse>=0.4.0
|
|
33
|
-
Requires-Dist:
|
|
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
|
-
|
|
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
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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 /
|
|
116
|
-
|
|
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
|
|
125
|
-
|
|
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
|
|
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
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
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
|
-
|
|
587
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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(
|
|
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.
|
|
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)
|