job-fair / app.py
Zekun Wu
update
35b059b
raw
history blame
No virus
3.69 kB
import streamlit as st
import pandas as pd
import json
import http.client
from io import StringIO
from openai import AzureOpenAI
class ContentFormatter:
@staticmethod
def chat_completions(text, settings_params):
message = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": text}
]
data = {"messages": message, **settings_params}
return json.dumps(data)
class AzureAgent:
def __init__(self, api_key, azure_uri, deployment_name, api_version):
self.azure_uri = azure_uri
self.headers = {
'Authorization': f"Bearer {api_key}",
'Content-Type': 'application/json'
}
self.deployment_name = deployment_name
self.api_version = api_version
self.chat_formatter = ContentFormatter
def invoke(self, text, **kwargs):
body = self.chat_formatter.chat_completions(text, {**kwargs})
conn = http.client.HTTPSConnection(self.azure_uri)
conn.request("POST", f'/v{self.api_version}/chat/completions', body=body, headers=self.headers)
response = conn.getresponse()
data = response.read()
conn.close()
decoded_data = data.decode("utf-8")
parsed_data = json.loads(decoded_data)
content = parsed_data["choices"][0]["message"]["content"]
return content
class GPTAgent:
def __init__(self, api_key, azure_endpoint, deployment_name, api_version):
self.client = AzureOpenAI(
api_key=api_key,
api_version=api_version,
azure_endpoint=azure_endpoint
)
self.deployment_name = deployment_name
def invoke(self, text, **kwargs):
response = self.client.chat.completions.create(
model=self.deployment_name,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": text}
],
**kwargs
)
return response.choices[0].message.content
# Streamlit app interface
st.title('JobFair: A Benchmark for Fairness in LLM Employment Decision')
# Streamlit app interface
st.sidebar.title('Model Settings')
model_type = st.sidebar.radio("Select the type of agent", ('AzureAgent', 'GPTAgent'))
api_key = st.sidebar.text_input("API Key", type="password")
endpoint_url = st.sidebar.text_input("Endpoint URL")
deployment_name = st.sidebar.text_input("Model Name")
api_version = st.sidebar.text_input("API Version", '2022-11-01') # Default API version
# Model invocation parameters
temperature = st.sidebar.slider("Temperature", min_value=0.0, max_value=1.0, value=0.5, step=0.01)
max_tokens = st.sidebar.number_input("Max Tokens", min_value=1, max_value=1000, value=150)
stop_sequences = st.sidebar.text_input("Stop Sequences", "")
parameters = {"temperature": temperature, "max_tokens": max_tokens, "stop": [stop_sequences] if stop_sequences else []}
# File upload and data display
uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
# Read data
data = StringIO(uploaded_file.getvalue().decode("utf-8"))
df = pd.read_csv(data)
# Process data button
if st.button('Process Data'):
if model_type == 'AzureAgent':
agent = AzureAgent(api_key, endpoint_url, deployment_name, api_version)
else:
agent = GPTAgent(api_key, endpoint_url, deployment_name, api_version)
# Example processing step (adapt as needed)
df['Response'] = df['Input Column'].apply(lambda x: agent.invoke(x, parameters))
# Display processed data
st.write('Processed Data:', df)