OpenAI-specific models for the OpenAI adapter.
This module contains OpenAI-specific data models used by the OpenAI adapter
for handling format transformations and streaming.
OpenAIMessageContent
Bases: BaseModel
OpenAI message content block.
OpenAIMessage
Bases: BaseModel
OpenAI message model.
OpenAIFunction
Bases: BaseModel
OpenAI function definition.
Bases: BaseModel
OpenAI tool choice specification.
Bases: BaseModel
OpenAI response format specification.
OpenAIStreamOptions
Bases: BaseModel
OpenAI stream options.
OpenAIUsage
Bases: BaseModel
OpenAI usage information.
OpenAILogprobs
Bases: BaseModel
OpenAI log probabilities.
OpenAIFunctionCall
Bases: BaseModel
OpenAI function call.
OpenAIResponseMessage
Bases: BaseModel
OpenAI response message.
OpenAIChoice
Bases: BaseModel
OpenAI choice in response.
OpenAIChatCompletionRequest
Bases: BaseModel
OpenAI-compatible chat completion request model.
validate_model
classmethod
Validate model name - just return as-is like Anthropic endpoint.
Source code in ccproxy/adapters/openai/models.py
| @field_validator("model")
@classmethod
def validate_model(cls, v: str) -> str:
"""Validate model name - just return as-is like Anthropic endpoint."""
return v
|
validate_messages
classmethod
Validate message structure.
Source code in ccproxy/adapters/openai/models.py
| @field_validator("messages")
@classmethod
def validate_messages(cls, v: list[OpenAIMessage]) -> list[OpenAIMessage]:
"""Validate message structure."""
if not v:
raise ValueError("At least one message is required")
return v
|
validate_stop
classmethod
Validate stop sequences.
Source code in ccproxy/adapters/openai/models.py
| @field_validator("stop")
@classmethod
def validate_stop(cls, v: str | list[str] | None) -> str | list[str] | None:
"""Validate stop sequences."""
if v is not None:
if isinstance(v, str):
return v
elif isinstance(v, list):
if len(v) > 4:
raise ValueError("Maximum 4 stop sequences allowed")
return v
return v
|
Validate tools array.
Source code in ccproxy/adapters/openai/models.py
| @field_validator("tools")
@classmethod
def validate_tools(cls, v: list[OpenAITool] | None) -> list[OpenAITool] | None:
"""Validate tools array."""
if v is not None and len(v) > 128:
raise ValueError("Maximum 128 tools allowed")
return v
|
OpenAIChatCompletionResponse
Bases: BaseModel
OpenAI chat completion response.
OpenAIStreamingDelta
Bases: BaseModel
OpenAI streaming delta.
OpenAIStreamingChoice
Bases: BaseModel
OpenAI streaming choice.
OpenAIStreamingChatCompletionResponse
Bases: BaseModel
OpenAI streaming chat completion response.
OpenAIModelInfo
Bases: BaseModel
OpenAI model information.
OpenAIModelsResponse
Bases: BaseModel
OpenAI models list response.
OpenAIErrorDetail
Bases: BaseModel
OpenAI error detail.
OpenAIErrorResponse
Bases: BaseModel
OpenAI error response.
generate_openai_response_id
generate_openai_response_id()
Generate an OpenAI-compatible response ID.
Source code in ccproxy/adapters/openai/models.py
| def generate_openai_response_id() -> str:
"""Generate an OpenAI-compatible response ID."""
return f"chatcmpl-{uuid.uuid4().hex[:29]}"
|
generate_openai_system_fingerprint
generate_openai_system_fingerprint()
Generate an OpenAI-compatible system fingerprint.
Source code in ccproxy/adapters/openai/models.py
| def generate_openai_system_fingerprint() -> str:
"""Generate an OpenAI-compatible system fingerprint."""
return f"fp_{uuid.uuid4().hex[:8]}"
|
format_openai_tool_call(tool_use)
Convert Anthropic tool use to OpenAI tool call format.
Source code in ccproxy/adapters/openai/models.py
| def format_openai_tool_call(tool_use: dict[str, Any]) -> OpenAIToolCall:
"""Convert Anthropic tool use to OpenAI tool call format."""
tool_input = tool_use.get("input", {})
if isinstance(tool_input, dict):
arguments_str = json.dumps(tool_input)
else:
arguments_str = str(tool_input)
return OpenAIToolCall(
id=tool_use.get("id", ""),
type="function",
function=OpenAIFunctionCall(
name=tool_use.get("name", ""),
arguments=arguments_str,
),
)
|