Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
195 commits
Select commit Hold shift + click to select a range
173085d
feat: initial implementation of ADK middleware for AG-UI Protocol
mefogle Jul 4, 2025
b9c2977
feat: major refactoring and enhancements to ADK middleware
mefogle Jul 5, 2025
40ef583
chore: update all python3 references to python for consistency
mefogle Jul 5, 2025
04d4cda
feat: add default app_name behavior using agent name from registry
mefogle Jul 5, 2025
6b7108a
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Jul 5, 2025
865f7c7
refactor: move all tests to tests/ directory for better organization
mefogle Jul 5, 2025
86094a4
fix: update changelog for test reorganization
mefogle Jul 5, 2025
5f73078
Updating requirements.txt.
mefogle Jul 5, 2025
d81d82b
Added version for asyncio.
mefogle Jul 5, 2025
11aca27
docs: update README to reflect current implementation status
mefogle Jul 5, 2025
aa04096
feat: implement full pytest compatibility for test suite
mefogle Jul 5, 2025
2683a30
fix: remove accidentally committed ADK_Middleware directory and CLAUD…
mefogle Jul 5, 2025
a1ebaa3
docs: update README feature status to reflect current implementation
mefogle Jul 5, 2025
555a3e3
refactor: separate dev dependencies and fix README examples
mefogle Jul 6, 2025
589303c
feat: add automatic session memory and refactor session management
mefogle Jul 6, 2025
eebd544
refactor: simplify logging system to use standard Python logging
mefogle Jul 6, 2025
51b663f
fix adk_middleware python module and added adk-middleware demo in doj…
syedfakher27 Jul 6, 2025
afbaf00
import change
syedfakher27 Jul 7, 2025
246bee6
venv in git ignore
syedfakher27 Jul 7, 2025
e41471d
fixing test adk_middleware imports
syedfakher27 Jul 7, 2025
ad407cb
all test cases fixed
syedfakher27 Jul 7, 2025
41dd2c1
Merge pull request #1 from syedfakher27/adk-middleware
contextablemark Jul 7, 2025
be845b3
Update documentation and fix session attribute name
mefogle Jul 7, 2025
5c89c7f
Fix test failures: Update attribute name references
mefogle Jul 7, 2025
443ea4d
Fix test failures: Update attribute name references
mefogle Jul 7, 2025
e14f0b6
Fix session manager last_update_time timestamp bug
mefogle Jul 7, 2025
d9d712d
Merge adk-middleware branch to get session manager timestamp fix
mefogle Jul 7, 2025
0e40baa
Add complete bidirectional tool support for ADK middleware
mefogle Jul 7, 2025
64b93f0
Merge pull request #2 from Contextable/feature/tool-support
contextablemark Jul 7, 2025
c053ed6
added tool based generative ui demo
syedfakher27 Jul 8, 2025
f0dea33
print remove
syedfakher27 Jul 8, 2025
e2d06f0
fix tool wrapper test case
syedfakher27 Jul 8, 2025
4b8d173
fix test_endpoint
syedfakher27 Jul 8, 2025
9429aac
test cases fixed
syedfakher27 Jul 8, 2025
05c847e
Update typescript-sdk/integrations/adk-middleware/src/adk_middleware/…
contextablemark Jul 8, 2025
e1fa842
Merge pull request #3 from syedfakher27/adk-middleware
contextablemark Jul 8, 2025
2eb3f28
Release 0.3.2: Hybrid tool execution model with per-tool configuration
mefogle Jul 8, 2025
90deb89
Merge pull request #4 from Contextable/feature/hybrid-tool-execution
contextablemark Jul 8, 2025
5c59fc3
Comprehensive unit test coverage improvements for low-coverage modules
mefogle Jul 8, 2025
eb9d998
Update changelog for improved test coverage
mefogle Jul 8, 2025
64f6a82
Merge pull request #5 from Contextable/improve-unit-test-coverage
contextablemark Jul 8, 2025
eeb47f1
tool submission changes for ADK middleware
syedfakher27 Jul 9, 2025
aae9227
refactor: align tool behavior with ADK standards and fix test coverage
mefogle Jul 9, 2025
0765e9c
Complete ADK middleware test suite fixes - achieve 100% test pass rate
mefogle Jul 10, 2025
4ab8703
Merge pull request #7 from Contextable/refactor-adk-tool-implementation
contextablemark Jul 10, 2025
befc12c
feat: simplify to all-long-running tool architecture with critical bu…
mefogle Jul 11, 2025
517593d
prompt change
syedfakher27 Jul 11, 2025
801bcd7
feat: merge adk-middleware improvements into all-long-running archite…
mefogle Jul 11, 2025
88b1a32
Merge pull request #8 from Contextable/feature/all-long-running-tools…
contextablemark Jul 11, 2025
4a49c62
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Jul 11, 2025
0f7e780
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Jul 12, 2025
520e442
feat: add GitHub Actions CI workflow for ADK middleware
mefogle Jul 13, 2025
e74ffc2
Merge pull request #15 from Contextable/feature/ci-integration
contextablemark Jul 13, 2025
e2bb46b
feat: fix memory persistence and tool ID mapping (v0.4.1)
mefogle Jul 13, 2025
9e39785
Merge pull request #16 from Contextable/feature/memory-bank
contextablemark Jul 13, 2025
077989d
Adding files that were left out of PR #16 and removing unusable workf…
mefogle Jul 13, 2025
dacd7cb
Merge pull request #17 from Contextable/feature/memory-bank
contextablemark Jul 13, 2025
b5b29d5
fix: update test to check debug logging instead of info
mefogle Jul 13, 2025
64ac064
Merge pull request #18 from Contextable/fix/endpoint-logging-test
contextablemark Jul 13, 2025
7cb6b36
shared state demo for dojo app
syedfakher27 Jul 13, 2025
d332319
shared_state_agent added
syedfakher27 Jul 13, 2025
3f464a7
Merge remote-tracking branch 'upstream/adk-middleware' into adk-middl…
syedfakher27 Jul 13, 2025
a956e78
fix: resolve EventType.STATE_DELTA patch error (issue #20)
mefogle Jul 13, 2025
0a2212d
Merge pull request #21 from Contextable/fix/issue-20-state-delta-patc…
contextablemark Jul 13, 2025
58b45bd
feat: add SystemMessage support and fix tool result race condition
mefogle Jul 14, 2025
5975788
Merge pull request #23 from Contextable/feature/system-message-suppor…
contextablemark Jul 14, 2025
5f61634
dojo app backend command added
syedfakher27 Jul 14, 2025
0f00725
session update comments added
syedfakher27 Jul 14, 2025
a37a7fd
Merge remote-tracking branch 'upstream/adk-middleware' into adk-middl…
syedfakher27 Jul 14, 2025
a45eff2
_create_state_delta_event added back
syedfakher27 Jul 14, 2025
365efe0
added memory back again
syedfakher27 Jul 14, 2025
0f35666
simple instructions
syedfakher27 Jul 14, 2025
2f2449c
twice generative AI and HITL fixed
syedfakher27 Jul 14, 2025
e39cd4e
unit test updated for _translate_function_calls
syedfakher27 Jul 14, 2025
0d65159
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
syedfakher27 Jul 15, 2025
3e211d0
Update typescript-sdk/integrations/adk-middleware/tests/test_event_tr…
syedfakher27 Jul 15, 2025
74b7f40
Update typescript-sdk/integrations/adk-middleware/examples/fastapi_se…
syedfakher27 Jul 15, 2025
bf4dc54
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
syedfakher27 Jul 15, 2025
c7d5e54
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
syedfakher27 Jul 15, 2025
ef563f9
Update typescript-sdk/integrations/adk-middleware/src/adk_middleware/…
syedfakher27 Jul 15, 2025
378c642
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
syedfakher27 Jul 15, 2025
9339691
Update typescript-sdk/integrations/adk-middleware/examples/fastapi_se…
syedfakher27 Jul 15, 2025
e47627c
test cases for session management added
syedfakher27 Jul 15, 2025
25d3f69
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
contextablemark Jul 15, 2025
edc9d25
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
contextablemark Jul 15, 2025
1108526
Update typescript-sdk/integrations/adk-middleware/examples/shared_sta…
contextablemark Jul 15, 2025
27b8730
Merge pull request #19 from syedfakher27/adk-middleware
syedfakher27 Jul 15, 2025
aec1385
adk_shared_state_agent fixed
syedfakher27 Jul 15, 2025
4df0a2c
fix: resolve flaky test_bulk_update_user_state_mixed_results
mefogle Jul 17, 2025
81b6c92
Merge pull request #27 from Contextable/fix/flaky-session-test
contextablemark Jul 17, 2025
17b7da5
Merge pull request #26 from syedfakher27/adk-middleware
contextablemark Jul 17, 2025
8d36475
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Jul 19, 2025
bae3bd7
snapshot error fixed
syedfakher27 Jul 20, 2025
1790c4b
function response
syedfakher27 Jul 20, 2025
35047b5
Merge pull request #29 from syedfakher27/adk-middleware
syedfakher27 Jul 20, 2025
24f41a1
Update agent.py
syedfakher27 Jul 21, 2025
a1410c6
Merge remote-tracking branch 'upstream/adk-middleware' into adk-middl…
syedfakher27 Jul 21, 2025
1ff5971
Merge pull request #31 from syedfakher27/adk-middleware
contextablemark Jul 22, 2025
47c8dc3
refactor: use SessionManager methods for pending tool call state mana…
mefogle Jul 24, 2025
ac914b9
removing the print statements
syedfakher27 Jul 26, 2025
3f4342b
long running tool backend handling
syedfakher27 Jul 26, 2025
62da096
update the instruction for the chat demo
syedfakher27 Jul 26, 2025
878cf54
predictive state demo added
syedfakher27 Jul 26, 2025
5e2ec4b
Update typescript-sdk/integrations/adk-middleware/examples/fastapi_se…
syedfakher27 Jul 26, 2025
edd8897
fix: use SessionManager methods for pending tool call state management
mefogle Jul 26, 2025
6d7d558
Merge pull request #34 from Contextable/issue-25-fix
contextablemark Jul 26, 2025
94cf5da
Merge remote-tracking branch 'upstream/adk-middleware' into adk-middl…
syedfakher27 Jul 26, 2025
ac2830a
backend tool pending issue fixed
syedfakher27 Jul 26, 2025
34be480
Update Changelog.md
syedfakher27 Jul 26, 2025
cf9d1c0
TestEventTranslatorComprehensive tests fixed
syedfakher27 Jul 26, 2025
b9b85e1
recipe prompt change
syedfakher27 Jul 29, 2025
626d9ba
model updated for human in loop
syedfakher27 Jul 30, 2025
5243567
Initial documentation changes
contextablemark Aug 2, 2025
20bce0b
Merge branch 'main' into adk-middleware
contextablemark Aug 2, 2025
1f9da91
feat: eliminate AgentRegistry and implement direct agent embedding
mefogle Aug 2, 2025
f45b00e
docs: update documentation to remove AgentRegistry references
mefogle Aug 2, 2025
14bab93
stopping condition added
syedfakher27 Aug 5, 2025
527c112
feat: make session_service configurable in ADKAgent constructor
mefogle Aug 5, 2025
8e13a52
print statement removed
syedfakher27 Aug 5, 2025
d5ddc14
Merge pull request #33 from syedfakher27/adk-middleware
contextablemark Aug 5, 2025
c1e5b53
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 5, 2025
f897d0b
Merge branch 'adk-middleware' into issue-24-cleanup-agent-registration
contextablemark Aug 5, 2025
0330453
Removing registry entries and redundant constructor.
mefogle Aug 5, 2025
82b4395
Added support for agentFilesMapper.
mefogle Aug 5, 2025
ceec7e6
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 5, 2025
849ca93
Merge branch 'adk-middleware' into issue-24-cleanup-agent-registration
mefogle Aug 5, 2025
848b465
Fix ADKAgent test suite for new architecture
mefogle Aug 5, 2025
5d16bb1
Merge pull request #36 from Contextable/issue-24-cleanup-agent-regist…
contextablemark Aug 5, 2025
e821ba4
Added in updated file content.
mefogle Aug 5, 2025
20d8971
Merge pull request #40 from Contextable/issue-24-cleanup-agent-regist…
contextablemark Aug 5, 2025
c4c175e
Add e2e tests for ADK middleware agentic chat
mefogle Aug 6, 2025
629cfe0
Merge pull request #41 from Contextable/feature/adk-e2e-tests
contextablemark Aug 6, 2025
bea6ef9
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 6, 2025
2aec7e0
feat: Make ADK middleware base URL configurable via environment variable
mefogle Aug 7, 2025
cedc747
Merge pull request #43 from Contextable/railway
contextablemark Aug 7, 2025
9924908
feat: Upgrade Google ADK dependency to 1.9.0
mefogle Aug 7, 2025
e04c063
Merge pull request #44 from Contextable/adk-upgrade
contextablemark Aug 7, 2025
5e54f15
Merge branch 'adk-middleware' into issue-35
contextablemark Aug 7, 2025
9a1b9ce
docs: Extensive documentation restructuring for improved organization
mefogle Aug 7, 2025
3313c27
Merge pull request #45 from Contextable/issue-35
contextablemark Aug 7, 2025
97996a2
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 7, 2025
41660e5
fix: support instructions provider for agents
evgeny-l Aug 8, 2025
0c1fd6d
fix: support of before_agent_callback in case of a direct content res…
evgeny-l Aug 8, 2025
70aa99e
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 11, 2025
b7063c6
Added aiohttp dependency.
mefogle Aug 12, 2025
4b3207c
Merge pull request #50 from Contextable/aiohttp_issue
contextablemark Aug 12, 2025
b7aca0f
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 14, 2025
4ce24b9
- General cleanup
mefogle Aug 14, 2025
7abe5b9
Merge pull request #52 from Contextable/general-cleanup
contextablemark Aug 14, 2025
27a9925
Update typescript-sdk/integrations/adk-middleware/src/adk_middleware/…
evgeny-l Aug 14, 2025
9d418d3
Update typescript-sdk/integrations/adk-middleware/tests/test_text_eve…
evgeny-l Aug 14, 2025
60bd9a1
fix: support of before_agent_callback in case of a direct content res…
evgeny-l Aug 14, 2025
4255743
fix: support instructions provider for agents - handle sync cases and…
evgeny-l Aug 14, 2025
446f2e9
Merge pull request #49 from evgeny-l/adk-middleware-before-agent-call…
contextablemark Aug 14, 2025
f20257f
Merge pull request #48 from evgeny-l/adk-middleware-instructions-prov…
contextablemark Aug 14, 2025
c1596c9
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 16, 2025
aaae5da
fix: update tests to match new logging levels from PR #49
contextablemark Aug 16, 2025
0835b5b
Merge pull request #53 from Contextable/fix/test-logging-levels
contextablemark Aug 16, 2025
3b84edd
fix: change misleading 'Session not found' warnings to debug messages
contextablemark Aug 19, 2025
856fac3
Merge pull request #54 from Contextable/fix/session-not-found-warning
contextablemark Aug 19, 2025
e4ffff6
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 24, 2025
00f3b5f
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 27, 2025
6703c09
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Aug 29, 2025
bff1b59
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Sep 3, 2025
3d54ae7
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Sep 9, 2025
d6e083d
Merge branch 'ag-ui-protocol:main' into adk-middleware
contextablemark Sep 15, 2025
9334451
fix: make error handling test more robust
contextablemark Sep 15, 2025
bb3e812
Merge pull request #68 from Contextable/fix/test-error-handling
contextablemark Sep 15, 2025
d3d2054
feat: upgrade Google ADK requirement to >=1.14.0
contextablemark Sep 15, 2025
f73d20b
Merge pull request #69 from Contextable/update/adk-latest-version
contextablemark Sep 15, 2025
b8b9071
feat: optimize session state management with dictionary-based lookups
contextablemark Sep 15, 2025
c5dd37c
Merge pull request #71 from Contextable/fix/session-state-management-…
contextablemark Sep 15, 2025
aaac172
refactor: remove redundant execution checks in _start_new_execution
contextablemark Sep 15, 2025
a89a8cd
Merge pull request #73 from Contextable/refactor/remove-redundant-exe…
contextablemark Sep 15, 2025
aa9368d
move examples folder out before refactor
maxkorp Sep 16, 2025
c203e3e
New examples folder
maxkorp Sep 16, 2025
667ab7f
Add creds check
maxkorp Sep 16, 2025
24914ee
delete moved code
maxkorp Sep 16, 2025
f0f7bd4
move remaining examples2 to examples/other
maxkorp Sep 16, 2025
7c90e4e
make haiku generator more flexible
maxkorp Sep 16, 2025
6f6067f
fixup docs route
maxkorp Sep 16, 2025
96fbff9
codegen
maxkorp Sep 16, 2025
6db3741
Restructure adk examples to use uv
maxkorp Sep 16, 2025
ad28e3d
Merge remote-tracking branch 'origin/adk-middleware' into adk-middleware
maxkorp Sep 16, 2025
ca7f08d
Fix HITL examples via prompt
maxkorp Sep 16, 2025
cced002
Merge remote-tracking branch 'origin/main' into adk-middleware
maxkorp Sep 16, 2025
5bac82f
Migrate e2e tests from old e2e2 package
maxkorp Sep 16, 2025
2680589
fix agentic chat tests with prompting
maxkorp Sep 16, 2025
6b8a1aa
fix irrelevant testcase
maxkorp Sep 16, 2025
d7ba909
wrap all e2e in descriptors
maxkorp Sep 16, 2025
10720e5
update genned docs
maxkorp Sep 16, 2025
5c2329f
fix absolute path
maxkorp Sep 16, 2025
f5b8514
disable predictive state for now
maxkorp Sep 16, 2025
f1c4531
Merge pull request #74 from ag-ui-protocol/adk-middleware
contextablemark Sep 16, 2025
ea51575
Update README.md
contextablemark Sep 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: major refactoring and enhancements to ADK middleware
- Add app_name as required first parameter to ADKAgent constructor
- Implement comprehensive logging system with component-specific loggers
- Add 14 comprehensive automated tests with 100% pass rate
- Refactor to SessionLifecycleManager singleton for centralized session management
- Implement thread-safe event translation with per-session EventTranslator instances
- Add proper error handling in HTTP endpoints with specific error types
- Implement proper streaming based on ADK finish_reason detection
- Add session encapsulation and automatic cleanup with configurable timeouts
- Replace deprecated TextMessageChunkEvent with TextMessageContentEvent
- Fix critical concurrency issues and session management bugs
- Add complete development environment setup with virtual environment support
- Update dependency management to use proper package installation
- Rename agent_id to app_name throughout session management for consistency

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
  • Loading branch information
mefogle and claude committed Jul 5, 2025
commit b9c29776b25d7dbb114b82af74cd97edfef1abae
10 changes: 9 additions & 1 deletion typescript-sdk/integrations/adk-middleware/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ env/
ENV/
env.bak/
venv.bak/
test_env/

# IDE
.vscode/
Expand Down Expand Up @@ -73,4 +74,11 @@ dmypy.json

# OS
.DS_Store
Thumbs.db
Thumbs.db

# Development scripts and temp files
set_pythonpath.sh
simple_test_server.py

# External project directories
ADK_Middleware/
59 changes: 59 additions & 0 deletions typescript-sdk/integrations/adk-middleware/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,65 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- **NEW**: Added `app_name` as required first parameter to `ADKAgent` constructor for clarity
- **NEW**: Comprehensive logging system with component-specific loggers (adk_agent, event_translator, endpoint)
- **NEW**: Configurable logging levels per component via `logging_config.py`
- **NEW**: 14 comprehensive automated tests covering all major functionality
- **NEW**: `SessionLifecycleManager` singleton pattern for centralized session management
- **NEW**: Session encapsulation - session service now embedded within session manager
- **NEW**: Proper error handling in HTTP endpoints with specific error types and SSE fallback
- **NEW**: Thread-safe event translation with per-session `EventTranslator` instances
- **NEW**: Automatic session cleanup with configurable timeouts and limits
- **NEW**: Support for `InMemoryCredentialService` with intelligent defaults
- **NEW**: Proper streaming implementation based on ADK `finish_reason` detection
- **NEW**: Force-close mechanism for unterminated streaming messages
- **NEW**: User ID extraction system with multiple strategies (static, dynamic, fallback)
- **NEW**: Complete development environment setup with virtual environment support
- **NEW**: Test infrastructure with `run_tests.py` and comprehensive test coverage

### Changed
- **BREAKING**: `ADKAgent` constructor now requires `app_name` as first parameter
- **BREAKING**: Removed `session_service`, `session_timeout_seconds`, `cleanup_interval_seconds`, `max_sessions_per_user`, and `auto_cleanup` parameters from `ADKAgent` constructor (now managed by singleton session manager)
- **BREAKING**: Renamed `agent_id` parameter to `app_name` throughout session management for consistency
- **BREAKING**: `SessionInfo` dataclass now uses `app_name` field instead of `agent_id`
- **BREAKING**: Updated method signatures: `get_or_create_session()`, `_track_session()`, `track_activity()` now use `app_name`
- **BREAKING**: Replaced deprecated `TextMessageChunkEvent` with `TextMessageContentEvent`
- **MAJOR**: Refactored session lifecycle to use singleton pattern for global session management
- **MAJOR**: Improved event translation with proper START/CONTENT/END message boundaries
- **MAJOR**: Enhanced error handling with specific error codes and proper fallback mechanisms
- **MAJOR**: Updated dependency management to use proper package installation instead of path manipulation
- **MAJOR**: Removed hardcoded sys.path manipulations for cleaner imports

### Fixed
- **CRITICAL**: Fixed EventTranslator concurrency issues by creating per-session instances
- **CRITICAL**: Fixed session deletion to include missing `user_id` parameter
- **CRITICAL**: Fixed TEXT_MESSAGE_START ordering to ensure proper event sequence
- **CRITICAL**: Fixed session creation parameter consistency (app_name vs agent_id mismatch)
- **CRITICAL**: Fixed "SessionInfo not subscriptable" errors in session cleanup
- Fixed broad exception handling in endpoints that was silencing errors
- Fixed test validation logic for message event patterns
- Fixed runtime session creation errors with proper parameter passing
- Fixed logging to use proper module loggers instead of print statements
- Fixed event bookending to ensure messages have proper START/END boundaries

### Enhanced
- **Performance**: Session management now uses singleton pattern for better resource utilization
- **Reliability**: Added comprehensive test suite with 14 automated tests (100% pass rate)
- **Observability**: Implemented structured logging with configurable levels per component
- **Error Handling**: Proper error propagation with specific error types and user-friendly messages
- **Development**: Complete development environment with virtual environment and proper dependency management
- **Documentation**: Updated README with proper setup instructions and usage examples
- **Streaming**: Improved streaming behavior based on ADK finish_reason for better real-time responses

### Technical Architecture Changes
- Implemented singleton `SessionLifecycleManager` for centralized session control
- Session service encapsulation within session manager (no longer exposed in ADKAgent)
- Per-session EventTranslator instances for thread safety
- Proper streaming detection using ADK event properties (`partial`, `turn_complete`, `finish_reason`)
- Enhanced error handling with fallback mechanisms and specific error codes
- Component-based logging architecture with configurable levels

## [0.1.0] - 2025-07-04

### Added
Expand Down
122 changes: 122 additions & 0 deletions typescript-sdk/integrations/adk-middleware/LOGGING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# 🔧 ADK Middleware Logging Configuration

The ADK middleware now supports granular logging control for different components. By default, most verbose logging is disabled for a cleaner experience.

## Quick Start

### 🔇 Default (Quiet Mode)
```bash
./quickstart.sh
# Only shows main agent info and errors
```

### 🔍 Debug Specific Components
```bash
# Debug streaming events
ADK_LOG_EVENT_TRANSLATOR=DEBUG ./quickstart.sh

# Debug HTTP responses
ADK_LOG_ENDPOINT=DEBUG ./quickstart.sh

# Debug both streaming and HTTP
ADK_LOG_EVENT_TRANSLATOR=DEBUG ADK_LOG_ENDPOINT=DEBUG ./quickstart.sh
```

### 🐛 Debug Everything
```bash
ADK_LOG_EVENT_TRANSLATOR=DEBUG \
ADK_LOG_ENDPOINT=DEBUG \
ADK_LOG_RAW_RESPONSE=DEBUG \
ADK_LOG_LLM_RESPONSE=DEBUG \
./quickstart.sh
```

## Interactive Configuration

```bash
python configure_logging.py
```

This provides a menu-driven interface to:
- View current logging levels
- Set individual component levels
- Use quick configurations (streaming debug, quiet mode, etc.)
- Enable/disable specific components

## Available Components

| Component | Description | Default Level |
|-----------|-------------|---------------|
| `event_translator` | Event conversion logic | WARNING |
| `endpoint` | HTTP endpoint responses | WARNING |
| `raw_response` | Raw ADK responses | WARNING |
| `llm_response` | LLM response processing | WARNING |
| `adk_agent` | Main agent logic | INFO |
| `session_manager` | Session management | WARNING |
| `agent_registry` | Agent registration | WARNING |

## Environment Variables

Set these before running the server:

```bash
export ADK_LOG_EVENT_TRANSLATOR=DEBUG # Show event translation details
export ADK_LOG_ENDPOINT=DEBUG # Show HTTP response details
export ADK_LOG_RAW_RESPONSE=DEBUG # Show raw ADK responses
export ADK_LOG_LLM_RESPONSE=DEBUG # Show LLM processing
export ADK_LOG_ADK_AGENT=INFO # Main agent info (default)
export ADK_LOG_SESSION_MANAGER=WARNING # Session lifecycle (default)
export ADK_LOG_AGENT_REGISTRY=WARNING # Agent registration (default)
```

## Python API

```python
from src.logging_config import configure_logging

# Enable specific debugging
configure_logging(
event_translator='DEBUG',
endpoint='DEBUG'
)

# Quiet mode
configure_logging(
event_translator='ERROR',
endpoint='ERROR',
raw_response='ERROR'
)
```

## Common Use Cases

### 🔍 Debugging Streaming Issues
```bash
ADK_LOG_EVENT_TRANSLATOR=DEBUG ./quickstart.sh
```
Shows: partial events, turn_complete, is_final_response, TEXT_MESSAGE_* events

### 🌐 Debugging Client Connection Issues
```bash
ADK_LOG_ENDPOINT=DEBUG ./quickstart.sh
```
Shows: HTTP responses, SSE data being sent to clients

### 📡 Debugging ADK Integration
```bash
ADK_LOG_RAW_RESPONSE=DEBUG ./quickstart.sh
```
Shows: Raw responses from Google ADK API

### 🔇 Production Mode
```bash
# Default behavior - only errors and main agent info
./quickstart.sh
```

## Log Levels

- **DEBUG**: Verbose details for development
- **INFO**: Important operational information
- **WARNING**: Warnings and recoverable issues (default for most components)
- **ERROR**: Only errors and critical issues
23 changes: 14 additions & 9 deletions typescript-sdk/integrations/adk-middleware/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,19 @@ chmod +x setup_dev.sh
### Manual Setup

```bash
# Set PYTHONPATH to include python-sdk
export PYTHONPATH="../../../../python-sdk:${PYTHONPATH}"
# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt
# Install python-sdk (from the monorepo)
pip install ../../../../python-sdk/

# Install this package in editable mode
pip install -e .
```

This installs the ADK middleware in editable mode for development.

## Directory Structure Note

Although this is a Python integration, it lives in `typescript-sdk/integrations/` following the ag-ui-protocol repository conventions where all integrations are centralized regardless of implementation language.
Expand Down Expand Up @@ -113,9 +118,9 @@ agent = ADKAgent(user_id="static_user")

# Dynamic user extraction
def extract_user(input: RunAgentInput) -> str:
for ctx in input.context:
if ctx.description == "user_id":
return ctx.value
# Extract from state or other sources
if hasattr(input.state, 'get') and input.state.get("user_id"):
return input.state["user_id"]
return "anonymous"

agent = ADKAgent(user_id_extractor=extract_user)
Expand Down Expand Up @@ -198,9 +203,9 @@ registry.register_agent("general", general_agent)
registry.register_agent("technical", technical_agent)
registry.register_agent("creative", creative_agent)

# The middleware will route to the correct agent based on context
# The middleware uses the default agent from the registry
agent = ADKAgent(
user_id_extractor=lambda input: input.context[0].value
user_id="demo" # Or use user_id_extractor for dynamic extraction
)
```

Expand Down
131 changes: 131 additions & 0 deletions typescript-sdk/integrations/adk-middleware/configure_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
#!/usr/bin/env python3
"""Interactive logging configuration for ADK middleware."""

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent / "src"))

from src.logging_config import _component_logger, show_logging_help

def main():
"""Interactive logging configuration."""
print("🔧 ADK Middleware Logging Configuration")
print("=" * 45)

while True:
print("\nChoose an option:")
print("1. Show current logging status")
print("2. Set component logging level")
print("3. Enable debug mode for components")
print("4. Disable all logging (set to ERROR)")
print("5. Quick configurations")
print("6. Show help")
print("0. Exit")

choice = input("\nEnter choice (0-6): ").strip()

if choice == "0":
print("👋 Goodbye!")
break
elif choice == "1":
_component_logger.show_status()
elif choice == "2":
set_component_level()
elif choice == "3":
enable_debug_mode()
elif choice == "4":
_component_logger.disable_all()
print("🔇 All logging disabled (ERROR level)")
elif choice == "5":
quick_configurations()
elif choice == "6":
show_logging_help()
else:
print("❌ Invalid choice, please try again")

def set_component_level():
"""Set logging level for a specific component."""
print("\nAvailable components:")
components = list(_component_logger.COMPONENTS.keys())
for i, component in enumerate(components, 1):
print(f" {i}. {component}")

try:
comp_choice = int(input("\nEnter component number: ")) - 1
if 0 <= comp_choice < len(components):
component = components[comp_choice]

print("\nAvailable levels: DEBUG, INFO, WARNING, ERROR")
level = input("Enter level: ").strip().upper()

if level in ['DEBUG', 'INFO', 'WARNING', 'ERROR']:
_component_logger.set_level(component, level)
else:
print("❌ Invalid level")
else:
print("❌ Invalid component number")
except ValueError:
print("❌ Please enter a valid number")

def enable_debug_mode():
"""Enable debug mode for selected components."""
print("\nAvailable components:")
components = list(_component_logger.COMPONENTS.keys())
for i, component in enumerate(components, 1):
print(f" {i}. {component}")
print(f" {len(components) + 1}. All components")

try:
choice = input("\nEnter component numbers (comma-separated) or 'all': ").strip()

if choice.lower() == 'all':
_component_logger.enable_debug_mode()
else:
numbers = [int(x.strip()) - 1 for x in choice.split(',')]
selected_components = []
for num in numbers:
if 0 <= num < len(components):
selected_components.append(components[num])

if selected_components:
_component_logger.enable_debug_mode(selected_components)
else:
print("❌ No valid components selected")
except ValueError:
print("❌ Please enter valid numbers")

def quick_configurations():
"""Provide quick configuration options."""
print("\nQuick Configurations:")
print("1. Streaming debug (event_translator + endpoint)")
print("2. Quiet mode (only errors)")
print("3. Development mode (all DEBUG)")
print("4. Production mode (INFO for main, WARNING for details)")

choice = input("\nEnter choice (1-4): ").strip()

if choice == "1":
_component_logger.set_level('event_translator', 'DEBUG')
_component_logger.set_level('endpoint', 'DEBUG')
print("🔍 Streaming debug enabled")
elif choice == "2":
_component_logger.disable_all()
print("🔇 Quiet mode enabled")
elif choice == "3":
_component_logger.enable_debug_mode()
print("🐛 Development mode enabled")
elif choice == "4":
# Production settings
_component_logger.set_level('adk_agent', 'INFO')
_component_logger.set_level('event_translator', 'WARNING')
_component_logger.set_level('endpoint', 'WARNING')
_component_logger.set_level('raw_response', 'WARNING')
_component_logger.set_level('llm_response', 'WARNING')
_component_logger.set_level('session_manager', 'WARNING')
_component_logger.set_level('agent_registry', 'WARNING')
print("🏭 Production mode enabled")
else:
print("❌ Invalid choice")

if __name__ == "__main__":
main()
Loading