llm_start_task.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package llm
  2. import (
  3. "context"
  4. "yunion.io/x/jsonutils"
  5. api "yunion.io/x/onecloud/pkg/apis/llm"
  6. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  7. "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
  8. "yunion.io/x/onecloud/pkg/llm/models"
  9. "yunion.io/x/onecloud/pkg/llm/options"
  10. "yunion.io/x/onecloud/pkg/mcclient/auth"
  11. "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
  12. "yunion.io/x/onecloud/pkg/util/logclient"
  13. )
  14. type LLMStartTask struct {
  15. taskman.STask
  16. }
  17. func init() {
  18. taskman.RegisterTask(LLMStartTask{})
  19. }
  20. func (task *LLMStartTask) taskFailed(ctx context.Context, llm *models.SLLM, err string) {
  21. llm.SetStatus(ctx, task.UserCred, api.LLM_STATUS_START_FAIL, err)
  22. db.OpsLog.LogEvent(llm, db.ACT_START, err, task.UserCred)
  23. logclient.AddActionLogWithStartable(task, llm, logclient.ACT_START, err, task.UserCred, false)
  24. // llm.NotifyRequest(ctx, task.GetUserCred(), notify.ActionStart, nil, false)
  25. task.SetStageFailed(ctx, jsonutils.NewString(err))
  26. }
  27. func (task *LLMStartTask) taskComplete(ctx context.Context, llm *models.SLLM) {
  28. llm.SetStatus(ctx, task.GetUserCred(), api.LLM_STATUS_RUNNING, "start complete")
  29. // llm.NotifyRequest(ctx, task.GetUserCred(), notify.ActionStart, nil, true)
  30. task.SetStageComplete(ctx, nil)
  31. }
  32. func (t *LLMStartTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
  33. t.requestStart(ctx, obj.(*models.SLLM))
  34. }
  35. func (t *LLMStartTask) requestStart(ctx context.Context, llm *models.SLLM) {
  36. t.SetStage("OnStarted", nil)
  37. s := auth.GetSession(ctx, t.GetUserCred(), options.Options.Region)
  38. err := s.WithTaskCallback(t.GetId(), func() error {
  39. _, err := compute.Servers.PerformAction(s, llm.CmpId, "start", nil)
  40. return err
  41. })
  42. if err != nil {
  43. t.taskFailed(ctx, llm, err.Error())
  44. return
  45. }
  46. }
  47. func (t *LLMStartTask) OnStartedFailed(ctx context.Context, llm *models.SLLM, err jsonutils.JSONObject) {
  48. t.taskFailed(ctx, llm, err.String())
  49. }
  50. func (t *LLMStartTask) OnStarted(ctx context.Context, llm *models.SLLM, reason jsonutils.JSONObject) {
  51. err := llm.GetLLMContainerDriver().StartLLM(ctx, t.GetUserCred(), llm)
  52. if err != nil {
  53. t.taskFailed(ctx, llm, err.Error())
  54. return
  55. }
  56. t.taskComplete(ctx, llm)
  57. }