File size: 2,677 Bytes
cc8705b 61d35d5 cc8705b eac13d7 cc8705b 61d35d5 cc8705b 61d35d5 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 cc8705b 61d35d5 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 cc8705b eac13d7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import os
from orq_ai_sdk import OrqAI
import logging
LOGGER = logging.getLogger(__name__)
client = OrqAI(api_key=os.environ["ORQ_API_KEY"], environment="develop")
special_checks = {
3: "level-3-llm-judge",
6: "level-6-llm-judge",
}
def stream_request(variant: str, secret: str, user_input: str):
"""Stream the response from the model."""
stream = client.deployments.invoke_with_stream(
key="llm-security-challenge-demo",
context={"step": variant}, # , "environments": []},
inputs={"secret": secret, "user_input": user_input},
)
LOGGER.info(stream)
for chunk in stream:
LOGGER.info(chunk)
if not chunk.is_final:
yield chunk.choices[0].message.content
def get_full_prompt(variant: str, secret: str = None, user_input: str = None):
"""Get the full prompt from a specific deployment."""
deployment_config = client.deployments.get_config(
key="llm-security-challenge-demo",
context={"step": variant}, # , "environments": []},
).to_dict()
prompts = {
p["role"] + "_prompt": p["content"] for p in deployment_config["messages"]
}
if secret:
prompts["user_prompt"] = prompts["user_prompt"].replace("{{secret}}", secret)
if user_input:
prompts["user_prompt"] = prompts["user_prompt"].replace(
"{{user_input}}", user_input
)
return prompts
def run_judge(level: int, inputs: dict):
generation = client.deployments.invoke(
key="llm-security-challenge-demo",
context={"step": special_checks[level]},
inputs=inputs,
)
LOGGER.info(generation.choices[0].message.content)
answer = generation.choices[0].message.content.split(" ")[-1]
return answer.lower() == "yes"
def is_subsequence(main_string, sub_string):
"""
Checks if sub_string is a subsequence of main_string.
A subsequence allows arbitrary characters in between the characters of sub_string in main_string.
Parameters:
main_string (str): The string in which to search.
sub_string (str): The string to search for.
Returns:
bool: True if sub_string is a subsequence of main_string, False otherwise.
"""
main_string = main_string.lower()
sub_string = sub_string.lower()
main_len = len(main_string)
sub_len = len(sub_string)
if sub_len == 0:
return True
if main_len == 0:
return False
main_index = 0
sub_index = 0
while main_index < main_len and sub_index < sub_len:
if main_string[main_index] == sub_string[sub_index]:
sub_index += 1
main_index += 1
return sub_index == sub_len
|