KingNish's picture
Update app.py
b47259c verified
raw
history blame
6.07 kB
import json
import subprocess
import time
from llama_cpp import Llama
from llama_cpp_agent import LlamaCppAgent, MessagesFormatterType
from llama_cpp_agent.providers import LlamaCppPythonProvider
from llama_cpp_agent.chat_history import BasicChatHistory
from llama_cpp_agent.chat_history.messages import Roles
import gradio as gr
from huggingface_hub import hf_hub_download
# Global variables to store the model and agent
llm = None
llm_model = None
agent = None
# Download the new model
hf_hub_download(
repo_id="hugging-quants/Llama-3.2-1B-Instruct-Q4_K_M-GGUF",
filename="llama-3.2-1b-instruct-q4_k_m.gguf",
local_dir="./models"
)
def get_messages_formatter_type(model_name):
return MessagesFormatterType.LLAMA_3
def load_model(model_path):
global llm
global llm_model
if llm is None or llm_model != model_path:
llm = Llama(
model_path=model_path,
n_gpu_layers=0, # Adjust based on your GPU
n_batch=32398, # Adjust based on your RAM
n_ctx=512, # Adjust based on your RAM and desired context length
)
llm_model = model_path
return llm
def load_agent(llm, system_message, chat_template):
global agent
if agent is None:
provider = LlamaCppPythonProvider(llm)
agent = LlamaCppAgent(
provider,
system_prompt=system_message,
predefined_messages_formatter_type=chat_template,
debug_output=True
)
return agent
def respond(
message,
history: list[tuple[str, str]],
model,
system_message,
max_tokens,
temperature,
top_p,
top_k,
repeat_penalty,
):
global llm
global agent
chat_template = get_messages_formatter_type(model)
llm = load_model(f"models/{model}")
agent = load_agent(llm, system_message, chat_template)
settings = agent.provider.get_provider_default_settings()
settings.temperature = temperature
settings.top_k = top_k
settings.top_p = top_p
settings.max_tokens = max_tokens
settings.repeat_penalty = repeat_penalty
settings.stream = True
messages = BasicChatHistory()
for msn in history:
user = {
'role': Roles.user,
'content': msn[0]
}
assistant = {
'role': Roles.assistant,
'content': msn[1]
}
messages.add_message(user)
messages.add_message(assistant)
start_time = time.time()
token_count = 0
stream = agent.get_chat_response(
message,
llm_sampling_settings=settings,
chat_history=messages,
returns_streaming_generator=True,
print_output=False
)
outputs = ""
for output in stream:
outputs += output
token_count += len(output.split())
yield outputs
end_time = time.time()
latency = end_time - start_time
speed = token_count / (end_time - start_time)
print(f"Latency: {latency} seconds")
print(f"Speed: {speed} tokens/second")
description = """<p><center>
<a href="https://huggingface.co./hugging-quants/Llama-3.2-1B-Instruct-Q4_K_M-GGUF" target="_blank">[Meta Llama 3.2 (1B)]</a>
Meta Llama 3.2 (1B) is a multilingual large language model (LLM) optimized for conversational dialogue use cases, including agentic retrieval and summarization tasks. It outperforms many open-source and closed chat models on industry benchmarks, and is intended for commercial and research use in multiple languages.
</center></p>
"""
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Dropdown([
"llama-3.2-1b-instruct-q4_k_m.gguf"
],
value="llama-3.2-1b-instruct-q4_k_m.gguf",
label="Model"
),
gr.TextArea(value="""You are Meta Llama 3.2 (1B), an advanced AI assistant created by Meta.""", label="System message"),
gr.Slider(minimum=1, maximum=2048, value=1024, step=1, label="Max tokens"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=2.0,
value=0.9,
step=0.05,
label="Top-p",
),
gr.Slider(
minimum=0,
maximum=100,
value=1,
step=1,
label="Top-k",
),
gr.Slider(
minimum=0.0,
maximum=2.0,
value=1.1,
step=0.1,
label="Repetition penalty",
),
],
theme=gr.themes.Soft(primary_hue="violet", secondary_hue="violet", neutral_hue="gray",font=[gr.themes.GoogleFont("Exo"), "ui-sans-serif", "system-ui", "sans-serif"]).set(
body_background_fill_dark="#16141c",
block_background_fill_dark="#16141c",
block_border_width="1px",
block_title_background_fill_dark="#1e1c26",
input_background_fill_dark="#292733",
button_secondary_background_fill_dark="#24212b",
border_color_accent_dark="#343140",
border_color_primary_dark="#343140",
background_fill_secondary_dark="#16141c",
color_accent_soft_dark="transparent",
code_background_fill_dark="#292733",
),
title="Meta Llama 3.2 (1B)",
description=description,
chatbot=gr.Chatbot(
scale=1,
likeable=True,
show_copy_button=True
),
examples=[
["Hello! Can you introduce yourself?"],
["What's the capital of France?"],
["Can you explain the concept of photosynthesis?"],
["Write a short story about a robot learning to paint."],
["Explain the difference between machine learning and deep learning."],
["Summarize the key points of climate change and its global impact."],
["Explain quantum computing to a 10-year-old."],
["Design a step-by-Step Meal Plan for Weight Loss and Muscle Gain."],
],
cache_examples=False,
autofocus = False,
concurrency_limit = None
)
if __name__ == "__main__":
demo.launch()