diff --git a/README.md b/README.md index fe5414cf..77bcf8db 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ ai.resolve_hook("approve_send_email", {"granted": True, "reason": "approved"}) ## Examples -Focused samples live in `examples/samples/`. +Focused samples live in `examples/`. End-to-end demos: diff --git a/examples/.test_scripts/check-examples.py b/examples/.test_scripts/check-examples.py index 2bf5a996..1e7e4d2c 100755 --- a/examples/.test_scripts/check-examples.py +++ b/examples/.test_scripts/check-examples.py @@ -13,28 +13,35 @@ REPO = Path(__file__).resolve().parent.parent.parent MYPY_VERSION = "mypy>=1.11" -# Each entry: (display name, directory to check, extra --with deps) -EXAMPLES: list[tuple[str, Path, list[str]]] = [ - ("samples", REPO / "examples" / "samples", []), +_SAMPLE_FILES = sorted(p.name for p in (REPO / "examples").glob("*.py")) + +# Each entry: (display name, directory to check, extra --with deps, targets) +EXAMPLES: list[tuple[str, Path, list[str], list[str]]] = [ + ("samples", REPO / "examples", [], _SAMPLE_FILES), ( "fastapi-vite/backend", REPO / "examples" / "fastapi-vite" / "backend", ["fastapi"], + ["."], ), ( "multiagent-textual", REPO / "examples" / "multiagent-textual", ["fastapi", "textual", "websockets"], + ["."], ), ( "temporal-direct", REPO / "examples" / "temporal-direct", ["temporalio"], + ["."], ), ] -def run_mypy(name: str, directory: Path, extra_deps: list[str]) -> bool: +def run_mypy( + name: str, directory: Path, extra_deps: list[str], targets: list[str] +) -> bool: header = f"{'=' * 20} {name} {'=' * 20}" print(header) @@ -56,7 +63,7 @@ def run_mypy(name: str, directory: Path, extra_deps: list[str]) -> bool: "mypy", "--config-file", str(REPO / "pyproject.toml"), - ".", + *targets, ] env = {k: v for k, v in os.environ.items() if k != "VIRTUAL_ENV"} @@ -69,8 +76,8 @@ def run_mypy(name: str, directory: Path, extra_deps: list[str]) -> bool: def main() -> None: results: list[tuple[str, bool]] = [] - for name, directory, extra_deps in EXAMPLES: - ok = run_mypy(name, directory, extra_deps) + for name, directory, extra_deps, targets in EXAMPLES: + ok = run_mypy(name, directory, extra_deps, targets) results.append((name, ok)) print("=" * 60) diff --git a/examples/.test_scripts/run-examples.py b/examples/.test_scripts/run-examples.py index d2b3751e..1ec3932b 100755 --- a/examples/.test_scripts/run-examples.py +++ b/examples/.test_scripts/run-examples.py @@ -25,8 +25,8 @@ from pathlib import Path REPO = Path(__file__).resolve().parent.parent.parent -SAMPLES = REPO / "examples" / "samples" -PATCH_SCRIPT = REPO / "examples" / ".test_scripts" / "run-with-patched-model.py" +EXAMPLES_DIR = REPO / "examples" +PATCH_SCRIPT = EXAMPLES_DIR / ".test_scripts" / "run-with-patched-model.py" @dataclasses.dataclass @@ -140,13 +140,8 @@ def _known_sample_map() -> dict[str, Sample]: samples: dict[str, Sample] = {} for sample in KNOWN_SAMPLES: samples[sample.name] = sample - if sample.cmd is None: - samples[f"samples/{sample.name}"] = sample - samples[f"examples/samples/{sample.name}"] = sample - samples[_path_key(SAMPLES / sample.name)] = sample - else: - samples[f"examples/{sample.name}"] = sample - samples[_path_key(REPO / "examples" / sample.name)] = sample + samples[f"examples/{sample.name}"] = sample + samples[_path_key(EXAMPLES_DIR / sample.name)] = sample return samples @@ -156,9 +151,7 @@ def _sample_path(name: str) -> Path: return path if path.parts[:1] == ("examples",): return REPO / path - if path.parts[:1] == ("samples",): - return REPO / "examples" / path - return SAMPLES / path + return EXAMPLES_DIR / path def _select_sample( @@ -302,8 +295,7 @@ def main() -> None: nargs="*", metavar="example", help=( - "example file(s) to run, e.g. stream.py or " - "examples/samples/stream.py" + "example file(s) to run, e.g. stream.py or " "examples/stream.py" ), ) args = parser.parse_args() diff --git a/examples/.test_scripts/run-with-patched-model.py b/examples/.test_scripts/run-with-patched-model.py index 5e485da0..a3c7adb4 100644 --- a/examples/.test_scripts/run-with-patched-model.py +++ b/examples/.test_scripts/run-with-patched-model.py @@ -13,7 +13,7 @@ Example: uv run examples/.test_scripts/run-with-patched-model.py \\ gateway:openai/gpt-5.4-mini \\ - examples/samples/stream.py + examples/stream.py """ diff --git a/examples/samples/agent_custom_loop.py b/examples/agent_custom_loop.py similarity index 100% rename from examples/samples/agent_custom_loop.py rename to examples/agent_custom_loop.py diff --git a/examples/samples/agent_hooks.py b/examples/agent_hooks.py similarity index 100% rename from examples/samples/agent_hooks.py rename to examples/agent_hooks.py diff --git a/examples/samples/agent_hooks_inline.py b/examples/agent_hooks_inline.py similarity index 100% rename from examples/samples/agent_hooks_inline.py rename to examples/agent_hooks_inline.py diff --git a/examples/samples/agent_hooks_serverless.py b/examples/agent_hooks_serverless.py similarity index 100% rename from examples/samples/agent_hooks_serverless.py rename to examples/agent_hooks_serverless.py diff --git a/examples/samples/agent_nested.py b/examples/agent_nested.py similarity index 100% rename from examples/samples/agent_nested.py rename to examples/agent_nested.py diff --git a/examples/samples/agent_simple.py b/examples/agent_simple.py similarity index 100% rename from examples/samples/agent_simple.py rename to examples/agent_simple.py diff --git a/examples/samples/builtin_web_search.py b/examples/builtin_web_search.py similarity index 100% rename from examples/samples/builtin_web_search.py rename to examples/builtin_web_search.py diff --git a/examples/samples/builtin_web_search_gateway.py b/examples/builtin_web_search_gateway.py similarity index 100% rename from examples/samples/builtin_web_search_gateway.py rename to examples/builtin_web_search_gateway.py diff --git a/examples/samples/check_connection.py b/examples/check_connection.py similarity index 100% rename from examples/samples/check_connection.py rename to examples/check_connection.py diff --git a/examples/samples/coding_agent_minimal.py b/examples/coding_agent_minimal.py similarity index 100% rename from examples/samples/coding_agent_minimal.py rename to examples/coding_agent_minimal.py diff --git a/examples/samples/explicit_client.py b/examples/explicit_client.py similarity index 100% rename from examples/samples/explicit_client.py rename to examples/explicit_client.py diff --git a/examples/samples/image_edit.py b/examples/image_edit.py similarity index 100% rename from examples/samples/image_edit.py rename to examples/image_edit.py diff --git a/examples/samples/image_generation.py b/examples/image_generation.py similarity index 100% rename from examples/samples/image_generation.py rename to examples/image_generation.py diff --git a/examples/samples/inline_image.py b/examples/inline_image.py similarity index 100% rename from examples/samples/inline_image.py rename to examples/inline_image.py diff --git a/examples/samples/mcp_tools.py b/examples/mcp_tools.py similarity index 100% rename from examples/samples/mcp_tools.py rename to examples/mcp_tools.py diff --git a/examples/samples/model_params.py b/examples/model_params.py similarity index 100% rename from examples/samples/model_params.py rename to examples/model_params.py diff --git a/examples/samples/multimodal_input.py b/examples/multimodal_input.py similarity index 100% rename from examples/samples/multimodal_input.py rename to examples/multimodal_input.py diff --git a/examples/samples/openai_chat_completions.py b/examples/openai_chat_completions.py similarity index 100% rename from examples/samples/openai_chat_completions.py rename to examples/openai_chat_completions.py diff --git a/examples/samples/prompt_caching.py b/examples/prompt_caching.py similarity index 100% rename from examples/samples/prompt_caching.py rename to examples/prompt_caching.py diff --git a/examples/samples/sample_image.jpg b/examples/sample_image.jpg similarity index 100% rename from examples/samples/sample_image.jpg rename to examples/sample_image.jpg diff --git a/examples/samples/stream.py b/examples/stream.py similarity index 100% rename from examples/samples/stream.py rename to examples/stream.py diff --git a/examples/samples/stream_all.py b/examples/stream_all.py similarity index 100% rename from examples/samples/stream_all.py rename to examples/stream_all.py diff --git a/examples/samples/streaming_tool.py b/examples/streaming_tool.py similarity index 100% rename from examples/samples/streaming_tool.py rename to examples/streaming_tool.py diff --git a/examples/samples/structured_output.py b/examples/structured_output.py similarity index 100% rename from examples/samples/structured_output.py rename to examples/structured_output.py diff --git a/examples/samples/tools_schema.py b/examples/tools_schema.py similarity index 100% rename from examples/samples/tools_schema.py rename to examples/tools_schema.py diff --git a/examples/samples/video_generation.py b/examples/video_generation.py similarity index 100% rename from examples/samples/video_generation.py rename to examples/video_generation.py