File size: 4,078 Bytes
f7d4608
d1ca23a
75115cd
f7d4608
 
22481bd
 
 
 
 
 
 
f7d4608
 
22481bd
 
 
 
 
f7d4608
d1ca23a
 
 
f7d4608
d1ca23a
 
 
 
 
f7d4608
d1ca23a
f7d4608
 
 
d1ca23a
 
 
f7d4608
 
 
22481bd
d1ca23a
f7d4608
 
d1ca23a
 
75115cd
d1ca23a
 
 
 
 
 
f7d4608
d1ca23a
 
75115cd
d1ca23a
 
 
 
 
f7d4608
 
 
d1ca23a
 
75115cd
d1ca23a
 
f7d4608
 
 
 
d1ca23a
 
 
 
 
f7d4608
d1ca23a
 
 
 
 
 
 
22481bd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import streamlit as st
import os
from application.services import gemini_api_service, streamlit_function
from google.genai.errors import ClientError
from application.utils import logger
from application.schemas.response_schema import (
    GEMINI_GHG_PARAMETERS, GEMINI_ENVIRONMENTAL_PARAMETERS_CSRD,
    GEMINI_ENVIRONMENT_PARAMETERS, GEMINI_SOCIAL_PARAMETERS,
    GEMINI_GOVERNANCE_PARAMETERS, GEMINI_MATERIALITY_PARAMETERS,
    GEMINI_NET_ZERO_INTERVENTION_PARAMETERS, FULL_RESPONSE_SCHEMA
)
import test

logger = logger.get_logger()
streamlit_function.config_homepage()
st.title("Sustainability Report Analyzer")
st.write("Upload your sustainability report PDF and generate insights using different models.")

MODEL = ["gemini-1.5-pro-latest", "gemini-2.0-flash", "gemini-1.5-flash", "gemini-2.5-exp"]

MODEL_1 = "gemini-1.5-pro-latest"
MODEL_2 = "gemini-2.0-flash"
MODEL_3 = "gemini-1.5-flash"

API_1 = "gemini"
API_2 = "gemini"
API_3 = "gemini"

pdf_file = streamlit_function.upload_file("pdf", label="Upload Sustainability Report PDF")

for key in [f"{MODEL_1}_result", f"{MODEL_2}_result", f"{MODEL_3}_result", "pdf_file"]:
    if key not in st.session_state:
        st.session_state[key] = None

if "excel_file" not in st.session_state:
    st.session_state["excel_file"] = None

if st.session_state.pdf_file:
    with st.container():
        col1, col2, col3 = st.columns([5, 5, 5], gap="small")
        file_name = st.session_state.pdf_file[0].name.removesuffix(".pdf")
        excel_file=None

        with col1:
            if st.button(f"Generate {MODEL_1} Response"):
                with st.spinner(f"Calling {MODEL_1}..."):
                    result = gemini_api_service.extract_emissions_data_as_json(API_1 , MODEL_1, st.session_state.pdf_file[0],FULL_RESPONSE_SCHEMA)
                    excel_file = streamlit_function.export_results_to_excel(result, MODEL_1, file_name)
                    st.session_state[f"{MODEL_1}_result"] = result
            if st.session_state[f"{MODEL_1}_result"]:
                st.write(f"Extracted Metrics by {MODEL_1}_result")
                st.json(st.session_state[f"{MODEL_1}_result"])

        with col2:
            if st.button(f"Generate {MODEL_2} Response"):
                with st.spinner(f"Calling {MODEL_2}..."):
                    result = gemini_api_service.extract_emissions_data_as_json(API_2, MODEL_2, st.session_state.pdf_file[0],FULL_RESPONSE_SCHEMA)
                    excel_file = streamlit_function.export_results_to_excel(result, MODEL_2, file_name)
                    st.session_state[f"{MODEL_2}_result"] = result
            if st.session_state[f"{MODEL_2}_result"]:
                st.write(f"Extracted Metrics by {MODEL_2}_result")
                st.json(st.session_state[f"{MODEL_2}_result"])

        with col3:
            try:
                if st.button(f"Generate {MODEL_3} Response"):
                    with st.spinner(f"Calling {MODEL_3}..."):
                        result = gemini_api_service.extract_emissions_data_as_json(API_3, MODEL_3, st.session_state.pdf_file[0], FULL_RESPONSE_SCHEMA)
                        excel_file = streamlit_function.export_results_to_excel(result, MODEL_3, file_name)
                        st.session_state[f"{MODEL_3}_result"] = result
            except ClientError as e:
                st.error(f"Gemini API Error: {e}")
                logger.error("Error Details:", e.message, e.response)

            if st.session_state[f"{MODEL_3}_result"]:
                st.write(f"Extracted Metrics by {MODEL_3}_result")
                st.json(st.session_state[f"{MODEL_3}_result"])

    file_path = f"data/{file_name}.xlsx"

    if os.path.exists(file_path):
        with open(file_path, "rb") as file:
            st.download_button(
                label="Download Excel File",
                data=file,
                file_name=f"{file_name}.xlsx",  
                mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            )