Дообучение модели завершилось
Fine-tune может занять от 30 минут до нескольких суток. Открывать раз в час dashboard — пытка. Полл-функция раз в N минут, проверяющая статус job-а:
import os, json, requests, openai
JOB_ID = os.environ["FT_JOB_ID"]STATE = "/tmp/ft-state.json"
def handler(event, context): job = openai.fine_tuning.jobs.retrieve(JOB_ID) cur = job.status # validating_files / running / succeeded / failed / cancelled prev = (json.load(open(STATE)) if os.path.exists(STATE) else {}).get("status") if cur != prev: push(f"🎓 Fine-tune: {cur}", f"Job: {JOB_ID}\nModel: {job.fine_tuned_model or '—'}\n" f"Trained tokens: {getattr(job,'trained_tokens',None)}", 10 if cur == "failed" else 5 if cur == "succeeded" else 4) json.dump({"status": cur}, open(STATE, "w")) return {"statusCode": 200}
def push(t, m, p): requests.post(f"{os.environ['NOTIFLY_URL']}/message", params={"token": os.environ["NOTIFLY_TOKEN"]}, json={"title": t, "message": m, "priority": p}, timeout=5)Поставьте timer */5 * * * ? *. После succeeded сразу запустите
eval-runner и сравните с базовой моделью.
Связанные рецепты
Заголовок раздела «Связанные рецепты»- Просадка eval / качества — следующий шаг.
- Завершение длинных задач — общий шаблон.