|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import json
|
|
|
from typing import Any, Literal
|
|
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
|
|
|
class OpenAIFunctionPropertySchema(BaseModel):
|
|
|
"""The schema of a parameter in OpenAI format."""
|
|
|
|
|
|
type: str
|
|
|
description: str | None = None
|
|
|
enum: list[str] | None = None
|
|
|
|
|
|
|
|
|
class OpenAIFunctionParametersSchema(BaseModel):
|
|
|
"""The schema of parameters in OpenAI format."""
|
|
|
|
|
|
type: str
|
|
|
properties: dict[str, OpenAIFunctionPropertySchema]
|
|
|
required: list[str]
|
|
|
|
|
|
|
|
|
class OpenAIFunctionSchema(BaseModel):
|
|
|
"""The schema of a function in OpenAI format."""
|
|
|
|
|
|
name: str
|
|
|
description: str
|
|
|
parameters: OpenAIFunctionParametersSchema
|
|
|
strict: bool = False
|
|
|
|
|
|
|
|
|
class OpenAIFunctionToolSchema(BaseModel):
|
|
|
"""The schema of a tool in OpenAI format."""
|
|
|
|
|
|
type: str
|
|
|
function: OpenAIFunctionSchema
|
|
|
|
|
|
|
|
|
class OpenAIFunctionParsedSchema(BaseModel):
|
|
|
"""The parsed schema of a tool in OpenAI format."""
|
|
|
|
|
|
name: str
|
|
|
arguments: str
|
|
|
|
|
|
|
|
|
class OpenAIFunctionCallSchema(BaseModel):
|
|
|
"""The parsed schema of a tool in OpenAI format."""
|
|
|
|
|
|
name: str
|
|
|
arguments: dict[str, Any]
|
|
|
|
|
|
@staticmethod
|
|
|
def from_openai_function_parsed_schema(parsed_schema: OpenAIFunctionParsedSchema) -> tuple["OpenAIFunctionCallSchema", bool]:
|
|
|
has_decode_error = False
|
|
|
try:
|
|
|
arguments = json.loads(parsed_schema.arguments)
|
|
|
except json.JSONDecodeError:
|
|
|
arguments = {}
|
|
|
has_decode_error = True
|
|
|
|
|
|
if not isinstance(arguments, dict):
|
|
|
arguments = {}
|
|
|
has_decode_error = True
|
|
|
|
|
|
return OpenAIFunctionCallSchema(name=parsed_schema.name, arguments=arguments), has_decode_error
|
|
|
|
|
|
|
|
|
class OpenAIFunctionToolCall(BaseModel):
|
|
|
"""The tool call in OpenAI format."""
|
|
|
|
|
|
id: str
|
|
|
type: Literal["function"] = "function"
|
|
|
function: OpenAIFunctionCallSchema
|
|
|
|