AgentEvalTool/backend/agenteval/model_protocols/dashscope.py

46 lines
1.5 KiB
Python

"""Alibaba Cloud Model Studio native DashScope protocol."""
from typing import Any
from agenteval.models import ModelCapability, ModelProtocol
from .base import ModelProtocolAdapter, ProtocolAdapterError
class DashScopeAdapter(ModelProtocolAdapter):
protocol = ModelProtocol.DASHSCOPE
supported_capabilities = frozenset({ModelCapability.CHAT})
def headers(self, api_key: str | None) -> dict[str, str]:
headers = super().headers(api_key)
if api_key:
headers["Authorization"] = f"Bearer {api_key}"
return headers
def chat_payload(
self,
model_name: str | None,
messages: list[dict[str, str]],
temperature: float,
) -> dict[str, Any]:
return {
"model": self.require_model(model_name),
"input": {"messages": messages},
"parameters": {"result_format": "message", "temperature": temperature},
}
def parse_chat(self, data: dict[str, Any]) -> str:
try:
content = data["output"]["choices"][0]["message"]["content"]
except (KeyError, IndexError, TypeError) as exc:
raise ProtocolAdapterError("DashScope 接口返回格式不正确") from exc
if isinstance(content, list):
content = "\n".join(
str(block.get("text") or block.get("content") or "")
for block in content
if isinstance(block, dict)
)
if not content:
raise ProtocolAdapterError("模型接口返回内容为空")
return str(content)