File size: 9,041 Bytes
6f49c31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/usr/bin/env bash
set -e

echo ">>> [Script 2] This script will handle Claude analysis and config update."

###############################################################################
# 1. Ожидание нажатия Enter и получение дополнительных комментариев
###############################################################################

echo ">>> [Script 2] Введите дополнительные комментарии по поводу арта (или нажмите Enter, чтобы пропустить):"
read USER_COMMENTS

###############################################################################
# 2. Распаковываем все .zip в /workspace/MyLearningDataset/Images
###############################################################################
echo ">>> [Script 2] Unzipping all .zip in /workspace/MyLearningDataset/Images ..."
find /workspace/MyLearningDataset/Images -type f -name '*.zip' | while read zipf; do
    unzip -o "$zipf" -d /workspace/MyLearningDataset/Images
    rm -f "$zipf"
done

###############################################################################
# 3. Собираем до 35 .txt файлов
###############################################################################
echo ">>> [Script 2] Collecting up to 35 .txt files ..."
TXT_FILES=$(find /workspace/MyLearningDataset/Images -type f -name '*.txt' | head -n 35)

if [ -z "$TXT_FILES" ]; then
  echo "[Script 2] WARNING: No .txt files found (up to 35)."
fi

###############################################################################
# 4. Устанавливаем библиотеку anthropic (если не установлена)
#    И указываем ANTHROPIC_API_KEY
###############################################################################
echo ">>> [Script 2] Installing anthropic library (if needed) ..."
pip install anthropic

# Подставьте ваш реальный ключ, если нужно
ANTHROPIC_API_KEY="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"
export ANTHROPIC_API_KEY

###############################################################################
# 5. Запускаем Python-скрипт claude_analysis.py, передавая список файлов
###############################################################################
echo ">>> [Script 2] Sending request to Claude via claude_analysis.py ..."
# Сохраняем список файлов во временный файл
echo "$TXT_FILES" > /tmp/txt_files_list.txt

# Передаем комментарии через переменную окружения
export USER_COMMENTS="$USER_COMMENTS"

# Получаем ответ от скрипта и извлекаем только валидный JSON
PARSED_JSON=$(python /workspace/claude_analysis.py --files-list /tmp/txt_files_list.txt 2>/dev/null | grep -o '{"token".*}' || true)

# Выводим полный ответ для отладки
echo ">>> [Script 2] Raw response from claude_analysis.py:"
echo "$PARSED_JSON"
echo ">>> [Script 2] End of raw response"
echo

# Очистка временного файла
rm -f /tmp/txt_files_list.txt

if [ -z "$PARSED_JSON" ]; then
  echo "[Script 2] ERROR: Claude response is empty or not found."
  exit 1
fi

# Проверка на ошибку (на всякий случай)
if [[ "$PARSED_JSON" == *"error"* ]]; then
  echo "[Script 2] ERROR: JSON parse problem. See logs."
  echo "$PARSED_JSON"
  exit 1
fi

###############################################################################
# 6. Из полученного JSON извлекаем нужные поля и даем возможность их отредактировать
###############################################################################
# Сохраняем JSON во временный файл для редактирования
TMP_JSON="/tmp/claude_response.json"
echo "$PARSED_JSON" > "$TMP_JSON"

echo ">>> [Script 2] Сохранен файл с результатами анализа: $TMP_JSON"
echo ">>> [Script 2] Текущие значения:"
echo "----------------------------------------"
echo "token      = $(echo "$PARSED_JSON" | python -c 'import sys, json; print(json.load(sys.stdin)["token"])')"
echo "art_type   = $(echo "$PARSED_JSON" | python -c 'import sys, json; print(json.load(sys.stdin)["art_type"])')"
echo "style_name = $(echo "$PARSED_JSON" | python -c 'import sys, json; print(json.load(sys.stdin)["style_name"])')"
echo "model_name = $(echo "$PARSED_JSON" | python -c 'import sys, json; print(json.load(sys.stdin)["model_name"])')"
echo "prompts:"
echo "$PARSED_JSON" | python -c 'import sys, json; print("\n".join(json.load(sys.stdin)["prompts"]))'
echo "----------------------------------------"

echo ">>> [Script 2] Пожалуйста, проверьте и отредактируйте файл если нужно: $TMP_JSON"
echo ">>> [Script 2] После завершения редактирования нажмите Enter для продолжения..."
read

# Читаем обновленный JSON
PARSED_JSON=$(cat "$TMP_JSON")

# Проверяем валидность JSON
if ! echo "$PARSED_JSON" | python -c 'import sys,json; json.load(sys.stdin)' >/dev/null 2>&1; then
    echo "[Script 2] ERROR: Файл содержит невалидный JSON. Пожалуйста, исправьте и попробуйте снова."
    exit 1
fi

# Извлекаем значения из обновленного JSON
TOKEN=$(echo "$PARSED_JSON"      | python -c 'import sys, json; d=json.load(sys.stdin); print(d["token"])')
ART_TYPE=$(echo "$PARSED_JSON"   | python -c 'import sys, json; d=json.load(sys.stdin); print(d["art_type"])')
STYLE_NAME=$(echo "$PARSED_JSON" | python -c 'import sys, json; d=json.load(sys.stdin); print(d["style_name"])')
MODEL_NAME=$(echo "$PARSED_JSON" | python -c 'import sys, json; d=json.load(sys.stdin); print(d["model_name"])')

# Многострочные промпты
PROMPTS=$(echo "$PARSED_JSON"    | python -c '
import sys, json
d=json.load(sys.stdin)
prompts = d.get("prompts", [])
print("\n".join(prompts))
')

echo ">>> [Script 2] Обновленные значения:"
echo "token      = $TOKEN"
echo "art_type   = $ART_TYPE"
echo "style_name = $STYLE_NAME"
echo "model_name = $MODEL_NAME"
echo "prompts:"
echo "$PROMPTS"
echo

echo ">>> [Script 2] Нажмите Enter для продолжения или Ctrl+C для отмены..."
read

# Очистка временного файла
rm -f "$TMP_JSON"

###############################################################################
# 7. Переносим .txt и .png файлы в папку /workspace/MyLearningDataset/Images/1_{model_name}_{style_name}
###############################################################################
NEW_FOLDER="/workspace/MyLearningDataset/Images/1_${MODEL_NAME}_${STYLE_NAME}"
mkdir -p "$NEW_FOLDER"

echo ">>> [Script 2] Moving all .txt and .png files into $NEW_FOLDER ..."
find /workspace/MyLearningDataset/Images -type f \( -name '*.txt' -o -name '*.png' \) -exec mv -f {} "$NEW_FOLDER" \; 2>/dev/null || true

###############################################################################
# 8. Ищем FluxDatasetConfig.json и редактируем нужные поля
###############################################################################
FLUX_CONFIG_PATH=$(find /workspace -name "FluxDatasetConfig.json" | head -n 1)
if [ -z "$FLUX_CONFIG_PATH" ]; then
  echo "[Script 2] ERROR: FluxDatasetConfig.json not found!"
  exit 1
fi

echo ">>> [Script 2] Updating FluxDatasetConfig.json at $FLUX_CONFIG_PATH ..."
cat <<EOF > /workspace/update_flux_config.py
import json

path = r"${FLUX_CONFIG_PATH}"
with open(path, "r", encoding="utf-8") as f:
    config = json.load(f)

config["train_data_dir"] = "/workspace/MyLearningDataset/Images"
config["output_dir"] = "/workspace/MyLearningDataset/Models"
config["output_name"] = "${MODEL_NAME}"
config["huggingface_repo_id"] = "Gerchegg/${MODEL_NAME}"
config["logging_dir"] = "/workspace/MyLearningDataset/Logs"

# Форматируем промпты с дополнительными параметрами
formatted_prompts = []
negative_params = "--n low quality, worst quality, bad anatomy, bad composition, poor, low effort --w 1024 --h 1024 --d 1 --l 3 --s 20"

for prompt in """${PROMPTS}""".split('\n'):
    if prompt.strip():
        formatted_prompt = f"${TOKEN}, {prompt.strip()} {negative_params}"
        formatted_prompts.append(formatted_prompt)

# Объединяем промпты в строку с переносами строк
config["sample_prompts"] = "\n".join(formatted_prompts)

with open(path, "w", encoding="utf-8") as f:
    json.dump(config, f, ensure_ascii=False, indent=2)
EOF

python /workspace/update_flux_config.py

echo ">>> [Script 2] Done. Analysis complete!"