prasannahf commited on
Commit
42b1740
Β·
verified Β·
1 Parent(s): 564f8f0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -46
app.py CHANGED
@@ -13,18 +13,18 @@ load_dotenv()
13
  GROQ_API_KEY = os.getenv("GROQ_API_KEY")
14
  LANGSMITH_API_KEY = os.getenv("LANGSMITH_API_KEY")
15
 
16
- # βœ… Set API keys as environment variables
17
  os.environ["GROQ_API_KEY"] = GROQ_API_KEY
18
  os.environ["LANGCHAIN_TRACING_V2"] = "true"
19
  os.environ["LANGCHAIN_API_KEY"] = LANGSMITH_API_KEY
20
 
21
- # βœ… Initialize Open-Source LLM
22
  llm = ChatGroq(groq_api_key=GROQ_API_KEY, model_name="llama3-8b-8192")
23
 
24
  # βœ… Define the LegalState Model
25
  class LegalState(BaseModel):
26
  original_text: str
27
  tone: str
 
28
  rewritten_text: str = None
29
  summary: str = None
30
  key_clauses: str = None
@@ -44,87 +44,103 @@ def generate_response(prompt):
44
  except Exception as e:
45
  return f"❌ Error: {str(e)}"
46
 
47
- # βœ… Define Worker Functions with LangSmith Debugging
48
  @traceable(name="Rewrite Legal Text")
49
  def rewrite_text(state: LegalState):
50
- prompt = f"""**Rewrite this legal text in '{state.tone}' tone:**
51
 
52
  {state.original_text}"""
53
  return {"rewritten_text": generate_response(prompt)}
54
 
55
  @traceable(name="Summarize Legal Text")
56
  def summarize_text(state: LegalState):
57
- return {"summary": generate_response(f"**Summary:**\n\n{state.rewritten_text}")}
58
 
59
  @traceable(name="Extract Key Clauses")
60
  def extract_clauses(state: LegalState):
61
- return {"key_clauses": generate_response(f"**Key Clauses:**\n\n{state.rewritten_text}")}
62
 
63
  @traceable(name="Detect Risks in Document")
64
  def detect_risks(state: LegalState):
65
- return {"risk_analysis": generate_response(f"**Risk Analysis:**\n\n{state.rewritten_text}")}
66
 
67
  @traceable(name="Check Compliance")
68
  def check_compliance(state: LegalState):
69
- return {"compliance_report": generate_response(f"**Compliance Report:**\n\n{state.rewritten_text}")}
70
 
71
  @traceable(name="Suggest Contract Improvements")
72
  def suggest_improvements(state: LegalState):
73
- return {"contract_suggestions": generate_response(f"**Contract Improvement Suggestions:**\n\n{state.rewritten_text}")}
74
 
75
  @traceable(name="Generate Legal Arguments")
76
  def generate_arguments(state: LegalState):
77
- return {"legal_arguments": generate_response(f"**Legal Arguments:**\n\n{state.rewritten_text}")}
78
 
79
  @traceable(name="Format Legal Document")
80
  def format_document(state: LegalState):
81
- return {"formatted_text": generate_response(f"**Formatted Legal Document:**\n\n{state.rewritten_text}")}
82
 
83
  @traceable(name="Compare Original vs Rewritten")
84
  def compare_texts(state: LegalState):
85
- prompt = f"**Comparison:**\n\nOriginal: {state.original_text}\nRewritten: {state.rewritten_text}"
86
  return {"comparison_result": generate_response(prompt)}
87
 
88
- @traceable(name="Final Synthesis")
89
- def synthesizer(state: LegalState):
90
- final_output = f"""
91
- πŸ“œ **AI-Powered Legal Document Processing Report** πŸ“œ
92
-
93
- **πŸ”Ή Rewritten Legal Text:**\n{state.rewritten_text}
94
- **πŸ”Ή Summary:**\n{state.summary}
95
- **πŸ”Ή Key Clauses Identified:**\n{state.key_clauses}
96
- **πŸ”Ή Risk Analysis Report:**\n{state.risk_analysis}
97
- **πŸ”Ή Compliance Check Results:**\n{state.compliance_report}
98
- **πŸ”Ή Contract Improvement Suggestions:**\n{state.contract_suggestions}
99
- **πŸ”Ή AI-Generated Legal Arguments:**\n{state.legal_arguments}
100
- **πŸ”Ή Text Formatting Enhancements:**\n{state.formatted_text}
101
- **πŸ”Ή Differences from Original Text:**\n{state.comparison_result}
102
- **βœ… AI Final Verdict:**\nThis document has been reviewed and processed with key legal enhancements.
103
- """
104
- return {"final_report": final_output}
105
-
106
  # βœ… Build LangGraph Workflow
107
  builder = StateGraph(LegalState)
 
 
 
 
 
 
 
 
 
108
 
109
- # βœ… Add Nodes
110
- nodes = ["rewrite_text", "summarize_text", "extract_clauses", "detect_risks", "check_compliance", "suggest_improvements", "generate_arguments", "format_document", "compare_texts", "synthesizer"]
111
- for node in nodes:
112
- builder.add_node(node, globals()[node])
113
-
114
- # βœ… Define Execution Order
115
  builder.add_edge(START, "rewrite_text")
116
- for node in nodes[:-1]:
117
  builder.add_edge("rewrite_text", node)
118
- builder.add_edge(node, "synthesizer")
119
- builder.add_edge("synthesizer", END)
120
 
121
  graph = builder.compile()
122
 
123
  # βœ… Streamlit UI
124
- st.title("πŸ“œ AI-Powered Legal Text Processor")
125
- original_text = st.text_area("Enter Legal Text")
126
- tone = st.selectbox("Select Tone", ["Formal", "Empathetic", "Neutral", "Strength-Based"])
127
- if st.button("Rewrite Text"):
128
- result = graph.invoke({"original_text": original_text, "tone": tone})
129
- for key, value in result.items():
130
- st.markdown(f"**{key.replace('_', ' ').title()}:**\n{value}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  GROQ_API_KEY = os.getenv("GROQ_API_KEY")
14
  LANGSMITH_API_KEY = os.getenv("LANGSMITH_API_KEY")
15
 
 
16
  os.environ["GROQ_API_KEY"] = GROQ_API_KEY
17
  os.environ["LANGCHAIN_TRACING_V2"] = "true"
18
  os.environ["LANGCHAIN_API_KEY"] = LANGSMITH_API_KEY
19
 
20
+ # βœ… Initialize LLM (Using Groq Llama3-8B)
21
  llm = ChatGroq(groq_api_key=GROQ_API_KEY, model_name="llama3-8b-8192")
22
 
23
  # βœ… Define the LegalState Model
24
  class LegalState(BaseModel):
25
  original_text: str
26
  tone: str
27
+ complexity: int = 1
28
  rewritten_text: str = None
29
  summary: str = None
30
  key_clauses: str = None
 
44
  except Exception as e:
45
  return f"❌ Error: {str(e)}"
46
 
47
+ # βœ… Define Worker Functions
48
  @traceable(name="Rewrite Legal Text")
49
  def rewrite_text(state: LegalState):
50
+ prompt = f"""Rewrite this legal text in '{state.tone}' tone with complexity level {state.complexity}:
51
 
52
  {state.original_text}"""
53
  return {"rewritten_text": generate_response(prompt)}
54
 
55
  @traceable(name="Summarize Legal Text")
56
  def summarize_text(state: LegalState):
57
+ return {"summary": generate_response(f"Summarize this legal text:\n\n{state.rewritten_text}")}
58
 
59
  @traceable(name="Extract Key Clauses")
60
  def extract_clauses(state: LegalState):
61
+ return {"key_clauses": generate_response(f"Extract key legal clauses:\n\n{state.rewritten_text}")}
62
 
63
  @traceable(name="Detect Risks in Document")
64
  def detect_risks(state: LegalState):
65
+ return {"risk_analysis": generate_response(f"Analyze for risks:\n\n{state.rewritten_text}")}
66
 
67
  @traceable(name="Check Compliance")
68
  def check_compliance(state: LegalState):
69
+ return {"compliance_report": generate_response(f"Check legal compliance:\n\n{state.rewritten_text}")}
70
 
71
  @traceable(name="Suggest Contract Improvements")
72
  def suggest_improvements(state: LegalState):
73
+ return {"contract_suggestions": generate_response(f"Suggest improvements:\n\n{state.rewritten_text}")}
74
 
75
  @traceable(name="Generate Legal Arguments")
76
  def generate_arguments(state: LegalState):
77
+ return {"legal_arguments": generate_response(f"Generate legal arguments:\n\n{state.rewritten_text}")}
78
 
79
  @traceable(name="Format Legal Document")
80
  def format_document(state: LegalState):
81
+ return {"formatted_text": generate_response(f"Format this legal document:\n\n{state.rewritten_text}")}
82
 
83
  @traceable(name="Compare Original vs Rewritten")
84
  def compare_texts(state: LegalState):
85
+ prompt = f"Compare original vs rewritten:\n\nOriginal: {state.original_text}\nRewritten: {state.rewritten_text}"
86
  return {"comparison_result": generate_response(prompt)}
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  # βœ… Build LangGraph Workflow
89
  builder = StateGraph(LegalState)
90
+ builder.add_node("rewrite_text", rewrite_text)
91
+ builder.add_node("summarize_text", summarize_text)
92
+ builder.add_node("extract_clauses", extract_clauses)
93
+ builder.add_node("detect_risks", detect_risks)
94
+ builder.add_node("check_compliance", check_compliance)
95
+ builder.add_node("suggest_improvements", suggest_improvements)
96
+ builder.add_node("generate_arguments", generate_arguments)
97
+ builder.add_node("format_document", format_document)
98
+ builder.add_node("compare_texts", compare_texts)
99
 
 
 
 
 
 
 
100
  builder.add_edge(START, "rewrite_text")
101
+ for node in ["summarize_text", "extract_clauses", "detect_risks", "check_compliance", "suggest_improvements", "generate_arguments", "format_document", "compare_texts"]:
102
  builder.add_edge("rewrite_text", node)
 
 
103
 
104
  graph = builder.compile()
105
 
106
  # βœ… Streamlit UI
107
+ def main():
108
+ st.title("πŸ“œ AI-Powered Legal Text Processor")
109
+ st.write("A smart legal document assistant powered by LLMs.")
110
+
111
+ original_text = st.text_area("Enter Legal Text:")
112
+ tone = st.radio("Select Tone:", ["Formal", "Empathetic", "Neutral", "Strength-Based"])
113
+
114
+ if st.button("Process Text"):
115
+ input_data = {"original_text": original_text, "tone": tone, "complexity": 1}
116
+ result = graph.invoke(input_data)
117
+
118
+ st.subheader("πŸ”Ή Rewritten Text")
119
+ st.markdown(f"**{result['rewritten_text']}**")
120
+
121
+ st.subheader("πŸ“Œ Summary")
122
+ st.write(result['summary'])
123
+
124
+ st.subheader("πŸ“œ Key Clauses")
125
+ st.write(result['key_clauses'])
126
+
127
+ st.subheader("⚠️ Risk Analysis")
128
+ st.write(result['risk_analysis'])
129
+
130
+ st.subheader("βœ… Compliance Report")
131
+ st.write(result['compliance_report'])
132
+
133
+ st.subheader("πŸ’‘ Contract Suggestions")
134
+ st.write(result['contract_suggestions'])
135
+
136
+ st.subheader("βš–οΈ Legal Arguments")
137
+ st.write(result['legal_arguments'])
138
+
139
+ st.subheader("πŸ“ Formatted Legal Document")
140
+ st.write(result['formatted_text'])
141
+
142
+ st.subheader("πŸ” Comparison Result")
143
+ st.write(result['comparison_result'])
144
+
145
+ if __name__ == "__main__":
146
+ main()