|
import json |
|
import gradio as gr |
|
|
|
from langchain_legal import run_pipeline |
|
|
|
|
|
def load_json(path: str) -> dict: |
|
with open(path, 'r') as f: |
|
return json.load(f) |
|
|
|
|
|
def get_ai_final_summary(text_input): |
|
data = run_pipeline(text_input) |
|
return data, data.get('ai_final_summary', 'No answer yet') |
|
|
|
|
|
STEP_NAMES = [ |
|
'Initial assessment', |
|
'Applicable EU regs', |
|
'Applicable national regs', |
|
'Complementary assessment', |
|
] |
|
|
|
|
|
def get_final_summary(data): |
|
summ = data.get('ai_final_summary') |
|
if summ is None: |
|
return gr.Textbox('No answer yet', label='Final summary') |
|
return gr.Textbox(summ, label='Final summary', show_copy_button=True) |
|
|
|
|
|
def get_inital_assesment(data): |
|
initial = data.get('ai_first_5', None) |
|
if initial is None: |
|
return gr.Textbox('No llm answer yet', show_label=False) |
|
return gr.Textbox(initial, show_label=False, lines=25) |
|
|
|
|
|
def get_eu_regs_eval(data): |
|
eval = data.get('ai_eur_lex_eval', None) |
|
if eval is None: |
|
return gr.Textbox('No llm answer yet', show_label=False) |
|
return gr.Textbox(eval, show_label=False, lines=25) |
|
|
|
|
|
def get_eu_regs_sources(data): |
|
lookup = data.get('eur_lex_lookup', None) |
|
if lookup is None: |
|
return gr.Json({}, show_label=False) |
|
return gr.Json(lookup) |
|
|
|
|
|
def get_national_regs_eval(data): |
|
eval = data.get('ai_aus_eval', None) |
|
if eval is None: |
|
eval = data.get('ai_ger_eval') |
|
if eval is None: |
|
return gr.Textbox('No llm answer yet', show_label=False) |
|
return gr.Textbox(eval, show_label=False, lines=25) |
|
|
|
|
|
def get_national_regs_sources(data): |
|
lookup = data.get('aus_lookup', None) |
|
if lookup is None: |
|
lookup = data.get('ger_lookup') |
|
if lookup is None: |
|
return gr.Json({}, show_label=False) |
|
return gr.Json(lookup) |
|
|
|
|
|
def get_ai_challange(data): |
|
challange = data.get('ai_challange', None) |
|
if challange is None: |
|
return gr.Textbox('No llm answer yet', show_label=False) |
|
return gr.Textbox(challange, show_label=False, lines=50) |
|
|
|
|
|
def update_ui(data): |
|
return ( |
|
get_inital_assesment(data), |
|
get_eu_regs_eval(data), |
|
get_eu_regs_sources(data), |
|
get_national_regs_eval(data), |
|
get_national_regs_sources(data), |
|
get_ai_challange(data), |
|
) |
|
|
|
|
|
def main(): |
|
with gr.Blocks() as demo: |
|
data = gr.State({}) |
|
gr.Markdown("# Lawgarithm's LLM legal research tool") |
|
|
|
with gr.Column(): |
|
text_input = gr.Textbox( |
|
label='Case description', |
|
placeholder='Write your legal case here', |
|
) |
|
submit_btn = gr.Button('Submit') |
|
text_output = gr.Textbox(label='Final Summary') |
|
submit_btn.click( |
|
get_ai_final_summary, |
|
inputs=[text_input], |
|
outputs=[data, text_output], |
|
show_progress='full', |
|
queue=True, |
|
) |
|
|
|
with gr.Tabs(): |
|
with gr.Tab(STEP_NAMES[0]): |
|
inital_tab_text = gr.Textbox( |
|
placeholder='No answer yet', show_label=False |
|
) |
|
with gr.Tab(STEP_NAMES[1]): |
|
eu_regs_tab_text = gr.Textbox( |
|
placeholder='No answer yet', show_label=False |
|
) |
|
eu_regs_tab_sources = gr.Json({}) |
|
with gr.Tab(STEP_NAMES[2]): |
|
nat_regs_tab_text = gr.Textbox( |
|
placeholder='No answer yet', show_label=False |
|
) |
|
nat_regs_tab_sources = gr.Json({}) |
|
with gr.Tab(STEP_NAMES[3]): |
|
comp_assesment_tab_text = gr.Textbox( |
|
placeholder='No answer yet', show_label=False |
|
) |
|
data.change( |
|
update_ui, |
|
inputs=data, |
|
outputs=[ |
|
inital_tab_text, |
|
eu_regs_tab_text, |
|
eu_regs_tab_sources, |
|
nat_regs_tab_text, |
|
nat_regs_tab_sources, |
|
comp_assesment_tab_text, |
|
], |
|
) |
|
|
|
demo.launch() |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|