Spaces:
Sleeping
Sleeping
import json | |
from typing import List, Union, Dict | |
from pydantic import BaseModel | |
from swarms.tools.pydantic_to_json import ( | |
base_model_to_openai_function, | |
multi_base_model_to_openai_function, | |
) | |
def json_str_to_json(json_str: str) -> dict: | |
"""Convert a JSON string to a JSON object""" | |
return json.loads(json_str) | |
def json_str_to_pydantic_model( | |
json_str: str, model: BaseModel | |
) -> BaseModel: | |
"""Convert a JSON string to a Pydantic model""" | |
return model.model_validate_json(json_str) | |
def json_str_to_dict(json_str: str) -> dict: | |
"""Convert a JSON string to a dictionary""" | |
return json.loads(json_str) | |
def pydantic_model_to_json_str( | |
model: BaseModel, indent: int, *args, **kwargs | |
) -> str: | |
""" | |
Converts a Pydantic model to a JSON string. | |
Args: | |
model (BaseModel): The Pydantic model to convert. | |
indent (int): The number of spaces to use for indentation. | |
*args: Additional positional arguments to pass to `json.dumps`. | |
**kwargs: Additional keyword arguments to pass to `json.dumps`. | |
Returns: | |
str: The JSON string representation of the Pydantic model. | |
""" | |
return json.dumps( | |
base_model_to_openai_function(model), | |
indent=indent, | |
*args, | |
**kwargs, | |
) | |
def dict_to_json_str(dictionary: dict) -> str: | |
"""Convert a dictionary to a JSON string""" | |
return json.dumps(dictionary) | |
def dict_to_pydantic_model( | |
dictionary: dict, model: BaseModel | |
) -> BaseModel: | |
"""Convert a dictionary to a Pydantic model""" | |
return model.model_validate_json(dictionary) | |
# def prep_pydantic_model_for_str(model: BaseModel): | |
# # Convert to Function | |
# out = pydantic_model_to_json_str(model) | |
# # return function_to_str(out) | |
def tool_schema_to_str( | |
tool_schema: BaseModel = None, *args, **kwargs | |
) -> str: | |
"""Convert a tool schema to a string""" | |
out = base_model_to_openai_function(tool_schema) | |
return str(out) | |
def tool_schemas_to_str( | |
tool_schemas: List[BaseModel] = None, *args, **kwargs | |
) -> str: | |
"""Convert a list of tool schemas to a string""" | |
out = multi_base_model_to_openai_function(tool_schemas) | |
return str(out) | |
def str_to_pydantic_model(string: str, model: BaseModel) -> BaseModel: | |
"""Convert a string to a Pydantic model""" | |
return model.model_validate_json(string) | |
def list_str_to_pydantic_model( | |
list_str: List[str], model: BaseModel | |
) -> BaseModel: | |
"""Convert a list of strings to a Pydantic model. | |
Args: | |
list_str (List[str]): The list of strings to be converted. | |
model (BaseModel): The Pydantic model to convert the strings to. | |
Returns: | |
BaseModel: The Pydantic model with the converted strings. | |
""" | |
for string in list_str: | |
return model.model_validate_json(string) | |
def prepare_output_for_output_model( | |
output_type: Union[str, Dict, BaseModel], | |
output: Union[str, Dict, BaseModel] = None, | |
) -> Union[BaseModel, str]: | |
"""Prepare the output for the output model. | |
Args: | |
output_type (Union[str, Dict, BaseModel]): The type of the output. | |
output (Union[str, Dict, BaseModel], optional): The output data. Defaults to None. | |
Returns: | |
Union[BaseModel, str]: The prepared output. | |
""" | |
if output_type == BaseModel: | |
return str_to_pydantic_model(output, output_type) | |
elif output_type == dict: | |
return dict_to_json_str(output) | |
elif output_type == str: | |
return output | |
else: | |
return output | |