benchmarks / run /queriers.py
vincelwt's picture
Fixes and updates
97826e4 unverified
import openai
import os
import json
import requests
from hugchat import hugchat
from hugchat.login import Login
import together
from anthropic import Anthropic, HUMAN_PROMPT, AI_PROMPT
from dotenv import load_dotenv
load_dotenv()
TOGETHER_API_KEY = os.getenv('TOGETHER_API_KEY')
COHERE_API_KEY = os.getenv('COHERE_API_KEY')
AI21_API_KEY = os.getenv('AI21_API_KEY')
ALEPH_API_KEY = os.getenv('ALEPH_API_KEY')
OPEN_ROUTER_API_KEY = os.getenv('OPEN_ROUTER_API_KEY')
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
ANTHROPIC_API_KEY = os.getenv('ANTHROPIC_API_KEY')
# Huggingface login credentials
HUGGING_EMAIL = os.environ.get("HUGGING_EMAIL")
HUGGING_PASSWORD = os.environ.get("HUGGING_PASSWORD")
MAX_TOKENS = 700
# Log in to huggingface and grant authorization to huggingchat
sign = Login(HUGGING_EMAIL, HUGGING_PASSWORD)
cookie_path_dir = "./cookies"
try:
cookies = sign.loadCookiesFromDir(cookie_path_dir) # This will detect if the JSON file exists, return cookies if it does and raise an Exception if it's not.
except Exception as e:
print(e)
# Save cookies to the local directory
sign.saveCookiesToDir(cookie_path_dir)
cookies = sign.login()
chatbot = hugchat.ChatBot(cookies=cookies.get_dict()) # or cookie_path="usercookies/<email>.json"
def hugchat_func(model, params):
# Create a new conversation
id = chatbot.new_conversation()
chatbot.change_conversation(id)
# get index from chatbot.llms of the model
index = [i for i, x in enumerate(chatbot.llms) if x == model['api_id']][0]
print(f"Switching to {index}")
# set the chatbot to the model
chatbot.switch_llm(index)
query_result = chatbot.query(params['text'], temperature=0, max_new_tokens=MAX_TOKENS, stop=params['stop'] if params.get('stop') else None)
return query_result['text']
def together_func(model, params):
# def format_prompt(prompt, prompt_type):
# if prompt_type == "language":
# return f"Q: {prompt}\nA: "
# if prompt_type == "code":
# return f"# {prompt}"
# if prompt_type == "chat":
# return f"<human>: {prompt}\n<bot>: "
together.api_key = TOGETHER_API_KEY
# generate response
response = together.Complete.create(
model = model['api_id'],
prompt=f"<human>: {params['text']}\n<bot>:",
temperature=0,
max_tokens=MAX_TOKENS,
stop=["<human>", "<human>:","</s>", "<|end|>", "<|endoftext|>", "<bot>", "```\n```", "\nUser"]
)
return response['output']['choices'][0]['text'].rstrip(params['stop'])
def cohere(model, params):
options = {
"method": "POST",
"headers": {
"accept": "application/json",
"content-type": "application/json",
"authorization": f"Bearer {COHERE_API_KEY}",
},
"body": json.dumps({
"max_tokens": MAX_TOKENS,
"truncate": "END",
"return_likelihoods": "NONE",
"prompt": params['text'],
"stop_sequences": [params['stop']] if params.get('stop') else [],
"model": model['api_id'],
"temperature": 0,
}),
}
response = requests.post("https://api.cohere.ai/v1/generate", headers=options['headers'], data=options['body'])
json_response = response.json()
return json_response['generations'][0]['text']
def openai_func(model, params):
openai.api_key = OPENAI_API_KEY
completion = openai.ChatCompletion.create(
model=model['api_id'],
messages=[{"role": "user", "content": params['text']}],
temperature=0,
max_tokens=MAX_TOKENS,
stop=[params['stop']] if params.get('stop') else []
)
return completion.choices[0].message.content
def ai21(model, params):
options = {
"headers": {
"accept": "application/json",
"content-type": "application/json",
"Authorization": f"Bearer {AI21_API_KEY}",
},
"body": json.dumps({
"prompt": params['text'],
"maxTokens": MAX_TOKENS,
"temperature": 0,
"stopSequences": [params['stop']] if params.get('stop') else [],
}),
}
response = requests.post(f"https://api.ai21.com/studio/v1/{model['api_id']}/complete", headers=options['headers'], data=options['body'])
json_response = response.json()
return json_response['completions'][0]['data']['text']
def openrouter(model, params):
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"HTTP-Referer": 'https://benchmarks.llmonitor.com', # To identify your app. Can be set to localhost for testing
"Authorization": "Bearer " + OPEN_ROUTER_API_KEY
},
data=json.dumps({
"model": model['api_id'],
"temperature": 0,
"max_tokens": MAX_TOKENS,
"stop": [params['stop']] if params.get('stop') else [],
"messages": [
{"role": "user", "content": params['text']}
]
})
)
completion = response.json()
return completion["choices"][0]["message"]["content"]
def anthropic_func(model,params):
anthropic = Anthropic(
api_key=ANTHROPIC_API_KEY
)
completion = anthropic.completions.create(
model=model['api_id'],
temperature=0,
max_tokens_to_sample=MAX_TOKENS,
prompt=f"{HUMAN_PROMPT} {params['text']}{AI_PROMPT}",
)
return completion.completion
def alephalpha(model, params):
options = {
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {ALEPH_API_KEY}",
},
"body": json.dumps({
"model": model['api_id'],
"prompt": params['text'],
"maximum_tokens": MAX_TOKENS,
"stop_sequences": [params['stop']] if params.get('stop') else [],
}),
}
response = requests.post("https://api.aleph-alpha.com/complete", headers=options['headers'], data=options['body'])
json_response = response.json()
return json_response['completions'][0]['completion']