Spaces:
Sleeping
Sleeping
import gradio as gr | |
from huggingface_hub import InferenceClient | |
import time | |
from collections import defaultdict | |
# Model definitions with real models | |
model_value = { | |
"Lake 1": "meta-llama/Llama-3.2-3B" | |
} | |
# Access codes for different models | |
access_codes = { | |
"wF99-zXDg-WRiN-qVp8": "pro", | |
"8tj82-2UvU-8Lft-Dupb": "plus" | |
} | |
# Model access levels with real models | |
model_access_levels = { | |
"google/mt5-base": "everyone", | |
"google/gemma-2-2b-it": "plus", | |
"google/mt5-large": "plus", | |
"google-bert/bert-base-multilingual-cased": "pro" | |
} | |
# Usage tracking for "Lake 1 Flash" | |
usage_tracker = defaultdict(list) | |
def check_access_code(code): | |
return access_codes.get(code, None) | |
def recommend_model(current_model, access_level): | |
if current_model == "Lake 1" and access_level == "everyone": | |
return "Consider upgrading to Lake 1 Plus for more features." | |
elif current_model == "Lake 1 Plus" and access_level == "plus": | |
return "Consider upgrading to Lake 1 Pro for advanced features." | |
return None | |
def can_use_flash_model(): | |
current_time = time.time() | |
for user in usage_tracker.keys(): | |
usage_tracker[user] = [t for t in usage_tracker[user] if current_time - t < 5 * 3600] | |
for user in usage_tracker.keys(): | |
if len(usage_tracker[user]) < 20: | |
usage_tracker[user].append(current_time) | |
return True | |
return False | |
def respond(message, history, model): | |
messages = [] | |
for val in history: | |
if val[0]: | |
messages.append({"role": "user", "content": val[0]}) | |
if val[1]: | |
messages.append({"role": "assistant", "content": val[1]}) | |
messages.append({"role": "user", "content": message}) | |
client = InferenceClient(model) | |
response = "" | |
for message in client.chat_completion( | |
messages, | |
max_tokens=512, | |
stream=True, | |
temperature=0.7, | |
top_p=0.95, | |
): | |
token = message.choices[0].delta.content | |
response += token | |
history.append((message, response)) | |
return response, history | |
def main(message, history, model_name, access_code): | |
model = model_value[model_name] | |
access_level = check_access_code(access_code) | |
# Check if the model is Lake 1 Flash | |
if model == model_value["Lake 1 Flash"]: | |
if not can_use_flash_model(): | |
return "Usage limit reached for Lake 1 Flash. Please try again later.", history | |
# Get the required access level for the selected model | |
required_access_level = model_access_levels.get(model, None) | |
# Allow access to Lake 1 for everyone | |
if required_access_level == "everyone": | |
return respond(message, history, model) | |
# Check access for other models | |
if access_level == "pro" or (access_level == "plus" and required_access_level in ["plus", "everyone"]): | |
return respond(message, history, model) | |
# If the user does not have the required access, provide a recommendation | |
recommendation = recommend_model(model_name, access_level) | |
if recommendation: | |
return f"You do not have access to the {model_name}. {recommendation} Please enter a valid access code for this model.", history | |
else: | |
return f"You do not have access to the {model_name}. Please enter a valid access code for this model.", history | |
return "Invalid access code. Please enter a valid code to use this service.", history | |
with gr.Blocks() as demo: | |
gr.Markdown("## Welcome to the Model Interaction App") | |
gr.LoginButton() # Add Hugging Face login button | |
with gr.Row(): | |
with gr.Column(): | |
access_code_input = gr.Textbox(label="Access Code", placeholder="Enter your special access code (if needed)") | |
with gr.Row(): | |
with gr.Column(): | |
model_dropdown = gr.Dropdown( | |
label="Choose Model", | |
choices=list(model_value.keys()), | |
value="Lake 1" # Changed default value to match model_value keys | |
) | |
response_output = gr.Textbox(label="Response", interactive=False, placeholder="Response will appear here") | |
with gr.Row(): | |
message_input = gr.Textbox(label="Message", placeholder="Type your message here") | |
submit_button = gr.Button("Submit") | |
history = gr.State([]) | |
submit_button.click( | |
fn=main, | |
inputs=[message_input, history, model_dropdown, access_code_input], | |
outputs=[response_output, history] | |
) | |
demo.launch() |