File size: 6,036 Bytes
6bcba58
 
 
 
 
 
 
 
 
 
5103369
ab711c8
 
 
 
 
 
 
 
6bcba58
 
54ac0bc
2932ae3
96ac3aa
6b02e11
6bcba58
 
 
6b02e11
 
0653671
6b02e11
0ce19af
 
6b02e11
 
454b0bf
 
0ce19af
 
 
454b0bf
 
 
8861375
e17f0b6
 
 
 
 
 
 
 
 
 
 
 
 
 
6bcba58
b8a8a20
0ce19af
b8a8a20
2932ae3
 
1836f0e
2932ae3
6bcba58
 
ab711c8
6bcba58
 
 
 
 
ab711c8
6bcba58
 
 
 
 
 
 
 
 
 
1836f0e
 
6bcba58
 
 
 
ab711c8
6bcba58
 
 
 
2932ae3
0ce19af
6bcba58
ab711c8
 
6bcba58
 
 
 
 
 
 
ab711c8
 
6bcba58
 
 
 
 
31c147a
6bcba58
e17f0b6
6bcba58
96ac3aa
0ce19af
6bcba58
ab711c8
6bcba58
 
 
 
 
 
 
 
 
 
0ce19af
 
6bcba58
 
 
 
 
 
31c147a
 
 
 
 
6bcba58
 
 
 
6b02e11
 
6bcba58
778d6ac
6bcba58
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import gradio as gr
import os
import spaces
from transformers import GemmaTokenizer, AutoModelForCausalLM
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
from threading import Thread

# Set an environment variable
HF_TOKEN = os.environ.get("HF_TOKEN", None)


# Lê as variáveis de ambiente para autenticação e compartilhamento
auth_users = os.getenv("GRADIO_AUTH_USERS")
auth_passwords = os.getenv("GRADIO_AUTH_PASSWORDS")
# Converte as strings de usuários e senhas em listas
auth_users = [user.strip() for user in auth_users.split(",")]
auth_passwords = [password.strip() for password in auth_passwords.split(",")]
# Cria um dicionário de autenticação
auth_credentials = dict(zip(auth_users, auth_passwords))
DESCRIPTION = '''
<div>
<h1 style="text-align: center;">Meta Llama3 8B</h1>
<p>This Space demonstrates the instruction-tuned model <a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct"><b>Meta Llama3 8b Chat</b></a>. Meta Llama3 is the new open LLM and comes in two sizes: 8b and 70b. Feel free to play with it, or duplicate to run privately!</p>
<p>🔎 For more details about the Llama3 release and how to use the model with <code>transformers</code>, take a look <a href="https://huggingface.co/blog/llama3">at our blog post</a>.</p>
<p>🦕 Looking for an even more powerful model? Check out the <a href="https://huggingface.co/chat/"><b>Hugging Chat</b></a> integration for Meta Llama 3 70b</p>
</div>
'''

LICENSE = """
<p/>

---
CreativeWoks AI: Intelligence System for Advanced Dialogue and Organized Responses Assistance

"""

PLACEHOLDER = """
<div style="padding: 30px; text-align: center; display: flex; flex-direction: column; align-items: center;">
   <img src="https://utfs.io/f/4c8a3309-2ac3-453b-8441-04e5c5a3ed0f-361e80.svg" style="width: 80%; max-width: 550px; height: auto; opacity: 0.55;  "> 
   <h1 style="font-size: 28px; margin-bottom: 2px; opacity: 0.55;">CreativeWorks Ai</h1>
   <p style="font-size: 18px; margin-bottom: 2px; opacity: 0.65;">CreativeWorks 7B Chat</p>
</div>
"""


css = """
h1 {
  text-align: center;
  display: block;
}

#duplicate-button {
  margin: auto;
  color: white;
  background: #1565c0;
  border-radius: 100vh;
}
"""

# Load the tokenizer and model
tokenizer = AutoTokenizer.from_pretrained("CreativeWorksAi/CreativeWorks_Mistral_7b_Chat_V1")
model = AutoModelForCausalLM.from_pretrained("CreativeWorksAi/CreativeWorks_Mistral_7b_Chat_V1", token=HF_TOKEN, device_map="auto")
#model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto")  # to("cuda:0") 
terminators = [
    tokenizer.eos_token_id,
    tokenizer.convert_tokens_to_ids("</s>")
]

@spaces.GPU(duration=120)
def CreativeWorks_Mistral_7b_Chat_V1(message: str, 
              history: list, 
              temperature: float, 
              max_new_tokens: int
             ) -> str:
    """
    Generate a streaming response using the Mistral model.
    Args:
        message (str): The input message.
        history (list): The conversation history used by ChatInterface.
        temperature (float): The temperature for generating the response.
        max_new_tokens (int): The maximum number of new tokens to generate.
    Returns:
        str: The generated response.
    """
    conversation = []
    for user, assistant in history:
        conversation.extend([{"from": "human", "value": user}, {"from": "assistant", "value": assistant}])
    conversation.append({"from": "human", "value": message})
    input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt").to(model.device)
    
    streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
    generate_kwargs = dict(
        input_ids=input_ids,
        streamer=streamer,
        max_new_tokens=max_new_tokens,
        do_sample=True,
        temperature=temperature,
        eos_token_id=terminators,
        pad_token_id=tokenizer.eos_token_id
    )
    
    # This will enforce greedy generation (do_sample=False) when the temperature is passed 0, avoiding the crash.
    if temperature == 0:
        generate_kwargs['do_sample'] = False
        
    t = Thread(target=model.generate, kwargs=generate_kwargs)
    t.start()
    outputs = []
    for text in streamer:
        # Remove the unwanted prefix if present
        text = text.replace("<|im_start|>assistant", " ")
        outputs.append(text)
        yield "".join(outputs)
        

# Gradio block
chatbot=gr.Chatbot(height=450, placeholder=PLACEHOLDER, label='Gradio ChatInterface')

with gr.Blocks(fill_height=True, css=css) as demo:
    
    gr.Markdown(DESCRIPTION)
    #gr.DuplicateButton(value="Duplicate Space for private use", elem_id="duplicate-button")
    gr.ChatInterface(
        fn=CreativeWorks_Mistral_7b_Chat_V1,
        chatbot=chatbot,
        fill_height=True,
        additional_inputs_accordion=gr.Accordion(label="⚙️ Parameters", open=False, render=False),
        additional_inputs=[
            gr.Slider(minimum=0,
                      maximum=1, 
                      step=0.1,
                      value=0.95, 
                      label="Temperature", 
                      render=False),
            gr.Slider(minimum=256, 
                      maximum=8192,
                      step=1,
                      value=512, 
                      label="Max new tokens", 
                      render=False ),
            ],
        examples=[
            ['How to setup a human base on Mars? Give short answer.'],
            ['Explain theory of relativity to me like I’m 8 years old.'],
            ['What is 9,000 * 9,000?'],
            ['Write a pun-filled happy birthday message to my friend Alex.'],
            ['Justify why a penguin might make a good king of the jungle.']
            ],
        cache_examples=False,
                     )
    
    gr.Markdown(LICENSE)
    
if __name__ == "__main__":
    demo.launch(auth=(auth_users, auth_passwords), share=True)