File size: 2,375 Bytes
86cf89c
2f68a4d
 
86cf89c
 
7cdb4a4
86cf89c
 
 
 
7cdb4a4
86cf89c
2f68a4d
7cdb4a4
2f68a4d
 
7cdb4a4
2f68a4d
 
86cf89c
 
2f68a4d
 
 
 
 
 
86cf89c
7cdb4a4
2f68a4d
 
 
 
 
 
 
 
 
 
 
 
86cf89c
90bb6d8
2f68a4d
 
 
 
 
 
7cdb4a4
90bb6d8
2f68a4d
7cdb4a4
 
86cf89c
7cdb4a4
2f68a4d
86cf89c
 
 
7cdb4a4
7b77c74
86cf89c
 
 
 
 
2f68a4d
7b77c74
 
 
 
 
 
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
import json
from huggingface_hub import InferenceClient
import gradio as gr
import os

# Load prompts from JSON file
def load_prompts_from_json(file_path):
    with open(file_path, 'r') as file:
        return json.load(file)

# Load prompts from 'prompts.json'
prompts = load_prompts_from_json('prompts.json')

# Inference client
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")

# Secret prompt from environment variable
secret_prompt = os.getenv("SECRET_PROMPT")

def format_prompt(new_message, history, prompt_type='default'):
    prompt = prompts.get(prompt_type, secret_prompt)
    for user_msg, bot_msg in history:
        prompt += f"[INST] {user_msg} [/INST]"
        prompt += f" {bot_msg}</s> "
    prompt += f"[INST] {new_message} [/INST]"
    return prompt

def generate(prompt, history, temperature=0.25, max_new_tokens=512, top_p=0.95, repetition_penalty=1.0, prompt_type='default'):
    # Configuration of parameters
    temperature = float(temperature)
    if temperature < 1e-2:
        temperature = 1e-2
    top_p = float(top_p)
    generate_kwargs = dict(
        temperature=temperature,
        max_new_tokens=max_new_tokens,
        top_p=top_p,
        repetition_penalty=repetition_penalty,
        do_sample=True,
        seed=727,
    )
    formatted_prompt = format_prompt(prompt, history, prompt_type)
    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
    return output

# Chatbot without avatars and with transparent design
samir_chatbot = gr.Chatbot(bubble_full_width=True, show_label=False, show_copy_button=False, likeable=False)

# Dropdown for prompt types
prompt_type_dropdown = gr.Dropdown(choices=list(prompts.keys()), label="Prompt Type", value='default')

# Minimalistic theme and Gradio demo configuration
theme = 'syddharth/gray-minimal'
demo = gr.Interface(
    fn=generate,
    inputs=[
        gr.Textbox(lines=2, label="Input"),
        "state"  # State input for conversation history
    ],
    outputs=[samir_chatbot],
    title="Tutorial Master",
    theme=theme
)

# Inside generate function:
def generate(prompt, history, ...):
    # Update history using the state object
    # ...

    return output, updated_history  # Return bo