chore: import upstream snapshot with attribution
K8s Workspace Integration Tests / k8s-workspace-tests (push) Has been cancelled
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Web UI / check (push) Has been cancelled
K8s Workspace Integration Tests / k8s-workspace-tests (push) Has been cancelled
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Web UI / check (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Examples of DashScope (Alibaba) model calls."""
|
||||
import asyncio
|
||||
import json
|
||||
import os
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from _utils import stream_and_collect
|
||||
from agentscope.message import (
|
||||
Msg,
|
||||
ToolCallBlock,
|
||||
ToolResultBlock,
|
||||
ToolResultState,
|
||||
TextBlock,
|
||||
)
|
||||
from agentscope.model import DashScopeChatModel
|
||||
from agentscope.credential import DashScopeCredential
|
||||
from agentscope.tool import Toolkit, ToolChoice, FunctionTool
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Example 1: Simple user message (streaming)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
async def example_simple_call() -> None:
|
||||
"""Call the DashScope model with a simple text message."""
|
||||
model = DashScopeChatModel(
|
||||
credential=DashScopeCredential(
|
||||
api_key=os.environ["DASHSCOPE_API_KEY"],
|
||||
),
|
||||
model="qwen3.5-plus",
|
||||
stream=True,
|
||||
context_size=1_000_000,
|
||||
parameters=DashScopeChatModel.Parameters(thinking_enable=True),
|
||||
)
|
||||
|
||||
msgs = [
|
||||
Msg(
|
||||
name="user",
|
||||
content=[TextBlock(text="What is 1 + 1? Answer briefly.")],
|
||||
role="user",
|
||||
),
|
||||
]
|
||||
|
||||
print("=== Simple Call ===")
|
||||
await stream_and_collect(await model(msgs))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Example 2: Tool calling (streaming)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def get_weather(city: str) -> str:
|
||||
"""Get the current weather for a city.
|
||||
|
||||
Args:
|
||||
city: The city name to query the weather for.
|
||||
|
||||
Returns:
|
||||
A description of the current weather.
|
||||
"""
|
||||
return f"The weather in {city} is sunny and 25°C."
|
||||
|
||||
|
||||
async def example_tool_call() -> None:
|
||||
"""Call the DashScope model with tool calling enabled.
|
||||
|
||||
Uses qwen3-max which supports both thinking mode and tool calling.
|
||||
"""
|
||||
toolkit = Toolkit(tools=[FunctionTool(get_weather)])
|
||||
tools = await toolkit.get_tool_schemas()
|
||||
|
||||
model = DashScopeChatModel(
|
||||
credential=DashScopeCredential(
|
||||
api_key=os.environ["DASHSCOPE_API_KEY"],
|
||||
),
|
||||
model="qwen3.5-plus",
|
||||
stream=True,
|
||||
context_size=1_000_000,
|
||||
parameters=DashScopeChatModel.Parameters(thinking_enable=True),
|
||||
)
|
||||
|
||||
msgs = [
|
||||
Msg(
|
||||
name="user",
|
||||
content=[TextBlock(text="What is the weather in Beijing?")],
|
||||
role="user",
|
||||
),
|
||||
]
|
||||
|
||||
# First call: model decides to call a tool
|
||||
print("=== Tool Call - Round 1 ===")
|
||||
response = await stream_and_collect(
|
||||
await model(msgs, tools=tools, tool_choice=ToolChoice(mode="auto")),
|
||||
)
|
||||
print(response)
|
||||
|
||||
tool_calls = [b for b in response.content if isinstance(b, ToolCallBlock)]
|
||||
if tool_calls:
|
||||
tool_result_blocks = []
|
||||
for tool_call in tool_calls:
|
||||
args = json.loads(tool_call.input)
|
||||
result = get_weather(**args)
|
||||
tool_result_blocks.append(
|
||||
ToolResultBlock(
|
||||
id=tool_call.id,
|
||||
name=tool_call.name,
|
||||
output=result,
|
||||
state=ToolResultState.SUCCESS,
|
||||
),
|
||||
)
|
||||
|
||||
assistant_msg = Msg(
|
||||
name="assistant",
|
||||
content=response.content,
|
||||
role="assistant",
|
||||
)
|
||||
tool_result_msg = Msg(
|
||||
name="tool",
|
||||
content=tool_result_blocks,
|
||||
role="assistant",
|
||||
)
|
||||
msgs = msgs + [assistant_msg, tool_result_msg]
|
||||
|
||||
print("=== Tool Call - Round 2 (Final) ===")
|
||||
await stream_and_collect(await model(msgs))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Example 3: Structured output
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class MathSolution(BaseModel):
|
||||
"""Structured solution to a math problem."""
|
||||
|
||||
problem: str = Field(description="The original problem statement")
|
||||
answer: float = Field(description="The final numeric answer")
|
||||
steps: list[str] = Field(
|
||||
description="Step-by-step reasoning leading to the answer",
|
||||
)
|
||||
|
||||
|
||||
async def example_structured_output() -> None:
|
||||
"""Call the DashScope model and force a structured (JSON) output."""
|
||||
model = DashScopeChatModel(
|
||||
credential=DashScopeCredential(
|
||||
api_key=os.environ["DASHSCOPE_API_KEY"],
|
||||
),
|
||||
model="qwen3.5-plus",
|
||||
stream=True,
|
||||
context_size=1_000_000,
|
||||
parameters=DashScopeChatModel.Parameters(thinking_enable=True),
|
||||
)
|
||||
|
||||
msgs = [
|
||||
Msg(
|
||||
name="user",
|
||||
content=[
|
||||
TextBlock(
|
||||
text=(
|
||||
"Solve this: A train travels at 60 km/h for "
|
||||
"2.5 hours. How far does it travel in km?"
|
||||
),
|
||||
),
|
||||
],
|
||||
role="user",
|
||||
),
|
||||
]
|
||||
|
||||
print("=== Structured Output ===")
|
||||
response = await model.generate_structured_output(
|
||||
msgs,
|
||||
structured_model=MathSolution,
|
||||
)
|
||||
print(response.content)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(example_simple_call())
|
||||
asyncio.run(example_tool_call())
|
||||
asyncio.run(example_structured_output())
|
||||
Reference in New Issue
Block a user