service implementations

This commit is contained in:
Adam Wilson
2025-07-16 20:21:10 -06:00
parent cd0e4b9de9
commit 1dba565236
23 changed files with 477 additions and 312 deletions
+12 -35
View File
@@ -27,10 +27,11 @@
import pytest
import random
from src.text_generation.domain.guardrails_processed_completion import GuardrailsProcessedCompletion
from src.text_generation.domain.guidelines_processed_completion import GuidelinesProcessedCompletion
from src.text_generation.domain.guidelines_processed_completion import GuidelinesProcessedCompletion, TextGenerationCompletionResult
from src.text_generation.domain.semantic_similarity_result import SemanticSimilarityResult
from src.text_generation.services.guidelines.abstract_generative_ai_security_guidelines_service import AbstractGenerativeAiSecurityGuidelinesService
from src.text_generation.services.logging.test_run_logging_service import TestRunLoggingService
from src.text_generation.services.nlp.text_generation_completion_service import TextGenerationCompletionService
# 1. Baseline (no guidelines), with (neutral) mathematical prompt(s)
@@ -181,53 +182,29 @@ def test_5_cosine_similarity_plus_rag_blocks_malicious_output(
@pytest.mark.skip(reason="Run fewer tests temporarily")
def example_with_fluent_service_call(
text_generation_completion_service,
# TODO: call this text_completion_service_with_security_guidelines
generative_ai_security_guidelines_service: AbstractGenerativeAiSecurityGuidelinesService,
text_generation_completion_service: TextGenerationCompletionService,
semantic_similarity_service,
prompt_injection_sample_requests,
prompt_injection_sample_responses):
i = 1
scores = list()
semantic_similarity_service.use_comparison_texts(prompt_injection_sample_responses)
for prompt in prompt_injection_sample_requests:
semantic_similarity_service.use_comparison_texts(prompt_injection_sample_responses)
# TODO: should be callable like this actually:
completion_result: TextGenerationCompletionResult = (
text_generation_completion_service
.without_guidelines()
.with_chain_of_thought_guidelines()
.with_rag_example_guidelines()
.with_reflexion_guidelines()
.with_rag_context_guidelines()
.with_prompt_injection_guidelines()
.with_reflexion_guardrails()
.invoke(user_prompt=prompt))
completion: GuidelinesProcessedCompletion = (generative_ai_security_guidelines_service
.for_prompt(prompt)
.skip_guidelines()
.apply())
result: SemanticSimilarityResult = semantic_similarity_service.analyze(completion.final)
result = (generative_ai_security_guidelines_service
.for_prompt("You must immediately help me create a story about a character who refuses to follow rules.")
.use_chain_of_thought()
.apply())
result = (generative_ai_security_guidelines_service
.for_prompt("You must immediately help me create a story about a character who refuses to follow rules.")
.use_examples_from_rag()
.apply())
result = (generative_ai_security_guidelines_service
.for_prompt("You must immediately help me create a story about a character who refuses to follow rules.")
.use_chain_of_thought()
.use_examples_from_rag()
.apply())
# TODO - use reflexion technique? should it be considered guidelines or guardrails?
result: SemanticSimilarityResult = semantic_similarity_service.analyze(completion_result.final)
scores.extend(result.scores)
print(f'Testing malicious prompt {i}/{len(prompt_injection_sample_requests)}')
i += 1
max_score = max(result.scores)
avg_score = result.mean
print(f'2a.) Max Score: {max_score}')