Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import json | |
import time | |
import requests | |
import os | |
import glob | |
import re | |
import smart_open | |
import plotly.express as px | |
import random | |
import difflib | |
import pdb | |
from sentence_transformers import SentenceTransformer, models, util | |
enable_summary_button = True | |
dump_pos_data_for_reporting = True | |
bucket_name = "paper_n1" | |
prefix_lst = [ | |
"pgj_d_4096", | |
"pgj_d_2048", | |
"pgj_d_1024_v2", | |
"pgj_d_1024_layer_14", | |
"pgj_d_1024_layer_7", | |
"pgj_d_1024_layer_2", | |
"pgj_d_1024_layer_1" ] | |
# "my_gptj_6b_tpu_size_8", | |
model_names = { | |
prefix_lst[0]: 'PatentGPT-J-6B', | |
prefix_lst[1]: 'PatentGPT-J-1.6B', | |
# prefix_lst[2]: 'PatentGPT-J-279M', | |
# prefix_lst[3]: 'PatentGPT-J-191M', | |
# prefix_lst[4]: 'PatentGPT-J-128M', | |
# prefix_lst[5]: 'PatentGPT-J-115M',} | |
prefix_lst[2]: 'PatentGPT-J-456M', | |
prefix_lst[3]: 'PatentGPT-J-279M', | |
prefix_lst[4]: 'PatentGPT-J-191M', | |
prefix_lst[5]: 'PatentGPT-J-128M', | |
prefix_lst[6]: 'PatentGPT-J-115M',} | |
# prefix_lst[7]:'GPT-J-6B' | |
# experiment 3 | |
# folder = os.path.join('experiments', 'non_patent') | |
# id_to_scroll = 1 # which of the above to scroll through | |
# first_claim_only = True | |
#experiment 2 | |
# folder = os.path.join('experiments', 'ipg20220104_500') | |
# #folder = "device_serve_results" | |
# id_to_scroll = 1 # which of the above to scroll through | |
# first_claim_only = False | |
# prefix_lst = ["my_gptj_6b_tpu_size_8", "pgj_d_4096", "pgj_d_2048", "pgj_d_1024_layer_14", "pgj_d_1024_layer_7", "pgj_d_1024_layer_2", "pgj_d_1024_layer_1"] | |
# #, "pgj_large", "pgj_medium", "pgj_small", ] | |
# # "pgj_d_1024_layer_14" | |
# experiment 1 | |
folder = os.path.join('experiments', 'ipg22_500') | |
# (previous) folder = "eval_ipg22_500" | |
id_to_scroll = 1 # which of the above to scroll through | |
first_claim_only = True | |
ignore_outscope = True # ignore pick > 10 | |
def show_diff(a, b): | |
#print('{} => {}'.format(a,b)) | |
for i, s in enumerate(difflib.ndiff(a, b)): | |
if s[0]==' ': continue | |
elif s[0]=='-': | |
print(u'Delete "{}" from position {}'.format(s[-1],i)) | |
elif s[0]=='+': | |
print(u'Add "{}" to position {}'.format(s[-1],i)) | |
def handle_char_return(text): | |
if text == '(none)': # unicorn text | |
text == '' | |
return text | |
#return ch.replace('\n', '\\n') | |
#if ch == '\n': | |
# ch = "'\\n'" | |
#return ch | |
def get_remaining(lst, pos): | |
s = '' | |
for i in range(pos, len(lst)): | |
text = lst[i]['actual_next_token_text'] | |
if text.startswith(' ') == False: | |
s += text | |
else: | |
break | |
return s | |
def calc_details(base_fn): | |
full_fn = os.path.join(folder, base_fn) | |
#gs_fn = "gs://%s/%s/%s" % (bucket_name, folder, base_fn) | |
#with smart_open.open(gs_fn) as f: | |
if os.path.exists(full_fn) == False: | |
return None, -1, -1, None, None, None, None, None | |
with open(full_fn) as f: | |
result = json.loads(f.read()) | |
print("Loaded: %s" % full_fn) | |
lst = result['output'] | |
recv = result['recv'] | |
sum_pick = 0 | |
sum_prob = 0 | |
sum_outscope_count = 0 | |
sum_outscope_len = 0 | |
sum_hit_1 = 0 | |
sum_top_10_len = 0 | |
full_text = '' | |
token_count = 0 | |
#found_end = False | |
#pdb.set_trace() | |
for i, tk in enumerate(lst[:-1]): | |
# if found_end: | |
# break | |
token_text = handle_char_return(tk['actual_next_token_text']) | |
# Due to tokenizer difference, the following needs more work in the future. | |
# if base_fn.find('gptj') >= 0: | |
# # using the original gpt-j-6b model | |
# # need to skip special tokens | |
# if i <= 7: | |
# continue # skip |start of claim|> | |
# remaining_text = get_remaining(lst, i) | |
# if remaining_text.find('<|end_of_claim|>') >= 0: | |
# pos1 = remaining_text.find('<|end_of_claim|>') | |
# token_text = remaining_text[:pos1] | |
# found_end = True | |
# #pdb.set_trace() | |
# #break | |
# The following was for GPT-J-6B. Not needed for PatentGPT-J. | |
#if token_text.find('<|end_of_claim|>') == 0: | |
# #pdb.set_trace() | |
# break | |
next_top_seq = int(tk['actual_next_token_top_seq']) | |
next_top_prob = float(tk['actual_next_token_top_prob']) | |
full_text += token_text | |
if next_top_seq == 0: | |
sum_hit_1 += 1 # press "tab" for the top pick | |
if ignore_outscope and next_top_seq>=10: | |
sum_outscope_count += 1 | |
sum_outscope_len += len(token_text) # use length as keystrokes | |
else: | |
sum_pick += min(next_top_seq+1, len(token_text)) | |
#sum_pick += (next_top_seq+1) # press "down" & "tab" | |
sum_prob += next_top_prob | |
sum_top_10_len += len(token_text) | |
token_count += 1 | |
if ignore_outscope: | |
if token_count == 0: # unlikely | |
avg_pick = 0 | |
avg_prob = 0 | |
else: | |
avg_pick = float(sum_pick) / token_count | |
avg_prob = float(sum_prob) / token_count | |
else: | |
avg_pick = float(sum_pick) / token_count | |
avg_prob = float(sum_prob) / token_count | |
# if len(lst) < 2048: # for debugging | |
# s = '<|start_of_claim|>' + full_text | |
# if len(s) != len(recv['context']): | |
# print('length mismatch --> full_text: %s, recv: %s' % (len(s), len(recv['context']))) | |
# show_diff(s, recv['context']) | |
# pdb.set_trace() | |
return result, avg_pick, avg_prob, token_count, sum_pick, sum_prob, sum_outscope_count, sum_outscope_len, sum_hit_1, sum_top_10_len, full_text | |
def show_avg(base_fn, model_name, patent_claim_num, show_pick=False): | |
result, avg_pick, avg_prob, token_count, sum_pick, sum_prob, sum_outscope_count, sum_outscope_len, sum_hit_1, sum_top_10_len, full_text = calc_details(base_fn) | |
if token_count == 0: | |
print('debug 2') | |
pdb.set_trace() | |
if result is None: | |
return None | |
lst = result['output'] | |
result = '' | |
sum_all = {} | |
for i, tk in enumerate(lst): | |
token_text = handle_char_return(tk['actual_next_token_text']) | |
if token_text == '<|end_of_claim|>': | |
break | |
if token_text == '(none)': # for unicorn text | |
break | |
# Skip GPT-J, due to different tokenization | |
# if base_fn.find('gptj') >= 0: | |
# # using the original gpt-j-6b model | |
# # need to skip special tokens | |
# if i <= 7: | |
# continue # skip |start of claim|> | |
# if token_text == '.<': # assuming .<|end of claim|> | |
# break | |
pick = int(tk['actual_next_token_top_seq']) | |
prob = float(tk['actual_next_token_top_prob']) | |
colors = [ | |
['00ff00', '000000', '1'], | |
['008800', 'ffffff', '2-10'], | |
['ff0000', 'ffffff', 'out of top 10'], | |
] | |
#colors = [ | |
# ['00ff00', '000000', '1'], | |
# ['008800', 'ffffff', '2-10'], | |
# ['aa0000', 'ffffff', '11-100'], | |
# ['ff0000', 'ffffff', '101~'] | |
#] | |
for j, item in enumerate(colors): | |
sum_all[item[2]] = 0 | |
# skip follow-up subword | |
# if token_text.startswith(' ') == False: | |
# bg_color = '' | |
# fg_color = '' | |
# else: | |
if pick == 0: | |
bg_color = colors[0][0] | |
fg_color = colors[0][1] | |
tag = colors[0][2] | |
sum_all[tag] += 1 | |
elif pick >= 1 and pick < 10: | |
bg_color = colors[1][0] | |
fg_color = colors[1][1] | |
tag = colors[1][2] | |
sum_all[tag] += 1 | |
else: # pick >= 10 | |
#elif pick >= 10 and pick < 100: | |
bg_color = colors[2][0] | |
fg_color = colors[2][1] | |
tag = colors[2][2] | |
sum_all[tag] += 1 | |
#else: #pick >= 100: | |
# bg_color = colors[3][0] | |
# fg_color = colors[3][1] | |
# tag = colors[3][2] | |
# sum_all[tag] += 1 | |
if show_pick: | |
pick = '[%s]' % pick | |
else: | |
pick = '' | |
result += "<span style=background-color:#%s;color:#%s;border-radius:5px;>%s%s</span> " % (bg_color, fg_color, token_text, pick) # | |
color_msg = '' | |
for i, v in enumerate(colors): | |
color_msg += "<span style=background-color:#%s;color:#%s;border-radius:5px;> %s </span> " % (v[0], v[1], v[2]) | |
#result, avg_pick, avg_prob, token_count, sum_pick, sum_prob, sum_outscope, sum_hit_1, sum_top_10_len, full_text = calc_details(base_fn) | |
# sum_pick as top 1~10 | |
keys_with_auto = (sum_pick+sum_outscope_len) | |
keys_without_auto = len(full_text) | |
saved_ratio = float(keys_without_auto-keys_with_auto)/keys_without_auto * 100 | |
s = 'model: %s\n' \ | |
'Autocomplete Effectiveness: %.1f%% (keystrokes saved)\n' \ | |
'Total keystrokes: %s (with autocomplete), %s (without autocomplete)\n' \ | |
'Keystroke distribution: top 1~10: %s (top 1: %s), out of top 10: %s' % (model_name, saved_ratio, keys_with_auto, keys_without_auto, sum_pick, sum_hit_1, sum_outscope_len) | |
st.text(s) | |
# s = 'file: %s, sum_pick: %s, sum_hit_1: %s, token_count: %s, sum_outscope: %s, avg_pick: %.2f, avg_prob: %.2f, sum_prob: %.2f, hit_1 ratio: %.2f ' % (base_fn, sum_pick, sum_hit_1, token_count, sum_outscope, avg_pick, avg_prob, sum_prob, float(sum_hit_1)/token_count) | |
#s += color_msg | |
s = color_msg | |
st.markdown(s, unsafe_allow_html=True) | |
#st.text('file: %s, avg_pick: %5.2f, avg_prob: %.2f, hit count: %s/%s ' % (base_fn, avg_pick, avg_prob, hit_0_count, len(lst))) | |
# show histogram | |
st.markdown(result, unsafe_allow_html=True) | |
#st.text_area('context with top seq & prob:', result, height=400) | |
sum_lst = [sum_all['1'], sum_all['2-10'], sum_all['out of top 10']] | |
#sum_lst = [['1', sum_all['1']], ['2-10', sum_all['2-10']]] | |
#sum_lst = [sum_all['1'], sum_all['2-10'], sum_all['11-100'], sum_all['101~']] | |
return sum_lst | |
def show_overall_summary(prefix_lst, select_lst): | |
# accumulate all | |
# debug | |
# for i, num in enumerate(select_lst): | |
# pre_full_text = '' | |
# for prefix in prefix_lst: | |
# base_fn = '%s_%s_forward.json' % (prefix, num) | |
# result, avg_pick, avg_prob, token_count, sum_pick, sum_prob, sum_outscope, sum_hit_1, sum_top_10_len, full_text = calc_details(base_fn) | |
# if pre_full_text == '': | |
# pre_full_text = full_text | |
# else: | |
# if pre_full_text != full_text: | |
# print('debug') | |
# pdb.set_trace() | |
# # | |
# pdb.set_trace() | |
for prefix in prefix_lst: | |
acc_token_count = 0 | |
acc_sum_pick = 0 | |
acc_sum_prob = 0 | |
acc_sum_outscope_count = 0 | |
acc_sum_outscope_len = 0 | |
acc_sum_hit_1 = 0 | |
acc_sum_top_10_len = 0 | |
acc_full_text_len = 0 | |
pre_full_text = '' | |
for i, num in enumerate(select_lst): | |
base_fn = '%s_%s_forward.json' % (prefix, num) | |
result, avg_pick, avg_prob, token_count, sum_pick, sum_prob, sum_outscope_count, sum_outscope_len, sum_hit_1, sum_top_10_len, full_text = calc_details(base_fn) | |
acc_token_count += token_count | |
acc_sum_pick += sum_pick | |
acc_sum_prob += sum_prob | |
acc_sum_outscope_count += sum_outscope_count | |
acc_sum_outscope_len += sum_outscope_len | |
acc_sum_hit_1 += sum_hit_1 | |
acc_sum_top_10_len += sum_top_10_len | |
acc_full_text_len += len(full_text) | |
if acc_token_count > 0: | |
# acc_sum_pick --> top 1~10 | |
keys_with_auto = acc_sum_pick + acc_sum_outscope_len | |
keys_without_auto = acc_full_text_len | |
saved_ratio = float(keys_without_auto-keys_with_auto)/keys_without_auto * 100 | |
st.text('[ %s ]\n' \ | |
'Autocomplete Effectiveness: %.1f%% (ratio of saving keystroke)\n' \ | |
'(sum) keys_with_auto: %s, top_10_keys: %s, out_of_scope: %s, sum_hit_1: %s\n' \ | |
'keys_without_auto: %s, top_10_len: %s, prob: %.2f' % ( | |
model_names[prefix], saved_ratio, | |
'{:,}'.format(keys_with_auto), | |
'{:,}'.format(acc_sum_pick), | |
'{:,}'.format(acc_sum_outscope_len), | |
'{:,}'.format(acc_sum_hit_1), | |
'{:,}'.format(keys_without_auto), | |
'{:,}'.format(acc_sum_top_10_len), | |
acc_sum_prob, | |
)) | |
st.text('%s & %.1f\\%% & %s & %s & %s & %s & %s \\\\' % (model_names[prefix], saved_ratio, '{:,}'.format(keys_with_auto), '{:,}'.format(acc_sum_pick), '{:,}'.format(acc_sum_outscope_len), '{:,}'.format(acc_sum_hit_1), '{:,}'.format(keys_without_auto))) | |
# st.text('* acc_token_count =%s --> (avg) hits: %.2f, keys: %.2f, prob: %.2f, outscope: %.2f' % ( | |
# acc_token_count, | |
# float(acc_sum_hit_1)/acc_token_count, | |
# float(acc_sum_pick)/acc_token_count, | |
# float(acc_sum_prob)/acc_token_count, | |
# float(acc_sum_outscope_count)/acc_token_count)) | |
def calc_height(s): | |
return int(len(s) / 10 * 3) + 30 | |
def remove_end_of_claim_text(gen_text): | |
tag = '<|end_of_claim|>' | |
pos = gen_text.find(tag) | |
if pos > 0: | |
gen_text = gen_text[:pos+len(tag)] | |
return gen_text | |
tag = '<|endoftext|>' | |
pos = gen_text.find(tag) | |
if pos > 0: | |
gen_text = gen_text[:pos+len(tag)] | |
return gen_text | |
def dump_pos_data(prefix_lst, select_lst): | |
#statistics = [[0]*3]*2048 | |
statistics = [] | |
for i in range(2048): | |
statistics.append([0,0,0]) | |
#results.append(['model', 'pos', 'key']) | |
#results.append(['model', 'patent_claim', 'pos', 'top-1', 'top-2~10', 'out of top 10']) | |
max_len = -1 | |
for prefix in prefix_lst: | |
model_name = model_names[prefix].replace('PatentGPT-J-', '') | |
if model_name != '456M': | |
continue | |
#total = {} | |
for i, num in enumerate(select_lst): | |
base_fn = '%s_%s_forward.json' % (prefix, num) | |
full_fn = os.path.join(folder, base_fn) | |
if os.path.exists(full_fn) == False: | |
continue | |
with open(full_fn) as f: | |
result = json.loads(f.read()) | |
print("Loaded: %s" % full_fn) | |
lst = result['output'] | |
for j, tk in enumerate(lst[:-1]): | |
max_len = max(j, max_len) | |
next_top_seq = int(tk['actual_next_token_top_seq']) | |
#next_top_prob = float(tk['actual_next_token_top_prob']) | |
top_1 = top_2_to_10 = out_of_scope = 0 | |
if next_top_seq == 0: | |
top_1 = 1 | |
tag = 'top-1' | |
statistics[j][0] += 1 | |
elif next_top_seq > 0 and next_top_seq < 10: | |
top_2_to_10 = 1 | |
tag = 'top-2~10' | |
statistics[j][1] += 1 | |
else: | |
out_of_scope = 1 | |
tag = 'out-of-scope' | |
statistics[j][2] += 1 | |
#total[tag] = total.get(tag, 0) + 1 | |
#results.append([model_name, str(i+1), tag]) | |
#results.append([model_name, str(i+1), tag]) | |
#results.append([model_name, num, str(i+1), tag]) | |
#results.append([model_name, num, i+1, top_1, top_2_to_10, out_of_scope]) | |
#pdb.set_trace() | |
#pdb.set_trace() | |
dump_file = 'dump4.txt' | |
#pdb.set_trace() | |
with open(dump_file, 'w') as f: | |
for i in range(max_len+1): | |
f.write('%s, top-1, %s\n' % (i+1, statistics[i][0])) | |
f.write('%s, top-2~10, %s\n' % (i+1, statistics[i][1])) | |
f.write('%s, out_of_scope, %s\n' % (i+1, statistics[i][2])) | |
# f.write('%s\n' % ', '.join([str(i+1)] + [ str(v) for v in statistics[i] ] )) | |
print('saved: %s' % dump_file) | |
# dump_file = 'dump2.txt' | |
# with open(dump_file, 'w') as f: | |
# for line in results: | |
# f.write('%s\n' % ', '.join(line)) | |
# print('saved: %s' % dump_file) | |
def calc_sentence_similarity(sent_model, sent1, sent2): | |
rewards = [] | |
embedding1 = sent_model.encode(sent1, convert_to_tensor=True) | |
embedding2 = sent_model.encode(sent2, convert_to_tensor=True) | |
similarity = util.cos_sim(embedding1, embedding2)[0][0] | |
#pdb.set_trace() | |
return similarity | |
sent_model = 'patent/st-aipd-nlp-g' | |
print('loading SentenceTransformer: %s' % sent_model) | |
sent_aipd = SentenceTransformer(sent_model) | |
def load_data(demo): | |
fn = 'ppo_output/ppo_open_llama_3b_v2.run.12.delta.txt' | |
with open(fn, 'r') as f: | |
rows = json.load(f) | |
if demo == 'demo1': | |
new_rows = [ row for row in rows if row['instruction'].find('child') > 0 ] | |
elif demo == 'demo2': | |
new_rows = [ row for row in rows if row['instruction'].find('parent') > 0 ] | |
else: | |
new_rows = [] | |
return new_rows | |
container_style = """ | |
<style> | |
.container1 { | |
border: 2px solid #3498db; | |
border-radius: 8px; | |
padding: 10px; | |
margin-bottom: 20px; | |
} | |
.container2 { | |
/* Add styles for Container 2 if needed */ | |
} | |
</style> | |
""" | |
def main(): | |
st.set_page_config( # Alternate names: setup_page, page, layout | |
layout="wide", # Can be "centered" or "wide". In the future also "dashboard", etc. | |
initial_sidebar_state="auto", # Can be "auto", "expanded", "collapsed" | |
page_title="Demo 1", # String or None. Strings get appended with "• Streamlit". | |
page_icon=None, # String, anything supported by st.image, or None. | |
) | |
opt_1 = 'parent --> child' | |
opt_2 = 'child --> parent' | |
options = [opt_1, opt_2] | |
rows = None | |
pos = None | |
patent_num = '' | |
claim_num1 = '' | |
claim_num2 = '' | |
instruction= '' | |
input_text = '' | |
output_text = '' | |
response = '' | |
query = '' | |
score_lst_1 = 0 | |
score_lst_2 = 0 | |
rewards = '' | |
with st.container(): | |
col1, col2, col3 = st.columns([3, 5, 2]) | |
with col1: | |
selected_option = st.selectbox('Select a demo:', options) | |
if selected_option == opt_1: | |
rows = load_data('demo1') | |
msg = 'novelty = sim1-sim2' | |
#msg = 'delta of similarities<br>(sim1-sim2)' | |
c1_tag = 'pc' | |
c2_tag = 'cc1' | |
c3_tag = 'cc2' | |
elif selected_option == opt_2: | |
rows = load_data('demo2') | |
msg = 'similarity of<br>(pc1) and (pc2)' | |
c1_tag = 'cc' | |
c2_tag = 'pc1' | |
c3_tag = 'pc2' | |
else: | |
st.text('Unknown option') | |
return | |
#rows = rows[:5000] # for debugging | |
with col2: | |
pos = st.slider("", 1, len(rows)) | |
#pos = st.slider("Degree of novelty (Generated v. Actual)", 1, len(rows)) | |
for i in range(pos): | |
#prompt = '%s' % rows[i] | |
#pdb.set_trace() | |
patent_num = rows[i]['patent_num'] | |
claim_num1 = rows[i]['claim_num1'] | |
claim_num2 = rows[i]['claim_num2'] | |
instruction= rows[i]['instruction'] | |
input_text = rows[i]['input'] | |
output_text = rows[i]['output'] | |
response = rows[i]['response'] | |
query = rows[i]['query'] | |
score_lst_1 = rows[i]['score_lst_1'] | |
score_lst_2 = rows[i]['score_lst_2'] | |
delta = rows[i]['delta'] | |
rewards = rows[i]['rewards'] | |
with col3: | |
#v = round(float(score_lst_1)-float(score_lst_2), 4) | |
#v = delta #round(delta,10) | |
st.markdown("<center><h7>%s<br>%s</h7></center>" % (msg, delta), unsafe_allow_html=True) | |
# style='text-align: center; color: black;' | |
# selectbox_placeholder = st.empty() | |
# selected_option = selectbox_placeholder.selectbox('Select a demo:', options) | |
# container1 = st.container() | |
# with st.container(): | |
# col1, col2 = st.columns(2) | |
# with col1: | |
# st.write('Caption for first chart') | |
# with col2: | |
# st.line_chart((0,1), height=100) | |
# with st.container(): | |
# col1, col2 = st.columns(2) | |
# with col1: | |
# st.write('Caption for second chart') | |
# with col2: | |
# st.line_chart((1,0), height=100) | |
#st.write('patent_num:', patent_num) | |
# st.write('claim_num1:', claim_num1) | |
# st.write('claim_num2:', claim_num2) | |
st.write('(instruction) ', instruction) | |
with st.container(): | |
with st.container(border=True): | |
st.write('(%s) [ %s ]\n%s' % (c1_tag, patent_num, input_text)) | |
#st.write('input:' % patent_num) | |
#st.write('input:\n', input_text) | |
#container1.markdown("<div class='container1'>", unsafe_allow_html=True) | |
col1, col2 = st.columns(2) | |
with col1: | |
with st.container(border=True): | |
st.write('(%s) (actual)' % c2_tag) | |
st.write(output_text) | |
with col2: | |
with st.container(border=True): | |
st.write('(%s) (generated)' % c3_tag) | |
st.write(response) | |
col1, col2 = st.columns(2) | |
with col1: | |
with st.container(border=True): | |
st.write('(sim1) similarity between %s and %s+%s: %s' % (c1_tag, c1_tag, c2_tag, str(score_lst_1))) | |
with col2: | |
with st.container(border=True): | |
st.write('(sim2) similarity between %s and %s+%s: %s' % (c1_tag, c1_tag, c3_tag, str(score_lst_2))) | |
#container1.markdown("</div>", unsafe_allow_html=True) | |
# st.write("In Container 1") | |
# table_name = st.radio("Please Select Table", list_of_tables) | |
# st.write('output:') | |
# st.write(output_text) | |
# st.write('response:') | |
# st.write(response) | |
#st.write('query:', query) | |
# st.write('score_lst_1:', score_lst_1) | |
# st.write('score_lst_2:', score_lst_2) | |
# st.write('rewards:', rewards) | |
# st.text('hello') | |
# dict_keys(['patent_num', 'claim_num1', 'claim_num2', 'instruction', 'input', 'output', 'query', 'response', 'score_lst_1', 'score_lst_2', 'rewards']) | |
# st.subheader("Inspecting PatentGPT-J Model Evaluation") | |
# num_set = set() | |
# fn_lst = glob.glob(os.path.join(folder, '*')) | |
# for i, fn in enumerate(fn_lst): | |
# for prefix in prefix_lst: | |
# v = re.search('(.*?)%s\_(\d+\_\d+)\_(.*?)' % prefix, fn) | |
# if v is None: | |
# v = re.search('(.*?)%s\_(\w+\_\d+)\_(.*?)' % prefix, fn) | |
# #pdb.set_trace() | |
# if v is None: | |
# #pdb.set_trace() | |
# continue | |
# v = v.group(2) | |
# if first_claim_only: | |
# if v.endswith('_1'): | |
# num_set.add(v) | |
# else: | |
# num_set.add(v) | |
# num_lst = list(num_set) | |
# num_lst.sort() | |
# select_lst = [] | |
# for i, num in enumerate(num_lst): | |
# all_existed = True | |
# for prefix in prefix_lst: | |
# fn = os.path.join(folder, '%s_%s_forward.json' % (prefix, num)) | |
# if os.path.exists(fn) == False: | |
# all_existed = False | |
# break | |
# if all_existed: | |
# select_lst.append(num) | |
# select_lst.sort() | |
# if len(select_lst) == 0: | |
# st.text('select_lst is empty') | |
# return | |
# if dump_pos_data_for_reporting: | |
# dump_pos_data(prefix_lst, select_lst) | |
# st.text('Dump data: done') | |
# return | |
# # debug | |
# #base_fn = 'my_gptj_6b_tpu_size_8_11212952_1_forward.json' | |
# #base_fn = 'pgj_small_text-1_1_forward.json' | |
# #_ = show_avg(base_fn) | |
# if enable_summary_button: | |
# if st.button('Show Summary'): | |
# st.text('len(select_lst) = %s' % len(select_lst)) | |
# show_overall_summary(prefix_lst, select_lst) | |
# # if 'num' not in st.session_state: | |
# # num = random.choice(select_lst) | |
# # st.session_state['num'] = num | |
# # set_state('num', num) | |
# # def set_state(k, v): | |
# # if k not in st.session_state: | |
# # st.session_state[ k ] = v | |
# show_patent_lst = [ s.replace('_', ' (claim ') + ')' for s in select_lst] | |
# selected = st.selectbox("Choose a patent claim", show_patent_lst) | |
# num = selected.replace(')', '').replace(' (claim ', '_') | |
# if st.button('Random pick'): | |
# num = random.choice(select_lst) | |
# st.text('Selected: %s' % num) | |
# st.session_state['num'] = num | |
# avgs = [] | |
# for prefix in prefix_lst: | |
# base_fn = '%s_%s_forward.json' % (prefix, num) | |
# one_avg = show_avg(base_fn, model_names[prefix], num) | |
# if one_avg is not None: | |
# avgs.append(one_avg) | |
# # debug | |
# #pdb.set_trace() | |
# #return | |
# # | |
# data_lst = [] | |
# for i in range(len(avgs[0])): | |
# row = [] | |
# for j, prefix in enumerate(prefix_lst): | |
# row.append(avgs[j][i]) | |
# data_lst.append(row) | |
# df = pd.DataFrame(data_lst, index=['1','2-10','out of top 10']) | |
# #df = pd.DataFrame(data_lst, index=['1','2-10','11-100','101~']) | |
# # ], index=['(a) 1','(b) 2-10','(c) 11-100','(d) 101~']) | |
# # [avgs[0][0], avgs[1][0], avgs[2][0]], | |
# # [avgs[0][1], avgs[1][1], avgs[2][1]], | |
# # [avgs[0][2], avgs[1][2], avgs[2][2]], | |
# # [avgs[0][3], avgs[1][3], avgs[2][3]], | |
# #df = pd.DataFrame([[1,2],[3,1]], columns=['a', 'b']) | |
# #df = pd.DataFrame([ | |
# # [sum1[0], sum1[1], sum1[2], sum1[3]], | |
# # [sum2[0], sum2[1], sum2[2], sum2[3]], | |
# # [sum3[0], sum3[1], sum3[2], sum3[3]], | |
# # ]) #, index=['(a) 1','(b) 2-10','(c) 11-100','(d) 101~']) | |
# #df = pd.DataFrame.from_dict(sum_all, orient='index') | |
# #st.line_chart(df) | |
# #data_canada = px.data.gapminder().query("country == 'Canada'") | |
# #fig = px.bar(data_canada, x='year', y='pop') | |
# if st.button('Show chart'): | |
# fig = px.bar(df, barmode='group') | |
# st.plotly_chart(fig, use_container_width=True) | |
# #fig.show() | |
# #st.area_chart(df) | |
# #st.bar_chart(df) | |
# # | |
# base_fn = '%s_%s_forward.json' % (prefix_lst[ id_to_scroll ], st.session_state['num']) | |
# result, avg_pick, avg_prob, _, _, _, _, _, _, _, _ = calc_details(base_fn) | |
# recv = result['recv'] | |
# lst = result['output'] | |
# input_tokens = result['input'] | |
# # (Pdb) print(token_pos_lst[0].keys()) | |
# #dict_keys(['idx', 'gen_text', 'actual_next_token_text', 'actual_next_token_top_seq', 'actual_next_token_top_prob', 'top_n_lst']) | |
# height = calc_height(recv['context']) | |
# st.text_area('context:', recv['context'], height=height) | |
# pos = st.slider("Token position", 0, len(lst)) | |
# prompt = '' | |
# for i in range(pos+1): | |
# prompt += input_tokens[i]['text'] | |
# height = calc_height(prompt) | |
# st.text_area('prompt:', prompt, height=height) | |
# ch = handle_char_return(lst[pos]['actual_next_token_text']) | |
# st.text('actual_next_token_text: %s --> pick seq: %s (prob: %.2f)' % (ch, int(lst[pos]['actual_next_token_top_seq'])+1, | |
# float(lst[pos]['actual_next_token_top_prob']))) | |
# st.text('top 10 tokens:') | |
# for i, v in enumerate(lst[pos]['top_n_lst']): | |
# ch = handle_char_return(v['top_n_text']) | |
# st.text('[ %s ][ %s ]( %.2f )' % (i+1, ch, float(v['top_n_prob']))) | |
# gen_text = lst[pos]['gen_text'] | |
# gen_text = remove_end_of_claim_text(gen_text) | |
# st.text('gen_text: %s' % gen_text) | |
# #st.text("done. ok.") | |
# #st.text('result:\n%s' % result) | |
if __name__ == "__main__": | |
main() | |
#def load_data_pre(demo): | |
# fn = 'ppo_output/ppo_open_llama_3b_v2.run.12.keep.txt' | |
# with open(fn, 'r') as f: | |
# rows = json.load(f) | |
# new_rows = [] | |
# for i, row in enumerate(rows): | |
# item1 = {} | |
# item2 = {} | |
# if demo == 'demo1': | |
# item1[ 'delta' ] = abs(row['score_lst_1'][0] - row['score_lst_2'][0]) | |
# item2[ 'delta' ] = abs(row['score_lst_1'][1] - row['score_lst_2'][1]) | |
# elif demo == 'demo2': | |
# #pdb.set_trace() | |
# item1[ 'delta' ] = calc_sentence_similarity(sent_aipd, row['output'][0], row['response'][0]) | |
# item2[ 'delta' ] = calc_sentence_similarity(sent_aipd, row['output'][1], row['response'][1]) | |
# print('[ %s ] detla = %s' % (i, item1[ 'delta' ])) | |
# for k in row.keys(): | |
# item1[ k ] = row[ k ][0] | |
# item2[ k ] = row[ k ][1] | |
# if demo == 'demo1': | |
# if item1['instruction'].find('child') > 0: | |
# new_rows.append(item1) | |
# if item2['instruction'].find('child') > 0: | |
# new_rows.append(item2) | |
# elif demo == 'demo2': | |
# if item1['instruction'].find('parent') > 0: | |
# new_rows.append(item1) | |
# if item2['instruction'].find('parent') > 0: | |
# new_rows.append(item2) | |
# # Assuming new_rows is your list of dictionaries | |
# sorted_rows = sorted(new_rows, key=lambda x: x['delta']) | |
# # kv = {} | |
# # for i, row in enumerate(new_rows): | |
# # if diff > 0.0001: | |
# # kv[i] = round(diff, 4) | |
# # sorted_rows = [] | |
# # sorted_kv = sorted(kv.items(), key=lambda x:x[1]) | |
# # for k, v in sorted_kv: | |
# # sorted_rows.append(new_rows[k]) | |
# #pdb.set_trace() | |
# return sorted_rows |