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.
51 lines
1.3 KiB
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)
|