| import base64 |
| import requests |
| import os |
| import logging |
| from dotenv import load_dotenv |
|
|
| |
| load_dotenv() |
|
|
| |
| logging.basicConfig( |
| level=logging.INFO, |
| format="%(asctime)s - %(levelname)s - %(message)s", |
| handlers=[ |
| logging.StreamHandler(), |
| logging.FileHandler("api_request_logs.log") |
| ] |
| ) |
|
|
| |
| GROQ_API_KEY = os.getenv("GROQ_API_KEY2") |
| if not GROQ_API_KEY: |
| raise ValueError("GROQ_API_KEY is not set in the .env file") |
|
|
| def process_image_and_get_description(image_path, model="llama-3.2-90b-vision-preview", retries=3): |
| """ |
| Process the image using the Groq API and get a description. |
| Retries in case of failure. |
| |
| Args: |
| image_path (str): Path to the image. |
| model (str): Model to use for processing. |
| retries (int): Number of retries before giving up. |
| |
| Returns: |
| str: Description of the image or an error message. |
| """ |
| encoded_image = image_path |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| messages = [ |
| { |
| "role": "user", |
| "content": [ |
| {"type": "text", "text": "Analyze the image to identify what is happening, describe the overall context, and perform OCR to extract any visible text. Additionally, specify whether the subject is a human, animal, or object, and provide a detailed description of any object the human is holding or their specific actions."}, |
| {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{encoded_image}"}} |
| ] |
| } |
| ] |
|
|
| for attempt in range(1, retries + 1): |
| try: |
| logging.info(f"Attempt {attempt} to process the image with Groq API.") |
|
|
| |
| response = requests.post( |
| "https://api.groq.com/openai/v1/chat/completions", |
| json={ |
| "model": model, |
| "messages": messages, |
| "max_tokens": 4096, |
| "stop": None, |
| "stream": False |
| }, |
| headers={ |
| "Authorization": f"Bearer {GROQ_API_KEY}", |
| "Content-Type": "application/json" |
| }, |
| timeout=30 |
| ) |
|
|
| |
| if response.status_code == 200: |
| result = response.json() |
| answer = result["choices"][0]["message"]["content"] |
| logging.info("Successfully processed the image and received a response.") |
| return answer |
| else: |
| logging.warning(f"Received error response: {response.status_code} - {response.text}") |
| except requests.RequestException as e: |
| logging.error(f"RequestException on attempt {attempt}: {e}") |
|
|
| logging.error("All attempts to process the image failed.") |
| return "Error: Unable to process the image after multiple attempts." |
|
|
| |
| |
| |
| |
|
|