File size: 5,520 Bytes
8f56773
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import openai
import gradio
import pandas as pd
from datetime import datetime
import gspread
from google.oauth2.service_account import Credentials
import requests
import json

openai.api_key = "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"

records = []
credentials = Credentials.from_service_account_file("credentials.json", scopes=["https://www.googleapis.com/auth/spreadsheets"])
client = gspread.authorize(credentials)
sheet = client.open_by_url("https://docs.google.com/spreadsheets/d/1FHxtlLoxuvMdE5l_NUrof7ECYkO3_EHDbbcz5Si8gqE/edit?usp=sharing").sheet1

def get_user_ip():
    try:
        response = requests.get("https://api.ipify.org?format=json")
        data = json.loads(response.text)
        return data["ip"]
    except:
        return None

def CustomChatGPT(user_input, user_name, user_email, user_agent):
    messages = []

    if not user_name:
        return "Please enter your name."

    user_message = f"{user_input} [USER_IDENTITY: {user_name}]"
    messages.append({"role": "user", "content": user_message})
    messages.append({"role": "system", "content": "In your role as a seasoned attorney within the United States, you are currently engaged in a privileged consultation with your client. The client places unwavering trust in your expertise and guidance. Your responses should manifest a comprehensive understanding of US legal rules, case law, and regulations across all 50 states. Ensure you cite specific Acts of US local and federal regulations, providing clear references to the exact sections and articles. If secondary legislation is pertinent, competently correlate it to the client's state jurisdiction. If you encounter uncertainties regarding the jurisdiction or any other nuances, it is of utmost importance to seek clarification from the client. Your responses should consistently utilize accurate legal terminology and maintain a focus on relevant legal rules, case law, and secondary legislation. The client reposes complete faith in your legal acumen and knowledge; honor this trust by providing in-depth, precise, and up-to-date legal advice. Under no circumstances should it be implied or stated outright that this counsel is being provided by an AI. Maintaining the human element in your legal consultations is vital, as it builds trust and ensures a personalized experience for the client."})
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages
    )

    ChatGPT_reply = response["choices"][0]["message"]["content"]
    messages.append({"role": "assistant", "content": ChatGPT_reply})

    # Record keeping
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    ip_address = get_user_ip()
    device_type = get_device_type(user_agent)
    session_duration = ""  # Calculate session duration
    features_used = ""  # Track features used
    num_queries = ""  # Count number of queries
    num_documents_created = ""  # Count number of documents created
    clickstream_data = ""  # Track clickstream data
    interaction_patterns = ""  # Track user interface interaction patterns
    success_of_advice = ""  # Measure success of advice
    user_satisfaction_rate = ""  # Measure user satisfaction rate
    user_location = ""  # Capture user location
    industry_or_profession = ""  # Capture user industry or profession

    record = {
        "Timestamp": timestamp,
        "User Input": user_input,
        "User Identity": user_name,
        "User Email": user_email,
        "IP Address": ip_address,
        "Device Type": device_type,
        "Session Duration": session_duration,
        "Features Used": features_used,
        "Number of Queries": num_queries,
        "Number of Documents Created": num_documents_created,
        "Clickstream Data": clickstream_data,
        "Interaction Patterns": interaction_patterns,
        "Success of Advice": success_of_advice,
        "User Satisfaction Rate": user_satisfaction_rate,
        "User Location": user_location,
        "Industry or Profession": industry_or_profession,
        "Our AI attorney Reply": ChatGPT_reply
    }
    records.append(record)

    # Update Google Sheet
    row_values = [
        timestamp, user_input, user_name, user_email, ip_address, device_type, session_duration,
        features_used, num_queries, num_documents_created, clickstream_data, interaction_patterns,
        success_of_advice, user_satisfaction_rate, user_location, industry_or_profession, ChatGPT_reply
    ]
    sheet.append_row(row_values)

    return ChatGPT_reply

def get_device_type(user_agent):
    if user_agent and "mobile" in user_agent.lower():
        return "Mobile"
    elif user_agent and "tablet" in user_agent.lower():
        return "Tablet"
    else:
        return "Desktop"

def launch_interface():
    inputs = [
        gradio.inputs.Textbox(label="User Input", placeholder="Talk to your attorney..."),
        gradio.inputs.Textbox(label="Your Name", placeholder="Enter your name"),
        gradio.inputs.Textbox(label="Your Email", placeholder="Enter your email")
    ]
    outputs = gradio.outputs.Textbox(label="Our AI attorney Reply")

    interface = gradio.Interface(fn=CustomChatGPT, inputs=inputs, outputs=outputs, title="Legisbot AI", description="Welcome to Legisbot AI. You are interacting with an Artificial Intelligent attorney. Please provide your name and talk in the user input box as if you were talking to your attorney.")
    interface.launch()

if __name__ == "__main__":
    launch_interface()