TESTBOT1 / app.py
DavidIsrael's picture
Update app.py
0995e78 verified
# 1. Imports and API setup
from groq import Groq
import base64
import streamlit as st
from tavily import TavilyClient
import os
client = Groq(
api_key=os.getenv("GROQ_API"),
)
llava_model = 'llava-v1.5-7b-4096-preview'
llama31_model = 'llama-3.1-70b-versatile'
#Instantiating your TavilyClient
tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API"))
# 2. Image encoding
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 3. Image to text function
def image_to_text(client, model, base64_image, prompt):
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
},
},
],
}
],
model=model
)
return chat_completion.choices[0].message.content
def search_internet(query):
#Executing the search query and getting the results
content = tavily_client.search(query, max_foreign=10, search_depth="advanced")["results"]
return content
# 4. Short story generation function
def analyzer_generation(client, content, food):
chat_completion = client.chat.completions.create(
messages=[
{
"role": "system",
"content": f'You are a flamengo team expert. '\
f'Your sole purpose is spread the last news about flamengo, being an annoying supporter, and give tips about eletric egeneering Note: Write in Portuguese.'\
},
{
"role": "user",
"content": f'Information: """{content}"""\n\n' \
f'Using the above information, answer the following'\
f'query: "{food}" it food has a high, medium, or low glycemic index?',
}
],
model=llama31_model
)
return chat_completion.choices[0].message.content
# 5. Streamlit app
def main():
col1, col2, col3 = st.columns([4, 5, 1])
col1.image("images.jpg", width=250)
col2.title("Glycemic Food Analyzer", anchor="right")
st.write("Conheça o Glycemic Food Analyzer, um assistente inteligente que analisa o alimento e informa qual é o nível glicemico do alimento.")
uploaded_file = st.file_uploader("Carregue uma imagem (png ou jpg)", type=["png", "jpg"])
if uploaded_file is not None:
# To read file as bytes:
bytes_data = uploaded_file.read()
base64_image = base64.b64encode(bytes_data).decode('utf-8')
prompt = '''
Describe this image in detail, including the appearance of the object(s).
'''
image_description = image_to_text(client, llava_model, base64_image, prompt)
query = "What are the glycemic indexes of the foods?"
content = search_internet(query)
st.write("\n--- Análise do Alimento ---")
food_description = analyzer_generation(client, content, image_description)
st.write(food_description)
if __name__ == "__main__":
main()