from fastapi import FastAPI, Request import gradio as gr from slack_bolt import App from slack_bolt.adapter.fastapi import SlackRequestHandler import os import logging from download_judgements import fetch_case_names, fetch_judgements from interpret_judgement import interpret_judgement, interpret_by_case_title from simple_kv_store import SimpleKVStore from datetime import datetime from fastapi.staticfiles import StaticFiles from fastapi.responses import FileResponse #### Gradio io = gr.Interface( fn=interpret_by_case_title, inputs=[ gr.Dropdown( fetch_case_names(), label="Select a judement", info="Select a case from latest Supreme Court judgements" ), ], outputs=gr.Textbox(label="Judgement Summary"), title="Judgement Buzz", description="Judgement Buzz - Decoding complex Supreme Court rulings with ease.", allow_flagging= "never" ) ### Slack slack_app = App(token=os.environ.get("SLACK_BOT_TOKEN"), signing_secret=os.environ.get("SLACK_SIGNING_SECRET")) @slack_app.command("/get-case-digest") def get_case_digest(ack, respond, command): # Acknowledge command request ack() cases = fetch_judgements() blocks = [ { "type": "section", "text": {"type": "mrkdwn", "text": f"Here are 5 recent judgements we found for you."}, }, { "type": "section", "text": {"type": "mrkdwn", "text": f"Click button `Summarize` to get quick summary of the judgement"}, }, { "type": "divider" }, ] for case in cases[:5]: blocks = blocks + [ { "type": "section", "text": { "type": "mrkdwn", "text": f"*<{case['link']}| {case['title']}>*\n*Diary no*: {case['diary_no']}", }, "accessory": { "type": "button", "text": { "type": "plain_text", "text": "Summarize", "emoji": True }, "value": case['diary_no'], "action_id": "summarize_case" } }, { "type": "divider" }, ] # logging.info(blocks) resp = respond(text=f"hello", blocks=blocks, response_type='in_channel') @slack_app.action("summarize_case") def handle_summarize_action(ack, action, respond): ack() case = SimpleKVStore.get(action['value']) logging.info(f"Case retrieved {case}") today = datetime.today().strftime("%Y-%m-%d") summary = interpret_judgement(case['link'], case['diary_no'], case['title']) blocks = [ { "type": "header", "text": { "type": "plain_text", "text": f":newspaper: {case['title']} :newspaper:" } }, { "type": "context", "elements": [ { "text": f":calendar: *{today}*", "type": "mrkdwn" }, { "text": "|", "type": "mrkdwn" }, { "text": ":round_pushpin: New Delhi", "type": "mrkdwn" } ] }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": f"{summary}" } }, { "type": "divider" }, { "type": "context", "elements": [ { "type": "mrkdwn", "text": f":pushpin: Want to know more ? Click <{case['link']}|here> to access full court judgement." } ] } ] respond(blocks=blocks, response_type='in_channel', replace_original=False, delete_original=False) # main app_handler = SlackRequestHandler(slack_app) app = FastAPI() app = gr.mount_gradio_app(app, io, path='/gradio') @app.post("/slack/events") async def endpoint(req: Request): logging.info('recevied slack event') return await app_handler.handle(req) app.mount("/static", StaticFiles(directory="static", html=True), name="static") @app.get("/") async def root(): return FileResponse("static/index.html")