File size: 4,687 Bytes
b703f03
 
 
 
 
 
 
 
f2f0aff
b703f03
aaa1449
b703f03
 
 
 
e24e326
b703f03
 
 
 
 
 
 
 
 
57d50a7
b703f03
 
 
 
 
 
 
4dcdbcd
b703f03
 
a51fdf3
b703f03
 
 
38f223e
 
b703f03
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38f223e
b703f03
 
 
 
 
 
 
38f223e
b703f03
 
 
38f223e
b703f03
 
 
 
 
 
 
 
 
 
 
38f223e
b703f03
57d50a7
 
 
b703f03
38f223e
b703f03
38f223e
b703f03
 
 
 
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
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
import os

openai.api_key = os.getenv("API_SECRET")

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/1aZibKvwrvOB-xx_PSp2YFyuaycHyVkJZW_unC21VUbA/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 ContractDraftGPT(user_input, user_name, user_email, user_agent, is_fintech_startup, region):
    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": "You are a professional and experienced UK Lawyer who is drafting a legal document, a contract for your client base don his requirement. Make sure to mention and point precise legal rules, act of parliament (please insert which section of which article of which law, be precise when you refer to act of parliament), case law, and any pieces of secondary legislation. UK legislation."})

    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=messages
    )

    ContractGPT_reply = response["choices"][0]["message"]["content"]
    messages.append({"role": "assistant", "content": ContractGPT_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,
        "Contract Draft": ContractGPT_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, ContractGPT_reply
    ]
    sheet.append_row(row_values)

    return ContractGPT_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="Provide details for contract draft..."),
        gradio.inputs.Textbox(label="Your Name", placeholder="Enter your name"),
        gradio.inputs.Textbox(label="Your Email", placeholder="Enter your email"),
        gradio.inputs.Radio(label="Are you a fintech startup?", choices=["Yes", "No"]),
        gradio.inputs.Radio(label="Select your region:", choices=["England", "Scotland", "Wales", "Northern Ireland"])
    ]
    outputs = gradio.outputs.Textbox(label="Contract Draft")

    interface = gradio.Interface(fn=ContractDraftGPT, inputs=inputs, outputs=outputs, title="", description="")
    interface.launch()

if __name__ == "__main__":
    launch_interface()