tldr
Browse files- app.py +23 -1
- autoqa_chain.py +15 -0
- tldr_chain.py +26 -0
app.py
CHANGED
|
@@ -15,7 +15,7 @@ from chat_chains import (
|
|
| 15 |
parse_context_and_question,
|
| 16 |
ai_response_format,
|
| 17 |
)
|
| 18 |
-
from
|
| 19 |
from chain_of_density import chain_of_density_chain
|
| 20 |
from insights_bullet_chain import insights_bullet_chain
|
| 21 |
from insights_mind_map_chain import insights_mind_map_chain
|
|
@@ -23,6 +23,7 @@ from synopsis_chain import synopsis_chain
|
|
| 23 |
from custom_exceptions import InvalidArgumentError, InvalidCommandError
|
| 24 |
from openai_configuration import openai_parser
|
| 25 |
from summary_chain import summary_chain
|
|
|
|
| 26 |
|
| 27 |
st.set_page_config(layout="wide")
|
| 28 |
|
|
@@ -48,6 +49,7 @@ Here's a quick guide to getting started with me:
|
|
| 48 |
| `/paper-synopsis <list of snippet ids>` | Generate a synopsis of the paper. |
|
| 49 |
| `/deep-dive [<list of snippet ids>] <query>` | Query me with a specific context. |
|
| 50 |
| `/summarise-section [<list of snippet ids>] <section name>` | Summarize a specific section of the paper. |
|
|
|
|
| 51 |
|
| 52 |
|
| 53 |
<br>
|
|
@@ -249,6 +251,25 @@ def synopsis_wrapper(inputs):
|
|
| 249 |
return (summary, "identity")
|
| 250 |
|
| 251 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 252 |
def insights_bullet_wrapper(inputs):
|
| 253 |
if inputs == []:
|
| 254 |
raise InvalidArgumentError("Please provide snippet ids")
|
|
@@ -381,6 +402,7 @@ if __name__ == "__main__":
|
|
| 381 |
("/insight-mind-map", list, insights_mind_map_wrapper),
|
| 382 |
("/paper-synopsis", list, synopsis_wrapper),
|
| 383 |
("/summarise-section", str, summarise_wrapper),
|
|
|
|
| 384 |
]
|
| 385 |
command_center = CommandCenter(
|
| 386 |
default_input_type=str,
|
|
|
|
| 15 |
parse_context_and_question,
|
| 16 |
ai_response_format,
|
| 17 |
)
|
| 18 |
+
from autoqa_chain import auto_qa_chain
|
| 19 |
from chain_of_density import chain_of_density_chain
|
| 20 |
from insights_bullet_chain import insights_bullet_chain
|
| 21 |
from insights_mind_map_chain import insights_mind_map_chain
|
|
|
|
| 23 |
from custom_exceptions import InvalidArgumentError, InvalidCommandError
|
| 24 |
from openai_configuration import openai_parser
|
| 25 |
from summary_chain import summary_chain
|
| 26 |
+
from tldr_chain import tldr_chain
|
| 27 |
|
| 28 |
st.set_page_config(layout="wide")
|
| 29 |
|
|
|
|
| 49 |
| `/paper-synopsis <list of snippet ids>` | Generate a synopsis of the paper. |
|
| 50 |
| `/deep-dive [<list of snippet ids>] <query>` | Query me with a specific context. |
|
| 51 |
| `/summarise-section [<list of snippet ids>] <section name>` | Summarize a specific section of the paper. |
|
| 52 |
+
| `/tldr <list of snippet ids>` | Generate a tldr summary of the paper. |
|
| 53 |
|
| 54 |
|
| 55 |
<br>
|
|
|
|
| 251 |
return (summary, "identity")
|
| 252 |
|
| 253 |
|
| 254 |
+
def tldr_wrapper(inputs):
|
| 255 |
+
if inputs == []:
|
| 256 |
+
raise InvalidArgumentError("Please provide snippet ids")
|
| 257 |
+
document = "\n\n".join([st.session_state.documents[c].page_content for c in inputs])
|
| 258 |
+
llm = ChatOpenAI(model=st.session_state.model, temperature=0)
|
| 259 |
+
with get_openai_callback() as cb:
|
| 260 |
+
summary = tldr_chain(llm).invoke({"paper": document})
|
| 261 |
+
stats = cb
|
| 262 |
+
st.session_state.messages.append(("/tldr", summary, "identity"))
|
| 263 |
+
st.session_state.costing.append(
|
| 264 |
+
{
|
| 265 |
+
"prompt tokens": stats.prompt_tokens,
|
| 266 |
+
"completion tokens": stats.completion_tokens,
|
| 267 |
+
"cost": stats.total_cost,
|
| 268 |
+
}
|
| 269 |
+
)
|
| 270 |
+
return (summary, "identity")
|
| 271 |
+
|
| 272 |
+
|
| 273 |
def insights_bullet_wrapper(inputs):
|
| 274 |
if inputs == []:
|
| 275 |
raise InvalidArgumentError("Please provide snippet ids")
|
|
|
|
| 402 |
("/insight-mind-map", list, insights_mind_map_wrapper),
|
| 403 |
("/paper-synopsis", list, synopsis_wrapper),
|
| 404 |
("/summarise-section", str, summarise_wrapper),
|
| 405 |
+
("/tldr", list, tldr_wrapper),
|
| 406 |
]
|
| 407 |
command_center = CommandCenter(
|
| 408 |
default_input_type=str,
|
autoqa_chain.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from langchain_core.output_parsers import JsonOutputParser
|
| 2 |
+
from langchain_core.prompts import PromptTemplate
|
| 3 |
+
|
| 4 |
+
qa_prompt_template = """
|
| 5 |
+
Create a mind map of questions (based on the given abstract) that will help understand a machine learning research paper.
|
| 6 |
+
Ensure that the outline is structured in the following JSON array for clarity, such that each section should have two keys: "section_name" and "questions"
|
| 7 |
+
|
| 8 |
+
Here is the research paper abstract: ####{paper}####
|
| 9 |
+
"""
|
| 10 |
+
|
| 11 |
+
qa_prompt = PromptTemplate(
|
| 12 |
+
template=qa_prompt_template,
|
| 13 |
+
input_variables=["paper"],
|
| 14 |
+
)
|
| 15 |
+
auto_qa_chain = lambda model: qa_prompt | model | JsonOutputParser()
|
tldr_chain.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from langchain_core.prompts import PromptTemplate
|
| 2 |
+
from langchain_core.output_parsers import StrOutputParser
|
| 3 |
+
|
| 4 |
+
tldr_prompt_template = """
|
| 5 |
+
Create a mind map of the given research paper along the given lines:
|
| 6 |
+
1. Background: A brief overview of what's being studied in what context
|
| 7 |
+
2. Justification: Why the researchers conducted the study
|
| 8 |
+
3. Method: How the researchers arrived at the result
|
| 9 |
+
4. Major Findings: The main findings of the study
|
| 10 |
+
5. Key Results: More details about the results of the study
|
| 11 |
+
6. Conclusion: Significance of the findings and what they mean for future research
|
| 12 |
+
|
| 13 |
+
The above sections may differ from paper to paper, hence you may need to adjust the structure accordingly by dropping / merging one or more sections.
|
| 14 |
+
|
| 15 |
+
Here is the research paper abstract: ####{paper}####
|
| 16 |
+
|
| 17 |
+
Ensure that the outline is structured in Markdown format for clarity, facilitating its integration into documents or presentations.
|
| 18 |
+
"""
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
tldr_output_parser = StrOutputParser()
|
| 22 |
+
tldr_prompt = PromptTemplate(
|
| 23 |
+
template=tldr_prompt_template,
|
| 24 |
+
input_variables=["paper"],
|
| 25 |
+
)
|
| 26 |
+
tldr_chain = lambda model: tldr_prompt | model | tldr_output_parser
|