|
import json |
|
from utils.paper_retriever import RetrieverFactory |
|
from utils.llms_api import APIHelper |
|
from utils.header import ConfigReader |
|
from generator import IdeaGenerator |
|
|
|
class Backend(object): |
|
def __init__(self) -> None: |
|
CONFIG_PATH = "./configs/datasets.yaml" |
|
RETRIEVER_NAME = "SNKG" |
|
USE_INSPIRATION = True |
|
BRAINSTORM_MODE = "mode_c" |
|
|
|
self.config = ConfigReader.load(CONFIG_PATH) |
|
self.api_helper = APIHelper(self.config) |
|
self.retriever_factory = RetrieverFactory.get_retriever_factory().create_retriever( |
|
RETRIEVER_NAME, |
|
self.config, |
|
use_cocite=self.config.RETRIEVE.use_cocite, |
|
use_cluster_to_filter=self.config.RETRIEVE.use_cluster_to_filter, |
|
) |
|
self.idea_generator = IdeaGenerator(self.config, None) |
|
self.use_inspiration = USE_INSPIRATION |
|
self.brainstorm_mode = BRAINSTORM_MODE |
|
|
|
def background2brainstorm_callback(self, background, json_strs=None): |
|
if json_strs is not None: |
|
json_contents = json.loads(json_strs) |
|
return json_contents["brainstorm"] |
|
else: |
|
return self.api_helper.generate_brainstorm(background) |
|
|
|
def brainstorm2entities_callback(self, background, brainstorm, json_strs=None): |
|
if json_strs is not None: |
|
json_contents = json.loads(json_strs) |
|
entities_bg = json_contents["entities_bg"] |
|
entities_bs = json_contents["entities_bs"] |
|
entities_all = entities_bg + entities_bs |
|
|
|
return entities_all |
|
else: |
|
entities_bg = self.api_helper.generate_entity_list(background) |
|
entities_bs = self.api_helper.generate_entity_list(brainstorm, 10) |
|
entities_all = list(set(entities_bg) | set(entities_bs)) |
|
|
|
|
|
return entities_all |
|
|
|
def upload_json_callback(self, input): |
|
|
|
|
|
|
|
with open(input, "r") as json_file: |
|
contents = json_file.read() |
|
json_contents = json.loads(contents) |
|
return [json_contents["background"], contents] |
|
|
|
def entities2literature_callback(self, background, entities, json_strs=None): |
|
if json_strs is not None: |
|
json_contents = json.loads(json_strs) |
|
res = "" |
|
for i, p in enumerate(json_contents["related_paper"]): |
|
res += "%d. " % (i + 1) + str(p) |
|
if i < len(json_contents["related_paper"]) - 1: |
|
res += "\n" |
|
return res, res |
|
else: |
|
result = self.retriever_factory.retrieve(background, entities, need_evaluate=False, target_paper_id_list=[]) |
|
res = "" |
|
for i, p in enumerate(result["related_paper"]): |
|
res += "%d. " % (i + 1) + str(p["title"]) |
|
if i < len(result["related_paper"]) - 1: |
|
res += "\n" |
|
return res, result["related_paper"] |
|
|
|
def literature2initial_ideas_callback(self, background, retrieved_literature, json_strs=None): |
|
if json_strs is not None: |
|
json_contents = json.loads(json_strs) |
|
return json_contents["median"]["filtered_idea"] |
|
else: |
|
self.idea_generator.paper_list = retrieved_literature |
|
if self.use_inspiration: |
|
message_input, idea_modified, median = ( |
|
self.idea_generator.generate_by_inspiration( |
|
background, "new_idea", self.brainstorm_mode, False) |
|
) |
|
else: |
|
message_input, idea_modified, median = self.idea_generator.generate( |
|
background, "new_idea", self.brainstorm_mode, False |
|
) |
|
return median["filtered_idea"], idea_modified |
|
|
|
def initial2final_callback(self, initial_ideas, final_ideas, json_strs=None): |
|
if json_strs is not None: |
|
json_contents = json.loads(json_strs) |
|
return json_contents["median"]["modified_idea"] |
|
else: |
|
return final_ideas |
|
|
|
def get_demo_i(self, i): |
|
return ("The application scope of large-scale language models such as GPT-4 and LLaMA " |
|
"has rapidly expanded, demonstrating powerful capabilities in natural language processing " |
|
"and multimodal tasks. However, as the size and complexity of the models increase, understanding " |
|
"how they make decisions becomes increasingly difficult. Challenge: 1 The complexity of model " |
|
"interpretation: The billions of parameters and nonlinear decision paths within large-scale language " |
|
"models make it very difficult to track and interpret specific outputs. The existing interpretation " |
|
"methods usually only provide a local perspective and are difficult to systematize. 2. Transparency " |
|
"and Fairness: In specific scenarios, models may exhibit biased or discriminatory behavior. Ensuring " |
|
"the transparency of these models, reducing bias, and providing credible explanations is one of the current challenges.") |