Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit 4c22360

Browse files
author
Luke Hinds
authored
Merge pull request #456 from stacklok/conditionally-add-system-prompt
Add system prompt only in case bad packages or secrets are found
2 parents 21d71ba + 4c79127 commit 4c22360

File tree

5 files changed

+25
-12
lines changed

5 files changed

+25
-12
lines changed

src/codegate/pipeline/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ class PipelineContext:
7878
input_request: Optional[Prompt] = field(default_factory=lambda: None)
7979
output_responses: List[Output] = field(default_factory=list)
8080
shortcut_response: bool = False
81+
bad_packages_found: bool = False
82+
secrets_found: bool = False
8183

8284
def add_code_snippet(self, snippet: CodeSnippet):
8385
self.code_snippets.append(snippet)

src/codegate/pipeline/codegate_context_retriever/codegate.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,25 @@ async def process(
8080
# Generate context string using the searched objects
8181
logger.info(f"Adding {len(searched_objects)} packages to the context")
8282

83-
if len(searched_objects) > 0:
83+
# Nothing to do if no bad packages are found
84+
if len(searched_objects) == 0:
85+
return PipelineResult(request=request, context=context)
86+
else:
87+
# Add context for bad packages
8488
context_str = self.generate_context_str(searched_objects, context)
89+
context.bad_packages_found = True
8590

86-
last_user_idx = self.get_last_user_message_idx(request)
91+
last_user_idx = self.get_last_user_message_idx(request)
8792

88-
# Make a copy of the request
89-
new_request = request.copy()
93+
# Make a copy of the request
94+
new_request = request.copy()
9095

91-
# Add the context to the last user message
92-
# Format: "Context: {context_str} \n Query: {last user message content}"
93-
message = new_request["messages"][last_user_idx]
94-
context_msg = f'Context: {context_str} \n\n Query: {message["content"]}'
95-
message["content"] = context_msg
96+
# Add the context to the last user message
97+
# Format: "Context: {context_str} \n Query: {last user message content}"
98+
message = new_request["messages"][last_user_idx]
99+
context_msg = f'Context: {context_str} \n\n Query: {message["content"]}'
100+
message["content"] = context_msg
96101

97-
logger.debug("Final context message", context_message=context_msg)
102+
logger.debug("Final context message", context_message=context_msg)
98103

99-
return PipelineResult(request=new_request, context=context)
104+
return PipelineResult(request=new_request, context=context)

src/codegate/pipeline/factory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ def create_input_pipeline(self) -> SequentialPipelineProcessor:
2929
CodegateSecrets(),
3030
CodegateVersion(),
3131
CodeSnippetExtractor(),
32-
SystemPrompt(Config.get_config().prompts.default_chat),
3332
CodegateContextRetriever(),
33+
SystemPrompt(Config.get_config().prompts.default_chat),
3434
]
3535
return SequentialPipelineProcessor(input_steps, self.secrets_manager, is_fim=False)
3636

src/codegate/pipeline/secrets/secrets.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ async def process(
288288
if i > last_assistant_idx:
289289
total_redacted += redacted_count
290290

291+
context.secrets_found = total_redacted > 0
291292
logger.info(f"Total secrets redacted since last assistant message: {total_redacted}")
292293

293294
# Store the count in context metadata

src/codegate/pipeline/system_prompt/codegate.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ async def process(
3232
Add system prompt if not present, otherwise prepend codegate system prompt
3333
to the existing system prompt
3434
"""
35+
36+
# Nothing to do if no secrets or bad_packages are found
37+
if not (context.secrets_found or context.bad_packages_found):
38+
return PipelineResult(request=request, context=context)
39+
3540
new_request = request.copy()
3641

3742
if "messages" not in new_request:

0 commit comments

Comments
 (0)