vertextoopenai / app /models.py
bibibi12345's picture
tentative tool call implementation
8563208
from pydantic import BaseModel, ConfigDict # Field removed
from typing import List, Dict, Any, Optional, Union, Literal
# Define data models
class ImageUrl(BaseModel):
url: str
class ContentPartImage(BaseModel):
type: Literal["image_url"]
image_url: ImageUrl
class ContentPartText(BaseModel):
type: Literal["text"]
text: str
class OpenAIMessage(BaseModel):
role: str
content: Union[str, List[Union[ContentPartText, ContentPartImage, Dict[str, Any]]], None] = None # Allow content to be None for tool calls
name: Optional[str] = None # For tool role, the name of the tool
tool_calls: Optional[List[Dict[str, Any]]] = None # For assistant messages requesting tool calls
tool_call_id: Optional[str] = None # For tool role, the ID of the tool call
class OpenAIRequest(BaseModel):
model: str
messages: List[OpenAIMessage]
temperature: Optional[float] = 1.0
max_tokens: Optional[int] = None
top_p: Optional[float] = 1.0
top_k: Optional[int] = None
stream: Optional[bool] = False
stop: Optional[List[str]] = None
presence_penalty: Optional[float] = None
frequency_penalty: Optional[float] = None
seed: Optional[int] = None
logprobs: Optional[int] = None
response_logprobs: Optional[bool] = None
n: Optional[int] = None # Maps to candidate_count in Vertex AI
tools: Optional[List[Dict[str, Any]]] = None
tool_choice: Optional[Union[str, Dict[str, Any]]] = None
# Allow extra fields to pass through without causing validation errors
model_config = ConfigDict(extra='allow')