Maintain backward compatibility when evolving API interfaces by preserving existing method signatures and parameter patterns. When adding new functionality, prefer extending existing interfaces over breaking changes, and use deprecation warnings for obsolete parameters.
Key principles:
get
”__init__
, which become defaults for __call__
. The kwargs
passed to __call__
overwrite any defaults from __init__
”kwargs
and move the deprecated args there, and print a clear warning that it’s deprecated”Example of backward-compatible parameter evolution:
# Before
def __init__(self, model):
self.model = model
# After - maintains compatibility while adding type safety
def __init__(self, embedding_model: Union[str, Callable] = 'text-embedding-ada-002',
embedding_function: Optional[Callable] = None, **kwargs):
# Handle both old and new parameter patterns
self.model = embedding_function or embedding_model
self.kwargs = kwargs
This approach prevents breaking existing user code while enabling clean API evolution and improved developer experience.
Enter the URL of a public GitHub repository