Spaces:
Runtime error
Runtime error
### Set up environment variables: | |
# | |
# export IMUN_URL="https://cognitivewudev.azure-api.net/computervision/imageanalysis:analyze" | |
# export IMUN_SUBSCRIPTION_KEY=a* | |
# export IMUN_SUBSCRIPTION_KEY2=a* | |
# export IMUN_OCR_SUBSCRIPTION_KEY=a* | |
# export IMUN_PARAMS="api-version=2023-02-01-preview&model-version=latest&features=denseCaptions,Tags" | |
# export OPENAI_API_KEY=sk-* | |
# | |
import os | |
import requests | |
from langchain import ConversationChain, LLMChain | |
from langchain.agents import load_tools, initialize_agent, Tool | |
from langchain.tools.bing_search.tool import BingSearchRun, BingSearchAPIWrapper | |
from langchain.chains.conversation.memory import ConversationBufferMemory | |
from langchain.chains import PALChain | |
from langchain.llms import OpenAI, AzureOpenAI | |
from langchain.utilities import ImunAPIWrapper, ImunMultiAPIWrapper | |
MAX_TOKENS = 512 | |
# llm = OpenAI(temperature=0, max_tokens=MAX_TOKENS) | |
# llm = AzureOpenAI(deployment_name="text-chat-davinci-002", model_name="text-chat-davinci-002", temperature=1, top_p=0.9, max_tokens=MAX_TOKENS) | |
# llm = AzureOpenAI(deployment_name="text-chat-davinci-002", model_name="text-003", temperature=0, max_tokens=MAX_TOKENS) | |
llm = AzureOpenAI(deployment_name="text-chat-davinci-002", model_name="text-chat-davinci-002", temperature=0, max_tokens=MAX_TOKENS) | |
# llm = AzureOpenAI(deployment_name="gpt-35-turbo-version-0301", model_name="gpt-35-turbo (version 0301)", temperature=0, max_tokens=MAX_TOKENS) | |
# tool_names = ['imun'] | |
# tools = load_tools(tool_names, llm=llm) | |
memory = ConversationBufferMemory(memory_key="chat_history") | |
imun_dense = ImunAPIWrapper( | |
imun_url="https://ehazarwestus.cognitiveservices.azure.com/computervision/imageanalysis:analyze", | |
params="api-version=2023-02-01-preview&model-version=latest&features=denseCaptions", | |
imun_subscription_key=os.environ["IMUN_SUBSCRIPTION_KEY2"]) | |
imun = ImunAPIWrapper() | |
imun = ImunMultiAPIWrapper(imuns=[imun, imun_dense]) | |
imun_celeb = ImunAPIWrapper( | |
imun_url="https://cvfiahmed.cognitiveservices.azure.com/vision/v3.2/models/celebrities/analyze", | |
params="") | |
imun_read = ImunAPIWrapper( | |
imun_url="https://vigehazar.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-read:analyze", | |
params="api-version=2022-08-31", | |
imun_subscription_key=os.environ["IMUN_OCR_SUBSCRIPTION_KEY"]) | |
imun_receipt = ImunAPIWrapper( | |
imun_url="https://vigehazar.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-receipt:analyze", | |
params="api-version=2022-08-31", | |
imun_subscription_key=os.environ["IMUN_OCR_SUBSCRIPTION_KEY"]) | |
imun_businesscard = ImunAPIWrapper( | |
imun_url="https://vigehazar.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-businessCard:analyze", | |
params="api-version=2022-08-31", | |
imun_subscription_key=os.environ["IMUN_OCR_SUBSCRIPTION_KEY"]) | |
imun_layout = ImunAPIWrapper( | |
imun_url="https://vigehazar.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-layout:analyze", | |
params="api-version=2022-08-31", | |
imun_subscription_key=os.environ["IMUN_OCR_SUBSCRIPTION_KEY"]) | |
bing = BingSearchAPIWrapper(k=2) | |
def edit_photo(query: str) -> str: | |
endpoint = "http://10.123.124.92:7863/" | |
query = query.strip() | |
url_idx = query.rfind(" ") | |
img_url = query[url_idx + 1:].strip() | |
if img_url.endswith((".", "?")): | |
img_url = img_url[:-1] | |
if not img_url.startswith(("http://", "https://")): | |
return "Invalid image URL" | |
img_url = img_url.replace("0.0.0.0", "10.123.124.92") | |
instruction = query[:url_idx] | |
# This should be some internal IP to wherever the server runs | |
job = {"image_path": img_url, "instruction": instruction} | |
response = requests.post(endpoint, json=job) | |
if response.status_code != 200: | |
return "Could not finish the task try again later!" | |
return "Here is the edited image " + endpoint + response.json()["edited_image"] | |
# these tools should not step on each other's toes | |
tools = [ | |
Tool( | |
name="PAL-MATH", | |
func=PALChain.from_math_prompt(llm).run, | |
description=( | |
"A wrapper around calculator. " | |
"A language model that is really good at solving complex word math problems." | |
"Input should be a fully worded hard word math problem." | |
) | |
), | |
Tool( | |
name = "Image Understanding", | |
func=imun.run, | |
description=( | |
"A wrapper around Image Understanding. " | |
"Useful for when you need to understand what is inside an image (objects, texts, people)." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
Tool( | |
name = "OCR Understanding", | |
func=imun_read.run, | |
description=( | |
"A wrapper around OCR Understanding (Optical Character Recognition). " | |
"Useful after Image Understanding tool has found text or handwriting is present in the image tags." | |
"This tool can find the actual text, written name, or product name in the image." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
Tool( | |
name = "Receipt Understanding", | |
func=imun_receipt.run, | |
description=( | |
"A wrapper receipt understanding. " | |
"Useful after Image Understanding tool has recognized a receipt in the image tags." | |
"This tool can find the actual receipt text, prices and detailed items." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
Tool( | |
name = "Business Card Understanding", | |
func=imun_businesscard.run, | |
description=( | |
"A wrapper around business card understanding. " | |
"Useful after Image Understanding tool has recognized businesscard in the image tags." | |
"This tool can find the actual business card text, name, address, email, website on the card." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
Tool( | |
name = "Layout Understanding", | |
func=imun_layout.run, | |
description=( | |
"A wrapper around layout and table understanding. " | |
"Useful after Image Understanding tool has recognized businesscard in the image tags." | |
"This tool can find the actual business card text, name, address, email, website on the card." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
Tool( | |
name = "Celebrity Understanding", | |
func=imun_celeb.run, | |
description=( | |
"A wrapper around celebrity understanding. " | |
"Useful after Image Understanding tool has recognized people in the image tags that could be celebrities." | |
"This tool can find the name of celebrities in the image." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
BingSearchRun(api_wrapper=bing), | |
Tool( | |
name = "Photo Editing", | |
func=edit_photo, | |
description=( | |
"A wrapper around photo editing. " | |
"Useful to edit an image with a given instruction." | |
"Input should be an image url, or path to an image file (e.g. .jpg, .png)." | |
) | |
), | |
] | |
# chain = initialize_agent(tools, llm, agent="conversational-react-description", verbose=True, memory=memory) | |
chain = initialize_agent(tools, llm, agent="conversational-assistant", verbose=True, memory=memory, return_intermediate_steps=True, max_iterations=4) | |
# output = chain.conversation("what is the meaning of life") | |
output = chain.conversation("translate these words to English: Montrealde, La poubelle, l'éboueur et, le citoyen:, C'est un, ménage à trois.") | |
print (output) | |