Tools¶
Tools are user-defined functions that an LLM (Large Language Model) can ask the user to invoke on its behalf. This greatly enhances the capabilities of LLMs by enabling them to perform specific tasks, access external data, interact with other systems, and more.
Mirascope enables defining tools in a provider-agnostic way, which can be used across all supported LLM providers without modification.
Diagram illustrating how tools are called
When an LLM decides to use a tool, it indicates the tool name and argument values in its response. It's important to note that the LLM doesn't actually execute the function; instead, you are responsible for calling the tool and (optionally) providing the output back to the LLM in a subsequent interaction. For more details on such iterative tool-use flows, check out the Tool Message Parameters section below as well as the section on Agents.
sequenceDiagram
participant YC as Your Code
participant LLM
YC->>LLM: Call with prompt and function definitions
loop Tool Calls
LLM->>LLM: Decide to respond or call functions
LLM->>YC: Respond with function to call and arguments
YC->>YC: Execute function with given arguments
YC->>LLM: Call with prompt and function result
end
LLM->>YC: Final response
Basic Usage and Syntax¶
API Documentation
There are two ways of defining tools in Mirascope: BaseTool
and functions.
You can consider the functional definitions a shorthand form of writing the BaseTool
version of the same tool. Under the hood, tools defined as functions will get converted automatically into their corresponding BaseTool
.
Let's take a look at a basic example of each using Mirascope vs. official provider SDKs:
Mirascope
from mirascope.core import BaseTool, openai
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, anthropic
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, mistral
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, gemini
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, groq
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, cohere
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, litellm
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, azure
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, bedrock
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, openai
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, anthropic
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, mistral
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, gemini
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, groq
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, cohere
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, litellm
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, azure
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, Messages, bedrock
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, openai, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, anthropic, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, mistral, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, gemini, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, groq, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, cohere, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, litellm, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, azure, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, prompt_template, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseTool, bedrock, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, openai
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, anthropic
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, mistral
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, gemini
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, groq
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, cohere
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, litellm
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, azure
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, bedrock
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import openai
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import anthropic
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import mistral
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import gemini
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import groq
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import cohere
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import litellm
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import azure
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import vertex
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import bedrock
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, openai
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, anthropic
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, mistral
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, gemini
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, groq
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, cohere
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, litellm
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, azure
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, vertex
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import Messages, bedrock
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[get_book_author])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import openai, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import anthropic, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import mistral, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import gemini, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import groq, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import cohere, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import litellm, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import azure, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import prompt_template, vertex
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import bedrock, prompt_template
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[get_book_author])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, openai
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, anthropic
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, mistral
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, gemini
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, groq
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, cohere
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, litellm
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, azure
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, vertex
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
from mirascope.core import BaseMessageParam, bedrock
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[get_book_author])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
# Output: Patrick Rothfuss
else:
print(response.content)
Official SDK
import json
from openai import OpenAI
client = OpenAI()
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"Who wrote {book}"}],
tools=[
{
"function": {
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"parameters": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
},
"type": "function",
}
],
)
if tool_calls := completion.choices[0].message.tool_calls:
if tool_calls[0].function.name == "get_book_author":
return get_book_author(**json.loads(tool_calls[0].function.arguments))
return str(completion.choices[0].message.content)
author = identify_author("The Name of the Wind")
print(author)
from anthropic import Anthropic
client = Anthropic()
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
message = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=1024,
messages=[{"role": "user", "content": f"Who wrote {book}?"}],
tools=[
{
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"input_schema": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
}
],
)
content = ""
for block in message.content:
if block.type == "tool_use":
if block.name == "get_book_author":
return get_book_author(**block.input) # pyright: ignore [reportCallIssue]
else:
content += block.text
return content
author = identify_author("The Name of the Wind")
print(author)
import json
import os
from typing import cast
from mistralai import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str | None:
completion = client.chat.complete(
model="mistral-large-latest",
messages=[{"role": "user", "content": f"Who wrote {book}?"}],
tools=[
{
"function": {
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"parameters": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
},
"type": "function",
}
],
)
if not completion or not completion.choices:
return None
if tool_calls := completion.choices[0].message.tool_calls:
if tool_calls[0].function.name == "get_book_author":
return get_book_author(
**json.loads(cast(str, tool_calls[0].function.arguments))
)
return cast(str, completion.choices[0].message.content)
author = identify_author("The Name of the Wind")
print(author)
from google.generativeai import GenerativeModel
from google.generativeai.types import FunctionDeclaration, Tool
model = GenerativeModel("gemini-1.5-flash")
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
response = model.generate_content(
f"Who wrote {book}?",
tools=[
Tool(
function_declarations=[
FunctionDeclaration(
**{
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"parameters": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
}
)
]
)
],
)
if tool_calls := [
part.function_call for part in response.parts if part.function_call.args
]:
if tool_calls[0].name == "get_book_author":
return get_book_author(**dict(tool_calls[0].args.items())) # pyright: ignore [reportArgumentType]
return response.text
author = identify_author("The Name of the Wind")
print(author)
import json
from groq import Groq
client = Groq()
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
completion = client.chat.completions.create(
model="llama-3.1-70b-versatile",
messages=[{"role": "user", "content": f"Who wrote {book}?"}],
tools=[
{
"function": {
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"parameters": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
},
"type": "function",
}
],
)
if tool_calls := completion.choices[0].message.tool_calls:
if tool_calls[0].function.name == "get_book_author":
return get_book_author(**json.loads(tool_calls[0].function.arguments))
return str(completion.choices[0].message.content)
author = identify_author("The Name of the Wind")
print(author)
from typing import cast
from cohere import Client
from cohere.types import Tool, ToolParameterDefinitionsValue
client = Client()
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
response = client.chat(
model="command-r-plus",
message=f"Who wrote {book}?",
tools=[
Tool(
name="get_book_author",
description="Returns the author of the book with the given title.",
parameter_definitions={
"title": ToolParameterDefinitionsValue(
description=None, type="string", required=True
)
},
)
],
)
if tool_calls := response.tool_calls:
if tool_calls[0].name == "get_book_author":
return get_book_author(**(cast(dict[str, str], tool_calls[0].parameters)))
return response.text
author = identify_author("The Name of the Wind")
print(author)
import json
from litellm import completion
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
response = completion(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"Who wrote {book}"}],
tools=[
{
"function": {
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"parameters": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
},
"type": "function",
}
],
)
if tool_calls := response.choices[0].message.tool_calls: # pyright: ignore [reportAttributeAccessIssue]
if tool_calls[0].function.name == "get_book_author":
return get_book_author(**json.loads(tool_calls[0].function.arguments))
return str(response.choices[0].message.content) # pyright: ignore [reportAttributeAccessIssue]
author = identify_author("The Name of the Wind")
print(author)
import json
from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import (
ChatCompletionsToolDefinition,
ChatRequestMessage,
FunctionDefinition,
)
from azure.core.credentials import AzureKeyCredential
client = ChatCompletionsClient(
endpoint="YOUR_ENDPOINT", credential=AzureKeyCredential("YOUR_KEY")
)
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
completion = client.complete(
model="gpt-4o-mini",
messages=[
ChatRequestMessage({"role": "user", "content": f"Who wrote {book}?"})
],
tools=[
ChatCompletionsToolDefinition(
function=FunctionDefinition(
name="get_book_author",
description="Returns the author of the book with the given title.",
parameters={
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
)
)
],
)
if tool_calls := completion.choices[0].message.tool_calls:
if tool_calls[0].function.name == "get_book_author":
return get_book_author(**json.loads(tool_calls[0].function.arguments))
return str(completion.choices[0].message.content)
author = identify_author("The Name of the Wind")
print(author)
from vertexai.generative_models import FunctionDeclaration, GenerativeModel, Tool
model = GenerativeModel("gemini-1.5-flash")
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
response = model.generate_content(
f"Who wrote {book}?",
tools=[
Tool(
function_declarations=[
FunctionDeclaration(
**{
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"parameters": {
"properties": {"title": {"type": "string"}},
"required": ["title"],
"type": "object",
},
}
)
]
)
],
)
if tool_calls := [
part.function_call
for candidate in response.candidates # pyright: ignore [reportAttributeAccessIssue]
for part in candidate.content.parts
if part.function_call.args
]:
if tool_calls[0].name == "get_book_author":
return get_book_author(**dict(tool_calls[0].args.items())) # pyright: ignore [reportArgumentType]
return response.text # pyright: ignore [reportAttributeAccessIssue]
author = identify_author("The Name of the Wind")
print(author)
import boto3
bedrock_client = boto3.client(service_name="bedrock-runtime")
def get_book_author(title: str) -> str:
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
def identify_author(book: str) -> str:
messages = [{"role": "user", "content": [{"text": f"Who wrote {book}?"}]}]
tool_config = {
"tools": [
{
"toolSpec": {
"name": "get_book_author",
"description": "Returns the author of the book with the given title.",
"inputSchema": {
"json": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The title of the book.",
}
},
"required": ["title"],
}
},
}
}
]
}
response = bedrock_client.converse(
modelId="anthropic.claude-3-haiku-20240307-v1:0",
messages=messages,
toolConfig=tool_config,
)
content = ""
output_message = response["output"]["message"]
messages.append(output_message)
stop_reason = response["stopReason"]
if stop_reason == "tool_use":
tool_requests = output_message["content"]
for tool_request in tool_requests:
if "toolUse" in tool_request:
tool = tool_request["toolUse"]
if tool["name"] == "get_book_author":
return get_book_author(**tool["input"])
for content_piece in output_message["content"]:
if "text" in content_piece:
content += content_piece["text"]
return content
author = identify_author("The Name of the Wind")
print(author)
In this example we:
- Define the
GetBookAuthor
/get_book_author
tool (a dummy method for the example) - Set the
tools
argument in thecall
decorator to give the LLM access to the tool. - We call
identify_author
, which automatically generates the corresponding provider-specific tool schema under the hood. - Check if the response from
identify_author
contains a tool, which is theBaseTool
instance constructed from the underlying tool call- If yes, we call the constructed tool's
call
method and print its output. This calls the tool with the arguments provided by the LLM. - If no, we print the content of the response (assuming no tool was called).
- If yes, we call the constructed tool's
The core idea to understand here is that the LLM is asking us to call the tool on its behalf with arguments that it has provided. In the above example, the LLM chooses to call the tool to get the author rather than relying on its world knowledge.
This is particularly important for buildling applications with access to live information and external systems.
For the purposes of this example we are showing just a single tool call. Generally, you would then give the tool call's output back to the LLM and make another call so the LLM can generate a response based on the output of the tool. We cover this in more detail in the section on Agents
Accessing Original Tool Call¶
All provider-specific BaseTool
instances have a tool_call
property for accessing the original LLM tool call.
from mirascope.core import BaseTool, openai
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, anthropic
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, mistral
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, gemini
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, groq
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, cohere
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, litellm
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, azure
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, bedrock
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, openai
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, anthropic
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, mistral
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, gemini
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, groq
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, cohere
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, litellm
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, azure
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, Messages, bedrock
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
def identify_author(book: str) -> Messages.Type:
return Messages.User(f"Who wrote {book}?")
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, openai, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, anthropic, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, mistral, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, gemini, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, groq, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, cohere, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, litellm, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, azure, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, prompt_template, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseTool, bedrock, prompt_template
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
@prompt_template("Who wrote {book}?")
def identify_author(book: str): ...
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, openai
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, anthropic
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, mistral
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, gemini
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, groq
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, cohere
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, litellm
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, azure
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@azure.call("gpt-4o-mini", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, vertex
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@vertex.call("gemini-1.5-flash", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import BaseMessageParam, BaseTool, bedrock
from pydantic import Field
class GetBookAuthor(BaseTool):
"""Returns the author of the book with the given title."""
title: str = Field(..., description="The title of the book.")
def call(self) -> str:
if self.title == "The Name of the Wind":
return "Patrick Rothfuss"
elif self.title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@bedrock.call("anthropic.claude-3-haiku-20240307-v1:0", tools=[GetBookAuthor])
def identify_author(book: str) -> list[BaseMessageParam]:
return [BaseMessageParam(role="user", content=f"Who wrote {book}?")]
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import openai
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@openai.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import anthropic
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@anthropic.call("claude-3-5-sonnet-20240620", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import mistral
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@mistral.call("mistral-large-latest", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import gemini
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@gemini.call("gemini-1.5-flash", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import groq
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@groq.call("llama-3.1-70b-versatile", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import cohere
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@cohere.call("command-r-plus", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")
if tool := response.tool:
print(tool.call())
print(f"Original tool call: {tool.tool_call}")
else:
print(response.content)
from mirascope.core import litellm
def get_book_author(title: str) -> str:
"""Returns the author of the book with the given title
Args:
title: The title of the book.
"""
if title == "The Name of the Wind":
return "Patrick Rothfuss"
elif title == "Mistborn: The Final Empire":
return "Brandon Sanderson"
else:
return "Unknown"
@litellm.call("gpt-4o-mini", tools=[get_book_author])
def identify_author(book: str) -> str:
return f"Who wrote {book}?"
response = identify_author("The Name of the Wind")