Skip to content

ccproxy.adapters.openai.models

ccproxy.adapters.openai.models

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.

OpenAITool

Bases: BaseModel

OpenAI tool definition.

OpenAIToolChoice

Bases: BaseModel

OpenAI tool choice specification.

OpenAIResponseFormat

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.

OpenAIToolCall

Bases: BaseModel

OpenAI tool 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(v)

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_messages(v)

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(v)

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 classmethod

validate_tools(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

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,
        ),
    )