job-fair / app.py
Zekun Wu
update
16a4a07
raw
history blame
No virus
3.15 kB
import json
import http.client
import streamlit as st
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):
self.azure_uri = azure_uri
self.headers = {
'Authorization': f"Bearer {api_key}",
'Content-Type': 'application/json'
}
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", '/v1/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):
self.client = AzureOpenAI(
api_key=api_key,
api_version='2022-11-01', # Defaulting to a specific API version
azure_endpoint=azure_endpoint
)
self.deployment_name = 'your-model-deployment-name' # Update this based on actual 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('Model Invocation with Dataset Processing')
model_type = st.radio("Select the type of agent", ('AzureAgent', 'GPTAgent'))
api_key = st.text_input("API Key", type="password")
endpoint_url = st.text_input("Endpoint URL")
# 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)
st.write('Uploaded Data:', df.head())
# Process data button
if st.button('Process Data'):
if model_type == 'AzureAgent':
agent = AzureAgent(api_key, endpoint_url)
else:
agent = GPTAgent(api_key, endpoint_url)
# Example processing step (adapt as needed)
df['Response'] = df['Input Column'].apply(lambda x: agent.invoke(x, temperature=0, max_tokens=150))
st.write('Processed Data:', df.head())
# Generate download link
st.download_button(
label="Download processed data",
data=df.to_csv().encode('utf-8'),
file_name='processed_data.csv',
mime='text/csv',
)