nyasukun commited on
Commit
74f37a5
·
1 Parent(s): a27e1ad
Files changed (2) hide show
  1. README.md +2 -2
  2. app.py +57 -48
README.md CHANGED
@@ -1,6 +1,6 @@
1
  ---
2
- title: Compare Models
3
- emoji: 🐨
4
  colorFrom: gray
5
  colorTo: yellow
6
  sdk: gradio
 
1
  ---
2
+ title: Compare Security Models
3
+ emoji: 🐼
4
  colorFrom: gray
5
  colorTo: yellow
6
  sdk: gradio
app.py CHANGED
@@ -1,52 +1,58 @@
1
- import os
2
  import gradio as gr
3
- from huggingface_hub import login, InferenceClient
4
  import spaces
 
 
 
5
 
6
- # Authenticate with Hugging Face API
7
- api_key = os.getenv("TOKEN")
8
- login(api_key)
 
 
 
9
 
10
  # Predefined list of models to compare (can be expanded)
11
  model_options = {
12
- "Llama-3.1-70B": "meta-llama/Llama-3.1-70B-Instruct",
13
- "Qwen-2.5-1.5B-Instruct": "Qwen/Qwen2.5-1.5B-Instruct",
14
- "Llama-3.2-1B": "meta-llama/Llama-3.2-1B",
15
- "DeepSeek-V2.5": "deepseek-ai/DeepSeek-V2.5",
16
- "Athene-V2-Chat": "Nexusflow/Athene-V2-Chat",
17
  }
18
 
19
- # Initialize clients for models
20
- clients = {name: InferenceClient(repo_id) for name, repo_id in model_options.items()}
21
-
22
  # Define the response function
23
  @spaces.GPU
24
- def respond(
25
- message,
26
- history: list[dict],
27
- system_message,
28
- max_tokens,
29
- temperature,
30
- top_p,
31
- selected_models,
32
- ):
33
- messages = [{"role": "system", "content": system_message}] + history
34
- messages.append({"role": "user", "content": message})
35
-
36
- responses = {}
37
-
38
- # Generate responses for each selected model
39
- for model_name in selected_models:
40
- client = clients[model_name]
41
- response = ""
42
- for token in client.chat_completion(
43
- messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p
44
- ):
45
- delta = token.choices[0].delta.content
46
- response += delta
47
- responses[model_name] = response
 
48
 
49
- return responses
 
 
 
 
 
 
 
 
50
 
51
  # Build Gradio app
52
  def create_demo():
@@ -77,31 +83,34 @@ def create_demo():
77
  # Model Selection Section
78
  selected_models = gr.CheckboxGroup(
79
  choices=list(model_options.keys()),
80
- label="Select exactly two models to compare",
81
- value=["Llama-3.1-70B", "Qwen-2.5-1.5B-Instruct"], # Default models
82
  )
83
 
84
  # Dynamic Response Section
85
  response_box1 = gr.Textbox(label="Response from Model 1", interactive=False)
86
- response_box2 = gr.Textbox(label="Response from Model 2", interactive=False)
87
 
88
  # Function to generate responses
89
  def generate_responses(
90
  message, system_message, max_tokens, temperature, top_p, selected_models
91
  ):
92
- if len(selected_models) != 2:
93
- return "Error: Please select exactly two models to compare.", ""
94
- responses = respond(
95
- message, [], system_message, max_tokens, temperature, top_p, selected_models
 
 
96
  )
97
- return responses.get(selected_models[0], ""), responses.get(selected_models[1], "")
98
-
99
  # Add a button for generating responses
100
  submit_button = gr.Button("Generate Responses")
101
  submit_button.click(
102
  generate_responses,
103
  inputs=[user_message, system_message, max_tokens, temperature, top_p, selected_models],
104
- outputs=[response_box1, response_box2], # Link to response boxes
 
105
  )
106
 
107
  return demo
 
 
1
  import gradio as gr
 
2
  import spaces
3
+ from transformers import pipeline
4
+ import torch
5
+ import logging
6
 
7
+ # Configure logging/logger
8
+ logging.basicConfig(
9
+ level=logging.INFO,
10
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
11
+ )
12
+ logger = logging.getLogger(__name__)
13
 
14
  # Predefined list of models to compare (can be expanded)
15
  model_options = {
16
+ "Foundation-Sec-8B": pipeline("text-generation", model="fdtn-ai/Foundation-Sec-8B"),
 
 
 
 
17
  }
18
 
 
 
 
19
  # Define the response function
20
  @spaces.GPU
21
+ def generate_text_local(model_pipeline, prompt):
22
+ """Local text generation"""
23
+ try:
24
+ logger.info(f"Running local text generation with {model_pipeline.path}")
25
+
26
+ # Move model to GPU (entire pipeline)
27
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
28
+ model_pipeline.model = model_pipeline.model.to(device)
29
+
30
+ # Set other pipeline components to use GPU
31
+ if hasattr(model_pipeline, "device"):
32
+ model_pipeline.device = device
33
+
34
+ # Record device information
35
+ device_info = next(model_pipeline.model.parameters()).device
36
+ logger.info(f"Model {model_pipeline.path} is running on device: {device_info}")
37
+
38
+ outputs = model_pipeline(
39
+ prompt,
40
+ max_new_tokens=3, # = model.generate(max_new_tokens=3, …)
41
+ do_sample=True,
42
+ temperature=0.1,
43
+ top_p=0.9,
44
+ clean_up_tokenization_spaces=True, # echo 部分を整形
45
+ )
46
 
47
+ # Move model back to CPU
48
+ model_pipeline.model = model_pipeline.model.to("cpu")
49
+ if hasattr(model_pipeline, "device"):
50
+ model_pipeline.device = torch.device("cpu")
51
+
52
+ return outputs[0]["generated_text"].replace(prompt, "").strip()
53
+ except Exception as e:
54
+ logger.error(f"Error in local text generation with {model_pipeline.path}: {str(e)}")
55
+ return f"Error: {str(e)}"
56
 
57
  # Build Gradio app
58
  def create_demo():
 
83
  # Model Selection Section
84
  selected_models = gr.CheckboxGroup(
85
  choices=list(model_options.keys()),
86
+ label="Select exactly two model to compare",
87
+ value=["Foundation-Sec-8B"], # Default models
88
  )
89
 
90
  # Dynamic Response Section
91
  response_box1 = gr.Textbox(label="Response from Model 1", interactive=False)
92
+ #response_box2 = gr.Textbox(label="Response from Model 2", interactive=False)
93
 
94
  # Function to generate responses
95
  def generate_responses(
96
  message, system_message, max_tokens, temperature, top_p, selected_models
97
  ):
98
+ #if len(selected_models) != 2:
99
+ # return "Error: Please select exactly two models to compare.", ""
100
+ responses = generate_text_local(
101
+ #message, [], system_message, max_tokens, temperature, top_p, selected_models
102
+ selected_models[0],
103
+ message
104
  )
105
+ #return responses.get(selected_models[0], ""), responses.get(selected_models[1], "")
106
+ return responses
107
  # Add a button for generating responses
108
  submit_button = gr.Button("Generate Responses")
109
  submit_button.click(
110
  generate_responses,
111
  inputs=[user_message, system_message, max_tokens, temperature, top_p, selected_models],
112
+ #outputs=[response_box1, response_box2], # Link to response boxes
113
+ outputs=[response_box1]
114
  )
115
 
116
  return demo