From a99d733bb584571cc7a00ced6f3cc37906b7a1a5 Mon Sep 17 00:00:00 2001 From: William Fu-Hinthorn <13333726+hinthornw@users.noreply.github.com> Date: Sun, 29 Mar 2026 07:41:32 -0700 Subject: [PATCH] cli: rename langgraph.json to langsmith.json Rename the default config filename from `langgraph.json` to `langsmith.json` as part of the "LangGraph Platform" to "LangSmith Deployment" rebranding. Backward compatibility is preserved: the CLI falls back to `langgraph.json` with a deprecation warning when `langsmith.json` is not found. A new `_resolve_config` callback handles the resolution logic for all `--config` click options. Changes span libs/cli (core logic, examples, tests), libs/sdk-py (docstrings), libs/langgraph (Makefile), and .github CI scripts. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/scripts/run_langgraph_cli_test.py | 2 +- .github/workflows/_integration_test.yml | 6 +- libs/cli/README.md | 4 +- .../{langgraph.json => langsmith.json} | 0 .../{langgraph.json => langsmith.json} | 0 .../graphs/{langgraph.json => langsmith.json} | 0 .../{langgraph.json => langsmith.json} | 0 .../{langgraph.json => langsmith.json} | 0 .../{langgraph.json => langsmith.json} | 0 libs/cli/generate_schema.py | 4 +- .../{langgraph.json => langsmith.json} | 0 .../agent/{langgraph.json => langsmith.json} | 0 libs/cli/langgraph_cli/cli.py | 100 ++++++++++++++---- libs/cli/langgraph_cli/config.py | 6 +- libs/cli/langgraph_cli/constants.py | 3 +- libs/cli/langgraph_cli/util.py | 2 +- .../agent/{langgraph.json => langsmith.json} | 0 .../cli/{langgraph.json => langsmith.json} | 0 libs/cli/tests/unit_tests/cli/test_cli.py | 14 +-- libs/cli/tests/unit_tests/test_config.py | 2 +- .../tests/unit_tests/test_deploy_helpers.py | 12 +-- libs/cli/tests/unit_tests/test_util.py | 8 +- libs/langgraph/Makefile | 2 +- .../{langgraph.json => langsmith.json} | 0 .../sdk-py/langgraph_sdk/_async/assistants.py | 6 +- libs/sdk-py/langgraph_sdk/_sync/assistants.py | 6 +- libs/sdk-py/langgraph_sdk/auth/__init__.py | 4 +- libs/sdk-py/langgraph_sdk/auth/types.py | 2 +- .../langgraph_sdk/encryption/__init__.py | 4 +- 29 files changed, 125 insertions(+), 62 deletions(-) rename libs/cli/examples/graph_prerelease_reqs/{langgraph.json => langsmith.json} (100%) rename libs/cli/examples/graph_prerelease_reqs_fail/{langgraph.json => langsmith.json} (100%) rename libs/cli/examples/graphs/{langgraph.json => langsmith.json} (100%) rename libs/cli/examples/graphs_reqs_a/{langgraph.json => langsmith.json} (100%) rename libs/cli/examples/graphs_reqs_b/{langgraph.json => langsmith.json} (100%) rename libs/cli/examples/{langgraph.json => langsmith.json} (100%) rename libs/cli/js-examples/{langgraph.json => langsmith.json} (100%) rename libs/cli/js-monorepo-example/apps/agent/{langgraph.json => langsmith.json} (100%) rename libs/cli/python-monorepo-example/apps/agent/{langgraph.json => langsmith.json} (100%) rename libs/cli/tests/unit_tests/cli/{langgraph.json => langsmith.json} (100%) rename libs/langgraph/tests/example_app/{langgraph.json => langsmith.json} (100%) diff --git a/.github/scripts/run_langgraph_cli_test.py b/.github/scripts/run_langgraph_cli_test.py index e296ba7d5..204ce42f1 100644 --- a/.github/scripts/run_langgraph_cli_test.py +++ b/.github/scripts/run_langgraph_cli_test.py @@ -165,7 +165,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-t", "--tag", type=str) - parser.add_argument("-c", "--config", type=str, default="./langgraph.json") + parser.add_argument("-c", "--config", type=str, default="./langsmith.json") parser.add_argument("-p", "--port", type=int, default=DEFAULT_PORT) args = parser.parse_args() try: diff --git a/.github/workflows/_integration_test.yml b/.github/workflows/_integration_test.yml index f51e4dcf1..64bf24d24 100644 --- a/.github/workflows/_integration_test.yml +++ b/.github/workflows/_integration_test.yml @@ -83,13 +83,13 @@ jobs: if: ${{ (steps.changed-files.outputs.all || github.event_name == 'workflow_dispatch') &&matrix.example.name == 'A' }} working-directory: libs/cli/js-monorepo-example run: | - langgraph build -t langgraph-test-f -c apps/agent/langgraph.json --build-command "yarn run turbo build" --install-command "yarn install" + langgraph build -t langgraph-test-f -c apps/agent/langsmith.json --build-command "yarn run turbo build" --install-command "yarn install" - name: Build Python monorepo service if: ${{ (steps.changed-files.outputs.all || github.event_name == 'workflow_dispatch') &&matrix.example.name == 'A' }} working-directory: libs/cli/python-monorepo-example run: | - langgraph build -t langgraph-test-g -c apps/agent/langgraph.json + langgraph build -t langgraph-test-g -c apps/agent/langsmith.json - name: Test Python monorepo service if: ${{ (steps.changed-files.outputs.all || github.event_name == 'workflow_dispatch') &&matrix.example.name == 'A' && env.HAS_LANGSMITH_API_KEY == 'true' }} working-directory: libs/cli/python-monorepo-example @@ -98,7 +98,7 @@ jobs: run: | cp apps/agent/.env.example apps/agent/.env echo "LANGSMITH_API_KEY=${{ secrets.LANGSMITH_API_KEY }}" >> apps/agent/.env - timeout 60 python ../../../.github/scripts/run_langgraph_cli_test.py -t langgraph-test-g -c apps/agent/langgraph.json + timeout 60 python ../../../.github/scripts/run_langgraph_cli_test.py -t langgraph-test-g -c apps/agent/langsmith.json - name: Build prerelease reqs service if: ${{ (steps.changed-files.outputs.all || github.event_name == 'workflow_dispatch') &&matrix.example.name == 'A' }} diff --git a/libs/cli/README.md b/libs/cli/README.md index d3b130e86..e4391ce21 100644 --- a/libs/cli/README.md +++ b/libs/cli/README.md @@ -31,7 +31,7 @@ langgraph dev [OPTIONS] --no-reload Disable auto-reload --debug-port INTEGER Enable remote debugging --no-browser Skip opening browser window - -c, --config FILE Config file path (default: langgraph.json) + -c, --config FILE Config file path (default: langsmith.json) ``` ### `langgraph up` 🚀 @@ -64,7 +64,7 @@ langgraph dockerfile SAVE_PATH [OPTIONS] ## Configuration -The CLI uses a `langgraph.json` configuration file with these key settings: +The CLI uses a `langsmith.json` configuration file with these key settings: ```json { diff --git a/libs/cli/examples/graph_prerelease_reqs/langgraph.json b/libs/cli/examples/graph_prerelease_reqs/langsmith.json similarity index 100% rename from libs/cli/examples/graph_prerelease_reqs/langgraph.json rename to libs/cli/examples/graph_prerelease_reqs/langsmith.json diff --git a/libs/cli/examples/graph_prerelease_reqs_fail/langgraph.json b/libs/cli/examples/graph_prerelease_reqs_fail/langsmith.json similarity index 100% rename from libs/cli/examples/graph_prerelease_reqs_fail/langgraph.json rename to libs/cli/examples/graph_prerelease_reqs_fail/langsmith.json diff --git a/libs/cli/examples/graphs/langgraph.json b/libs/cli/examples/graphs/langsmith.json similarity index 100% rename from libs/cli/examples/graphs/langgraph.json rename to libs/cli/examples/graphs/langsmith.json diff --git a/libs/cli/examples/graphs_reqs_a/langgraph.json b/libs/cli/examples/graphs_reqs_a/langsmith.json similarity index 100% rename from libs/cli/examples/graphs_reqs_a/langgraph.json rename to libs/cli/examples/graphs_reqs_a/langsmith.json diff --git a/libs/cli/examples/graphs_reqs_b/langgraph.json b/libs/cli/examples/graphs_reqs_b/langsmith.json similarity index 100% rename from libs/cli/examples/graphs_reqs_b/langgraph.json rename to libs/cli/examples/graphs_reqs_b/langsmith.json diff --git a/libs/cli/examples/langgraph.json b/libs/cli/examples/langsmith.json similarity index 100% rename from libs/cli/examples/langgraph.json rename to libs/cli/examples/langsmith.json diff --git a/libs/cli/generate_schema.py b/libs/cli/generate_schema.py index 3aa1ccd16..e85f63b73 100644 --- a/libs/cli/generate_schema.py +++ b/libs/cli/generate_schema.py @@ -2,7 +2,7 @@ """ Script to generate a JSON schema for the langgraph-cli Config class. -This script creates a schema.json file that can be referenced in langgraph.json files +This script creates a schema.json file that can be referenced in langsmith.json files to provide IDE autocompletion and validation. """ @@ -243,7 +243,7 @@ def main(): print( f"You can now add '$schema: https://raw.githubusercontent.com/langchain-ai/langgraph/refs/heads/main/libs/cli/schemas/schema.json'" f" or '$schema: https://raw.githubusercontent.com/langchain-ai/langgraph/refs/heads/main/libs/cli/schemas/schema.{schema_version}.json'" - " to your langgraph.json files" + " to your langsmith.json files" ) diff --git a/libs/cli/js-examples/langgraph.json b/libs/cli/js-examples/langsmith.json similarity index 100% rename from libs/cli/js-examples/langgraph.json rename to libs/cli/js-examples/langsmith.json diff --git a/libs/cli/js-monorepo-example/apps/agent/langgraph.json b/libs/cli/js-monorepo-example/apps/agent/langsmith.json similarity index 100% rename from libs/cli/js-monorepo-example/apps/agent/langgraph.json rename to libs/cli/js-monorepo-example/apps/agent/langsmith.json diff --git a/libs/cli/langgraph_cli/cli.py b/libs/cli/langgraph_cli/cli.py index 993a69f64..84f56b442 100644 --- a/libs/cli/langgraph_cli/cli.py +++ b/libs/cli/langgraph_cli/cli.py @@ -24,7 +24,7 @@ import langgraph_cli.config import langgraph_cli.docker from langgraph_cli.analytics import log_command from langgraph_cli.config import Config -from langgraph_cli.constants import DEFAULT_CONFIG, DEFAULT_PORT +from langgraph_cli.constants import DEFAULT_CONFIG, DEFAULT_PORT, LEGACY_CONFIG from langgraph_cli.docker import DockerCapabilities from langgraph_cli.exec import Runner, subp_exec from langgraph_cli.helpers import format_log_entry, level_fg, resolve_deployment_id @@ -97,7 +97,7 @@ _DEPLOYMENT_NAME_ENV = "LANGSMITH_DEPLOYMENT_NAME" def _parse_env_from_config( config_json: dict, config_path: pathlib.Path ) -> dict[str, str]: - """Resolve env vars from langgraph.json 'env' field or a .env fallback.""" + """Resolve env vars from langsmith.json 'env' field or a .env fallback.""" env_field = config_json.get("env") # validate_config_file will default env to {} if isinstance(env_field, dict) and env_field: @@ -106,7 +106,7 @@ def _parse_env_from_config( env_path = (config_path.parent / env_field).resolve() if not env_path.exists(): click.secho( - f"Warning: env file '{env_field}' specified in langgraph.json not found.", + f"Warning: env file '{env_field}' specified in langsmith.json not found.", fg="yellow", ) return {} @@ -157,6 +157,47 @@ def _docker_config_for_token(registry_host: str, token: str): yield tmpdir +def _resolve_config( + ctx: click.Context, param: click.Parameter, value: str | None +) -> pathlib.Path: + """Resolve config path, falling back from langsmith.json to langgraph.json.""" + if value is not None and value not in (DEFAULT_CONFIG, LEGACY_CONFIG): + # User explicitly passed a config path + path = pathlib.Path(value).resolve() + if not path.exists(): + raise click.BadParameter( + f"Path '{value}' does not exist.", ctx=ctx, param=param + ) + return path + + # Check for default config, then legacy fallback + default_path = pathlib.Path(DEFAULT_CONFIG).resolve() + if default_path.exists(): + return default_path + + legacy_path = pathlib.Path(LEGACY_CONFIG).resolve() + if legacy_path.exists(): + click.secho( + f"Warning: '{LEGACY_CONFIG}' is deprecated. " + f"Rename it to '{DEFAULT_CONFIG}'.", + fg="yellow", + ) + return legacy_path + + if value is not None: + # User explicitly passed one of the default/legacy names but neither exists + raise click.BadParameter( + f"Path '{value}' does not exist.", ctx=ctx, param=param + ) + + raise click.BadParameter( + f"No config file found. Expected '{DEFAULT_CONFIG}' " + f"(or '{LEGACY_CONFIG}') in the current directory.", + ctx=ctx, + param=param, + ) + + OPT_DOCKER_COMPOSE = click.option( "--docker-compose", "-d", @@ -189,7 +230,7 @@ OPT_CONFIG = click.option( \b Example: - langgraph up -c langgraph.json + langgraph up -c langsmith.json \b Example: @@ -220,14 +261,16 @@ OPT_CONFIG = click.option( } } - Defaults to looking for langgraph.json in the current directory.""", + Defaults to looking for langsmith.json in the current directory. Also accepts the legacy langgraph.json.""", default=DEFAULT_CONFIG, + callback=_resolve_config, + is_eager=True, type=click.Path( - exists=True, + exists=False, file_okay=True, dir_okay=False, - resolve_path=True, - path_type=pathlib.Path, + resolve_path=False, + path_type=str, ), ) OPT_PORT = click.option( @@ -645,7 +688,7 @@ def _build( ) @click.option( "--build-command", - help="Custom build command to run from the langgraph.json directory. If not provided, uses default build process.", + help="Custom build command to run from the langsmith.json directory. If not provided, uses default build process.", ) @click.argument("docker_build_args", nargs=-1, type=click.UNPROCESSED) @cli.command( @@ -754,12 +797,28 @@ def _deploy_base_options( "-c", default=DEFAULT_CONFIG, hidden=True, - type=click.Path( - exists=validate_config_path, - file_okay=True, - dir_okay=False, - resolve_path=True, - path_type=pathlib.Path, + **( + { + "callback": _resolve_config, + "is_eager": True, + "type": click.Path( + exists=False, + file_okay=True, + dir_okay=False, + resolve_path=False, + path_type=str, + ), + } + if validate_config_path + else { + "type": click.Path( + exists=False, + file_okay=True, + dir_okay=False, + resolve_path=True, + path_type=pathlib.Path, + ), + } ), ), click.option("--pull/--no-pull", default=True, hidden=True), @@ -788,7 +847,7 @@ def _deploy_base_options( "[Beta] Build and deploy a LangGraph image to LangSmith Deployment.\n\n" "This command is in beta and under active development. " "Expect frequent updates and improvements.\n\n" - "Run from the root of your LangGraph project (where langgraph.json " + "Run from the root of your LangGraph project (where langsmith.json " "is located). This command also accepts build flags (--base-image, " "--config, --pull, etc.). See 'langgraph build --help' for details." ), @@ -1727,9 +1786,12 @@ def dockerfile( ) @click.option( "--config", - type=click.Path(exists=True), - default="langgraph.json", - help="Path to configuration file declaring dependencies, graphs and environment variables", + type=click.Path(exists=False), + default=DEFAULT_CONFIG, + callback=_resolve_config, + is_eager=True, + help="Path to configuration file declaring dependencies, graphs and environment variables. " + "Defaults to looking for langsmith.json in the current directory. Also accepts the legacy langgraph.json.", ) @click.option( "--n-jobs-per-worker", diff --git a/libs/cli/langgraph_cli/config.py b/libs/cli/langgraph_cli/config.py index 106daccc7..bb9ee4c18 100644 --- a/libs/cli/langgraph_cli/config.py +++ b/libs/cli/langgraph_cli/config.py @@ -550,7 +550,7 @@ def _update_graph_paths( the host system is Windows). Args: - config_path: The path to the config file (e.g. `langgraph.json`). + config_path: The path to the config file (e.g. `langsmith.json`). config: The validated configuration dictionary. local_deps: An object containing references to local dependencies: - real Python packages (with a `pyproject.toml` or `setup.py`) @@ -1280,7 +1280,7 @@ def docker_tag( def _calculate_relative_workdir(config_path: pathlib.Path, build_context: str) -> str: - """Calculate the relative path from build context to langgraph.json directory.""" + """Calculate the relative path from build context to langsmith.json directory.""" config_dir = config_path.parent.resolve() build_context_path = pathlib.Path(build_context).resolve() @@ -1290,7 +1290,7 @@ def _calculate_relative_workdir(config_path: pathlib.Path, build_context: str) - except ValueError as _: raise ValueError( f"Configuration file {config_path} is not under the build context {build_context}. " - f"Please run the command from a directory that contains your langgraph.json file, " + f"Please run the command from a directory that contains your langsmith.json file, " ) from None diff --git a/libs/cli/langgraph_cli/constants.py b/libs/cli/langgraph_cli/constants.py index 117062a97..1a6607726 100644 --- a/libs/cli/langgraph_cli/constants.py +++ b/libs/cli/langgraph_cli/constants.py @@ -1,4 +1,5 @@ -DEFAULT_CONFIG = "langgraph.json" +DEFAULT_CONFIG = "langsmith.json" +LEGACY_CONFIG = "langgraph.json" DEFAULT_PORT = 8123 # analytics diff --git a/libs/cli/langgraph_cli/util.py b/libs/cli/langgraph_cli/util.py index f414172fb..6bfa18df2 100644 --- a/libs/cli/langgraph_cli/util.py +++ b/libs/cli/langgraph_cli/util.py @@ -21,7 +21,7 @@ def warn_non_wolfi_distro(config_json: dict) -> None: fg="yellow", ) click.secho( - ' To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.', + ' To switch, add \'"image_distro": "wolfi"\' to your langsmith.json config file.', fg="yellow", ) click.secho("") # Empty line for better readability diff --git a/libs/cli/python-monorepo-example/apps/agent/langgraph.json b/libs/cli/python-monorepo-example/apps/agent/langsmith.json similarity index 100% rename from libs/cli/python-monorepo-example/apps/agent/langgraph.json rename to libs/cli/python-monorepo-example/apps/agent/langsmith.json diff --git a/libs/cli/tests/unit_tests/cli/langgraph.json b/libs/cli/tests/unit_tests/cli/langsmith.json similarity index 100% rename from libs/cli/tests/unit_tests/cli/langgraph.json rename to libs/cli/tests/unit_tests/cli/langsmith.json diff --git a/libs/cli/tests/unit_tests/cli/test_cli.py b/libs/cli/tests/unit_tests/cli/test_cli.py index 475521c4f..73eb450cc 100644 --- a/libs/cli/tests/unit_tests/cli/test_cli.py +++ b/libs/cli/tests/unit_tests/cli/test_cli.py @@ -50,7 +50,7 @@ def temporary_config_folder(config_content: dict, levels: int = 0): def test_prepare_args_and_stdin() -> None: # this basically serves as an end-to-end test for using config and docker helpers - config_path = pathlib.Path(__file__).parent / "langgraph.json" + config_path = pathlib.Path(__file__).parent / "langsmith.json" config = validate_config( Config(dependencies=[".", "../../.."], graphs={"agent": "agent.py:graph"}) ) @@ -159,7 +159,7 @@ services: develop: watch: - - path: langgraph.json + - path: langsmith.json action: rebuild - path: . action: rebuild @@ -172,7 +172,7 @@ services: def test_prepare_args_and_stdin_with_image() -> None: # this basically serves as an end-to-end test for using config and docker helpers - config_path = pathlib.Path(__file__).parent / "langgraph.json" + config_path = pathlib.Path(__file__).parent / "langsmith.json" config = validate_config( Config(dependencies=[".", "../../.."], graphs={"agent": "agent.py:graph"}) ) @@ -263,7 +263,7 @@ services: develop: watch: - - path: langgraph.json + - path: langsmith.json action: rebuild - path: . action: rebuild @@ -1136,7 +1136,7 @@ def test_build_command_with_api_version_and_base_image() -> None: def test_prepare_args_and_stdin_with_api_version() -> None: """Test prepare_args_and_stdin function with api_version parameter.""" - config_path = pathlib.Path(__file__).parent / "langgraph.json" + config_path = pathlib.Path(__file__).parent / "langsmith.json" config = validate_config( Config(dependencies=["."], graphs={"agent": "agent.py:graph"}) ) @@ -1169,7 +1169,7 @@ def test_prepare_args_and_stdin_with_api_version() -> None: def test_prepare_args_and_stdin_with_api_version_and_image() -> None: """Test prepare_args_and_stdin function with both api_version and image parameters.""" - config_path = pathlib.Path(__file__).parent / "langgraph.json" + config_path = pathlib.Path(__file__).parent / "langsmith.json" config = validate_config( Config(dependencies=["."], graphs={"agent": "agent.py:graph"}) ) @@ -1298,7 +1298,7 @@ def test_dockerfile_command_distributed_with_explicit_base_image() -> None: def test_prepare_args_and_stdin_distributed_mode() -> None: """Test prepare_args_and_stdin with distributed mode includes all services.""" - config_path = pathlib.Path(__file__).parent / "langgraph.json" + config_path = pathlib.Path(__file__).parent / "langsmith.json" config = validate_config( Config(dependencies=["."], graphs={"agent": "agent.py:graph"}) ) diff --git a/libs/cli/tests/unit_tests/test_config.py b/libs/cli/tests/unit_tests/test_config.py index 050284905..9ea1abc7b 100644 --- a/libs/cli/tests/unit_tests/test_config.py +++ b/libs/cli/tests/unit_tests/test_config.py @@ -309,7 +309,7 @@ def test_validate_config_file(): with tempfile.TemporaryDirectory() as tmpdir: tmpdir_path = pathlib.Path(tmpdir) - config_path = tmpdir_path / "langgraph.json" + config_path = tmpdir_path / "langsmith.json" node_config = {"node_version": "20", "graphs": {"agent": "./agent.js:graph"}} with open(config_path, "w") as f: diff --git a/libs/cli/tests/unit_tests/test_deploy_helpers.py b/libs/cli/tests/unit_tests/test_deploy_helpers.py index 7da3cc7cb..ae3ce1585 100644 --- a/libs/cli/tests/unit_tests/test_deploy_helpers.py +++ b/libs/cli/tests/unit_tests/test_deploy_helpers.py @@ -85,7 +85,7 @@ class TestNormalizeImageTag: class TestParseEnvFromConfig: def test_env_dict(self, tmp_path): - config_path = tmp_path / "langgraph.json" + config_path = tmp_path / "langsmith.json" config_path.touch() result = _parse_env_from_config({"env": {"FOO": "bar", "NUM": 42}}, config_path) assert result == {"FOO": "bar", "NUM": "42"} @@ -93,7 +93,7 @@ class TestParseEnvFromConfig: def test_env_string_dotenv_file(self, tmp_path): env_file = tmp_path / "my.env" env_file.write_text("KEY1=val1\nKEY2=val2\n") - config_path = tmp_path / "langgraph.json" + config_path = tmp_path / "langsmith.json" config_path.touch() result = _parse_env_from_config({"env": "my.env"}, config_path) assert result == {"KEY1": "val1", "KEY2": "val2"} @@ -102,7 +102,7 @@ class TestParseEnvFromConfig: env_file = tmp_path / ".env" env_file.write_text("DEFAULT_KEY=default_val\n") monkeypatch.chdir(tmp_path) - config_path = tmp_path / "langgraph.json" + config_path = tmp_path / "langsmith.json" config_path.touch() result = _parse_env_from_config({}, config_path) assert result == {"DEFAULT_KEY": "default_val"} @@ -112,14 +112,14 @@ class TestParseEnvFromConfig: env_file = tmp_path / ".env" env_file.write_text("MY_KEY=my_val\n") monkeypatch.chdir(tmp_path) - config_path = tmp_path / "langgraph.json" + config_path = tmp_path / "langsmith.json" config_path.touch() result = _parse_env_from_config({"env": {}}, config_path) assert result == {"MY_KEY": "my_val"} def test_env_missing_no_dotenv_returns_empty(self, tmp_path, monkeypatch): monkeypatch.chdir(tmp_path) - config_path = tmp_path / "langgraph.json" + config_path = tmp_path / "langsmith.json" config_path.touch() result = _parse_env_from_config({}, config_path) assert result == {} @@ -128,7 +128,7 @@ class TestParseEnvFromConfig: # Lines like "KEY=" produce empty string, lines like "KEY" produce None env_file = tmp_path / "test.env" env_file.write_text("GOOD=value\nEMPTY=\n") - config_path = tmp_path / "langgraph.json" + config_path = tmp_path / "langsmith.json" config_path.touch() result = _parse_env_from_config({"env": "test.env"}, config_path) assert "GOOD" in result diff --git a/libs/cli/tests/unit_tests/test_util.py b/libs/cli/tests/unit_tests/test_util.py index 667cdd027..74b9ddaad 100644 --- a/libs/cli/tests/unit_tests/test_util.py +++ b/libs/cli/tests/unit_tests/test_util.py @@ -48,7 +48,7 @@ def test_warn_non_wolfi_distro_with_debian(capsys): in captured.out ) assert ( - 'To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.' + 'To switch, add \'"image_distro": "wolfi"\' to your langsmith.json config file.' in captured.out ) @@ -69,7 +69,7 @@ def test_warn_non_wolfi_distro_with_default_debian(capsys): in captured.out ) assert ( - 'To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.' + 'To switch, add \'"image_distro": "wolfi"\' to your langsmith.json config file.' in captured.out ) @@ -100,7 +100,7 @@ def test_warn_non_wolfi_distro_with_other_distro(capsys): in captured.out ) assert ( - 'To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.' + 'To switch, add \'"image_distro": "wolfi"\' to your langsmith.json config file.' in captured.out ) @@ -128,7 +128,7 @@ def test_warn_non_wolfi_distro_output_formatting(): ), ( ( - ' To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.', + ' To switch, add \'"image_distro": "wolfi"\' to your langsmith.json config file.', ), {"fg": "yellow"}, ), diff --git a/libs/langgraph/Makefile b/libs/langgraph/Makefile index e2c57e19d..31b0fd28f 100644 --- a/libs/langgraph/Makefile +++ b/libs/langgraph/Makefile @@ -44,7 +44,7 @@ stop-services: docker compose -f tests/compose-postgres.yml -f tests/compose-redis.yml down -v start-dev-server: - LOG_LEVEL=warning uv run langgraph dev --config tests/example_app/langgraph.json --no-browser & echo "$$!" > .devserver.pid + LOG_LEVEL=warning uv run langgraph dev --config tests/example_app/langsmith.json --no-browser & echo "$$!" > .devserver.pid @echo "Dev server started." stop-dev-server: diff --git a/libs/langgraph/tests/example_app/langgraph.json b/libs/langgraph/tests/example_app/langsmith.json similarity index 100% rename from libs/langgraph/tests/example_app/langgraph.json rename to libs/langgraph/tests/example_app/langsmith.json diff --git a/libs/sdk-py/langgraph_sdk/_async/assistants.py b/libs/sdk-py/langgraph_sdk/_async/assistants.py index 3620401cb..552f1d794 100644 --- a/libs/sdk-py/langgraph_sdk/_async/assistants.py +++ b/libs/sdk-py/langgraph_sdk/_async/assistants.py @@ -323,7 +323,7 @@ class AssistantsClient: Useful when graph is configurable and you want to create different assistants based on different configurations. Args: - graph_id: The ID of the graph the assistant should use. The graph ID is normally set in your langgraph.json configuration. + graph_id: The ID of the graph the assistant should use. The graph ID is normally set in your langsmith.json configuration. config: Configuration to use for the graph. metadata: Metadata to add to assistant. context: Static context to add to the assistant. @@ -395,7 +395,7 @@ class AssistantsClient: Args: assistant_id: Assistant to update. graph_id: The ID of the graph the assistant should use. - The graph ID is normally set in your langgraph.json configuration. If `None`, assistant will keep pointing to same graph. + The graph ID is normally set in your langsmith.json configuration. If `None`, assistant will keep pointing to same graph. config: Configuration to use for the graph. context: Static context to add to the assistant. !!! version-added "Added in version 0.6.0" @@ -538,7 +538,7 @@ class AssistantsClient: Args: metadata: Metadata to filter by. Exact match filter for each KV pair. graph_id: The ID of the graph to filter by. - The graph ID is normally set in your langgraph.json configuration. + The graph ID is normally set in your langsmith.json configuration. name: The name of the assistant to filter by. The filtering logic will match assistants where 'name' is a substring (case insensitive) of the assistant name. limit: The maximum number of results to return. diff --git a/libs/sdk-py/langgraph_sdk/_sync/assistants.py b/libs/sdk-py/langgraph_sdk/_sync/assistants.py index 272fd306b..fc1cb9698 100644 --- a/libs/sdk-py/langgraph_sdk/_sync/assistants.py +++ b/libs/sdk-py/langgraph_sdk/_sync/assistants.py @@ -327,7 +327,7 @@ class SyncAssistantsClient: Useful when graph is configurable and you want to create different assistants based on different configurations. Args: - graph_id: The ID of the graph the assistant should use. The graph ID is normally set in your langgraph.json configuration. + graph_id: The ID of the graph the assistant should use. The graph ID is normally set in your langsmith.json configuration. config: Configuration to use for the graph. context: Static context to add to the assistant. !!! version-added "Added in version 0.6.0" @@ -399,7 +399,7 @@ class SyncAssistantsClient: Args: assistant_id: Assistant to update. graph_id: The ID of the graph the assistant should use. - The graph ID is normally set in your langgraph.json configuration. If `None`, assistant will keep pointing to same graph. + The graph ID is normally set in your langsmith.json configuration. If `None`, assistant will keep pointing to same graph. config: Configuration to use for the graph. context: Static context to add to the assistant. !!! version-added "Added in version 0.6.0" @@ -540,7 +540,7 @@ class SyncAssistantsClient: Args: metadata: Metadata to filter by. Exact match filter for each KV pair. graph_id: The ID of the graph to filter by. - The graph ID is normally set in your langgraph.json configuration. + The graph ID is normally set in your langsmith.json configuration. name: The name of the assistant to filter by. The filtering logic will match assistants where 'name' is a substring (case insensitive) of the assistant name. limit: The maximum number of results to return. diff --git a/libs/sdk-py/langgraph_sdk/auth/__init__.py b/libs/sdk-py/langgraph_sdk/auth/__init__.py index d627c5f4d..7920eaf53 100644 --- a/libs/sdk-py/langgraph_sdk/auth/__init__.py +++ b/libs/sdk-py/langgraph_sdk/auth/__init__.py @@ -19,11 +19,11 @@ class Auth: actions. To use, create a separate python file and add the path to the file to your - LangGraph API configuration file (`langgraph.json`). Within that file, create + LangGraph API configuration file (`langsmith.json`). Within that file, create an instance of the Auth class and register authentication and authorization handlers as needed. - Example `langgraph.json` file: + Example `langsmith.json` file: ```json { diff --git a/libs/sdk-py/langgraph_sdk/auth/types.py b/libs/sdk-py/langgraph_sdk/auth/types.py index 84211878d..360261982 100644 --- a/libs/sdk-py/langgraph_sdk/auth/types.py +++ b/libs/sdk-py/langgraph_sdk/auth/types.py @@ -218,7 +218,7 @@ class BaseUser(typing.Protocol): class StudioUser: """A user object that's populated from authenticated requests from the LangGraph studio. - Note: Studio auth can be disabled in your `langgraph.json` config. + Note: Studio auth can be disabled in your `langsmith.json` config. ```json { diff --git a/libs/sdk-py/langgraph_sdk/encryption/__init__.py b/libs/sdk-py/langgraph_sdk/encryption/__init__.py index 79611de05..7de6f7730 100644 --- a/libs/sdk-py/langgraph_sdk/encryption/__init__.py +++ b/libs/sdk-py/langgraph_sdk/encryption/__init__.py @@ -210,11 +210,11 @@ class Encryption: metadata, context, kwargs, values, etc.). To use, create a separate Python file and add the path to the file to your - LangGraph API configuration file (`langgraph.json`). Within that file, create + LangGraph API configuration file (`langsmith.json`). Within that file, create an instance of the Encryption class and register encryption and decryption handlers as needed. - Example `langgraph.json` file: + Example `langsmith.json` file: ```json {