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()