|
from typing import Dict, Tuple |
|
import requests |
|
|
|
from openfoodfacts.api import ProductResource, APIConfig |
|
|
|
|
|
BASE_URL = "https://robotoff.openfoodfacts.org/api/v1/" |
|
|
|
|
|
def next_annotation() -> Tuple[str, str, str, str]: |
|
insight = import_random_insight() |
|
return ( |
|
insight["id"], |
|
insight["data"]["original"], |
|
insight["data"]["correction"], |
|
get_image_url(insight["barcode"]) |
|
) |
|
|
|
|
|
def submit_correction(insight_id: str, original: str, correction: str) -> Tuple[str, str, str]: |
|
|
|
return next_annotation() |
|
|
|
|
|
def import_random_insight( |
|
insight_type: str = "ingredient_spellcheck", |
|
count: int = 1, |
|
predictor: str = "fine-tuned-mistral-7b", |
|
) -> Dict: |
|
url = f"{BASE_URL}/insights/random?count={count}&type={insight_type}&predictor={predictor}" |
|
response = requests.get(url) |
|
data = response.json() |
|
insight = data["insights"][0] |
|
return insight |
|
|
|
|
|
def submit_to_product_opener( |
|
insight_id: str, |
|
skipped: bool, |
|
update: int = 0, |
|
) -> None: |
|
url = f"{BASE_URL}/insights/annotate" |
|
annotation = -1 if skipped else 1 |
|
data = { |
|
"insight_id": insight_id, |
|
"annotation": annotation, |
|
"update": update, |
|
} |
|
requests.post(url, data=data) |
|
|
|
|
|
def get_image_url( |
|
code: str, |
|
user_agent: str = "Spellcheck-Annotate", |
|
) -> str: |
|
fields = ["image_ingredients_url"] |
|
data = ProductResource( |
|
api_config=APIConfig(user_agent=user_agent) |
|
).get( |
|
code=code, |
|
fields=fields, |
|
) |
|
image_url = data.get(fields[0]) |
|
return image_url |
|
|