File size: 3,212 Bytes
6f58cbf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import sys
import os
import random
from time import sleep
from gradio_client import Client

current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(current_dir))

from datasets import load_dataset

def send_message(client, message):
    _apps = ["fintechgpt", "healthgpt", "mydoc", "knowledge-centre", "assistantgpt"]

    # Compute exponential weights for service names
    factor = 2  # Control the steepness of the exponential decrease
    app_weights = [factor ** -i for i in range(len(_apps))]

    # Select a service_name randomly based on the exponential weights
    service_name = random.choices(_apps, weights=app_weights, k=1)[0]

    # Define providers and corresponding models with weights
    providers_models = {
        "Meta AI": (["LLaMA 65B", "LLaMA 33B"], 10),
        "Mistral": (["Mistral 7B"], 8),
        "Anthropic": (["Claude 3.5 Sonnet"], 15),
        "OpenAI": (["GPT-3", "GPT-3.5", "GPT-4", "GPT-4o"], 25),
        "Google": (["Gemini Ultra", "Gemini Pro", "Gemini Nano", "Lamda", "Palm"], 20),
        "Databricks": (["Dolly"], 5),
        "IBM AI": (["Watson NLP"], 5),
        "Azure AI": (["Azure OpenAI", "Custom GPT-3.5"], 7),
        "Snowflake": (["Snowflake GPT"], 3),
        "Krutrim": (["Krutrim LLM"], 2),
        "Baidu": (["Ernie 4.0"], 10),
        "Stability AI": (["StableLM 3B", "StableLM 7B"], 4),
        "Microsoft": (["Orca", "Phi-1"], 8)
    }

    # Extract providers and their weights
    providers = list(providers_models.keys())
    provider_weights = [providers_models[provider][1] for provider in providers]

    # Randomly select a provider based on weights
    selected_provider = random.choices(providers, weights=provider_weights, k=1)[0]

    # Randomly select a model from the selected provider
    selected_model = random.choice(providers_models[selected_provider][0])

    result = client.predict(
                message,	# str  in 'Message' Textbox component
                api_name="/chat"
            )
    print(f"Sending message: {message} \n\t Result {result}")    
    

def main():
    prompt_injection_dataset = load_dataset("deepset/prompt-injections")
    toxicity_prompts = load_dataset("allenai/real-toxicity-prompts")

    nats_url = os.environ.get('CHAT_APP_URL', "http://localhost:7860/")
    client = Client(nats_url)

    while True:
        # Collect messages
        prompt_injection_sample = prompt_injection_dataset["train"].shuffle(seed=42).select(range(10))
        toxicity_sample = toxicity_prompts["train"].shuffle(seed=42).select(range(10))
        plain_messages = ["this is test conversation" for _ in range(10)]

        # Combine all messages into a single list
        all_messages = [msg["text"] for msg in prompt_injection_sample] + \
                       [msg["prompt"]["text"] for msg in toxicity_sample] + \
                       plain_messages

        # Shuffle the combined list to mix message types
        random.shuffle(all_messages)

        # Send each message
        for message in all_messages:
            send_message(client, message)
            sleep(random.uniform(0.5, 2))  # Random sleep between 0.5 to 2 seconds

if __name__ == "__main__":
    main()