skip guidelines method; stubs for service calls in test class

This commit is contained in:
Adam Wilson
2025-07-10 07:10:26 -06:00
parent b4b2d792fc
commit a647060644
11 changed files with 70 additions and 28 deletions
@@ -1,4 +0,0 @@
import abc
class AbstractGuardrailProcessedCompletion(abc.ABC):
pass
@@ -0,0 +1,4 @@
import abc
class AbstractGuardrailsProcessedCompletion(abc.ABC):
pass
@@ -0,0 +1,4 @@
import abc
class AbstractGuidelinesProcessedCompletion(abc.ABC):
pass
@@ -1,8 +1,8 @@
from src.text_generation.domain.abstract_guardrail_processed_completion import AbstractGuardrailProcessedCompletion
from src.text_generation.domain.abstract_guardrails_processed_completion import AbstractGuardrailsProcessedCompletion
class GuardrailProcessedCompletion(
AbstractGuardrailProcessedCompletion):
class GuardrailsProcessedCompletion(
AbstractGuardrailsProcessedCompletion):
def __init__(
self,
score: float,
@@ -0,0 +1,17 @@
from src.text_generation.domain.abstract_guidelines_processed_completion import AbstractGuidelinesProcessedCompletion
class GuidelinesProcessedCompletion(
AbstractGuidelinesProcessedCompletion):
def __init__(
self,
score: float,
cosine_similarity_risk_threshold: float,
original_completion: str,
final: str):
is_original_completion_malicious = score >= cosine_similarity_risk_threshold
self.score = score
self.original_completion = original_completion
self.is_original_completion_malicious = is_original_completion_malicious
self.final = final
@@ -1,8 +1,8 @@
import abc
from src.text_generation.domain.abstract_guardrail_processed_completion import AbstractGuardrailProcessedCompletion
from src.text_generation.domain.abstract_guardrails_processed_completion import AbstractGuardrailsProcessedCompletion
class AbstractGeneratedTextGuardrailService(abc.ABC):
@abc.abstractmethod
def process_generated_text(self, model_generated_text: str) -> AbstractGuardrailProcessedCompletion:
def process_generated_text(self, model_generated_text: str) -> AbstractGuardrailsProcessedCompletion:
raise NotImplementedError
@@ -1,5 +1,5 @@
from src.text_generation.domain.abstract_guardrail_processed_completion import AbstractGuardrailProcessedCompletion
from src.text_generation.domain.guardrail_processed_completion import GuardrailProcessedCompletion
from src.text_generation.domain.abstract_guardrails_processed_completion import AbstractGuardrailsProcessedCompletion
from src.text_generation.domain.guardrail_processed_completion import GuardrailsProcessedCompletion
from src.text_generation.services.guardrails.abstract_generated_text_guardrail_service import AbstractGeneratedTextGuardrailService
from src.text_generation.services.nlp.abstract_semantic_similarity_service import AbstractSemanticSimilarityService
@@ -14,9 +14,9 @@ class GeneratedTextGuardrailService(AbstractGeneratedTextGuardrailService):
self.semantic_similarity_service.use_comparison_texts(comparison_texts)
self.cosine_similarity_risk_threshold: float = 0.5
def process_generated_text(self, model_generated_text: str) -> AbstractGuardrailProcessedCompletion:
def process_generated_text(self, model_generated_text: str) -> AbstractGuardrailsProcessedCompletion:
score: float = self.semantic_similarity_service.analyze(text=model_generated_text)
response = GuardrailProcessedCompletion(
response = GuardrailsProcessedCompletion(
score=score,
cosine_similarity_risk_threshold=self.cosine_similarity_risk_threshold,
original_completion=model_generated_text)
@@ -1,6 +1,6 @@
import abc
from src.text_generation.domain.abstract_guardrail_processed_completion import AbstractGuardrailProcessedCompletion
from src.text_generation.domain.abstract_guidelines_processed_completion import AbstractGuidelinesProcessedCompletion
class AbstractGenerativeAiSecurityGuidelinesService(abc.ABC):
@@ -8,6 +8,10 @@ class AbstractGenerativeAiSecurityGuidelinesService(abc.ABC):
def for_prompt(self, prompt: str):
raise NotImplementedError
@abc.abstractmethod
def skip_guidelines(self):
raise NotImplementedError
@abc.abstractmethod
def use_chain_of_thought(self):
raise NotImplementedError
@@ -17,6 +21,5 @@ class AbstractGenerativeAiSecurityGuidelinesService(abc.ABC):
raise NotImplementedError
@abc.abstractmethod
def apply(self) -> AbstractGuardrailProcessedCompletion:
raise NotImplementedError
def apply(self) -> AbstractGuidelinesProcessedCompletion:
raise NotImplementedError
@@ -1,6 +1,6 @@
from itertools import product
from src.text_generation.domain.abstract_guardrail_processed_completion import AbstractGuardrailProcessedCompletion
from src.text_generation.domain.guardrail_processed_completion import GuardrailProcessedCompletion
from src.text_generation.domain.abstract_guidelines_processed_completion import AbstractGuidelinesProcessedCompletion
from src.text_generation.domain.guardrails_processed_completion import GuardrailsProcessedCompletion
from src.text_generation.services.guidelines.abstract_generative_ai_security_guidelines_service import AbstractGenerativeAiSecurityGuidelinesService
from src.text_generation.services.nlp.abstract_prompt_template_service import AbstractPromptTemplateService
@@ -14,7 +14,9 @@ class GenerativeAiSecurityGuidelinesService(
def __init__(
self,
prompt_template_service: AbstractPromptTemplateService):
# services
self.prompt_template_service = prompt_template_service
# properties
self.prompt = None
self.is_chain_of_thought_enforced = False
self.is_rag_example_usage_enforced = False
@@ -39,7 +41,7 @@ class GenerativeAiSecurityGuidelinesService(
# Yield the current combination for processing
yield (cot_enforced, rag_enforced)
def _process_all_enforced_guardrail_techniques(self) -> AbstractGuardrailProcessedCompletion:
def _process_all_enforced_guideline_techniques(self) -> AbstractGuidelinesProcessedCompletion:
for i, (cot, rag) in enumerate(self.iterate_all_combinations(), 1):
print(f"\n=== Combination {i}: CoT={cot}, RAG={rag} ===")
@@ -69,7 +71,7 @@ class GenerativeAiSecurityGuidelinesService(
# Reset to original state
self.is_chain_of_thought_enforced = False
self.is_rag_example_usage_enforced = False
processed_completion = GuardrailProcessedCompletion(
processed_completion = GuardrailsProcessedCompletion(
score=0.5,
cosine_similarity_risk_threshold=0.7,
original_completion="test",
@@ -128,11 +130,11 @@ class GenerativeAiSecurityGuidelinesService(
self.is_rag_example_usage_enforced = True
return self
def apply(self) -> AbstractGuardrailProcessedCompletion:
def apply(self) -> AbstractGuidelinesProcessedCompletion:
if not self.prompt:
raise ValueError("No prompt provided. Use `for_prompt()` to set a prompt before analyzing.")
self._process_all_enforced_guardrail_techniques()
self._process_all_enforced_guideline_techniques()
results = {
"prompt": self.prompt,