Spaces:
Runtime error
Runtime error
Commit
·
2ace2a9
0
Parent(s):
Duplicate from rstallman/Contract-Draft
Browse files- .gitattributes +34 -0
- README.md +13 -0
- app.py +111 -0
- credentials.json +13 -0
- requirements.txt +5 -0
.gitattributes
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: AI Contract
|
| 3 |
+
emoji: 😻
|
| 4 |
+
colorFrom: indigo
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: 3.29.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
duplicated_from: rstallman/Contract-Draft
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import openai
|
| 2 |
+
import gradio
|
| 3 |
+
import pandas as pd
|
| 4 |
+
from datetime import datetime
|
| 5 |
+
import gspread
|
| 6 |
+
from google.oauth2.service_account import Credentials
|
| 7 |
+
import requests
|
| 8 |
+
import json
|
| 9 |
+
|
| 10 |
+
openai.api_key = "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"
|
| 11 |
+
|
| 12 |
+
records = []
|
| 13 |
+
credentials = Credentials.from_service_account_file("credentials.json", scopes=["https://www.googleapis.com/auth/spreadsheets"])
|
| 14 |
+
client = gspread.authorize(credentials)
|
| 15 |
+
sheet = client.open_by_url("https://docs.google.com/spreadsheets/d/1aZibKvwrvOB-xx_PSp2YFyuaycHyVkJZW_unC21VUbA/edit?usp=sharing").sheet1
|
| 16 |
+
|
| 17 |
+
def get_user_ip():
|
| 18 |
+
try:
|
| 19 |
+
response = requests.get("https://api.ipify.org?format=json")
|
| 20 |
+
data = json.loads(response.text)
|
| 21 |
+
return data["ip"]
|
| 22 |
+
except:
|
| 23 |
+
return None
|
| 24 |
+
|
| 25 |
+
def ContractDraftGPT(user_input, user_name, user_email, user_agent, is_fintech_startup, region):
|
| 26 |
+
messages = []
|
| 27 |
+
|
| 28 |
+
if not user_name:
|
| 29 |
+
return "Please enter your name."
|
| 30 |
+
|
| 31 |
+
user_message = f"{user_input} [USER_IDENTITY: {user_name}]"
|
| 32 |
+
messages.append({"role": "user", "content": user_message})
|
| 33 |
+
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."})
|
| 34 |
+
|
| 35 |
+
response = openai.ChatCompletion.create(
|
| 36 |
+
model="gpt-3.5-turbo",
|
| 37 |
+
messages=messages
|
| 38 |
+
)
|
| 39 |
+
|
| 40 |
+
ContractGPT_reply = response["choices"][0]["message"]["content"]
|
| 41 |
+
messages.append({"role": "assistant", "content": ContractGPT_reply})
|
| 42 |
+
|
| 43 |
+
# Record keeping
|
| 44 |
+
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| 45 |
+
ip_address = get_user_ip()
|
| 46 |
+
device_type = get_device_type(user_agent)
|
| 47 |
+
session_duration = "" # Calculate session duration
|
| 48 |
+
features_used = "" # Track features used
|
| 49 |
+
num_queries = "" # Count number of queries
|
| 50 |
+
num_documents_created = "" # Count number of documents created
|
| 51 |
+
clickstream_data = "" # Track clickstream data
|
| 52 |
+
interaction_patterns = "" # Track user interface interaction patterns
|
| 53 |
+
success_of_advice = "" # Measure success of advice
|
| 54 |
+
user_satisfaction_rate = "" # Measure user satisfaction rate
|
| 55 |
+
user_location = "" # Capture user location
|
| 56 |
+
industry_or_profession = "" # Capture user industry or profession
|
| 57 |
+
|
| 58 |
+
record = {
|
| 59 |
+
"Timestamp": timestamp,
|
| 60 |
+
"User Input": user_input,
|
| 61 |
+
"User Identity": user_name,
|
| 62 |
+
"User Email": user_email,
|
| 63 |
+
"IP Address": ip_address,
|
| 64 |
+
"Device Type": device_type,
|
| 65 |
+
"Session Duration": session_duration,
|
| 66 |
+
"Features Used": features_used,
|
| 67 |
+
"Number of Queries": num_queries,
|
| 68 |
+
"Number of Documents Created": num_documents_created,
|
| 69 |
+
"Clickstream Data": clickstream_data,
|
| 70 |
+
"Interaction Patterns": interaction_patterns,
|
| 71 |
+
"Success of Advice": success_of_advice,
|
| 72 |
+
"User Satisfaction Rate": user_satisfaction_rate,
|
| 73 |
+
"User Location": user_location,
|
| 74 |
+
"Industry or Profession": industry_or_profession,
|
| 75 |
+
"Contract Draft": ContractGPT_reply
|
| 76 |
+
}
|
| 77 |
+
records.append(record)
|
| 78 |
+
|
| 79 |
+
# Update Google Sheet
|
| 80 |
+
row_values = [
|
| 81 |
+
timestamp, user_input, user_name, user_email, ip_address, device_type, session_duration,
|
| 82 |
+
features_used, num_queries, num_documents_created, clickstream_data, interaction_patterns,
|
| 83 |
+
success_of_advice, user_satisfaction_rate, user_location, industry_or_profession, ContractGPT_reply
|
| 84 |
+
]
|
| 85 |
+
sheet.append_row(row_values)
|
| 86 |
+
|
| 87 |
+
return ContractGPT_reply
|
| 88 |
+
|
| 89 |
+
def get_device_type(user_agent):
|
| 90 |
+
if user_agent and "mobile" in user_agent.lower():
|
| 91 |
+
return "Mobile"
|
| 92 |
+
elif user_agent and "tablet" in user_agent.lower():
|
| 93 |
+
return "Tablet"
|
| 94 |
+
else:
|
| 95 |
+
return "Desktop"
|
| 96 |
+
|
| 97 |
+
def launch_interface():
|
| 98 |
+
inputs = [
|
| 99 |
+
gradio.inputs.Textbox(label="User Input", placeholder="Provide details for contract draft..."),
|
| 100 |
+
gradio.inputs.Textbox(label="Your Name", placeholder="Enter your name"),
|
| 101 |
+
gradio.inputs.Textbox(label="Your Email", placeholder="Enter your email"),
|
| 102 |
+
gradio.inputs.Radio(label="Are you a fintech startup?", choices=["Yes", "No"]),
|
| 103 |
+
gradio.inputs.Radio(label="Select your region:", choices=["England", "Scotland", "Wales", "Northern Ireland"])
|
| 104 |
+
]
|
| 105 |
+
outputs = gradio.outputs.Textbox(label="Contract Draft")
|
| 106 |
+
|
| 107 |
+
interface = gradio.Interface(fn=ContractDraftGPT, inputs=inputs, outputs=outputs, title="", description="")
|
| 108 |
+
interface.launch()
|
| 109 |
+
|
| 110 |
+
if __name__ == "__main__":
|
| 111 |
+
launch_interface()
|
credentials.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "service_account",
|
| 3 |
+
"project_id": "ai-barrister",
|
| 4 |
+
"private_key_id": "79eb2f390afee34c1c51ea4ba945e4878c4e0794",
|
| 5 |
+
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4THaTlZt9UIa7\nLS2RzgFxU4POVFn0GFimDUEgQ+FKMh8+A6wEhFmzWYQyj6MqKYCobcFxCBXnh6s1\nLTYJHYJVAPSEYZE25tQTxONwEyObgltCKKif2OkHwCZLCS6lpH59WSMcEORJhFuS\nlxVN8ZGwdj1KD2gZkwEJMpn7RjVKTGt9Wl6S9NZ3WI3TWj9pzQXlrPp2c9pVgEfK\nOCsYi1uWGM3Z2x9zL0f8ekHikFTmqGyTIcOhyyNMOmbkrTKla9GK/Lr7TIzf4Lr9\nCpnbFcyHBkrhMLa1/LpQRqbkHDy72jWiHXMwubdfKdKDQfNb4/3i1wBeZgHgJGyq\ncW1N0JvfAgMBAAECggEAW7kqdq9J0KeINpX4jQ1zKFzBR6oxjsujKxmDpTRDZvLl\nG68mKKVaI2nU4nkcYrp/HtRpJwE4LaAW9INI1maKXBX6m/wXErT1LdWawEe2PAo3\nswibS9rft4zJQiUSwzvH/Eilsa0ygOhPzvhEkSM+OA3Q2RAr5jaEmHhHrIg3s37U\nzH+tqxP95yVJp27ZsMEwqShLhupptC0o5kKSBx2TyeqCktvuOKHnMlSYB1tClV5S\n68RQ7iEwlzwNfpT6sBQjLZNkWJbwcVBfsaIHHRFP1DJQmcZN+7fZA9a8VRyLzCQm\nzc/ZDq52/L70Z9ZiuTRrhsC51QmdRXl/d1L9hNeCSQKBgQD6M7dKM+RiOmw2woSE\nXwMfDmSldtiQJZWKVWnIsu4pXxGwtJZctxnEdP6FFwG2LaVXK/TiWVmGjMt+abLC\nkfmPvZ0iEuwZaqLnm17vSj9oJDkV6/GCK8XC35VMiS41X4csmuYWOdUqA67XFXyM\ngHiAZp7V3kwdvNVmA569YGFVJQKBgQC8kck9DYr2zKuJBFH1WFul8gf5tX36XpQP\nDDgQfZ5NtnreuOPmTux9eeAaeiwIipaAu5wC/VC+iHC/MQA4W5m52ZDXJ9jBUJTy\nI/FnV1e3J2zfuIO/4o2EEzmWunT2uVLY6og4nPNninKBH+f2gbNcz1Oz0I/qwO9w\nAXazukDXswKBgB5wTjsrxvwgSWv8DC0idfnAQYRTyhL3T5MNwxnUkt7bnwZVYfmT\nmQHqjdBZNS8ZrITHZzpmTlrtJBCUAVhkc+0Fz2kGzkxlSb5Ni6Ym7UHZLky5cJ86\nfguwMbSm98UsgwBtM9K+ZG2BFzM5fPaG5qIQWgCA09fGUlvf0t8NK6o1AoGBAJN5\n1RAZomAIi/NZ3JtsIikzlAc4aTFBfLwUC1jiVcdjes7rfNlnSk+L3Lf4aq23baN6\nlrZD1T1eSgdNVGW/Rgfy3vNWZ5Aw7Hw/nhH7Xk+Q1vZVQTz1+0WbH4QBiW5YXDHn\noufb4AVPYuQXxvukTlm8kDLmX1fy0pAfpO1FMmc/AoGBAKQnhG8ym7rFLN1ebXG8\ng2gB02rEWRnBCXdKKalG33n7zeaF+93atUg4pJ0hofP7g/0yT31BTFh6R2Nt5uFf\nGccChHFSkpIQnNOLhQHisglfMttQP1KJ1WjfaRuQ+hqp7eGA6II0lFji5sgyBYoT\nbNrpwduYkIPY15gzHtMstVDC\n-----END PRIVATE KEY-----\n",
|
| 6 |
+
"client_email": "ai-barrister-log@ai-barrister.iam.gserviceaccount.com",
|
| 7 |
+
"client_id": "103630435709161336679",
|
| 8 |
+
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
| 9 |
+
"token_uri": "https://oauth2.googleapis.com/token",
|
| 10 |
+
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
| 11 |
+
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/ai-barrister-log%40ai-barrister.iam.gserviceaccount.com",
|
| 12 |
+
"universe_domain": "googleapis.com"
|
| 13 |
+
}
|
requirements.txt
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
openai
|
| 2 |
+
gradio
|
| 3 |
+
pandas
|
| 4 |
+
gspread
|
| 5 |
+
oauth2client
|