import json import os import re import requests # Основные настройки OLLAMA_URL = "http://localhost:11434/api/generate" MODEL_NAME = "qwen3:30b-a3b" # Имя модели в Ollama pattern = re.compile(r".*?<\/think>", flags=re.DOTALL | re.IGNORECASE) def analyze_dog_breed(file_path): with open(file_path, encoding="utf-8") as file: text = file.read() """Генерирует описание породы с помощью Ollama""" prompt = f"""/no_think Проанализируй текст ниже и определи ТОЛЬКО указанные ниже признаки породы собаки. Если признак не упомянут в тексте - дополни на основе своих знаний Признаки для анализа (булевые значения, если не указано иное): - people_friendly (дружелюбность к взрослым) - child_friendly (дружелюбность к детям) - animal_friendly (дружелюбность к другим животным) - active (уровень активности) - big (крупный размер) - small (мелкий размер) - medium (средний размер) - smart (высокий интеллект) - colors (массив возможных окрасов на аглийском строки) - need_attentions (потребность во внимании) - need_big_place (необходимость большого пространства) - good_health (крепкое здоровье) - tolerates_loneliness (переносимость одиночества) - hypoallergenic (вызывает аллергию или нет) Требования: 1. Анализируй ТОЛЬКО явно указанную информацию из текста 2. Если параметр не упомянут - полностью исключи его из JSON 3. Строго соблюдай типы данных: boolean для всех параметров кроме colors (массив строк) 4. Запрещено добавлять любые другие поля, кроме указанных выше 5. Если размер не указан явно - не включай big/small/medium Верни ответ ТОЛЬКО в виде валидного JSON без комментариев и пояснений. Текст для анализа: {text} """ response = requests.post(OLLAMA_URL, json={"model": MODEL_NAME, "prompt": prompt, "stream": False}) if response.status_code == 200: return response.json().get("response", "Не удалось получить описание") else: return f"Ошибка при генерации описания для {file_path}" def save_description(breed, description): """Сохраняет описание в файл""" os.makedirs("breed_signs", exist_ok=True) filename = f"breed_signs/{breed}.txt" with open(filename, "w", encoding="utf-8") as f: f.write(pattern.sub("", description)) print(f"Сохранено: {filename}") def main(): with open("../../labels_dogs.json") as f: beers = json.load(f) for key in beers: name = beers[key].replace("_", " ") print(f"Генерация признаков для {name}...") if os.path.isfile(f"breed_signs/{beers[key]}.txt"): print(f"Описание уже существует: {beers[key]}.") continue description = analyze_dog_breed(f"breed_descriptions/{beers[key]}.txt") save_description(beers[key], description) if __name__ == "__main__": main()