You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.6 KiB
118 lines
3.6 KiB
import os
|
|
from typing import List
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
from swarms.models import Anthropic, OpenAIChat
|
|
from swarms.prompts.accountant_swarm_prompts import (
|
|
DECISION_MAKING_PROMPT,
|
|
DOC_ANALYZER_AGENT_PROMPT,
|
|
FRAUD_DETECTION_AGENT_PROMPT,
|
|
SUMMARY_GENERATOR_AGENT_PROMPT,
|
|
)
|
|
from swarms.structs import Flow
|
|
from swarms.utils.pdf_to_text import pdf_to_text
|
|
|
|
# Environment variables
|
|
load_dotenv()
|
|
anthropic_api_key = os.getenv("ANTHROPIC_API_KEY")
|
|
openai_api_key = os.getenv("OPENAI_API_KEY")
|
|
|
|
|
|
# Base llms
|
|
llm1 = OpenAIChat(
|
|
openai_api_key=openai_api_key,
|
|
)
|
|
|
|
llm2 = Anthropic(
|
|
anthropic_api_key=anthropic_api_key,
|
|
)
|
|
|
|
|
|
# Agents
|
|
doc_analyzer_agent = Flow(
|
|
llm=llm1,
|
|
sop=DOC_ANALYZER_AGENT_PROMPT,
|
|
)
|
|
summary_generator_agent = Flow(
|
|
llm=llm2,
|
|
sop=SUMMARY_GENERATOR_AGENT_PROMPT,
|
|
)
|
|
decision_making_support_agent = Flow(
|
|
llm=llm2,
|
|
sop=DECISION_MAKING_PROMPT,
|
|
)
|
|
|
|
|
|
class AccountantSwarms:
|
|
"""
|
|
Accountant Swarms is a collection of agents that work together to help
|
|
accountants with their work.
|
|
|
|
Flow: analyze doc -> detect fraud -> generate summary -> decision making support
|
|
|
|
The agents are:
|
|
- User Consultant: Asks the user many questions
|
|
- Document Analyzer: Extracts text from the image of the financial document
|
|
- Fraud Detection: Detects fraud in the document
|
|
- Summary Agent: Generates an actionable summary of the document
|
|
- Decision Making Support: Provides decision making support to the accountant
|
|
|
|
The agents are connected together in a workflow that is defined in the
|
|
run method.
|
|
|
|
The workflow is as follows:
|
|
1. The Document Analyzer agent extracts text from the image of the
|
|
financial document.
|
|
2. The Fraud Detection agent detects fraud in the document.
|
|
3. The Summary Agent generates an actionable summary of the document.
|
|
4. The Decision Making Support agent provides decision making support
|
|
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
pdf_path: str,
|
|
list_pdfs: List[str] = None,
|
|
fraud_detection_instructions: str = None,
|
|
summary_agent_instructions: str = None,
|
|
decision_making_support_agent_instructions: str = None,
|
|
):
|
|
super().__init__()
|
|
self.pdf_path = pdf_path
|
|
self.list_pdfs = list_pdfs
|
|
self.fraud_detection_instructions = fraud_detection_instructions
|
|
self.summary_agent_instructions = summary_agent_instructions
|
|
self.decision_making_support_agent_instructions = (
|
|
decision_making_support_agent_instructions
|
|
)
|
|
|
|
def run(self):
|
|
# Transform the pdf to text
|
|
pdf_text = pdf_to_text(self.pdf_path)
|
|
|
|
# Detect fraud in the document
|
|
fraud_detection_agent_output = doc_analyzer_agent.run(
|
|
f"{self.fraud_detection_instructions}: {pdf_text}"
|
|
)
|
|
|
|
# Generate an actionable summary of the document
|
|
summary_agent_output = summary_generator_agent.run(
|
|
f"{self.summary_agent_instructions}: {fraud_detection_agent_output}"
|
|
)
|
|
|
|
# Provide decision making support to the accountant
|
|
decision_making_support_agent_output = decision_making_support_agent.run(
|
|
f"{self.decision_making_support_agent_instructions}: {summary_agent_output}"
|
|
)
|
|
|
|
return decision_making_support_agent_output
|
|
|
|
|
|
swarm = AccountantSwarms(
|
|
pdf_path="tesla.pdf",
|
|
fraud_detection_instructions="Detect fraud in the document",
|
|
summary_agent_instructions="Generate an actionable summary of the document",
|
|
decision_making_support_agent_instructions="Provide decision making support to the business owner:",
|
|
)
|