sd.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { StabilityPath, StoreKey } from "@/app/constant";
  2. import { showToast } from "@/app/components/ui-lib";
  3. import { getHeaders } from "@/app/client/api";
  4. import { createPersistStore } from "@/app/utils/store";
  5. import { nanoid } from "nanoid";
  6. import { saveFileData } from "@/app/utils/file";
  7. export const useSdStore = createPersistStore<
  8. {
  9. currentId: number;
  10. draw: any[];
  11. },
  12. {
  13. getNextId: () => number;
  14. sendTask: (data: any, db: any, okCall?: Function) => void;
  15. updateDraw: (draw: any) => void;
  16. }
  17. >(
  18. {
  19. currentId: 0,
  20. draw: [],
  21. },
  22. (set, _get) => {
  23. function get() {
  24. return {
  25. ..._get(),
  26. ...methods,
  27. };
  28. }
  29. const methods = {
  30. getNextId() {
  31. const id = ++_get().currentId;
  32. set({ currentId: id });
  33. return id;
  34. },
  35. sendTask(data: any, db: any, okCall?: Function) {
  36. data = { ...data, id: nanoid(), status: "running" };
  37. set({ draw: [data, ..._get().draw] });
  38. // db.update(data);
  39. this.getNextId();
  40. this.stabilityRequestCall(data, db);
  41. okCall?.();
  42. },
  43. stabilityRequestCall(data: any, db: any) {
  44. const formData = new FormData();
  45. for (let paramsKey in data.params) {
  46. formData.append(paramsKey, data.params[paramsKey]);
  47. }
  48. const headers = getHeaders();
  49. delete headers["Content-Type"];
  50. fetch(`/api/stability/${StabilityPath.GeneratePath}/${data.model}`, {
  51. method: "POST",
  52. headers: {
  53. ...headers,
  54. Accept: "application/json",
  55. },
  56. body: formData,
  57. })
  58. .then((response) => response.json())
  59. .then((resData) => {
  60. if (resData.errors && resData.errors.length > 0) {
  61. this.updateDraw({
  62. ...data,
  63. status: "error",
  64. error: resData.errors[0],
  65. });
  66. this.getNextId();
  67. return;
  68. }
  69. if (resData.finish_reason === "SUCCESS") {
  70. this.updateDraw({
  71. ...data,
  72. status: "success",
  73. img_data: saveFileData(db, data.id, resData.image),
  74. });
  75. } else {
  76. this.updateDraw({
  77. ...data,
  78. status: "error",
  79. error: JSON.stringify(resData),
  80. });
  81. }
  82. this.getNextId();
  83. })
  84. .catch((error) => {
  85. this.updateDraw({ ...data, status: "error", error: error.message });
  86. console.error("Error:", error);
  87. this.getNextId();
  88. });
  89. },
  90. updateDraw(draw: any) {
  91. _get().draw.some((item, index) => {
  92. if (item.id === draw.id) {
  93. _get().draw[index] = draw;
  94. return true;
  95. }
  96. });
  97. },
  98. };
  99. return methods;
  100. },
  101. {
  102. name: StoreKey.SdList,
  103. version: 1.0,
  104. },
  105. );