11# Lambda Dependency Groups
22
3- This document maps each Lambda function to its dependency group defined in the root ` pyproject.toml ` .
4-
5- ## Dependency Group Reference
6-
7- All dependency groups are defined in ` /pyproject.toml ` under ` [dependency-groups] ` .
8-
9- ## Pattern 1 Lambdas (BDA)
10-
11- | Lambda Function | Directory | Dependency Group |
12- | ----------------| -----------| ------------------|
13- | BDA Discovery | ` patterns/pattern-1/src/bda_discovery_function ` | ` lambda-bda-discovery ` |
14- | BDA Invoke | ` patterns/pattern-1/src/bda_invoke_function ` | ` lambda-bda-invoke ` |
15- | BDA Completion | ` patterns/pattern-1/src/bda_completion_function ` | ` lambda-bda-completion ` |
16- | Summarization | ` patterns/pattern-1/src/summarization_function ` | ` lambda-summarization ` |
17- | Process Results | ` patterns/pattern-1/src/processresults_function ` | ` lambda-process-results ` |
18- | HITL Process | ` patterns/pattern-1/src/hitl-process-function ` | ` lambda-hitl ` |
19- | HITL Status Update | ` patterns/pattern-1/src/hitl-status-update-function ` | ` lambda-hitl ` |
20- | HITL Wait | ` patterns/pattern-1/src/hitl-wait-function ` | ` lambda-hitl ` |
21-
22- ## Pattern 2 Lambdas (Bedrock)
23-
24- | Lambda Function | Directory | Dependency Group |
25- | ----------------| -----------| ------------------|
26- | OCR | ` patterns/pattern-2/src/ocr_function ` | ` lambda-ocr ` |
27- | Classification | ` patterns/pattern-2/src/classification_function ` | ` lambda-classification ` |
28- | Extraction | ` patterns/pattern-2/src/extraction_function ` | ` lambda-extraction ` |
29- | Assessment | ` patterns/pattern-2/src/assessment_function ` | ` lambda-assessment ` |
30- | Summarization | ` patterns/pattern-2/src/summarization_function ` | ` lambda-summarization ` |
31- | Process Results | ` patterns/pattern-2/src/processresults_function ` | ` lambda-process-results ` |
32- | HITL Process | ` patterns/pattern-2/src/hitl-process-function ` | ` lambda-hitl ` |
33- | HITL Status Update | ` patterns/pattern-2/src/hitl-status-update-function ` | ` lambda-hitl ` |
34- | HITL Wait | ` patterns/pattern-2/src/hitl-wait-function ` | ` lambda-hitl ` |
35-
36- ## Pattern 3 Lambdas (UDOP)
37-
38- | Lambda Function | Directory | Dependency Group |
39- | ----------------| -----------| ------------------|
40- | OCR | ` patterns/pattern-3/src/ocr_function ` | ` lambda-ocr ` |
41- | Classification | ` patterns/pattern-3/src/classification_function ` | ` lambda-classification ` |
42- | Extraction | ` patterns/pattern-3/src/extraction_function ` | ` lambda-extraction ` |
43- | Assessment | ` patterns/pattern-3/src/assessment_function ` | ` lambda-assessment ` |
44- | Summarization | ` patterns/pattern-3/src/summarization_function ` | ` lambda-summarization ` |
45- | Process Results | ` patterns/pattern-3/src/processresults_function ` | ` lambda-process-results ` |
46-
47- ## Main Lambdas (src/lambda)
48-
49- | Lambda Function | Directory | Dependency Group |
50- | ----------------| -----------| ------------------|
51- | Agent Processor | ` src/lambda/agent_processor ` | ` lambda-agent-processor ` |
52- | Agent Request Handler | ` src/lambda/agent_request_handler ` | ` lambda-agent-request ` |
53- | Chat with Document | ` src/lambda/chat_with_document_resolver ` | ` lambda-chat-document ` |
54- | Configuration Resolver | ` src/lambda/configuration_resolver ` | ` lambda-configuration ` |
55- | Copy to Baseline | ` src/lambda/copy_to_baseline_resolver ` | ` lambda-document-resolver ` |
56- | Create Document | ` src/lambda/create_document_resolver ` | ` lambda-document-resolver ` |
57- | Dashboard Merger | ` src/lambda/dashboard_merger ` | ` lambda-dashboard ` |
58- | Delete Document | ` src/lambda/delete_document_resolver ` | ` lambda-document-resolver ` |
59- | Discovery Processor | ` src/lambda/discovery_processor ` | ` lambda-discovery-processor ` |
60- | Discovery Upload | ` src/lambda/discovery_upload_resolver ` | ` lambda-document-resolver ` |
61- | Evaluation | ` src/lambda/evaluation_function ` | ` lambda-evaluation ` |
62- | Get File Contents | ` src/lambda/get_file_contents_resolver ` | ` lambda-document-resolver ` |
63- | Process Changes | ` src/lambda/process_changes_resolver ` | ` lambda-document-resolver ` |
64- | Queue Processor | ` src/lambda/queue_processor ` | ` lambda-queue ` |
65- | Queue Sender | ` src/lambda/queue_sender ` | ` lambda-queue ` |
66- | Reprocess Document | ` src/lambda/reprocess_document_resolver ` | ` lambda-document-resolver ` |
67- | Cognito Updater HITL | ` src/lambda/cognito_updater_hitl ` | ` lambda-cognito ` |
68- | IPSet Updater | ` src/lambda/ipset_updater ` | ` lambda-ipset ` |
69- | Initialize Counter | ` src/lambda/initialize_counter ` | ` lambda-minimal ` |
70- | Save Reporting Data | ` src/lambda/save_reporting_data ` | ` lambda-minimal ` |
71- | Get Workforce URL | ` src/lambda/get-workforce-url ` | ` lambda-minimal ` |
72- | Create A2I Resources | ` src/lambda/create_a2i_resources ` | ` lambda-minimal ` |
73- | Get StepFunction Execution | ` src/lambda/get_stepfunction_execution_resolver ` | ` lambda-document-resolver ` |
74- | List Available Agents | ` src/lambda/list_available_agents ` | ` lambda-document-resolver ` |
75- | Lookup Function | ` src/lambda/lookup_function ` | ` lambda-document-resolver ` |
76- | Start CodeBuild | ` src/lambda/start_codebuild ` | ` lambda-minimal ` |
77- | Update Configuration | ` src/lambda/update_configuration ` | ` lambda-configuration ` |
78- | Update Settings | ` src/lambda/update_settings ` | ` lambda-document-resolver ` |
79- | Workflow Tracker | ` src/lambda/workflow_tracker ` | ` lambda-document-resolver ` |
80-
81- ## Makefile Template
82-
83- Each lambda directory should have a ` Makefile ` with the following structure:
3+ ## Overview
4+
5+ Lambda functions use ** dependency groups** defined in the root ` /pyproject.toml ` to manage their Python dependencies. This approach provides:
6+
7+ - ** Centralized dependency management** - All Lambda dependencies in one place
8+ - ** Minimal package sizes** - Each Lambda only gets what it needs
9+ - ** Consistent versions** - UV lock file ensures reproducible builds
10+ - ** Fast builds** - UV's parallel resolver and caching
11+
12+ ## How It Works
13+
14+ 1 . ** Dependency groups** are defined in ` /pyproject.toml ` under ` [dependency-groups] `
15+ 2 . Each Lambda has a ** Makefile** that references its dependency group
16+ 3 . ** SAM Build** uses the Makefile to install dependencies with ` uv pip install --target `
17+ 4 . Dependencies are ** locked** via ` uv.lock ` for reproducibility
18+
19+ ## Dependency Group Naming
20+
21+ Groups follow this pattern:
22+
23+ - ` lambda-<feature> ` - Feature-specific functions (e.g., ` lambda-ocr ` , ` lambda-classification ` )
24+ - ` lambda-<component> ` - Component-specific functions (e.g., ` lambda-agent-processor ` , ` lambda-queue ` )
25+ - ` lambda-minimal ` - Functions with minimal dependencies (boto3 only)
26+ - ` lambda-document-resolver ` - GraphQL resolvers for document operations
27+
28+ ## Lambda Makefile Template
29+
30+ Each Lambda directory contains a ` Makefile ` :
8431
8532``` makefile
86- # Makefile for <FunctionName>
8733build-<FunctionName> :
88- uv pip install --target " $( ARTIFACTS_DIR) " --python 3.12 " ../../../.. [<dependency-group>]"
34+ uv pip install --target " $( ARTIFACTS_DIR) " --python 3.12 " <path-to-root> [<dependency-group>]"
8935 cp * .py " $( ARTIFACTS_DIR) /"
9036 rm -rf " $( ARTIFACTS_DIR) " /__pycache__
9137
9238.PHONY : build-<FunctionName>
9339```
9440
95- Example for OCR Function :
41+ ** Example** ( OCR function at `patterns/pattern-2/src/ocr_function/`) :
9642
9743```makefile
98- # Makefile for OCRFunction
9944build-OCRFunction :
10045 uv pip install --target " $( ARTIFACTS_DIR) " --python 3.12 " ../../../../[lambda-ocr]"
10146 cp * .py " $( ARTIFACTS_DIR) /"
10247 rm -rf " $( ARTIFACTS_DIR) " /__pycache__
103-
104- .PHONY : build-OCRFunction
10548```
10649
107- # # SAM Template Metadata
50+ # # SAM Template Configuration
10851
109- Each Lambda in the SAM template must include :
52+ Each Lambda must include this metadata :
11053
11154```yaml
11255Metadata :
@@ -115,16 +58,37 @@ Metadata:
11558
11659# # Adding a New Lambda
11760
118- 1. Add the lambda's dependency group to `/pyproject.toml` under `[dependency-groups]`
119- 2. Run `uv lock` to update the lock file
120- 3. Create a `Makefile` in the lambda directory
121- 4. Update the SAM template with `BuildMethod : makefile` metadata
122- 5. Add entry to this documentation
61+ 1. **Define dependency group** in `/pyproject.toml` :
62+ ```toml
63+ [dependency-groups]
64+ lambda-my-feature = [
65+ "idp_common[core,my-feature]",
66+ "other-dependency> =1.0.0",
67+ ]
68+ ```
69+
70+ 2 . ** Lock dependencies** : ` uv lock `
71+
72+ 3 . ** Create Makefile** in lambda directory with build target
73+
74+ 4 . ** Update SAM template** with ` BuildMethod: makefile ` metadata
75+
76+ 5 . ** Build** : ` sam build MyFunction `
12377
12478## Updating Dependencies
12579
126- To update dependencies for a lambda :
80+ 1 . Edit dependency group in ` /pyproject.toml `
81+ 2 . Run ` uv lock `
82+ 3 . Rebuild: ` sam build <FunctionName> `
12783
128- 1. Edit the dependency group in `/pyproject.toml`
129- 2. Run `uv lock` to update the lock file
130- 3. Rebuild the lambda : `sam build <FunctionName>`
84+ ## Finding Lambda Mappings
85+
86+ To find which dependency group a Lambda uses:
87+
88+ ``` bash
89+ # Find the Lambda's Makefile
90+ find patterns/ src/lambda/ -name " Makefile" -path " */<lambda-dir>/Makefile"
91+
92+ # Check the dependency group in the uv pip install line
93+ grep " uv pip install" < lambda-dir> /Makefile
94+ ```
0 commit comments