diff --git a/CHANGELOG.md b/CHANGELOG.md index 02fe6d9a..d04235f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ ### ⚠ BREAKING CHANGES * Auth: expose `access_token` and `refresh_token` at top level of auth - credentails, instead of a `dict` + credentials, instead of a `dict` ([commit](https://github.com/google/adk-python/commit/956fb912e8851b139668b1ccb8db10fd252a6990)). ### Features @@ -50,7 +50,7 @@ ### Miscellaneous Chores -* README.md impprovements. +* README.md improvements. * Various code improvements. * Various typo fixes. * Bump min version of google-genai to 1.11.0. @@ -108,4 +108,4 @@ * Built-in evaluation support * Development UI that makes local development easy * Deploy to Google Cloud Run, Agent Engine -* (Experimental) Live(Bidi) auido/video agent support and Compositional Function Calling(CFC) support +* (Experimental) Live(Bidi) audio/video agent support and Compositional Function Calling(CFC) support diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0cee99f7..e00f09db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,23 @@ We'd love to accept your patches and contributions to this project. +## Table of Contents + +- [Before you begin](#before-you-begin) + - [Sign our Contributor License Agreement](#sign-our-contributor-license-agreement) + - [Review our community guidelines](#review-our-community-guidelines) +- [Contribution workflow](#contribution-workflow) + - [Finding Issues to Work On](#finding-issues-to-work-on) + - [Requirement for PRs](#requirement-for-prs) + - [Large or Complex Changes](#large-or-complex-changes) + - [Testing Requirements](#testing-requirements) + - [Unit Tests](#unit-tests) + - [End-to-End (E2E) Tests](#manual-end-to-end-e2e-tests) + - [Documentation](#documentation) + - [Development Setup](#development-setup) +- [Code reviews](#code-reviews) + + ## Before you begin ### Sign our Contributor License Agreement @@ -23,7 +40,68 @@ sign a new one. This project follows [Google's Open Source Community Guidelines](https://opensource.google/conduct/). -## Contribution process +## Contribution workflow + +### Finding Issues to Work On + +- Browse issues labeled **`good first issue`** (newcomer-friendly) or **`help wanted`** (general contributions). +- For other issues, please kindly ask before contributing to avoid duplication. + + +### Requirement for PRs + +- All PRs, other than small documentation or typo fixes, should have a Issue assoicated. If not, please create one. +- Small, focused PRs. Keep changes minimal—one concern per PR. +- For bug fixes or features, please provide logs or screenshot after the fix is applied to help reviewers better understand the fix. +- Please include a `testing plan` section in your PR to talk about how you will test. This will save time for PR review. See `Testing Requirements` section for more details. + +### Large or Complex Changes +For substantial features or architectural revisions: + +- Open an Issue First: Outline your proposal, including design considerations and impact. +- Gather Feedback: Discuss with maintainers and the community to ensure alignment and avoid duplicate work + +### Testing Requirements + +To maintain code quality and prevent regressions, all code changes must include comprehensive tests and verifiable end-to-end (E2E) evidence. + + +#### Unit Tests + +Please add or update unit tests for your change. Please include a summary of passed `pytest` results. + +Requirements for unit tests: + +- **Coverage:** Cover new features, edge cases, error conditions, and typical use cases. +- **Location:** Add or update tests under `tests/unittests/`, following existing naming conventions (e.g., `test__.py`). +- **Framework:** Use `pytest`. Tests should be: + - Fast and isolated. + - Written clearly with descriptive names. + - Free of external dependencies (use mocks or fixtures as needed). +- **Quality:** Aim for high readability and maintainability; include docstrings or comments for complex scenarios. + +#### Manual End-to-End (E2E) Tests + +Manual E2E tests ensure integrated flows work as intended. Your tests should cover all scenarios. Sometimes, it's also good to ensure relevant functionality is not impacted. + +Depending on your change: + +- **ADK Web:** + - Use the `adk web` to verify functionality. + - Capture and attach relevant screenshots demonstrating the UI/UX changes or outputs. + - Label screenshots clearly in your PR description. + +- **Runner:** + - Provide the testing setup. For example, the agent definition, and the runner setup. + - Execute the `runner` tool to reproduce workflows. + - Include the command used and console output showing test results. + - Highlight sections of the log that directly relate to your change. + +### Documentation + +For any changes that impact user-facing documentation (guides, API reference, tutorials), please open a PR in the [adk-docs](https://github.com/google/adk-docs) repository to update relevant part before or alongside your code PR. + +### Development Setup 1. **Clone the repository:** ```shell @@ -53,21 +131,8 @@ This project follows ```shell uv run pyink --config pyproject.toml ./src ``` - -### Requirement for PRs - -- All PRs, other than small documentation or typo fixes, should have a Issue assoicated. If not, please create one. -- Small, focused PRs. Keep changes minimal—one concern per PR. -- For bug fixes or features, please provide logs or screenshot after the fix is applied to help reviewers better understand the fix. -- Please add corresponding testing for your code change if it's not covered by existing tests. - -### Large or Complex Changes -For substantial features or architectural revisions: - -- Open an Issue First: Outline your proposal, including design considerations and impact. -- Gather Feedback: Discuss with maintainers and the community to ensure alignment and avoid duplicate work - -### Code reviews + +## Code reviews All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult diff --git a/src/google/adk/sessions/database_session_service.py b/src/google/adk/sessions/database_session_service.py index 75973614..b53dd877 100644 --- a/src/google/adk/sessions/database_session_service.py +++ b/src/google/adk/sessions/database_session_service.py @@ -484,9 +484,11 @@ class DatabaseSessionService(BaseSessionService): if storage_session.update_time.timestamp() > session.last_update_time: raise ValueError( - f"Session last_update_time {session.last_update_time} is later than" - f" the upate_time in storage {storage_session.update_time}" - ) + f"Session last_update_time " + f"{datetime.fromtimestamp(session.last_update_time):%Y-%m-%d %H:%M:%S} " + f"is later than the update_time in storage " + f"{storage_session.update_time:%Y-%m-%d %H:%M:%S}" + ) # Fetch states from storage storage_app_state = sessionFactory.get( diff --git a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py index 258f83d3..653590e2 100644 --- a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py +++ b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py @@ -350,6 +350,7 @@ def test_get_json_schema(sample_operation): # By default nothing is required unless explicitly stated assert 'required' not in json_schema or json_schema['required'] == [] + def test_get_signature_parameters(sample_operation): """Test get_signature_parameters method.""" parser = OperationParser(sample_operation)