File size: 5,298 Bytes
b929bd7
 
 
 
 
 
 
 
363304b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e70e10
363304b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b929bd7
363304b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b929bd7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363304b
 
 
b929bd7
 
 
363304b
 
 
 
 
 
 
 
 
 
 
b929bd7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import gradio as gr
from huggingface_hub import InferenceClient

"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")

import os
import re
from datetime import datetime
import pandas as pd
import requests
from crewai import Agent, Crew, Process, Task
from crewai_tools import tool
from langchain.agents import load_tools
from langchain_community.tools import DuckDuckGoSearchResults
from langchain_core.prompts import ChatPromptTemplate
from langchain_groq import ChatGroq
import gradio as gr
from huggingface_hub import InferenceClient

def format_response(response: str) -> str:
    entries = re.split(r"(?<=]), (?=\[)", response)
    return [entry.strip("[]") for entry in entries]

human_tools = load_tools(["human"])
os.environ["GROQ_API_KEY"] = "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"
llm = ChatGroq(temperature=0, model_name="llama3-70b-8192")

customer_communicator=Agent(
    role="financial communicator",
    goal="Gather the customer financial situation.",
    backstory="""You are experienced in communicating with customer and asking about their financial details""",
    verbose=True,
    allow_delegation=False,
    llm=llm,
    max_iter=5,
    memory=True,
    tools=human_tools,
)
comprehensive_financial_advisor = Agent(
    role="Senior Financial Advisor",
    goal="Provide user with personalized financial advice and management tools, including investment recommendations, budget tracking, financial goal setting, and market analysis",
    backstory="""You are an expert in comprehensive financial planning, investment strategies, budgeting, and market analysis,
    helping users achieve their financial goals through tailored advice and insights in indian market""",
    verbose=True,
    allow_delegation=False,
    llm=llm,
    max_iter=5,
    memory=True,
)

financial_communicator= Task(
    description="Ask customer financial income per month basis and gather the information about their monthly expenses and their saving and is there any loan",
    expected_output="Gather all the financial details of user.",
    agent=customer_communicator,
)

personalized_financial_planning_task = Task(
    name="Personalized Financial Planning Session",
    description="Customize the financial planning of customer",
    steps=[
        "Assess the user's current financial situation, including income, expenses, assets, and liabilities",
        "Discuss the user's short-term and long-term financial goals",
        "Provide personalized investment recommendations based on the user's risk tolerance and financial goals",
        "Create a realistic budget and tracking plan to help the user manage their expenses",
        "Set actionable financial goals and milestones to monitor progress",
        "Offer ongoing market analysis and updates to keep the user informed of relevant financial trends"
    ],
    expected_output="Give a 1-paragraph report for the user, providing advice by following the steps",
    agent=comprehensive_financial_advisor ,
    context =[financial_communicator], # Ensure the task is associated with the agent
)

def financial_advisor_response(message, history):
    # Update the agents and tasks with the user input
    crew = Crew(
        agents=[customer_communicator, comprehensive_financial_advisor],
        tasks=[financial_communicator, personalized_financial_planning_task],
        verbose=2,
        process=Process.sequential,
        full_output=True,
        share_crew=False,
        manager_llm=llm,
        max_iter=15,
    )

    # Kick off the crew and get the results
    results = crew.kickoff()
    return results
def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    messages = [{"role": "system", "content": system_message}]

    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    messages.append({"role": "user", "content": message})
    response = financial_advisor_response(message, history)

    yield response

    response = ""

    # for message in client.chat_completion(
    #     messages,
    #     max_tokens=max_tokens,
    #     stream=True,
    #     temperature=temperature,
    #     top_p=top_p,
    # ):
    #     token = message.choices[0].delta.content

    #     response += token
    #     yield response

"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p (nucleus sampling)",
        ),
    ],
)


if __name__ == "__main__":
    demo.launch()