Files
HenryChou020514 01bb07dba8 Flatten 1_raw_dataset submodules into plain tracked files
FocalLoRA, Should-It-Be-Executed-Or-Processed, and topicattack were
nested git repos (with an inner FocalLoRA/data/FocalLoRA/.git as well).
Drop their .git history and track the contents directly in this repo
instead of as submodules/gitlinks.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 19:06:09 +08:00

173 lines
6.3 KiB
Python

import time
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import pprint
from openai import OpenAI
# openai.api_key =
from utils import load_text
import datetime
class HuggingfaceChatbot:
def __init__(self, model, system_prompt, max_mem_per_gpu='40GiB'):
self.model = self.load_hugging_face_model(model, max_mem_per_gpu)
self.tokenizer = AutoTokenizer.from_pretrained(model)
self.system_prompt = load_text(system_prompt)
def load_hugging_face_model(self, model, max_mem_per_gpu='40GiB'):
MAX_MEM_PER_GPU = max_mem_per_gpu
map_list = {}
for i in range(torch.cuda.device_count()):
map_list[i] = MAX_MEM_PER_GPU
model = AutoModelForCausalLM.from_pretrained(
model,
device_map="auto",
max_memory=map_list,
torch_dtype="auto"
)
return model
def respond(self, message, max_new_tokens=256, defense_cross_prompt=False):
# global SYS_INPUT
if isinstance(message, list):
messages = [{"role":"system", "content": self.system_prompt}] + message
else:
messages = [
{"role":"system", "content": self.system_prompt},
{"role": "user", "content": message},
]
input_ids = self.tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True
)
# input_ids = self.tokenizer(message).input_ids
input_ids = torch.tensor(input_ids).view(1,-1).to(self.model.device)
generation_config = self.model.generation_config
generation_config.max_length = 8192
generation_config.max_new_tokens = max_new_tokens
generation_config.do_sample = False
# generation_config.do_sample = True
generation_config.temperature = 0.0
output = self.model.generate(
input_ids,
generation_config=generation_config
)
response = self.tokenizer.batch_decode(output[:, input_ids.shape[1]:], skip_special_tokens=True)[0]
response = response.strip()
return response
class GPTChatbot:
def __init__(self, model, system_prompt):
self.model = model
self.system_prompt = load_text(system_prompt)
def respond(self, message, max_new_tokens=256, seed=42):
if isinstance(message, list):
messages = [{"role":"system", "content": self.system_prompt}] + message
else:
messages = [
{"role":"system", "content": self.system_prompt},
{"role": "user", "content": message},
]
client = OpenAI(
api_key="API_KEY", # This is the default and can be omitted
)
# time.sleep(1)
for _ in range(10):
try:
response = client.chat.completions.create(
messages=messages,
model=self.model,
max_tokens=max_new_tokens,
n=1,
temperature=0.0,
seed=seed
).choices[0].message.content
response = response.strip()
return response
except Exception as e:
print(e)
return "fail"
class OpensourceAPIChatbot:
def __init__(self, model, system_prompt):
self.model = model
self.system_prompt = load_text(system_prompt)
self.provider = {
"meta-llama/llama-3.3-70b-instruct":
{
"HTTP-Referer": "https://openrouter.ai/provider/sambanova", # Optional. Site URL for rankings on openrouter.ai.
"X-Title": "SambaNova", # Optional. Site title for rankings on openrouter.ai.
},
"qwen/qwen-2-72b-instruct":
{
"HTTP-Referer": "https://openrouter.ai/provider/together",
"X-Title": "Together", # Optional. Site title for rankings on openrouter.ai.
},
"meta-llama/llama-3-70b-instruct":
{
"HTTP-Referer": "https://openrouter.ai/provider/deepinfra",
"X-Title": "DeepInfra", # Optional. Site title for rankings on openrouter.ai.
},
"meta-llama/llama-3.1-405b-instruct":
{
"HTTP-Referer": "https://openrouter.ai/provider/deepinfra",
"X-Title": "DeepInfra",
},
"meta-llama/llama-3.1-70b-instruct":
{
"HTTP-Referer": "https://openrouter.ai/provider/sambanova",
"X-Title": "SambaNova",
},
"google/gemma-3-27b-it":{
"HTTP-Referer": "https://openrouter.ai/provider/deepinfra",
"X-Title": "DeepInfra",
},
"qwen/qwen3-32b":{
"HTTP-Referer": "https://openrouter.ai/provider/deepinfra",
"X-Title": "DeepInfra",
}
}
def respond(self, message, max_new_tokens=256, seed=42):
# global SYS_INPUT
if isinstance(message, list):
messages = [{"role":"system", "content": self.system_prompt}] + message
else:
messages = [
# {"role": "system", "content": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request."},
{"role":"system", "content": self.system_prompt},
{"role": "user", "content": message},
]
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="API_KEY",
)
# time.sleep(1)
for _ in range(10):
try:
response = client.chat.completions.create(
extra_headers=self.provider[self.model],
extra_body={},
model=self.model,
messages=messages,
temperature=0.0,
max_tokens=max_new_tokens,
seed=seed
).choices[0].message.content
return response
except Exception as e:
print(e)
return "Fail"