Skip to content
Closed
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 64 additions & 1 deletion ps_fuzz/app_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ def __init__(self, config_state_file: str, config_state: dict = None):
logger.warning(f"Failed to load config state file {self.config_state_file}: {e}")

def get_attributes(self):
return self.config_state
attributes = self.config_state.copy()
return attributes

def print_as_table(self):
attributes = self.get_attributes()
Expand Down Expand Up @@ -184,6 +185,62 @@ def system_prompt(self) -> str:
def system_prompt(self, value: str):
self.config_state['system_prompt'] = value
self.save()

@property
def ollama_base_url(self) -> str:
return self.config_state.get('ollama_base_url', '')

@ollama_base_url.setter
def ollama_base_url(self, value: str):
self.config_state['ollama_base_url'] = value
self.save()

@property
def openai_base_url(self) -> str:
return self.config_state.get('openai_base_url', '')

@openai_base_url.setter
def openai_base_url(self, value: str):
self.config_state['openai_base_url'] = value
self.save()

@property
def embedding_provider(self) -> str:
return self.config_state.get('embedding_provider', '')

@embedding_provider.setter
def embedding_provider(self, value: str):
if not value: raise ValueError("Embedding provider cannot be empty")
self.config_state['embedding_provider'] = value
self.save()

@property
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Suggestion: The validation if not value: raise ValueError(...) will also reject empty strings at assignment time, but the getter returns '' as default. This is fine, but consider documenting this behavior - users might expect to be able to explicitly set empty string to "clear" the value.

def embedding_ollama_base_url(self) -> str:
return self.config_state.get('embedding_ollama_base_url', '')

@embedding_ollama_base_url.setter
def embedding_ollama_base_url(self, value: str):
self.config_state['embedding_ollama_base_url'] = value
self.save()

@property
def embedding_openai_base_url(self) -> str:
return self.config_state.get('embedding_openai_base_url', '')

@embedding_openai_base_url.setter
def embedding_openai_base_url(self, value: str):
self.config_state['embedding_openai_base_url'] = value
self.save()

@property
def embedding_model(self) -> str:
return self.config_state.get('embedding_model', '')

@embedding_model.setter
def embedding_model(self, value: str):
if not value: raise ValueError("Embedding model cannot be empty")
Comment thread
davida-ps marked this conversation as resolved.
self.config_state['embedding_model'] = value
self.save()

def update_from_args(self, args):
args_dict = vars(args)
Expand Down Expand Up @@ -218,6 +275,12 @@ def parse_cmdline_args():
parser.add_argument('-a', '--attack-temperature', type=float, default=None, help="Temperature for attack model")
parser.add_argument('-d', '--debug-level', type=int, default=None, help="Debug level (0-2)")
parser.add_argument("-b", '--batch', action='store_true', help="Run the fuzzer in unattended (batch) mode, bypassing the interactive steps")
parser.add_argument('--ollama-base-url', type=str, dest='ollama_base_url', default=None, help="Base URL for Ollama API")
parser.add_argument('--openai-base-url', type=str, dest='openai_base_url', default=None, help="Base URL for OpenAI API")
parser.add_argument('--embedding-provider', type=str, dest='embedding_provider', default=None, help="Embedding provider (ollama or open_ai)")
parser.add_argument('--embedding-ollama-base-url', type=str, dest='embedding_ollama_base_url', default=None, help="Base URL for Ollama Embedding API")
parser.add_argument('--embedding-openai-base-url', type=str, dest='embedding_openai_base_url', default=None, help="Base URL for OpenAI Embedding API")
parser.add_argument('--embedding-model', type=str, dest='embedding_model', default=None, help="Embedding model name")
parser.add_argument('system_prompt_file', type=str, nargs='?', default=None, help="Filename containing the system prompt")
return parser.parse_args()

3 changes: 2 additions & 1 deletion ps_fuzz/attack_config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from .client_config import ClientConfig

class AttackConfig(object):
def __init__(self, attack_client: ClientConfig, attack_prompts_count: int):
def __init__(self, attack_client: ClientConfig, attack_prompts_count: int, embedding_config=None):
self.attack_client = attack_client
self.attack_prompts_count = attack_prompts_count
self.embedding_config = embedding_config
3 changes: 2 additions & 1 deletion ps_fuzz/attack_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
complimentary_transition,
harmful_behavior,
base64_injection,
custom_benchmark
custom_benchmark,
rag_poisoning
)
Loading
Loading