web2api / core /protocol /schemas.py
ohmyapi's picture
feat: align hosted Space deployment with latest upstream
77169b4
"""协议层内部统一模型。"""
from __future__ import annotations
from typing import Any, Literal
from pydantic import BaseModel, Field
class CanonicalContentBlock(BaseModel):
type: Literal["text", "thinking", "tool_use", "tool_result", "image"]
text: str | None = None
id: str | None = None
name: str | None = None
input: dict[str, Any] | None = None
tool_use_id: str | None = None
is_error: bool | None = None
mime_type: str | None = None
data: str | None = None
url: str | None = None
class CanonicalMessage(BaseModel):
role: Literal["system", "user", "assistant", "tool"]
content: list[CanonicalContentBlock] = Field(default_factory=list)
class CanonicalToolSpec(BaseModel):
name: str
description: str = ""
input_schema: dict[str, Any] = Field(default_factory=dict)
strict: bool = False
class CanonicalChatRequest(BaseModel):
protocol: Literal["openai", "anthropic"]
provider: str
model: str
system: list[CanonicalContentBlock] = Field(default_factory=list)
messages: list[CanonicalMessage] = Field(default_factory=list)
stream: bool = False
max_tokens: int | None = None
temperature: float | None = None
top_p: float | None = None
stop_sequences: list[str] = Field(default_factory=list)
tools: list[CanonicalToolSpec] = Field(default_factory=list)
tool_choice: str | dict[str, Any] | None = None
resume_session_id: str | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
class CanonicalStreamEvent(BaseModel):
type: Literal[
"message_start",
"text_delta",
"thinking_delta",
"tool_call",
"usage",
"message_stop",
"error",
]
text: str | None = None
id: str | None = None
name: str | None = None
arguments: str | None = None
stop_reason: str | None = None
session_id: str | None = None
usage: dict[str, int] | None = None
error: str | None = None