cli[minor]: Add script to generate migrations for partner packages (#20932)

Add script to help generate migrations.

This works well for partner packages. Migrations are generated based on run time rather than static analysis (much simpler to get the correct migrations implemented).

The script for generating migrations from langchain to community still needs work.
This commit is contained in:
Eugene Yurtsev
2024-04-26 11:17:20 -04:00
committed by GitHub
parent fe1304afc4
commit 5653f36adc
10 changed files with 289 additions and 0 deletions

View File

View File

@@ -0,0 +1,48 @@
"""Script to generate migrations for the migration script."""
import json
import click
from langchain_cli.namespaces.migrate.generate.langchain import (
generate_migrations_from_langchain_to_community,
)
from langchain_cli.namespaces.migrate.generate.partner import (
get_migrations_for_partner_package,
)
@click.group()
def cli():
"""Migration scripts management."""
pass
@cli.command()
@click.option(
"--output",
default="langchain_migrations.json",
help="Output file for the migration script.",
)
def langchain(output: str) -> None:
"""Generate a migration script."""
click.echo("Migration script generated.")
migrations = generate_migrations_from_langchain_to_community()
with open(output, "w") as f:
f.write(json.dumps(migrations))
@cli.command()
@click.argument("pkg")
@click.option("--output", default=None, help="Output file for the migration script.")
def partner(pkg: str, output: str) -> None:
"""Generate migration scripts specifically for LangChain modules."""
click.echo("Migration script for LangChain generated.")
migrations = get_migrations_for_partner_package(pkg)
output_name = f"partner_{pkg}.json" if output is None else output
with open(output_name, "w") as f:
f.write(json.dumps(migrations, indent=2, sort_keys=True))
click.secho(f"LangChain migration script saved to {output_name}")
if __name__ == "__main__":
cli()

View File

@@ -0,0 +1 @@
[["langchain_community.embeddings.openai.OpenAIEmbeddings", "langchain_openai.embeddings.base.OpenAIEmbeddings"], ["langchain_community.embeddings.azure_openai.AzureOpenAIEmbeddings", "langchain_openai.embeddings.azure.AzureOpenAIEmbeddings"], ["langchain_community.chat_models.openai.ChatOpenAI", "langchain_openai.chat_models.base.ChatOpenAI"], ["langchain_community.chat_models.azure_openai.AzureChatOpenAI", "langchain_openai.chat_models.azure.AzureChatOpenAI"]]