diff --git a/pyproject.toml b/pyproject.toml index af2e121a33f9390d8cdf70fc9c9551b3b51ff3f1..603e4e93c0fb1d58855c8b26460baa882ed11650 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ authors = [ maintainers = [ {name = "Jan Eggers", email = "jan.eggers@hr.de"}, ] -version = "0.2.3.4" # Neue Versionsnummern für pip-Update +version = "0.2.3.5" # Neue Versionsnummern für pip-Update description = "Bluesky- und Telegram-Konten auf KI-Inhalte checken" requires-python = ">=3.8" dependencies = [ diff --git a/src/aichecker/check_tg.py b/src/aichecker/check_tg.py index a2f758cf2d310146b56e742c51bd742cbe4898b9..a9bd29568642693af76b4a0c30621815e89964d3 100644 --- a/src/aichecker/check_tg.py +++ b/src/aichecker/check_tg.py @@ -193,7 +193,8 @@ def tg_post_parse(b, save = True, describe = True): } if describe: # GPT4o-mini versteht JPG, PNG, nicht animiertes GIF... und WEBP. - sticker['description'] = gpt4_description(sticker_url) + image = base64.b64encode(requests.get(sticker_url).content).decode('utf-8') + photo['description'] = gpt4_description(f"data:image/jpeg;base64, {image}") if save: sticker['file'] = save_url(sticker_url, f"{channel}_{b_nr}_sticker") else: @@ -205,7 +206,8 @@ def tg_post_parse(b, save = True, describe = True): # 'image': base64.b64encode(requests.get(photo_url).content).decode('utf-8') } if describe: - photo['description'] = gpt4_description(f"data:image/jpeg;base64,{photo['image']}") + image = base64.b64encode(requests.get(photo_url).content).decode('utf-8') + photo['description'] = gpt4_description(f"data:image/jpeg;base64, {image}") if save: photo['file'] = save_url(photo_url, f"{channel}_{b_nr}_photo") else: @@ -254,7 +256,8 @@ def tg_post_parse(b, save = True, describe = True): if describe: video['transcription'] = transcribe(video['file']) if photo is not None: - photo['description'] = gpt4_description(f"data:image/jpeg;base64, {photo['image']}") + image = base64.b64encode(requests.get(video_thumbnail_url).content).decode('utf-8') + photo['description'] = gpt4_description(f"data:image/jpeg;base64, {image}") else: video = None # Document / Audio URL? https://t.me/telegram/35 diff --git a/src/aichecker/check_wrappers.py b/src/aichecker/check_wrappers.py index 9e7c3f5498e85a7b1ad6c3ed15b56a99c075e72b..5bedee92a8b2b464a4b0f0bfdf9cb43dfb041afc 100644 --- a/src/aichecker/check_wrappers.py +++ b/src/aichecker/check_wrappers.py @@ -13,6 +13,21 @@ from aiornot import Client d_thresh = .8 # 80 Prozent limit = 25 # Posts für den Check +def object_to_dict(obj): + """Recursively converts an object to a dictionary.""" + if isinstance(obj, dict): + # Recursively handle dictionaries + return {k: object_to_dict(v) for k, v in obj.items()} + elif hasattr(obj, "__dict__"): + # Handle objects with __dict__ + return {k: object_to_dict(v) for k, v in vars(obj).items()} + elif isinstance(obj, (list, tuple, set)): + # Handle iterables + return type(obj)(object_to_dict(v) for v in obj) + else: + # Return the object if it cannot be converted + return obj + def detectora_wrapper(text: str): # Verpackung. Fügt nur den "Fortschrittsbalken" hinzu. print("?", end="") @@ -57,7 +72,7 @@ def aiornot_wrapper(content, is_image = True): # Unterscheidung: Bilder haben den Confidence score im Unter-Key 'ai' # Audios SOLLTEN eien Confidence-Wert in response.report.confidence haben, haben es aber nicht 'confidence': response.report.ai.confidence if hasattr(response.report, 'ai') else .99, - 'generator': response.report.generator if hasattr(response.report, 'generator') else None, + 'generator': object_to_dict(response.report.generator) if hasattr(response.report, 'generator') else None, }) print(f"\b{'X' if aiornot_dict['score'] != 'human' else '.'}",end="") return aiornot_dict