File size: 3,802 Bytes
28552b3
 
5a1b2d8
b38937a
 
 
28552b3
b38937a
 
 
 
 
 
 
28552b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b38937a
28552b3
 
 
 
 
 
 
 
 
 
 
 
b38937a
28552b3
 
 
 
 
 
 
 
 
b38937a
28552b3
 
 
 
 
 
 
 
 
b38937a
 
 
28552b3
 
b38937a
28552b3
 
b38937a
28552b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b38937a
28552b3
b38937a
28552b3
 
 
 
 
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import streamlit as st
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableSequence
from langchain_huggingface import HuggingFacePipeline
from langchain.agents import create_react_agent, AgentExecutor, Tool
from langchain.memory import ConversationBufferMemory

# Mock lead data
LEADS = [
    {"name": "John Doe", "email": "[email protected]", "company": "TechCorp"},
    {"name": "Jane Smith", "email": "[email protected]", "company": "InnoSoft"},
    {"name": "Bob Johnson", "email": "[email protected]", "company": "DataTech"},
]

# Set up the open-source LLM
@st.cache_resource
def load_model():
    model_name = "google/flan-t5-large"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
    pipe = pipeline(
        "text2text-generation",
        model=model, 
        tokenizer=tokenizer, 
        max_length=512
    )
    return HuggingFacePipeline(pipeline=pipe)

local_llm = load_model()

# Define the tools for the agent
def search_leads(query):
    return [lead for lead in LEADS if query.lower() in lead['name'].lower()]

def send_email(to_email, subject, body):
    # For demo purposes, we'll just print the email details
    st.write(f"Email sent to: {to_email}")
    st.write(f"Subject: {subject}")
    st.write(f"Body: {body}")
    return "Email sent successfully"

tools = [
    Tool(
        name="Search Leads",
        func=search_leads,
        description="Useful for searching leads by name"
    ),
    Tool(
        name="Send Email",
        func=send_email,
        description="Useful for sending emails to leads"
    )
]

# Set up the agent
prefix = """You are an AI CyberSecurity Program Advisor. Your goal is to engage with leads and get them to book a video call for an in-person sales meeting. You have access to a list of leads and can send emails.

You have access to the following tools:"""

suffix = """Begin!

{chat_history}
Human: {human_input}
AI: Let's approach this step-by-step:"""

prompt = PromptTemplate(
    template=prefix + "{agent_scratchpad}" + suffix,
    input_variables=["human_input", "chat_history", "agent_scratchpad"]
)

llm_chain = RunnableSequence(prompt, local_llm)
memory = ConversationBufferMemory(memory_key="chat_history")

agent = create_react_agent(local_llm, tools, prompt)
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent, tools=tools, verbose=True, memory=memory
)

# Streamlit interface
st.title("AI CyberSecurity Program Advisor Demo")

st.write("This demo showcases an AI agent that can engage with leads and attempt to book video calls for in-person sales meetings.")

lead_name = st.text_input("Enter a lead's name to engage with:")

if lead_name:
    lead_info = search_leads(lead_name)
    if not lead_info:
        st.write(f"No lead found with the name {lead_name}")
    else:
        lead = lead_info[0]
        st.write(f"Lead found: {lead['name']} (Email: {lead['email']}, Company: {lead['company']})")
        
        initial_message = f"Hello {lead['name']}, I'd like to discuss our cybersecurity program with {lead['company']}. Are you available for a quick video call?"
        
        if st.button("Engage with Lead"):
            with st.spinner("AI is generating a response..."):
                response = agent_executor.run(initial_message)
            
            st.write("AI Response:")
            st.write(response)

st.sidebar.title("About")
st.sidebar.info("This is a demo of an AI CyberSecurity Program Advisor using an open-source LLM and LangChain. It's designed to engage with leads and attempt to book video calls for sales meetings.")

# To run this script, use: streamlit run your_script_name.py