Skip to content

mirascope.core.openai.tool

The OpenAITool class for easy tool usage with OpenAI LLM calls.

Usage Documentation

Tools

OpenAIToolConfig

Bases: ToolConfig

A tool configuration for OpenAI-specific features.

OpenAITool

Bases: BaseTool

A class for defining tools for OpenAI LLM calls.

Example:

from mirascope.core import prompt_template
from mirascope.core.openai import openai_call


def format_book(title: str, author: str) -> str:
    return f"{title} by {author}"


@openai_call("gpt-4o-mini", tools=[format_book])
def recommend_book(genre: str) -> str:
    return f"Recommend a {genre} book"


response = recommend_book("fantasy")
if tool := response.tool:  # returns an `OpenAITool` instance
    print(tool.call())

tool_schema classmethod

tool_schema() -> ChatCompletionToolParam

Constructs a JSON Schema tool schema from the BaseModel schema defined.

Example:

from mirascope.core.openai import OpenAITool


def format_book(title: str, author: str) -> str:
    return f"{title} by {author}"


tool_type = OpenAITool.type_from_fn(format_book)
print(tool_type.tool_schema())  # prints the OpenAI-specific tool schema

Source code in mirascope/core/openai/tool.py
@classmethod
def tool_schema(cls) -> ChatCompletionToolParam:
    """Constructs a JSON Schema tool schema from the `BaseModel` schema defined.

    Example:
    ```python
    from mirascope.core.openai import OpenAITool


    def format_book(title: str, author: str) -> str:
        return f"{title} by {author}"


    tool_type = OpenAITool.type_from_fn(format_book)
    print(tool_type.tool_schema())  # prints the OpenAI-specific tool schema
    ```
    """
    fn = FunctionDefinition(name=cls._name(), description=cls._description())
    schema_generator = GenerateJsonSchemaNoTitles
    if cls.tool_config.get("strict", False):
        fn["strict"] = True
        schema_generator = GenerateOpenAIStrictToolJsonSchema
    model_schema = cls.model_json_schema(schema_generator=schema_generator)
    if model_schema["properties"]:
        fn["parameters"] = model_schema
    return ChatCompletionToolParam(function=fn, type="function")

from_tool_call classmethod

from_tool_call(
    tool_call: ChatCompletionMessageToolCall,
    allow_partial: bool = False,
) -> OpenAITool

Constructs an OpenAITool instance from a tool_call.

Parameters:

Name Type Description Default
tool_call ChatCompletionMessageToolCall

The OpenAI tool call from which to construct this tool instance.

required
allow_partial bool

Whether to allow partial JSON data.

False
Source code in mirascope/core/openai/tool.py
@classmethod
def from_tool_call(
    cls, tool_call: ChatCompletionMessageToolCall, allow_partial: bool = False
) -> OpenAITool:
    """Constructs an `OpenAITool` instance from a `tool_call`.

    Args:
        tool_call: The OpenAI tool call from which to construct this tool instance.
        allow_partial: Whether to allow partial JSON data.
    """
    model_json = {"tool_call": tool_call}
    if args := tool_call.function.arguments:
        model_json |= cls._dict_from_json(args, allow_partial)
    if allow_partial:
        return partial(cls, {"tool_call", "delta"}).model_validate(model_json)
    return cls.model_validate(model_json)