llm_container.go 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package models
  2. import (
  3. "context"
  4. "yunion.io/x/jsonutils"
  5. "yunion.io/x/pkg/errors"
  6. commonapi "yunion.io/x/onecloud/pkg/apis"
  7. "yunion.io/x/onecloud/pkg/apis/compute"
  8. api "yunion.io/x/onecloud/pkg/apis/llm"
  9. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  10. "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
  11. "yunion.io/x/onecloud/pkg/llm/utils"
  12. "yunion.io/x/onecloud/pkg/mcclient"
  13. )
  14. var (
  15. llmContainerManager *SLLMContainerManager
  16. )
  17. func GetLLMContainerManager() *SLLMContainerManager {
  18. if llmContainerManager != nil {
  19. return llmContainerManager
  20. }
  21. m := NewLLMContainerManager(SLLMContainer{}, "llm_container", "llm_containers")
  22. llmContainerManager = &m
  23. llmContainerManager.SetVirtualObject(llmContainerManager)
  24. return llmContainerManager
  25. }
  26. func NewLLMContainerManager(dt interface{}, keyword string, keywordPlural string) SLLMContainerManager {
  27. return SLLMContainerManager{
  28. SVirtualResourceBaseManager: db.NewVirtualResourceBaseManager(dt, "llm_containers_tbl", keyword, keywordPlural),
  29. }
  30. }
  31. type SLLMContainerManager struct {
  32. db.SVirtualResourceBaseManager
  33. }
  34. type SLLMContainer struct {
  35. db.SVirtualResourceBase
  36. LLMId string `width:"128" charset:"ascii" nullable:"false" list:"user" primary:"true" create:"required"`
  37. CmpId string `width:"128" charset:"ascii" nullable:"true" list:"user" create:"required"`
  38. Type string `width:"16" charset:"ascii" list:"user" primary:"true" create:"required"`
  39. RunningAppId string `width:"128" charset:"ascii" nullable:"true" list:"user"`
  40. }
  41. func (m *SLLMContainerManager) CreateOnLLM(
  42. ctx context.Context,
  43. userCred mcclient.TokenCredential,
  44. ownerId mcclient.IIdentityProvider,
  45. llm *SLLM, cmpId string, svrName string,
  46. ) (*SLLMContainer, error) {
  47. input := &api.LLMContainerCreateInput{
  48. LLMId: llm.Id,
  49. Type: string(llm.GetLLMContainerDriver().GetType()),
  50. CmpId: cmpId,
  51. }
  52. input.Name = svrName
  53. obj, err := db.DoCreate(m, ctx, userCred, nil, jsonutils.Marshal(input), ownerId)
  54. if err != nil {
  55. return nil, errors.Wrap(err, "create llm container")
  56. }
  57. return obj.(*SLLMContainer), nil
  58. }
  59. func (m *SLLMContainerManager) FetchByLLMId(
  60. llmId string,
  61. ) (*SLLMContainer, error) {
  62. lc := &SLLMContainer{}
  63. if err := m.Query().Equals("llm_id", llmId).First(lc); err != nil {
  64. return nil, errors.Wrapf(err, "query llm container by llm id %s", llmId)
  65. }
  66. lc.SetModelManager(m, lc)
  67. return lc, nil
  68. }
  69. func (lc *SLLMContainer) GetSContainer(ctx context.Context) (*compute.SContainer, error) {
  70. return utils.GetContainer(ctx, lc.CmpId)
  71. }
  72. func (lc *SLLMContainer) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
  73. return lc.SVirtualResourceBase.Delete(ctx, userCred)
  74. }
  75. func (lc *SLLMContainer) StartDeleteTask(ctx context.Context, userCred mcclient.TokenCredential, parentTaskId string) error {
  76. task, err := taskman.TaskManager.NewTask(ctx, "LLMContainerDeleteTask", lc, userCred, nil, parentTaskId, "", nil)
  77. if err != nil {
  78. return err
  79. }
  80. lc.SetStatus(ctx, userCred, commonapi.STATUS_DELETING, "")
  81. task.ScheduleRun(nil)
  82. return nil
  83. }