Custom types
Outlines provides custom Pydantic types so you can focus on your use case rather than on writing regular expressions:
| Category | Type | Import | Description | 
|---|---|---|---|
| ISBN | 10 & 13 | outlines.types.ISBN | 
There is no guarantee that the check digit will be correct | 
| Airport | IATA | outlines.types.airports.IATA | 
Valid airport IATA codes | 
| Country | alpha-2 code | outlines.types.airports.Alpha2 | 
Valid country alpha-2 codes | 
| alpha-3 code | outlines.types.countries.Alpha3 | 
Valid country alpha-3 codes | |
| numeric code | outlines.types.countries.Numeric | 
Valid country numeric codes | |
| name | outlines.types.countries.Name | 
Valid country names | |
| flag | outlines.types.countries.Flag | 
Valid flag emojis | |
outlines.types.Email | 
Valid email address | 
Some types require localization. We currently only support US types, but please don't hesitate to create localized versions of the different types and open a Pull Request. Localized types are specified using types.locale in the following way:
Here are the localized types that are currently available:
| Category | Locale | Import | Description | 
|---|---|---|---|
| Zip code | US | ZipCode | 
Generate US Zip(+4) codes | 
| Phone number | US | PhoneNumber | 
Generate valid US phone numbers | 
You can use these types in Pydantic schemas for JSON-structured generation:
from pydantic import BaseModel
from outlines import models, generate, types
# Specify the locale for types
locale = types.locale("us")
class Client(BaseModel):
    name: str
    phone_number: locale.PhoneNumber
    zip_code: locale.ZipCode
model = models.transformers("microsoft/Phi-3-mini-4k-instruct")
generator = generate.json(model, Client)
result = generator(
    "Create a client profile with the fields name, phone_number and zip_code"
)
print(result)
# name='Tommy' phone_number='129-896-5501' zip_code='50766'
Or simply with outlines.generate.format:
from pydantic import BaseModel
from outlines import models, generate, types
model = models.transformers("microsoft/Phi-3-mini-4k-instruct")
generator = generate.format(model, types.locale("us").PhoneNumber)
result = generator(
    "Return a US Phone number: "
)
print(result)
# 334-253-2630
We plan on adding many more custom types. If you have found yourself writing regular expressions to generate fields of a given type, or if you could benefit from more specific types don't hesite to submit a PR or open an issue.