File size: 2,879 Bytes
672864c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import os
import streamlit as st
from huggingface_hub import login
from transformers import AutoModelForCausalLM, AutoTokenizer
from PIL import Image
import requests
import torch

# Step 1: Log in to Hugging Face with your access token from secrets
huggingface_token = os.getenv("HUGGINGFACE_TOKEN")  # Fetch the token from environment
if huggingface_token:
    login(token=huggingface_token)  # Authenticate using the token
else:
    st.error("Hugging Face token not found. Please set it in the Secrets section.")

# Step 2: Load the model and tokenizer
model_name = "meta-llama/Llama-3.2-11B-Vision-Instruct"  # Adjust if needed
try:
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name)
    st.success("Model loaded successfully!")
except Exception as e:
    st.error(f"Error loading model: {str(e)}")

# Step 3: Create a simple Streamlit app
def main():
    st.title("Llama 3.2 11B Vision Model")
    st.write("Upload an image and enter a prompt to generate output.")
    
    # Upload image
    image_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
    prompt = st.text_area("Enter your prompt here:")
    
    if st.button("Generate Output"):
        if image_file and prompt:
            # Load image
            image = Image.open(image_file)
            st.image(image, caption="Uploaded Image", use_column_width=True)
            
            # Preprocess the image if needed (convert to tensor, etc.)
            # This depends on how the model expects the image input
            
            # Example of converting image to a format suitable for the model
            # Note: Adjust this part based on your model's requirements.
            # Here, we're just using a placeholder for the model input.
            # You might need to resize or normalize the image based on the model's requirements.
            # For example:
            # image_tensor = preprocess_image(image)

            try:
                # Prepare the input for the model
                inputs = tokenizer(prompt, return_tensors='pt')
                
                # Perform inference
                # Adjust the input format for the model accordingly
                # Here we assume the model takes a prompt and an image (adjust as necessary)
                with torch.no_grad():
                    model_output = model.generate(**inputs)  # Pass image tensor if required
                
                # Decode the output
                output_text = tokenizer.decode(model_output[0], skip_special_tokens=True)
                st.write("Generated Output:", output_text)
            except Exception as e:
                st.error(f"Error during prediction: {str(e)}")
        else:
            st.warning("Please upload an image and enter a prompt.")

if __name__ == "__main__":
    main()