I am using Pydantic v1 in a Langchain implementation of Custom Tools. When I staticly define a Pydantic class it will populate the __fields__
attribute of my class with metadata about the fields — which is needed by Langchain.
My use case requires that I create Pydantic classes at runtime based on the user’s context. I have tried creating Pydantic classes using Python’s type
function and Pydantic’s create_model
function. Neither of these approaches populates __fields__
Can anyone fill me in on how to populate __fields__
when creating a Pydantic class dynamicly?
The following code block summarizes what I am expecting vs the actual result.
from enum import Enum
from langchain.pydantic_v1 import BaseModel, create_model
class SpecialtyEnumStatic (str, Enum):
psychiatry = "SPECIALTY:Psychiatry"
sports_medicine_internal_medicine = "SPECIALTY:Sports Medicine (Internal Medicine)"
class ProviderSearchInputStatic(BaseModel):
specialty: SpecialtyEnumStatic
print(ProviderSearchInputStatic.__fields__)
# {'specialty': ModelField(name='specialty', type=SpecialtyEnumStatic, required=True)}
specialties = {
'psychiatry': 'SPECIALTY:Psychiatry',
'sports-medicine (Internal Medicine)': 'SPECIALTY:Sports Medicine (Internal Medicine)'
}
SpecialtyEnumDynamic = Enum('SpecialtyEnumDynamic', specialties)
ProviderSearchInputDynamic = create_model(
'ProviderSearchInputDynamic',
specialty=SpecialtyEnumDynamic,
__base__=BaseModel
)
print(ProviderSearchInputDynamic.__fields__)
# {}
David Stocker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.