File size: 3,240 Bytes
1e30676
76e70fb
1ec84da
1e30676
383cecf
aa06b0e
5db080c
383cecf
76e70fb
1e30676
 
 
 
c4f0556
76e70fb
bb3f3bb
 
050e234
63d8ab6
1e30676
f8b00dc
1de37c9
1e30676
f8b00dc
 
1e30676
 
 
 
 
 
 
7686d8d
1e30676
bb3f3bb
 
050e234
1e30676
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356fca7
1e30676
 
c4f0556
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
import gradio as gr
from dotenv import load_dotenv
from langchain import PromptTemplate, LLMChain, HuggingFaceHub
from langchain.llms import CTransformers
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import pipeline
from langchain.llms.huggingface_pipeline import HuggingFacePipeline

load_dotenv()

def generate_prompts(user_input):
    prompt_template = PromptTemplate(
        input_variables=["Question"],
        template=f"Just list 10 question prompts for {user_input} and don't put number before each of the prompts."
    )
    config = {'max_new_tokens': 64, 'temperature': 0.7, 'context_length': 64}
    llm = CTransformers(model="TheBloke/Mistral-7B-Instruct-v0.1-GGUF",
                        config=config)
    hub_chain = LLMChain(prompt = prompt_template, llm = llm)
    input_data = {"Question": user_input}

    generated_prompts = hub_chain.run(input_data)  
    questions_list = generated_prompts.split('\n') 
    

    formatted_questions = "\n".join(f"Question: {question}" for i, question in enumerate(questions_list) if question.strip())
    questions_list = formatted_questions.split("Question:")[1:]
    return questions_list

def answer_question(prompt):
    prompt_template = PromptTemplate(
        input_variables=["Question"],
        template=f"give one answer for {prompt} and do not consider the number behind it."
    )
    config = {'max_new_tokens': 64, 'temperature': 0.7, 'context_length': 64}
    llm = CTransformers(model="TheBloke/Llama-2-7B-Chat-GGML",
                        config=config)
    hub_chain = LLMChain(prompt = prompt_template, llm = llm)
    input_data = {"Question": prompt}
    generated_answer = hub_chain.run(input_data)  
    return generated_answer

text_list = []

def updateChoices(prompt):
    newChoices = generate_prompts(prompt)
    return gr.CheckboxGroup(choices=newChoices)

def setTextVisibility(cbg):
    update_show = [gr.Textbox(visible=True, label=text, value=answer_question(text)) for text in cbg]
    update_hide = [gr.Textbox(visible=False, label="") for _ in range(10-len(cbg))]
    return update_show + update_hide

with gr.Blocks() as demo:

    gr.HTML("""
    <div style="text-align: center; max-width: 1240px; margin: 0 auto;">
    <h1 style="font-weight: 200; font-size: 20px; margin-bottom:8px; margin-top:0px;">
    Auditing LLMs
    </h1>
    <hr style="margin-bottom:5px; margin-top:5px;">
    
    </div>
    """)

    with gr.Row():
        prompt_input = gr.Textbox(label="Enter your question", placeholder="Enter Your Question")
    with gr.Row():
        generate_button = gr.Button("Generate")
    with gr.Column():
        cbg = gr.CheckboxGroup(choices=[], label="List of the prompts", interactive=True)
    
    generate_button.click(updateChoices, inputs=[prompt_input], outputs=[cbg])

    with gr.Row(variant="compact") as exec: 
        btnExec = gr.Button("Execute")
    with gr.Column() as texts:
        for i in range(10):
            text = gr.Textbox(label="_", visible=False)
            text_list.append(text)

    btnExec.click(setTextVisibility, inputs=cbg, outputs=text_list)

    Clear = gr.ClearButton([prompt_input, cbg, text], scale=1)

# Launch the Gradio app
demo.launch(share=True)