141 lines
4.1 KiB
Python
141 lines
4.1 KiB
Python
import enum
|
|
import warnings
|
|
|
|
|
|
# Track if deprecation warning has been shown
|
|
_functions_deprecation_shown = False
|
|
|
|
|
|
class Mode(enum.Enum):
|
|
"""
|
|
Mode enumeration for patching LLM API clients.
|
|
|
|
Each mode determines how the library formats and structures requests
|
|
to different provider APIs and how it processes their responses.
|
|
"""
|
|
|
|
# OpenAI modes
|
|
FUNCTIONS = "function_call" # Deprecated
|
|
PARALLEL_TOOLS = "parallel_tool_call"
|
|
TOOLS = "tool_call"
|
|
TOOLS_STRICT = "tools_strict"
|
|
JSON = "json_mode"
|
|
JSON_O1 = "json_o1"
|
|
MD_JSON = "markdown_json_mode"
|
|
JSON_SCHEMA = "json_schema_mode"
|
|
|
|
# Add new modes to support responses api
|
|
RESPONSES_TOOLS = "responses_tools"
|
|
RESPONSES_TOOLS_WITH_INBUILT_TOOLS = "responses_tools_with_inbuilt_tools"
|
|
|
|
# XAI modes
|
|
XAI_JSON = "xai_json"
|
|
XAI_TOOLS = "xai_tools"
|
|
|
|
# Anthropic modes
|
|
ANTHROPIC_TOOLS = "anthropic_tools"
|
|
ANTHROPIC_REASONING_TOOLS = "anthropic_reasoning_tools"
|
|
ANTHROPIC_JSON = "anthropic_json"
|
|
ANTHROPIC_PARALLEL_TOOLS = "anthropic_parallel_tools"
|
|
|
|
# Mistral modes
|
|
MISTRAL_TOOLS = "mistral_tools"
|
|
MISTRAL_STRUCTURED_OUTPUTS = "mistral_structured_outputs"
|
|
|
|
# Vertex AI & Google modes
|
|
VERTEXAI_TOOLS = "vertexai_tools"
|
|
VERTEXAI_JSON = "vertexai_json"
|
|
VERTEXAI_PARALLEL_TOOLS = "vertexai_parallel_tools"
|
|
GEMINI_JSON = "gemini_json"
|
|
GEMINI_TOOLS = "gemini_tools"
|
|
GENAI_TOOLS = "genai_tools"
|
|
GENAI_STRUCTURED_OUTPUTS = "genai_structured_outputs"
|
|
|
|
# Cohere modes
|
|
COHERE_TOOLS = "cohere_tools"
|
|
COHERE_JSON_SCHEMA = "json_object"
|
|
|
|
# Cerebras modes
|
|
CEREBRAS_TOOLS = "cerebras_tools"
|
|
CEREBRAS_JSON = "cerebras_json"
|
|
|
|
# Fireworks modes
|
|
FIREWORKS_TOOLS = "fireworks_tools"
|
|
FIREWORKS_JSON = "fireworks_json"
|
|
|
|
# Other providers
|
|
WRITER_TOOLS = "writer_tools"
|
|
WRITER_JSON = "writer_json"
|
|
BEDROCK_TOOLS = "bedrock_tools"
|
|
BEDROCK_JSON = "bedrock_json"
|
|
PERPLEXITY_JSON = "perplexity_json"
|
|
OPENROUTER_STRUCTURED_OUTPUTS = "openrouter_structured_outputs"
|
|
|
|
# Classification helpers
|
|
@classmethod
|
|
def tool_modes(cls) -> set["Mode"]:
|
|
"""Returns a set of all tool-based modes."""
|
|
return {
|
|
cls.FUNCTIONS,
|
|
cls.PARALLEL_TOOLS,
|
|
cls.TOOLS,
|
|
cls.TOOLS_STRICT,
|
|
cls.ANTHROPIC_TOOLS,
|
|
cls.ANTHROPIC_REASONING_TOOLS,
|
|
cls.ANTHROPIC_PARALLEL_TOOLS,
|
|
cls.MISTRAL_TOOLS,
|
|
cls.VERTEXAI_TOOLS,
|
|
cls.VERTEXAI_PARALLEL_TOOLS,
|
|
cls.GEMINI_TOOLS,
|
|
cls.COHERE_TOOLS,
|
|
cls.CEREBRAS_TOOLS,
|
|
cls.FIREWORKS_TOOLS,
|
|
cls.WRITER_TOOLS,
|
|
cls.BEDROCK_TOOLS,
|
|
cls.OPENROUTER_STRUCTURED_OUTPUTS,
|
|
cls.MISTRAL_STRUCTURED_OUTPUTS,
|
|
cls.XAI_TOOLS,
|
|
cls.GENAI_TOOLS,
|
|
cls.RESPONSES_TOOLS,
|
|
cls.RESPONSES_TOOLS_WITH_INBUILT_TOOLS,
|
|
}
|
|
|
|
@classmethod
|
|
def json_modes(cls) -> set["Mode"]:
|
|
"""Returns a set of all JSON-based modes."""
|
|
return {
|
|
cls.JSON,
|
|
cls.JSON_O1,
|
|
cls.MD_JSON,
|
|
cls.JSON_SCHEMA,
|
|
cls.ANTHROPIC_JSON,
|
|
cls.VERTEXAI_JSON,
|
|
cls.GEMINI_JSON,
|
|
cls.COHERE_JSON_SCHEMA,
|
|
cls.CEREBRAS_JSON,
|
|
cls.FIREWORKS_JSON,
|
|
cls.WRITER_JSON,
|
|
cls.BEDROCK_JSON,
|
|
cls.PERPLEXITY_JSON,
|
|
cls.OPENROUTER_STRUCTURED_OUTPUTS,
|
|
cls.MISTRAL_STRUCTURED_OUTPUTS,
|
|
cls.XAI_JSON,
|
|
}
|
|
|
|
@classmethod
|
|
def warn_mode_functions_deprecation(cls):
|
|
"""
|
|
Warn about FUNCTIONS mode deprecation.
|
|
|
|
Shows the warning only once per session to avoid spamming logs
|
|
with the same message.
|
|
"""
|
|
global _functions_deprecation_shown
|
|
if not _functions_deprecation_shown:
|
|
warnings.warn(
|
|
"The FUNCTIONS mode is deprecated and will be removed in future versions",
|
|
DeprecationWarning,
|
|
stacklevel=2,
|
|
)
|
|
_functions_deprecation_shown = True
|