yasserrmd's picture
Update app.py
b40d89a verified
raw
history blame
2.44 kB
import streamlit as st
import os
from openai import OpenAI
# Initialize the Nvidia API client using API Key stored in Streamlit secrets
client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1", # Nvidia API endpoint
api_key= os.getenv("NVIDIA_API_KEY") #st.secrets["NVIDIA_API_KEY"] # Nvidia API Key from Streamlit secrets
)
# Define Streamlit app layout
st.title("AWS Well-Architected Review")
st.write("Get recommendations for optimizing your AWS architecture.")
if "nvidia_model" not in st.session_state:
st.session_state["nvidia_model"] = "nvidia/llama-3.1-nemotron-70b-instruct"
if "messages" not in st.session_state:
st.session_state.messages = [
{"role": "system", "content": "You are an assistant that provides recommendations based on AWS Well-Architected Review best practices. Focus on the 5 pillars: Operational Excellence, Security, Reliability, Performance Efficiency, and Cost Optimization."}
]
# User input for AWS architecture description
architecture_input = st.text_area("Describe your AWS architecture:")
# Button to submit the input
if st.button("Get Recommendations"):
if architecture_input:
# Add user input to the conversation
st.session_state.messages.append({"role": "user", "content": architecture_input})
with st.chat_message("assistant"):
with st.spinner("Generating recommendations..."):
# Create Nvidia completion request with conversation history
stream = client.chat.completions.create(
model="nvidia-llama-3.1-70b-instruct", # Nvidia model name
messages=st.session_state.messages, # Include all messages in the API call
temperature=0.5,
top_p=0.7,
max_tokens=1024,
stream=True,
)
response_chunks = []
for chunk in stream:
if chunk.choices[0].delta.content is not None:
response_chunks.append(chunk.choices[0].delta.content)
response = "".join(response_chunks)
# Display the response as recommendations
st.markdown(f"**Recommendations:**\n\n{response}")
# Add response to conversation history
st.session_state.messages.append({"role": "assistant", "content": response})