Here is my code
s3_client = boto3.client('s3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, aws_session_token=aws_session_token)
def on_submit(feedback_response, s3_bucket_name, s3_key_prefix):
feedback_type = feedback_response.get("feedback_type", "")
explanation = feedback_response.get("explanation", "")
feedback_data = {
"feedback_type": feedback_type,
"explanation": explanation,
"item": feedback_response.get("item", ""),
"model_name": feedback_response.get("model_name", ""),
"generated_content": feedback_response.get("generated_content", ""),
}
# Define the S3 object key where you want to save the feedback
s3_key = f"{s3_key_prefix}/{feedback_data['item']}.json"
# Upload the feedback data to the specified S3 bucket
s3_client.put_object(Bucket=s3_bucket_name, Key=s3_key,
Body=json.dumps(feedback_data))
def claude_query_endpoint(model_name, prompt, params):
body = json.dumps({"prompt": f"{anthropic.HUMAN_PROMPT} {prompt} \ {anthropic.AI_PROMPT}",
"max_tokens_to_sample": 6000,
"temperature": params['temp'],
"top_k": 50,
"top_p": params['top_p'],
"stop_sequences": [anthropic.HUMAN_PROMPT]})
response = boto3_bedrock.invoke_model(body=body, modelId=model_name, accept='application/json', contentType='application/json')
response_body = json.loads(response.get('body').read())
claude_output_answer_raw = response_body.get('completion')
lines = claude_output_answer_raw.split('\n')
last_line = lines[-1]
claude_output_answer = re.sub(r"[;.]$", "", last_line)
return claude_output_answer
def claude_short_title(data, input_item, params, prompt, model_name='anthropic.claude-v2'):
item = str(input_item)
long_title = data[data['item'] == item]['item_name'].values[0]
claude_prompt = prompt.replace("{title}", str(long_title))
return claude_query_endpoint(model_name, claude_prompt, params)
def generate_short_title_content(model_display_name, model_function, data, input_item, prompt, params):
st.write(f'**Model Name:** {model_display_name}')
try:
output_answer = model_function(data, input_item, params, prompt)
st.text_area('**Short Title:**', output_answer, key=f'{model_display_name}st')
except Exception as e:
st.write(f"Failed to generate short title using {model_display_name}: {str(e)}")
def main():
tab1 = st.tabs(["**Short Titles**"])
with st.sidebar:
params = app_sidebar()
with tab1:
st.subheader('Generate Short Product Titles ')
input_item = st.text_input('Please input Item number:', '', key='Titles input')
if st.button('Submit item', key='Titles button') and len(input_item) > 5:
st.write('---')
item = str(input_item)
if is_item_present(item):
long_title = df[df['item'] == item]['item_name'].values[0]
st.write(f"**Current item Title:** {long_title}")
st.write('---')
# Generate content here
generated_content = generate_content.generate_short_title_content('Anthropic Claude-v2', short_titles.claude_short_title, df, input_item, gpt_st_prompt, params)
# Collect user feedback
feedback = streamlit_feedback(feedback_type="thumbs", optional_text_label="[Optional] Please provide an explanation", on_submit=on_submit)
# Get user feedback and store it
if feedback is not None:
on_submit(feedback)