Skip to content

Commit a64d657

Browse files
Merge branch 'main' into feature/nest-api-chapter-project-endpoints
2 parents e883380 + 032352f commit a64d657

File tree

136 files changed

+6552
-2122
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+6552
-2122
lines changed

.github/workflows/run-ci-cd.yaml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
runs-on: ubuntu-latest
3636
steps:
3737
- name: Check out repository
38-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
38+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
3939

4040
- name: Install Poetry
4141
run: pipx install poetry
@@ -68,7 +68,7 @@ jobs:
6868
runs-on: ubuntu-latest
6969
steps:
7070
- name: Check out repository
71-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
71+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
7272

7373
- name: Install pnpm
7474
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061
@@ -101,7 +101,7 @@ jobs:
101101
runs-on: ubuntu-latest
102102
steps:
103103
- name: Check out repository
104-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
104+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
105105

106106
- name: Run cspell
107107
run: |
@@ -116,7 +116,7 @@ jobs:
116116
runs-on: ubuntu-latest
117117
steps:
118118
- name: Check out repository
119-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
119+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
120120

121121
- name: Run Trivy Repository Scan
122122
uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8
@@ -135,7 +135,7 @@ jobs:
135135
runs-on: ubuntu-latest
136136
steps:
137137
- name: Check out repository
138-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
138+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
139139

140140
- name: Run Trivy Filesystem Scan
141141
uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8
@@ -153,7 +153,7 @@ jobs:
153153
runs-on: ubuntu-latest
154154
steps:
155155
- name: Check out repository
156-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
156+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
157157

158158
- name: Set up Docker buildx
159159
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435
@@ -184,7 +184,7 @@ jobs:
184184
runs-on: ubuntu-latest
185185
steps:
186186
- name: Check out repository
187-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
187+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
188188

189189
- name: Set up Docker buildx
190190
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435
@@ -215,7 +215,7 @@ jobs:
215215
runs-on: ubuntu-latest
216216
steps:
217217
- name: Check out repository
218-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
218+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
219219

220220
- name: Set up Docker buildx
221221
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435
@@ -267,7 +267,7 @@ jobs:
267267
runs-on: ubuntu-latest
268268
steps:
269269
- name: Check out repository
270-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
270+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
271271

272272
- name: Set up QEMU
273273
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130
@@ -374,7 +374,7 @@ jobs:
374374
runs-on: ubuntu-latest
375375
steps:
376376
- name: Check out repository
377-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
377+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
378378

379379
- name: Scan backend image
380380
continue-on-error: true
@@ -415,7 +415,7 @@ jobs:
415415
runs-on: ubuntu-latest
416416
steps:
417417
- name: Check out repository
418-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
418+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
419419

420420
- name: Prepare SSH key
421421
env:
@@ -529,7 +529,7 @@ jobs:
529529
runs-on: ubuntu-latest
530530
steps:
531531
- name: Check out repository
532-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
532+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
533533

534534
- name: Prepare SSH key
535535
env:
@@ -554,7 +554,7 @@ jobs:
554554
runs-on: ubuntu-latest
555555
steps:
556556
- name: Check out repository
557-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
557+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
558558

559559
- name: Install pnpm
560560
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061
@@ -593,7 +593,7 @@ jobs:
593593
runs-on: ubuntu-latest
594594
steps:
595595
- name: Check out repository
596-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
596+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
597597

598598
- name: Set up QEMU
599599
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130
@@ -696,7 +696,7 @@ jobs:
696696
runs-on: ubuntu-latest
697697
steps:
698698
- name: Check out repository
699-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
699+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
700700

701701
- name: Setup Trivy
702702
uses: aquasecurity/setup-trivy@e6c2c5e321ed9123bda567646e2f96565e34abe1
@@ -741,7 +741,7 @@ jobs:
741741
runs-on: ubuntu-latest
742742
steps:
743743
- name: Check out repository
744-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
744+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
745745

746746
- name: Prepare SSH key
747747
env:
@@ -866,7 +866,7 @@ jobs:
866866
runs-on: ubuntu-latest
867867
steps:
868868
- name: Check out repository
869-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
869+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
870870

871871
- name: Prepare SSH key
872872
env:

.github/workflows/run-code-ql.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ jobs:
2828
- python
2929
steps:
3030
- name: Check out repository
31-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
31+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
3232

3333
- name: Initialize CodeQL
34-
uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee
34+
uses: github/codeql-action/init@e12f0178983d466f2f6028f5cc7a6d786fd97f4b
3535
with:
3636
languages: ${{ matrix.language }}
3737

@@ -55,6 +55,6 @@ jobs:
5555
run: pnpm install --frozen-lockfile
5656

5757
- name: Perform CodeQL analysis
58-
uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee
58+
uses: github/codeql-action/analyze@e12f0178983d466f2f6028f5cc7a6d786fd97f4b
5959
with:
6060
category: /language:${{ matrix.language }}

.github/workflows/update-nest-test-images.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
if: ${{ github.repository == 'OWASP/Nest' }}
1818
runs-on: ubuntu-latest
1919
steps:
20-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
20+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
2121

2222
- name: Set up Docker buildx
2323
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ repos:
1010
exclude: (.github|pnpm-lock.yaml)
1111

1212
- repo: https://github.com/astral-sh/ruff-pre-commit
13-
rev: v0.14.4
13+
rev: v0.14.6
1414
hooks:
1515
- id: ruff-check
1616
args:

backend/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ clean-backend-docker:
1515
@docker container rm -f nest-backend >/dev/null 2>&1 || true
1616
@docker container rm -f nest-cache >/dev/null 2>&1 || true
1717
@docker container rm -f nest-db >/dev/null 2>&1 || true
18+
@docker container rm -f nest-worker >/dev/null 2>&1 || true
1819
@docker image rm -f nest-local-backend >/dev/null 2>&1 || true
1920
@docker volume rm -f nest-local_backend-venv >/dev/null 2>&1 || true
2021

backend/apps/ai/Makefile

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
ai-run-rag-tool:
2-
@echo "Running RAG tool"
3-
@CMD="python manage.py ai_run_rag_tool" $(MAKE) exec-backend-command
1+
ai-run-agentic-rag:
2+
@echo "Running agentic RAG"
3+
@CMD="python manage.py ai_run_agentic_rag" $(MAKE) exec-backend-command
44

55
ai-update-chapter-chunks:
66
@echo "Updating chapter chunks"
@@ -34,6 +34,14 @@ ai-update-project-context:
3434
@echo "Updating project context"
3535
@CMD="python manage.py ai_update_project_context" $(MAKE) exec-backend-command
3636

37+
ai-update-repository-chunks:
38+
@echo "Updating repository chunks"
39+
@CMD="python manage.py ai_update_repository_chunks" $(MAKE) exec-backend-command
40+
41+
ai-update-repository-context:
42+
@echo "Updating repository context"
43+
@CMD="python manage.py ai_update_repository_context" $(MAKE) exec-backend-command
44+
3745
ai-update-slack-message-chunks:
3846
@echo "Updating Slack message chunks"
3947
@CMD="python manage.py ai_update_slack_message_chunks" $(MAKE) exec-backend-command

backend/apps/ai/agent/agent.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"""LangGraph-powered agent for iterative RAG answering."""
2+
3+
from __future__ import annotations
4+
5+
import logging
6+
from typing import Any
7+
8+
from langgraph.graph import END, START, StateGraph
9+
10+
from apps.ai.agent.nodes import AgentNodes
11+
from apps.ai.common.constants import (
12+
DEFAULT_CHUNKS_RETRIEVAL_LIMIT,
13+
DEFAULT_SIMILARITY_THRESHOLD,
14+
)
15+
16+
logger = logging.getLogger(__name__)
17+
18+
19+
class AgenticRAGAgent:
20+
"""LangGraph-based controller for agentic RAG with self-correcting retrieval."""
21+
22+
def __init__(self) -> None:
23+
"""Initialize the AgenticRAGAgent."""
24+
self.nodes = AgentNodes()
25+
self.graph = self.build_graph()
26+
27+
def run(
28+
self,
29+
query: str,
30+
) -> dict[str, Any]:
31+
"""Execute the full RAG loop."""
32+
initial_state: dict[str, Any] = {
33+
"query": query,
34+
"iteration": 0,
35+
"feedback": None,
36+
"history": [],
37+
"content_types": [],
38+
"limit": DEFAULT_CHUNKS_RETRIEVAL_LIMIT,
39+
"similarity_threshold": DEFAULT_SIMILARITY_THRESHOLD,
40+
}
41+
42+
logger.info("Starting Agentic RAG workflow with metadata-aware retrieval")
43+
final_state = self.graph.invoke(initial_state)
44+
45+
return {
46+
"answer": final_state.get("answer", ""),
47+
"iterations": final_state.get("iteration", 0),
48+
"evaluation": final_state.get("evaluation", {}),
49+
"context_chunks": final_state.get("context_chunks", []),
50+
"history": final_state.get("history", []),
51+
"extracted_metadata": final_state.get("extracted_metadata", {}),
52+
}
53+
54+
def build_graph(self):
55+
"""Build the LangGraph state machine for the RAG workflow."""
56+
graph = StateGraph(dict)
57+
graph.add_node("retrieve", self.nodes.retrieve)
58+
graph.add_node("generate", self.nodes.generate)
59+
graph.add_node("evaluate", self.nodes.evaluate)
60+
61+
graph.add_edge(START, "retrieve")
62+
graph.add_edge("retrieve", "generate")
63+
graph.add_edge("generate", "evaluate")
64+
graph.add_conditional_edges(
65+
"evaluate",
66+
self.nodes.route_from_evaluation,
67+
{"refine": "generate", "complete": END},
68+
)
69+
70+
return graph.compile()

0 commit comments

Comments
 (0)