File size: 1,774 Bytes
efeddde
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import logging
from app.reverse_search.serpapi_provider import SerpApiGoogleLensProvider
from app.reverse_search.bing_provider import AzureBingVisualSearchProvider
from app.reverse_search.tineye_provider import TinEyeProvider
from app.reverse_search.free_scraper_provider import FreeWebScraperProvider

def get_providers():
    """
    Instantiates and returns a list of configured providers.
    Order determines fallback priority.
    """
    providers = []
    
    # 0. Free Web Scraper (if enabled)
    if os.getenv("USE_FREE_SCRAPER", "").lower() == "true":
        try:
            providers.append(FreeWebScraperProvider())
            logging.info("Enabled completely FREE web scraper as primary provider.")
        except Exception as e:
            logging.warning(f"Failed to initialize FreeWebScraperProvider: {e}")
            
    # 1. SerpApi
    if os.getenv("SERPAPI_API_KEY"):
        try:
            providers.append(SerpApiGoogleLensProvider())
        except Exception as e:
            logging.warning(f"Failed to initialize SerpApiGoogleLensProvider: {e}")
            
    # 2. Bing Visual Search
    if os.getenv("BING_SEARCH_API_KEY"):
        try:
            providers.append(AzureBingVisualSearchProvider())
        except Exception as e:
            logging.warning(f"Failed to initialize AzureBingVisualSearchProvider: {e}")
            
    # 3. TinEye
    if os.getenv("TINEYE_API_KEY"):
        try:
            providers.append(TinEyeProvider())
        except Exception as e:
            logging.warning(f"Failed to initialize TinEyeProvider: {e}")
            
    if not providers:
        logging.warning("No reverse image search providers are configured! Please configure API keys in .env.")
        
    return providers