beerds/scripts/assistant/cats_descriptions.py

99 lines
5.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import os
import requests
# Основные настройки
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "qwen3:30b-a3b" # Имя модели в Ollama
GIGA_URL = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
GIGA_ODEL_NAME = "GigaChat-2-Max"
def generate_cat_breed_description(breed):
"""Генерирует подробное описание породы кошки с помощью Ollama"""
prompt = f"""Создай подробное и структурированное описание породы кошки {breed}, включая следующие разделы:
1. Происхождение и история породы (откуда появилась, легенды, если есть)
2. Физические характеристики (размер, вес, тип и текстура шерсти, уникальные черты морды или тела)
3. Характер и поведение (темперамент, уровень привязанности к хозяину, активность, игривость, склонность к мяуканью)
4. Совместимость (с детьми, другими кошками и собаками, отношение к незнакомцам)
5. Интеллект и обучаемость (способность к трюкам, приучение к лотку, когтеточке, любопытство)
6. Уход и содержание (особенности груминга, потребность в вертикальном пространстве/игровых комплексах, гигиена ушей и глаз)
7. Здоровье и генетика (характерные для породы заболевания, средняя продолжительность жизни)
8. Питание (склонность к перееданию или аллергиям, рекомендации по рациону)
9. Итог: кому идеально подойдет эта порода (для домоседов, больших семей, аллергиков и т.д.)
Описание должно быть написано живым, но информативным языком, с четкой структурой."""
# response = requests.post(OLLAMA_URL,
# json={
# "model": MODEL_NAME,
# "prompt": prompt,
# "stream": False,
# })
response = requests.post(GIGA_URL,
headers={
'Content-Type': 'application/json',
'Accept': 'application/json',
"Authorization": "Bearer "},
data=json.dumps({
"model": GIGA_ODEL_NAME,
"messages":[{
"role": "user",
"content": prompt,
}],
"temperature": 0,
"top_p": 0,
"stream": False,
"max_tokens": 3000,
"repetition_penalty": 1,
"update_interval": 0
}), verify=False
)
if response.status_code == 200:
print(response.json())
return response.json().get("choices")[0].get("message").get("content")
#return response.json().get("response", "Не удалось получить описание")
else:
return f"Ошибка при генерации описания для {breed}, {response.status_code}, {response.text}"
def save_description(breed_file_name, description):
"""Сохраняет описание в файл"""
os.makedirs("cat_descriptions", exist_ok=True)
filename = f"cat_descriptions/{breed_file_name}.txt"
with open(filename, "w", encoding="utf-8") as f:
f.write(description)
print(f"Сохранено: {filename}")
def main():
# Путь к JSON файлу с метками кошек
labels_path = "../../labels_cats.json"
if not os.path.exists(labels_path):
print(f"Файл {labels_path} не найден!")
return
with open(labels_path, encoding="utf-8") as f:
cats = json.load(f)
for key in cats:
# Превращаем "british_shorthair" в "British Shorthair" для промпта
name = cats[key].replace("_", " ")
file_key = cats[key]
print(f"Генерация статьи для кошки: {name}...")
# Проверка, существует ли файл, чтобы не тратить токены/время
if os.path.isfile(f"cat_descriptions/{file_key}.txt"):
print(f"Описание уже существует: {file_key}.")
continue
description = generate_cat_breed_description(name)
save_description(file_key, description)
if __name__ == "__main__":
main()