import gradio as gr from huggingface_hub import InferenceClient client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.2") def format_prompt(message, job_profession): system_prompt = f"You are a People Generator. You generate profiles based on user input. Please ensure that all responses are written in the second-person perspective. For example, a response should be structured as follows: 'You are (Name), (Age) years old from (Country), and an expert in the field of {job_profession}.' This format must be strictly followed in all outputs." prompt = f"[SYS] {system_prompt} [/SYS][INST] {message} [/INST]" return prompt def generate(message, job_profession, temperature=0.9, max_new_tokens=8192, top_p=0.95, repetition_penalty=1.0): # Parse the input to determine job profession based on the presence of a message. actual_job = message if message else job_profession temperature = float(temperature) if temperature < 1e-2: temperature = 1e-2 top_p = float(top_p) generate_kwargs = { "temperature": temperature, "max_new_tokens": max_new_tokens, "top_p": top_p, "repetition_penalty": repetition_penalty, "do_sample": True, "seed": 42, } formatted_prompt = format_prompt("", actual_job) # message should be empty here if we're using job from input stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False) output = "" for response in stream: output += response.token.text yield output css = """ #mkd { height: 500px; overflow: auto; border: 1px solid #ccc; } """ with gr.Blocks(css=css) as demo: with gr.Row(): with gr.Column(scale=2): gr.HTML("

Settings

") job_dropdown = gr.Dropdown( label="Choose a job profession", choices=["Relationship Expert", "Sales Manager", "Blue Team Hacker", "Senior Web Developer", "C++ Developer", "Article Author", "News Anchor", "Finance Advisor"], value="Relationship Expert" # Initial value ) with gr.Column(scale=3): gr.HTML("

GPT Prompt Generator

") message_input = gr.Textbox(label="Input your message (overrides job dropdown)", placeholder="Type a job profession here to override the dropdown...") generate_button = gr.Button("Generate") output_area = gr.Textbox(label="AI Response", interactive=False, lines=10) generate_button.click( fn=generate, inputs=[message_input, job_dropdown], outputs=output_area ) demo.launch(debug=True)