File size: 3,621 Bytes
658125c
36bc1d5
658125c
 
 
 
45d9469
 
 
 
 
 
 
 
 
36bc1d5
45d9469
 
 
658125c
45d9469
36bc1d5
45d9469
 
 
 
 
 
 
 
 
 
36bc1d5
45d9469
 
 
36bc1d5
45d9469
658125c
45d9469
 
 
658125c
 
 
36bc1d5
658125c
 
 
45d9469
658125c
45d9469
36bc1d5
 
 
 
 
 
658125c
36bc1d5
658125c
 
36bc1d5
45d9469
658125c
 
 
 
 
36bc1d5
658125c
 
 
 
45d9469
658125c
45d9469
36bc1d5
 
 
 
 
 
658125c
36bc1d5
658125c
 
36bc1d5
45d9469
658125c
 
 
89493ee
 
36bc1d5
89493ee
 
 
 
45d9469
89493ee
45d9469
 
 
36bc1d5
45d9469
 
 
89493ee
36bc1d5
89493ee
 
36bc1d5
45d9469
89493ee
 
 
658125c
 
 
 
89493ee
658125c
 
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
import { useCallback } from "react";
import { devLog, devError } from "../utils/devLogger";

const API_BASE = "https://tcmmichaelb139-evolutiontransformer.hf.space";

export const useAPI = () => {
  const checkTaskStatus = useCallback(
    async (taskId, successCallback, errorCallback) => {
      try {
        const response = await fetch(`${API_BASE}/tasks/${taskId}`, {
          credentials: "include",
        });

        if (!response.ok) {
          const error = `HTTP ${response.status}: ${response.statusText}`;
          devError("Task check failed:", error);
          if (errorCallback) errorCallback(error);
          return;
        }

        const data = await response.json();
        devLog("Task status:", data.status);

        if (data.status === "SUCCESS") {
          successCallback(data.result);
        } else if (data.status === "PENDING") {
          setTimeout(
            () => checkTaskStatus(taskId, successCallback, errorCallback),
            1000
          );
        } else if (data.status === "FAILURE") {
          const error = data.result || "Task failed";
          devError("Task failed:", error);
          if (errorCallback) errorCallback(error);
        }
      } catch (error) {
        devError("Task check error:", error);
        if (errorCallback) errorCallback(error.message);
      }
    },
    []
  );

  const fetchModels = useCallback(async () => {
    try {
      devLog("Fetching models...");
      const response = await fetch(`${API_BASE}/list_models`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        credentials: "include",
      });

      if (!response.ok) {
        const error = `HTTP ${response.status}: ${response.statusText}`;
        devError("Fetch models failed:", error);
        throw new Error(error);
      }

      const data = await response.json();
      devLog("Fetch models response:", data);
      return data.task_id;
    } catch (error) {
      devError("Fetch models error:", error);
      throw error;
    }
  }, []);

  const mergeModels = useCallback(async (mergeData) => {
    try {
      devLog("Merging models with data:", mergeData);
      const response = await fetch(`${API_BASE}/merge`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(mergeData),
        credentials: "include",
      });

      if (!response.ok) {
        const error = `HTTP ${response.status}: ${response.statusText}`;
        devError("Merge failed:", error);
        throw new Error(error);
      }

      const data = await response.json();
      devLog("Merge response:", data);
      return data.task_id;
    } catch (error) {
      devError("Merge error:", error);
      throw error;
    }
  }, []);

  const inference = useCallback(async (inferenceData) => {
    try {
      devLog("Running inference with data:", inferenceData);
      const response = await fetch(`${API_BASE}/generate`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(inferenceData),
        credentials: "include",
      });

      if (!response.ok) {
        const error = `HTTP ${response.status}: ${response.statusText}`;
        devError("Inference failed:", error);
        throw new Error(error);
      }

      const data = await response.json();
      devLog("Inference response:", data);
      return data;
    } catch (error) {
      devError("Inference error:", error);
      throw error;
    }
  }, []);

  return {
    checkTaskStatus,
    fetchModels,
    mergeModels,
    inference,
  };
};