You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/swarms/utils/json_utils.py

51 lines
1.3 KiB

import json
from pydantic import BaseModel
def base_model_to_json(model: BaseModel, indent: int = 3):
"""
Converts the JSON schema of a base model to a formatted JSON string.
Args:
model (BaseModel): The base model for which to generate the JSON schema.
Returns:
str: The JSON schema of the base model as a formatted JSON string.
"""
out = model.model_json_schema()
return str_to_json(out, indent=indent)
def extract_json_from_str(response: str):
"""
Extracts a JSON object from a string.
Args:
response (str): The string containing the JSON object.
Returns:
dict: The extracted JSON object.
Raises:
ValueError: If the string does not contain a valid JSON object.
"""
json_start = response.index("{")
json_end = response.rfind("}")
return json.loads(response[json_start : json_end + 1])
def str_to_json(response: str, indent: int = 3):
"""
Converts a string representation of JSON to a JSON object.
Args:
response (str): The string representation of JSON.
indent (int, optional): The number of spaces to use for indentation in the JSON output. Defaults to 3.
Returns:
str: The JSON object as a string.
"""
return json.dumps(response, indent=indent)