remove local llm model, update AI Image Editor
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
new_members.json
|
new_members.json
|
||||||
files/student_locations.db
|
files/student_locations.db
|
||||||
venv/
|
*venv/
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
2
.streamlit/config.toml
Normal file
2
.streamlit/config.toml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[server]
|
||||||
|
maxUploadSize = 10
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"gemini-2.0-flash":{
|
"gemini-2.5-flash-lite":{
|
||||||
"api_url": "https://generativelanguage.googleapis.com/v1beta/openai/",
|
"api_url": "https://generativelanguage.googleapis.com/v1beta/openai/",
|
||||||
"api_key": "AIzaSyCiURTUJrEGw5J7HxtL1KRNT9GhNKCJsb0",
|
"api_key": "AIzaSyCiURTUJrEGw5J7HxtL1KRNT9GhNKCJsb0",
|
||||||
"model": "gemini-2.0-flash"
|
"model": "gemini-2.5-flash-lite"
|
||||||
},
|
},
|
||||||
|
|
||||||
"nano-banana":{
|
"nano-banana":{
|
||||||
"api_url": "https://generativelanguage.googleapis.com/v1beta/openai/",
|
|
||||||
"api_key": "AIzaSyCiURTUJrEGw5J7HxtL1KRNT9GhNKCJsb0",
|
"api_key": "AIzaSyCiURTUJrEGw5J7HxtL1KRNT9GhNKCJsb0",
|
||||||
"model": "gemini-2.5-flash-image-preview"
|
"model": "gemini-2.5-flash-image-preview"
|
||||||
},
|
},
|
||||||
@@ -17,18 +17,6 @@
|
|||||||
"model":"deepseek-chat"
|
"model":"deepseek-chat"
|
||||||
},
|
},
|
||||||
|
|
||||||
"llama3.2:1b":{
|
|
||||||
"api_url": "http://localhost:11434/v1",
|
|
||||||
"api_key": "ollama",
|
|
||||||
"model":"llama3.2:1b"
|
|
||||||
},
|
|
||||||
|
|
||||||
"deepseek-r1:1.5b":{
|
|
||||||
"api_url": "http://localhost:11434/v1",
|
|
||||||
"api_key": "ollama",
|
|
||||||
"model":"deepseek-r1:1.5b"
|
|
||||||
},
|
|
||||||
|
|
||||||
"send_email": {
|
"send_email": {
|
||||||
"sender_email": "noreply@buffteks.org",
|
"sender_email": "noreply@buffteks.org",
|
||||||
"password": "cidm4360fall2024@*"
|
"password": "cidm4360fall2024@*"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ def buffbot():
|
|||||||
st.code(f.read(), language="python")
|
st.code(f.read(), language="python")
|
||||||
st.divider()
|
st.divider()
|
||||||
# Select AI model for chatbot
|
# Select AI model for chatbot
|
||||||
model_options = ["gemini-2.0-flash", "deepseek-r1:1.5b", "llama3.2:1b", "deepseek-chat", ]
|
model_options = ["gemini-2.5-flash-lite", "deepseek-chat", ]
|
||||||
# on_change callback to clear chat history when model is changed
|
# on_change callback to clear chat history when model is changed
|
||||||
selected_model = st.selectbox("**👉Please select a model to start**", model_options, on_change=clear_chat)
|
selected_model = st.selectbox("**👉Please select a model to start**", model_options, on_change=clear_chat)
|
||||||
|
|
||||||
@@ -44,32 +44,18 @@ def buffbot():
|
|||||||
"model":"deepseek-chat"
|
"model":"deepseek-chat"
|
||||||
},
|
},
|
||||||
|
|
||||||
"ollama3.2:1b":{
|
"gemini-2.0-flash":{
|
||||||
"api_url": "http://localhost:11434/v1",
|
"api_key": "YOUR_API_KEY",
|
||||||
"api_key": "ollama",
|
"model": "gemini-2.0-flash"
|
||||||
"model":"llama3.2:1b"
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"deepseek-r1:1.5b":{
|
|
||||||
"api_url": "http://localhost:11434/v1",
|
|
||||||
"api_key": "ollama",
|
|
||||||
"model":"deepseek-r1:1.5b"
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
# The API key and base URL are loaded based on the selected model
|
# The API key and base URL are loaded based on the selected model
|
||||||
with open('app_config.json') as config_file:
|
with open('app_config.json') as config_file:
|
||||||
config = json.load(config_file)
|
config = json.load(config_file)
|
||||||
|
|
||||||
if selected_model == "grok-3":
|
if selected_model == "gemini-2.5-flash-lite":
|
||||||
api_base_url = config[selected_model]["api_url"]
|
|
||||||
api_key = config[selected_model]["api_key"]
|
|
||||||
st.info("Powered by the online [Grok](https://www.grok.com/) API!\
|
|
||||||
Just a heads up, you have 20 messages to use.")
|
|
||||||
# Set the maximum number of user messages
|
|
||||||
MAX_USER_MESSAGES = 20
|
|
||||||
|
|
||||||
if selected_model == "gemini-2.0-flash":
|
|
||||||
api_base_url = config[selected_model]["api_url"]
|
api_base_url = config[selected_model]["api_url"]
|
||||||
api_key = config[selected_model]["api_key"]
|
api_key = config[selected_model]["api_key"]
|
||||||
st.info("Powered by the online [Gemini](https://deepmind.google/technologies/gemini/) API!\
|
st.info("Powered by the online [Gemini](https://deepmind.google/technologies/gemini/) API!\
|
||||||
|
|||||||
@@ -35,9 +35,9 @@ def edit_image_with_ai(image, description):
|
|||||||
def ai_image_editor():
|
def ai_image_editor():
|
||||||
st.markdown("<h1 style='text-align: center; color: #451002;'>AI Image Editor🖼️</h1>", unsafe_allow_html=True)
|
st.markdown("<h1 style='text-align: center; color: #451002;'>AI Image Editor🖼️</h1>", unsafe_allow_html=True)
|
||||||
st.markdown("<h5 style='text-align: center;'> Edit and enhance your images with the power of AI! 🎨 </h3>", unsafe_allow_html=True)
|
st.markdown("<h5 style='text-align: center;'> Edit and enhance your images with the power of AI! 🎨 </h3>", unsafe_allow_html=True)
|
||||||
st.info("Powered by the online [Gemini Image Generation](https://ai.google.dev/gemini-api/docs/image-generation) API!")
|
st.info("Powered by the online [Gemini Image Generation](https://ai.google.dev/gemini-api/docs/image-generation) API! ⚠️ No images or descriptions are stored.")
|
||||||
# user upload an image and provide a description of the edit they want
|
# user upload an image and provide a description of the edit they want
|
||||||
uploaded_image = st.file_uploader("Upload an image to edit", type=["png", "jpg", "jpeg"])
|
uploaded_image = st.file_uploader("Upload an image to edit", type=["png", "jpg", "jpeg"], help="Choose an image file (PNG, JPG, JPEG) to upload.")
|
||||||
if uploaded_image is not None:
|
if uploaded_image is not None:
|
||||||
with st.spinner("Loading image..."):
|
with st.spinner("Loading image..."):
|
||||||
# display the uploaded image
|
# display the uploaded image
|
||||||
@@ -45,7 +45,19 @@ def ai_image_editor():
|
|||||||
st.image(image, width= 300)
|
st.image(image, width= 300)
|
||||||
st.success("Image uploaded successfully!")
|
st.success("Image uploaded successfully!")
|
||||||
|
|
||||||
edit_description = st.text_area("Describe the edits you want to make to the image")
|
reference_prompt = """
|
||||||
|
Please edit the uploaded image to create a professional profile photo of the person in the picture. Focus on the following:
|
||||||
|
- Outfit: Transform the current attire into a fitted, black professional suit. Ensure the fit is flattering and appropriate for a software engineer headshot. Change glasses to frameless fashion glasses. Change tie color to deep blue
|
||||||
|
- Facial Features & Hair: Retain the original facial features (eyes, nose, mouth, etc.) and individual hair strands as much as possible. The goal is to achieve a realistic, edited look, not an AI-generated or overly smoothed/perfected appearance. Avoid any artificial alterations to these features.
|
||||||
|
- Pose Adjustment: Adjust the pose so that the face is facing forward. Make subtle corrections to the body posture to appear slightly straightened and more upright.
|
||||||
|
- Framing & Composition: Crop the image as a half-body portrait. Ensure the head and shoulders are well-framed.
|
||||||
|
- Background & Lighting: Use a neutral, non-distracting background (e.g., soft gray). Apply soft, natural lighting to create a professional and inviting look. Avoid harsh shadows or overly bright highlights.
|
||||||
|
- Overall Style: The final image should be photorealistic and suitable for a professional profile. It should project professionalism and competence.
|
||||||
|
"""
|
||||||
|
with st.expander("See Example Prompt for Professional Profile Photo"):
|
||||||
|
st.markdown(reference_prompt)
|
||||||
|
st.info("Note: The example prompt is for reference only. You can provide your own description of the edits you want to make to the image. Gemini Official Prompting Guide and Strategies: https://ai.google.dev/gemini-api/docs/image-generation#prompt-guide")
|
||||||
|
edit_description = st.text_area("Describe the edits you want to make to the image", height="content",)
|
||||||
if st.button("AI Editing"):
|
if st.button("AI Editing"):
|
||||||
if edit_description.strip() == "":
|
if edit_description.strip() == "":
|
||||||
st.error("Please provide a description of the edits you want to make.")
|
st.error("Please provide a description of the edits you want to make.")
|
||||||
|
|||||||
Reference in New Issue
Block a user