Spaces:
Running
Running
# from utils.references import References | |
# from utils.prompts import generate_paper_prompts, generate_keywords_prompts, generate_experiments_prompts | |
# from utils.gpt_interaction import get_responses, extract_responses, extract_keywords, extract_json | |
# from utils.tex_processing import replace_title | |
# from utils.figures import generate_random_figures | |
# import datetime | |
# import shutil | |
# import time | |
# import logging | |
# import os | |
# | |
# TOTAL_TOKENS = 0 | |
# TOTAL_PROMPTS_TOKENS = 0 | |
# TOTAL_COMPLETION_TOKENS = 0 | |
# | |
# def make_archive(source, destination): | |
# base = os.path.basename(destination) | |
# name = base.split('.')[0] | |
# format = base.split('.')[1] | |
# archive_from = os.path.dirname(source) | |
# archive_to = os.path.basename(source.strip(os.sep)) | |
# shutil.make_archive(name, format, archive_from, archive_to) | |
# shutil.move('%s.%s'%(name,format), destination) | |
# return destination | |
# | |
# | |
# def log_usage(usage, generating_target, print_out=True): | |
# global TOTAL_TOKENS | |
# global TOTAL_PROMPTS_TOKENS | |
# global TOTAL_COMPLETION_TOKENS | |
# | |
# prompts_tokens = usage['prompt_tokens'] | |
# completion_tokens = usage['completion_tokens'] | |
# total_tokens = usage['total_tokens'] | |
# | |
# TOTAL_TOKENS += total_tokens | |
# TOTAL_PROMPTS_TOKENS += prompts_tokens | |
# TOTAL_COMPLETION_TOKENS += completion_tokens | |
# | |
# message = f"For generating {generating_target}, {total_tokens} tokens have been used ({prompts_tokens} for prompts; {completion_tokens} for completion). " \ | |
# f"{TOTAL_TOKENS} tokens have been used in total." | |
# if print_out: | |
# print(message) | |
# logging.info(message) | |
# | |
# def pipeline(paper, section, save_to_path, model): | |
# """ | |
# The main pipeline of generating a section. | |
# 1. Generate prompts. | |
# 2. Get responses from AI assistant. | |
# 3. Extract the section text. | |
# 4. Save the text to .tex file. | |
# :return usage | |
# """ | |
# print(f"Generating {section}...") | |
# prompts = generate_paper_prompts(paper, section) | |
# gpt_response, usage = get_responses(prompts, model) | |
# output = extract_responses(gpt_response) | |
# paper["body"][section] = output | |
# tex_file = save_to_path + f"{section}.tex" | |
# if section == "abstract": | |
# with open(tex_file, "w") as f: | |
# f.write(r"\begin{abstract}") | |
# with open(tex_file, "a") as f: | |
# f.write(output) | |
# with open(tex_file, "a") as f: | |
# f.write(r"\end{abstract}") | |
# else: | |
# with open(tex_file, "w") as f: | |
# f.write(f"\section{{{section}}}\n") | |
# with open(tex_file, "a") as f: | |
# f.write(output) | |
# time.sleep(5) | |
# print(f"{section} has been generated. Saved to {tex_file}.") | |
# return usage | |
# | |
# | |
# | |
# def generate_draft(title, description="", template="ICLR2022", model="gpt-4"): | |
# """ | |
# The main pipeline of generating a paper. | |
# 1. Copy everything to the output folder. | |
# 2. Create references. | |
# 3. Generate each section using `pipeline`. | |
# 4. Post-processing: check common errors, fill the title, ... | |
# """ | |
# paper = {} | |
# paper_body = {} | |
# | |
# # Create a copy in the outputs folder. | |
# # todo: use copy_templates function instead. | |
# now = datetime.datetime.now() | |
# target_name = now.strftime("outputs_%Y%m%d_%H%M%S") | |
# source_folder = f"latex_templates/{template}" | |
# destination_folder = f"outputs/{target_name}" | |
# shutil.copytree(source_folder, destination_folder) | |
# | |
# bibtex_path = destination_folder + "/ref.bib" | |
# save_to_path = destination_folder +"/" | |
# replace_title(save_to_path, title) | |
# logging.basicConfig( level=logging.INFO, filename=save_to_path+"generation.log") | |
# | |
# # Generate keywords and references | |
# print("Initialize the paper information ...") | |
# prompts = generate_keywords_prompts(title, description) | |
# gpt_response, usage = get_responses(prompts, model) | |
# keywords = extract_keywords(gpt_response) | |
# log_usage(usage, "keywords") | |
# ref = References(load_papers = "") #todo: allow users to upload bibfile. | |
# ref.collect_papers(keywords, method="arxiv") #todo: add more methods to find related papers | |
# all_paper_ids = ref.to_bibtex(bibtex_path) #todo: this will used to check if all citations are in this list | |
# | |
# print(f"The paper information has been initialized. References are saved to {bibtex_path}.") | |
# | |
# paper["title"] = title | |
# paper["description"] = description | |
# paper["references"] = ref.to_prompts() #todo: see if this prompts can be compressed. | |
# paper["body"] = paper_body | |
# paper["bibtex"] = bibtex_path | |
# | |
# print("Generating figures ...") | |
# prompts = generate_experiments_prompts(paper) | |
# gpt_response, usage = get_responses(prompts, model) | |
# list_of_methods = list(extract_json(gpt_response)) | |
# log_usage(usage, "figures") | |
# generate_random_figures(list_of_methods, save_to_path + "comparison.png") | |
# | |
# for section in ["introduction", "related works", "backgrounds", "methodology", "experiments", "conclusion", "abstract"]: | |
# try: | |
# usage = pipeline(paper, section, save_to_path, model=model) | |
# log_usage(usage, section) | |
# except Exception as e: | |
# print(f"Failed to generate {section} due to the error: {e}") | |
# print(f"The paper {title} has been generated. Saved to {save_to_path}.") | |
# return make_archive(destination_folder, "output.zip") | |
# | |
# if __name__ == "__main__": | |
# # title = "Training Adversarial Generative Neural Network with Adaptive Dropout Rate" | |
# title = "Playing Atari Game with Deep Reinforcement Learning" | |
# description = "" | |
# template = "ICLR2022" | |
# model = "gpt-4" | |
# # model = "gpt-3.5-turbo" | |
# | |
# generate_draft(title, description, template, model) | |