import streamlit as st import subprocess from PIL import Image import requests from io import BytesIO from transformers import AutoModel, AutoTokenizer import torch torch.cuda.empty_cache() # Load the model and tokenizer on CPU model = AutoModel.from_pretrained('openbmb/MiniCPM-Llama3-V-2_5-int4', trust_remote_code=True) tokenizer = AutoTokenizer.from_pretrained('openbmb/MiniCPM-Llama3-V-2_5-int4', trust_remote_code=True) model.eval() # Title of the app st.title("Streamlit App with Image URL and Prompts") # Text area for image URL image_url = st.text_area("Enter Image URL:") # Text area for system prompt input system_prompt = st.text_area("Enter System Prompt:") # Text area for user prompt input question = st.text_area("Enter User Prompt:") # Button to submit and display the image if st.button("Submit"): if image_url: try: subprocess.run(['wget', image_url, "-O", 'flowchart.png']) response = requests.get(image_url) img = Image.open(BytesIO(response.content)) st.image(img, caption="Image from URL") except Exception as e: st.error(f"Error loading image. Please submit another image URL with a .png or .jpg extension: {e}") else: st.warning("Please enter an image URL.") # Model code if system_prompt and question: image = Image.open('flowchart.png').convert('RGB') msgs = [{'role': 'user', 'content': question}] res = model.chat( image=image, msgs=msgs, tokenizer=tokenizer, sampling=True, # if sampling=False, beam_search will be used by default temperature=0.7, system_prompt=system_prompt # pass system_prompt if needed ) st.text_area("Output:", value=res, height=200) else: st.warning("Please enter both system prompt and user prompt.")