Spaces:
Sleeping
Sleeping
File size: 9,960 Bytes
6d9872e 86b0e24 6d9872e f682d23 c9221dd f38f775 492b4c9 1fcfa3a 492b4c9 6d9872e a6a1648 6d9872e 58677e2 6d9872e 538e831 b8f2f58 3094377 f73f9aa 17c3ccd f73f9aa 3287ed5 b8e3ee6 f73f9aa d79da3c 16eb38a 9ed9e35 20c93b9 72bd5fb 20c93b9 bbaad49 5b7a1d8 3e1afa2 5b7a1d8 9ed9e35 5b7a1d8 691be70 97a15ff f73f9aa 6aba331 97a15ff f73f9aa 97a15ff 4da0852 f73f9aa c149909 538e831 6d9872e 5e9b985 6d9872e 5e9b985 6d9872e 2e12e1a 6d9872e 5e9b985 6d9872e 9ed9e35 5e9b985 9ed9e35 ed69818 5e9b985 9ed9e35 ed69818 070ae9b adc839e 9ed9e35 ed69818 5e2447a 4d6489e 5b7a1d8 9ed9e35 7d12110 9ed9e35 e0d84ad 5e9b985 9ed9e35 070ae9b 4d6489e 9ed9e35 070ae9b 078c8d4 5b7a1d8 9ed9e35 c1b15b2 5b7a1d8 b97834d 5e9b985 5b7a1d8 4d6489e adc839e c1b15b2 078c8d4 9ed9e35 6d9872e 5e9b985 6d9872e 66670dd 6d9872e e0d84ad 5e9b985 bd7c0cd 66670dd 6d9872e 999ecbe 6d9872e 9b863b1 f3ff7ff 2864f5e f3ff7ff 6d9872e e0d84ad 5e9b985 6d9872e 0613b50 104d32f 6d9872e d79da3c 6d9872e d79da3c 104d32f 6d9872e d79da3c 6d9872e 4e1aa2b 6d9872e d30a3fb 6d9872e d30a3fb 6d9872e f3ff7ff 0613b50 b97834d 999ecbe b97834d 999ecbe b97834d 6d9872e 0613b50 b97834d 3e1cebc 6d9872e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | import os
#import subprocess
from huggingface_hub import InferenceClient,HfApi
import gradio as gr
import random
import json
#from query import tasks
import query
from prompts import (
MODEL_FINDER,
COMPRESS_HISTORY_PROMPT,
COMPRESS_DATA_PROMPT,
LOG_PROMPT,
LOG_RESPONSE,
PREFIX,
TASK_PROMPT,
)
api=HfApi()
client = InferenceClient(
"mistralai/Mixtral-8x7B-Instruct-v0.1"
)
def parse_action(string: str):
assert string.startswith("action:")
idx = string.find("action_input=")
if idx == -1:
return string[8:], None
return string[8 : idx - 1], string[idx + 13 :].strip("'").strip('"')
VERBOSE = False
MAX_HISTORY = 100
MAX_DATA = 100
def format_prompt(message, history):
prompt = "<s>"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}</s> "
prompt += f"[INST] {message} [/INST]"
return prompt
def call_search(purpose, task, history, action_input):
return_list=[]
print (action_input)
#if action_input in query.tasks:
print ("trying")
try:
if action_input != "" and action_input != None:
action_input.strip('""')
#model_list = api.list_models(filter=f"{action_input}",sort="last_modified",limit=1000,direction=-1)
#model_list = api.list_models(filter=f"{action_input}",limit=1000)
model_list = api.list_models(filter=f"{action_input}")
this_obj = list(model_list)
print(f'THIS_OBJ :: {this_obj[0]}')
for i,eb in enumerate(this_obj):
#return_list.append(this_obj[i].id)
return_list.append({"id":this_obj[i].id,
"author":this_obj[i].author,
"created_at":this_obj[i].created_at,
"last_modified":this_obj[i].last_modified,
"private":this_obj[i].private,
"gated":this_obj[i].gated,
"disabled":this_obj[i].disabled,
"downloads":this_obj[i].downloads,
"likes":this_obj[i].likes,
"library_name":this_obj[i].library_name,
"tags":this_obj[i].tags,
"pipeline_tag":this_obj[i].pipeline_tag,
})
#print (return_list)
c=0
rl = len(return_list)
print(rl)
for i in str(return_list):
if i == " " or i==",":
c +=1
print (c)
if rl > MAX_DATA:
print("compressing...")
return_list = compress_data(rl,purpose,task,return_list)
history = "observation: the search results are:\n {}\n".format(return_list)
return "COMPLETE", None, history, task
else:
history = "observation: I need to trigger a search using the following syntax:\naction: SEARCH action_input=SEARCH_QUERY\n"
return "UPDATE-TASK", None, history, task
except Exception as e:
print (e)
history = "observation: I need to trigger a search using the following syntax:\naction: SEARCH action_input=SEARCH_QUERY\n"
return "UPDATE-TASK", None, history, task
#else:
# history = "observation: The search query I used did not return a valid response"
return "MAIN", None, history, task
def run_gpt(
prompt_template,
stop_tokens,
max_tokens,
seed,
purpose,
**prompt_kwargs,
):
print(seed)
generate_kwargs = dict(
temperature=0.9,
max_new_tokens=max_tokens,
top_p=0.95,
repetition_penalty=1.0,
do_sample=True,
seed=seed,
)
content = PREFIX.format(
purpose=purpose,
) + prompt_template.format(**prompt_kwargs)
if VERBOSE:
print(LOG_PROMPT.format(content))
#formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history)
#formatted_prompt = format_prompt(f'{content}', history)
stream = client.text_generation(content, **generate_kwargs, stream=True, details=True, return_full_text=False)
resp = ""
for response in stream:
resp += response.token.text
#yield resp
if VERBOSE:
print(LOG_RESPONSE.format(resp))
return resp
def compress_data(c,purpose, task, history):
seed=random.randint(1,1000000000)
print (c)
#tot=len(purpose)
#print(tot)
divr=int(c)/MAX_DATA
divi=int(divr)+1 if divr != int(divr) else int(divr)
chunk = int(int(c)/divr)
print(f'chunk:: {chunk}')
print(f'divr:: {divr}')
print (f'divi:: {divi}')
out = []
#out=""
s=0
e=chunk
print(f'e:: {e}')
new_history=""
task = f'Compile this data to fulfill the task: {task}, and complete the purpose: {purpose}\n'
for z in range(divi):
print(f's:e :: {s}:{e}')
hist = history[s:e]
resp = run_gpt(
COMPRESS_DATA_PROMPT_SMALL,
stop_tokens=["observation:", "task:", "action:", "thought:"],
max_tokens=2048,
seed=seed,
purpose=purpose,
task=task,
knowledge=new_history,
history=hist,
)
new_history = resp
print (resp)
out+=resp
e=e+chunk
s=s+chunk
'''
resp = run_gpt(
COMPRESS_DATA_PROMPT,
stop_tokens=["observation:", "task:", "action:", "thought:"],
max_tokens=1024,
seed=seed,
purpose=purpose,
task=task,
knowledge=new_history,
history="All data has been recieved.",
)'''
print ("final" + resp)
history = "observation: {}\n".format(resp)
return history
def compress_history(purpose, task, history):
resp = run_gpt(
COMPRESS_HISTORY_PROMPT,
stop_tokens=["observation:", "task:", "action:", "thought:"],
max_tokens=512,
seed=random.randint(1,1000000000),
purpose=purpose,
task=task,
history=history,
)
history = "observation: {}\n".format(resp)
return history
def call_main(purpose, task, history, action_input):
resp = run_gpt(
MODEL_FINDER,
stop_tokens=["observation:", "task:"],
max_tokens=2048,
seed=random.randint(1,1000000000),
purpose=purpose,
TASKS=f'{query.tasks}',
task=task,
history=history,
)
lines = resp.strip().strip("\n").split("\n")
for line in lines:
if line == "":
continue
if line.startswith("thought: "):
history += "{}\n".format(line)
elif line.startswith("action: COMPLETE"):
return "COMPLETE", None, history, task
elif line.startswith("action: "):
action_name, action_input = parse_action(line)
history += "{}\n".format(line)
return action_name, action_input, history, task
else:
#history += "observation: {}\n".format(line)
#assert False, "unknown action: {}".format(line)
return "UPDATE-TASK", None, history, task
return "MAIN", None, history, task
def call_set_task(purpose, task, history, action_input):
task = run_gpt(
TASK_PROMPT,
stop_tokens=[],
max_tokens=1024,
seed=random.randint(1,1000000000),
purpose=purpose,
task=task,
history=history,
).strip("\n")
history += "observation: task has been updated to: {}\n".format(task)
return "MAIN", None, history, task
NAME_TO_FUNC = {
"MAIN": call_main,
"UPDATE-TASK": call_set_task,
"SEARCH": call_search,
}
def run_action(purpose, task, history, action_name, action_input):
if action_name == "COMPLETE":
print("Complete - Exiting")
#exit(0)
return "COMPLETE", None, history, task
# compress the history when it is long
if len(history.split("\n")) > MAX_HISTORY:
if VERBOSE:
print("COMPRESSING HISTORY")
history = compress_history(purpose, task, history)
if action_name in NAME_TO_FUNC:
assert action_name in NAME_TO_FUNC
print("RUN: ", action_name, action_input)
return NAME_TO_FUNC[action_name](purpose, task, history, action_input)
else:
history += "observation: The TOOL I tried to use returned an error, I need to select a tool from: (UPDATE-TASK, SEARCH, COMPLETE)\n"
return "MAIN", None, history, task
def run(purpose,history):
task=None
history = ""
#if not history:
# history = []
action_name = "SEARCH" if task is None else "MAIN"
action_input = None
while True:
print("")
print("")
print("---")
#print("purpose:", purpose)
print("task:", task)
print("---")
#print(history)
print("---")
action_name, action_input, history, task = run_action(
purpose,
task,
history,
action_name,
action_input,
)
yield history
if action_name == "COMPLETE":
return history
examples =[
"find the most popular model that I can use to generate an image by providing a text prompt",
"return the top 10 models that I can use to identify objects in images",
"which models have the most likes from each category?"
]
gr.ChatInterface(
fn=run,
chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
title="Mixtral 46.7B Powered <br> Huggingface Model Search",
examples=examples,
concurrency_limit=20,
).launch(show_api=False)
|