from googleapiclient.discovery import build import streamlit as st import requests from openai import OpenAI import os client = OpenAI() client.key = os.getenv("OPENAI_API_KEY") GOOGLE_API_DEV_KEY = os.getenv("GOOGLE_API_DEV_KEY") CX_KEY = os.getenv("CX_KEY") def search_amazon(query: str, num: int = 10) -> str: service = build( "customsearch", "v1", developerKey=GOOGLE_API_DEV_KEY ) res = ( service.cse() .list( q=query, cx=CX_KEY, num=num, ) .execute() ) links = "" if res['items'] is None or len(res['items']) == 0: return "There was a problem with the query" for item in res['items']: links += f"- [{item['title']}]({item['link']})\n" return links def remove_quotes(input_string): return input_string.replace('"', '') import re def append_tag_to_amazon_url(input_string): pattern = r'(https?://www\.amazon\.com[^)]*)' def append_tag(match): url = match.group(0) if '?' in url: return url + '&tag=dpang-20' else: return url + '?tag=dpang-20' return re.sub(pattern, append_tag, input_string) # Streamlit interface st.title('Vision Shop - shopping via images') url = st.text_input('Enter the url link to an image ( Example: https://images.ctfassets.net/7rldri896b2a/4augh14at0OZJuEhbWF0av/09dd54fe6543a36f2832f79cc51adad1/spc-bathdecor.jpg )', 'Image URL') if st.button('Shop'): # Make a POST request try: response = client.chat.completions.create( model="gpt-4-vision-preview", messages=[ { "role": "user", "content": [ {"type": "text", "text": "Summarize the image as a search string for Amazon.com"}, # "text": "Identify all the items available to be purchased and for each item list the search terms you would to find them on Amazon.com. Put a number before the search terms"}, { "type": "image_url", "image_url": { "url": url, }, }, ], } ], max_tokens=300, ) search_str = response.choices[0].message.content print(search_str) st.write(search_str) search_str = remove_quotes(search_str) amazon_output = search_amazon(search_str) processed_lines = [append_tag_to_amazon_url(line) for line in amazon_output.split('\n')] output_str = '\n'.join(processed_lines) print(output_str) st.write(output_str) #print(amazon_output) #st.write(amazon_output) except Exception as e: st.error(f'An error occurred: {e}')