@lastbrain/ai-ui-react 1.0.15 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/useModelManagement.d.ts.map +1 -1
- package/dist/hooks/useModelManagement.js +16 -5
- package/dist/hooks/usePrompts.d.ts.map +1 -1
- package/dist/utils/modelManagement.d.ts.map +1 -1
- package/dist/utils/modelManagement.js +2 -2
- package/package.json +2 -2
- package/src/hooks/useAiStatus.ts +1 -1
- package/src/hooks/useModelManagement.ts +18 -5
- package/src/hooks/usePrompts.ts +63 -57
- package/src/utils/modelManagement.ts +22 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModelManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useModelManagement.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IAEvC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,eAAe,EAAE,MAAM,OAAO,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,OAAO,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"useModelManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useModelManagement.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IAEvC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,eAAe,EAAE,MAAM,OAAO,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,OAAO,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CA+K1B"}
|
|
@@ -103,23 +103,34 @@ export function useModelManagement(options = {}) {
|
|
|
103
103
|
const getInactiveModels = useCallback(() => {
|
|
104
104
|
return availableModels.filter((model) => !userModels.includes(model.id));
|
|
105
105
|
}, [availableModels, userModels]);
|
|
106
|
-
// Auto-fetch au mount -
|
|
106
|
+
// Auto-fetch au mount - si autoFetch ET (apiKey OU baseUrl avec proxy externe)
|
|
107
107
|
useEffect(() => {
|
|
108
|
+
const isExternalProxy = apiOptions.baseUrl && apiOptions.baseUrl.includes("/api/lastbrain");
|
|
108
109
|
console.log("[useModelManagement] useEffect triggered:", {
|
|
109
110
|
autoFetch,
|
|
110
111
|
hasApiKey: !!apiOptions.apiKey,
|
|
112
|
+
hasBaseUrl: !!apiOptions.baseUrl,
|
|
113
|
+
isExternalProxy,
|
|
111
114
|
apiKeyPreview: apiOptions.apiKey
|
|
112
115
|
? apiOptions.apiKey.substring(0, 10) + "..."
|
|
113
116
|
: "none",
|
|
117
|
+
baseUrl: apiOptions.baseUrl || "none",
|
|
114
118
|
});
|
|
115
|
-
|
|
119
|
+
// Auto-fetch si autoFetch est activé ET qu'on a soit une apiKey soit un proxy externe
|
|
120
|
+
if (autoFetch && (apiOptions.apiKey || isExternalProxy)) {
|
|
116
121
|
console.log("[useModelManagement] Starting auto-fetch...");
|
|
117
122
|
Promise.all([refreshModels(), refreshUserModels()]);
|
|
118
123
|
}
|
|
119
|
-
else if (autoFetch && !apiOptions.apiKey) {
|
|
120
|
-
console.warn("[useModelManagement] autoFetch is enabled but no apiKey provided. Skipping automatic fetch.");
|
|
124
|
+
else if (autoFetch && !apiOptions.apiKey && !isExternalProxy) {
|
|
125
|
+
console.warn("[useModelManagement] autoFetch is enabled but no apiKey or baseUrl provided. Skipping automatic fetch.");
|
|
121
126
|
}
|
|
122
|
-
}, [
|
|
127
|
+
}, [
|
|
128
|
+
autoFetch,
|
|
129
|
+
refreshModels,
|
|
130
|
+
refreshUserModels,
|
|
131
|
+
apiOptions.apiKey,
|
|
132
|
+
apiOptions.baseUrl,
|
|
133
|
+
]);
|
|
123
134
|
return {
|
|
124
135
|
availableModels,
|
|
125
136
|
userModels,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePrompts.d.ts","sourceRoot":"","sources":["../../src/hooks/usePrompts.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,YAAY,EAAE,CACZ,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,KACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,aAAa,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED,wBAAgB,UAAU,IAAI,gBAAgB,
|
|
1
|
+
{"version":3,"file":"usePrompts.d.ts","sourceRoot":"","sources":["../../src/hooks/usePrompts.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,YAAY,EAAE,CACZ,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,KACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,aAAa,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CAgL7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelManagement.d.ts","sourceRoot":"","sources":["../../src/utils/modelManagement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CACR,KAAK,CAAC;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CACH,
|
|
1
|
+
{"version":3,"file":"modelManagement.d.ts","sourceRoot":"","sources":["../../src/utils/modelManagement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CACR,KAAK,CAAC;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CACH,CAqCA;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC,CAqCnB"}
|
|
@@ -45,7 +45,7 @@ export async function getAvailableModels(options = {}) {
|
|
|
45
45
|
const response = await fetch(endpoint, {
|
|
46
46
|
method: "GET",
|
|
47
47
|
headers,
|
|
48
|
-
credentials: isExternalProxy ?
|
|
48
|
+
credentials: isExternalProxy ? "include" : "same-origin",
|
|
49
49
|
});
|
|
50
50
|
if (!response.ok) {
|
|
51
51
|
throw new Error(`Erreur lors de la récupération des modèles: ${response.status}`);
|
|
@@ -72,7 +72,7 @@ export async function getUserModels(options = {}) {
|
|
|
72
72
|
const response = await fetch(endpoint, {
|
|
73
73
|
method: "GET",
|
|
74
74
|
headers,
|
|
75
|
-
credentials: isExternalProxy ?
|
|
75
|
+
credentials: isExternalProxy ? "include" : "same-origin",
|
|
76
76
|
});
|
|
77
77
|
if (!response.ok) {
|
|
78
78
|
throw new Error(`Erreur lors de la récupération des modèles utilisateur: ${response.status}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lastbrain/ai-ui-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"description": "Headless React components for LastBrain AI UI Kit",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"lucide-react": "^0.257.0",
|
|
51
|
-
"@lastbrain/ai-ui-core": "1.0.
|
|
51
|
+
"@lastbrain/ai-ui-core": "1.0.16"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/react": "^19.2.0",
|
package/src/hooks/useAiStatus.ts
CHANGED
|
@@ -175,25 +175,38 @@ export function useModelManagement(
|
|
|
175
175
|
return availableModels.filter((model) => !userModels.includes(model.id));
|
|
176
176
|
}, [availableModels, userModels]);
|
|
177
177
|
|
|
178
|
-
// Auto-fetch au mount -
|
|
178
|
+
// Auto-fetch au mount - si autoFetch ET (apiKey OU baseUrl avec proxy externe)
|
|
179
179
|
useEffect(() => {
|
|
180
|
+
const isExternalProxy =
|
|
181
|
+
apiOptions.baseUrl && apiOptions.baseUrl.includes("/api/lastbrain");
|
|
182
|
+
|
|
180
183
|
console.log("[useModelManagement] useEffect triggered:", {
|
|
181
184
|
autoFetch,
|
|
182
185
|
hasApiKey: !!apiOptions.apiKey,
|
|
186
|
+
hasBaseUrl: !!apiOptions.baseUrl,
|
|
187
|
+
isExternalProxy,
|
|
183
188
|
apiKeyPreview: apiOptions.apiKey
|
|
184
189
|
? apiOptions.apiKey.substring(0, 10) + "..."
|
|
185
190
|
: "none",
|
|
191
|
+
baseUrl: apiOptions.baseUrl || "none",
|
|
186
192
|
});
|
|
187
193
|
|
|
188
|
-
|
|
194
|
+
// Auto-fetch si autoFetch est activé ET qu'on a soit une apiKey soit un proxy externe
|
|
195
|
+
if (autoFetch && (apiOptions.apiKey || isExternalProxy)) {
|
|
189
196
|
console.log("[useModelManagement] Starting auto-fetch...");
|
|
190
197
|
Promise.all([refreshModels(), refreshUserModels()]);
|
|
191
|
-
} else if (autoFetch && !apiOptions.apiKey) {
|
|
198
|
+
} else if (autoFetch && !apiOptions.apiKey && !isExternalProxy) {
|
|
192
199
|
console.warn(
|
|
193
|
-
"[useModelManagement] autoFetch is enabled but no apiKey provided. Skipping automatic fetch."
|
|
200
|
+
"[useModelManagement] autoFetch is enabled but no apiKey or baseUrl provided. Skipping automatic fetch."
|
|
194
201
|
);
|
|
195
202
|
}
|
|
196
|
-
}, [
|
|
203
|
+
}, [
|
|
204
|
+
autoFetch,
|
|
205
|
+
refreshModels,
|
|
206
|
+
refreshUserModels,
|
|
207
|
+
apiOptions.apiKey,
|
|
208
|
+
apiOptions.baseUrl,
|
|
209
|
+
]);
|
|
197
210
|
|
|
198
211
|
return {
|
|
199
212
|
availableModels,
|
package/src/hooks/usePrompts.ts
CHANGED
|
@@ -52,48 +52,51 @@ export function usePrompts(): UsePromptsReturn {
|
|
|
52
52
|
const [loading, setLoading] = useState(false);
|
|
53
53
|
const [error, setError] = useState<string | null>(null);
|
|
54
54
|
|
|
55
|
-
const fetchPrompts = useCallback(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
55
|
+
const fetchPrompts = useCallback(
|
|
56
|
+
async (options?: UsePromptsOptions) => {
|
|
57
|
+
try {
|
|
58
|
+
setLoading(true);
|
|
59
|
+
setError(null);
|
|
60
|
+
|
|
61
|
+
const params = new URLSearchParams();
|
|
62
|
+
if (options?.type) params.append("type", options.type);
|
|
63
|
+
if (options?.favorite !== undefined)
|
|
64
|
+
params.append("favorite", String(options.favorite));
|
|
65
|
+
|
|
66
|
+
// Déterminer si on est dans un contexte externe (proxy nécessaire)
|
|
67
|
+
const isExternalProxy = baseUrl && baseUrl.includes("/api/lastbrain");
|
|
68
|
+
|
|
69
|
+
// Use public route without auth if public=true, otherwise use auth route
|
|
70
|
+
let endpoint: string;
|
|
71
|
+
if (options?.public) {
|
|
72
|
+
endpoint = isExternalProxy
|
|
73
|
+
? `${baseUrl}/ai/public/prompts?${params}`
|
|
74
|
+
: `/api/ai/public/prompts?${params}`;
|
|
75
|
+
} else {
|
|
76
|
+
endpoint = isExternalProxy
|
|
77
|
+
? `${baseUrl}/ai/auth/prompts?${params}`
|
|
78
|
+
: `/api/ai/auth/prompts?${params}`;
|
|
79
|
+
}
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
console.log("[usePrompts] Fetching prompts from:", endpoint);
|
|
81
82
|
|
|
82
|
-
|
|
83
|
+
const response = await fetch(endpoint);
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
const data = await response.json();
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
if (response.ok) {
|
|
88
|
+
setPrompts(data.prompts || []);
|
|
89
|
+
} else {
|
|
90
|
+
setError(data.error || "Failed to fetch prompts");
|
|
91
|
+
}
|
|
92
|
+
} catch (err) {
|
|
93
|
+
setError(err instanceof Error ? err.message : "Unknown error");
|
|
94
|
+
} finally {
|
|
95
|
+
setLoading(false);
|
|
90
96
|
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
setLoading(false);
|
|
95
|
-
}
|
|
96
|
-
}, [baseUrl]);
|
|
97
|
+
},
|
|
98
|
+
[baseUrl]
|
|
99
|
+
);
|
|
97
100
|
|
|
98
101
|
const createPrompt = useCallback(
|
|
99
102
|
async (data: Omit<Prompt, "id" | "created_at" | "updated_at">) => {
|
|
@@ -159,32 +162,35 @@ export function usePrompts(): UsePromptsReturn {
|
|
|
159
162
|
[baseUrl]
|
|
160
163
|
);
|
|
161
164
|
|
|
162
|
-
const deletePrompt = useCallback(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
+
const deletePrompt = useCallback(
|
|
166
|
+
async (id: string) => {
|
|
167
|
+
try {
|
|
168
|
+
setError(null);
|
|
165
169
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
+
const isExternalProxy = baseUrl && baseUrl.includes("/api/lastbrain");
|
|
171
|
+
const endpoint = isExternalProxy
|
|
172
|
+
? `${baseUrl}/ai/auth/prompts?id=${id}`
|
|
173
|
+
: `/api/ai/auth/prompts?id=${id}`;
|
|
170
174
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
175
|
+
const response = await fetch(endpoint, {
|
|
176
|
+
method: "DELETE",
|
|
177
|
+
});
|
|
174
178
|
|
|
175
|
-
|
|
179
|
+
const result = await response.json();
|
|
176
180
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
+
if (response.ok) {
|
|
182
|
+
return true;
|
|
183
|
+
} else {
|
|
184
|
+
setError(result.error || "Failed to delete prompt");
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
} catch (err) {
|
|
188
|
+
setError(err instanceof Error ? err.message : "Unknown error");
|
|
181
189
|
return false;
|
|
182
190
|
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
}, [baseUrl]);
|
|
191
|
+
},
|
|
192
|
+
[baseUrl]
|
|
193
|
+
);
|
|
188
194
|
|
|
189
195
|
const incrementStat = useCallback(
|
|
190
196
|
async (promptId: string, statType: "views" | "used" | "picked") => {
|
|
@@ -65,11 +65,16 @@ export async function getAvailableModels(
|
|
|
65
65
|
|
|
66
66
|
// Déterminer si on est dans un contexte externe (proxy nécessaire)
|
|
67
67
|
const isExternalProxy = baseUrl && baseUrl.includes("/api/lastbrain");
|
|
68
|
-
const endpoint = isExternalProxy
|
|
69
|
-
? `${baseUrl}/ai/auth/ai-models-available`
|
|
70
|
-
: `/api/public/v1/ai/models/available`;
|
|
71
|
-
|
|
72
|
-
console.log(
|
|
68
|
+
const endpoint = isExternalProxy
|
|
69
|
+
? `${baseUrl}/ai/auth/ai-models-available` // → /api/lastbrain/ai/auth/ai-models-available
|
|
70
|
+
: `/api/public/v1/ai/models/available`; // → /api/public/v1/ai/models/available
|
|
71
|
+
|
|
72
|
+
console.log(
|
|
73
|
+
"[getAvailableModels] isExternalProxy:",
|
|
74
|
+
isExternalProxy,
|
|
75
|
+
"endpoint:",
|
|
76
|
+
endpoint
|
|
77
|
+
);
|
|
73
78
|
|
|
74
79
|
const headers: Record<string, string> = {};
|
|
75
80
|
|
|
@@ -81,7 +86,7 @@ export async function getAvailableModels(
|
|
|
81
86
|
const response = await fetch(endpoint, {
|
|
82
87
|
method: "GET",
|
|
83
88
|
headers,
|
|
84
|
-
credentials: isExternalProxy ?
|
|
89
|
+
credentials: isExternalProxy ? "include" : "same-origin",
|
|
85
90
|
});
|
|
86
91
|
|
|
87
92
|
if (!response.ok) {
|
|
@@ -104,11 +109,16 @@ export async function getUserModels(
|
|
|
104
109
|
|
|
105
110
|
// Déterminer si on est dans un contexte externe (proxy nécessaire)
|
|
106
111
|
const isExternalProxy = baseUrl && baseUrl.includes("/api/lastbrain");
|
|
107
|
-
const endpoint = isExternalProxy
|
|
108
|
-
? `${baseUrl}/ai/auth/user-models`
|
|
109
|
-
: `/api/public/v1/ai/user/models`;
|
|
110
|
-
|
|
111
|
-
console.log(
|
|
112
|
+
const endpoint = isExternalProxy
|
|
113
|
+
? `${baseUrl}/ai/auth/user-models` // → /api/lastbrain/ai/auth/user-models
|
|
114
|
+
: `/api/public/v1/ai/user/models`; // → /api/public/v1/ai/user/models
|
|
115
|
+
|
|
116
|
+
console.log(
|
|
117
|
+
"[getUserModels] isExternalProxy:",
|
|
118
|
+
isExternalProxy,
|
|
119
|
+
"endpoint:",
|
|
120
|
+
endpoint
|
|
121
|
+
);
|
|
112
122
|
|
|
113
123
|
const headers: Record<string, string> = {};
|
|
114
124
|
|
|
@@ -120,7 +130,7 @@ export async function getUserModels(
|
|
|
120
130
|
const response = await fetch(endpoint, {
|
|
121
131
|
method: "GET",
|
|
122
132
|
headers,
|
|
123
|
-
credentials: isExternalProxy ?
|
|
133
|
+
credentials: isExternalProxy ? "include" : "same-origin",
|
|
124
134
|
});
|
|
125
135
|
|
|
126
136
|
if (!response.ok) {
|