how to solve this pydantic validation issue?
An error occurred while processing your query: 2 validation errors for
Answer answer.TableData Input should be a valid dictionary or
instance of TableData [type=model_type, input_value=None,
input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.7/v/model_type answer.str Input should
be a valid string [type=string_type, input_value=None,
input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.7/v/string_type <class ‘str’>
here is my pydantic class which I am using for extracting data from LLM response:
def fix_json_string(input_str):
# Manually escape backslashes first
escaped_str = input_str.replace("\", "\\")
# Escape other problematic characters
escaped_str = escaped_str.replace("n", "\n")
escaped_str = escaped_str.replace("r", "\r")
escaped_str = escaped_str.replace("t", "\t")
escaped_str = escaped_str.replace('"', '\"')
escaped_str = escaped_str.replace("[", "\[")
escaped_str = escaped_str.replace("]", "\]")
escaped_str = escaped_str.replace("(", "\(")
escaped_str = escaped_str.replace(")", "\)")
escaped_str = escaped_str.replace("^", "\^")
escaped_str = escaped_str.replace("$", "\$")
escaped_str = escaped_str.replace("*", "\*")
escaped_str = escaped_str.replace("+", "\+")
escaped_str = escaped_str.replace("?", "\?")
escaped_str = escaped_str.replace("|", "\|")
escaped_str = escaped_str.replace(".", "\.")
escaped_str = escaped_str.replace("'", "\'")
return escaped_str
class TableData(BaseModel):
# data: Optional[Dict[str, List[Any]]]
data: Union[Dict[str, List[Any]], List[Dict[str, Any]]]
answer: Optional[str]
@classmethod
def from_json(cls, json_str):
try:
fixed_json_str = fix_json_string(json_str)
data = json.loads(fixed_json_str) # Ensure the string is valid JSON
return cls(**data)
except json.JSONDecodeError as e:
print(f"JSON decode error: {e}")
return None
except ValidationError as e:
print(f"Validation error: {e}")
return None
class Answer(BaseModel):
answer: Union[TableData, str] = Field
sql: Union[str, Any] = Field
@classmethod
def from_json(cls, json_str):
try:
fixed_json_str = fix_json_string(json_str)
data = json.loads(fixed_json_str) # Ensure the string is valid JSON
return cls(**data)
except json.JSONDecodeError as e:
print(f"JSON decode error: {e}")
return None
except ValidationError as e:
print(f"Validation error: {e}")
return None