@lastbrain/ai-ui-react 1.0.15 → 1.0.17

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AiPromptPanel.d.ts","sourceRoot":"","sources":["../../src/components/AiPromptPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,SAAS,CAAC;IAE1D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,QAAQ,EACR,MAAM,EAAE,OAAiB,EACzB,MAAW,EACX,UAAU,EACV,QAAQ,EACR,qBAA6B,EAC7B,eAAoB,EACpB,UAAe,EACf,aAAa,EACb,MAAM,EACN,OAAO,GACR,EAAE,kBAAkB,kDAmpCpB"}
1
+ {"version":3,"file":"AiPromptPanel.d.ts","sourceRoot":"","sources":["../../src/components/AiPromptPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,SAAS,CAAC;IAE1D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,QAAQ,EACR,MAAM,EAAE,OAAiB,EACzB,MAAW,EACX,UAAU,EACV,QAAQ,EACR,qBAA6B,EAC7B,eAAoB,EACpB,UAAe,EACf,aAAa,EACb,MAAM,EACN,OAAO,GACR,EAAE,kBAAkB,kDAqpCpB"}
@@ -31,7 +31,9 @@ export function AiPromptPanel({ isOpen, onClose, onSubmit, uiMode: _uiMode = "mo
31
31
  apiKey,
32
32
  baseUrl,
33
33
  category: "text", // Par défaut pour AiPromptPanel
34
- autoFetch: enableModelManagement && availableModels.length === 0 && !!apiKey,
34
+ autoFetch: enableModelManagement &&
35
+ availableModels.length === 0 &&
36
+ (!!apiKey || !!baseUrl),
35
37
  });
36
38
  // Utiliser soit les props externes soit la gestion automatique
37
39
  const effectiveAvailableModels = availableModels.length > 0
@@ -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,CAkK1B"}
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 - seulement si autoFetch ET apiKey sont présents
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
- if (autoFetch && apiOptions.apiKey) {
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
- }, [autoFetch, refreshModels, refreshUserModels, apiOptions.apiKey]);
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,CA0K7C"}
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,CAgCA;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC,CAgCnB"}
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 ? 'include' : 'same-origin',
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 ? 'include' : 'same-origin',
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.15",
3
+ "version": "1.0.17",
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.8"
51
+ "@lastbrain/ai-ui-core": "1.0.16"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/react": "^19.2.0",
@@ -102,7 +102,9 @@ export function AiPromptPanel({
102
102
  baseUrl,
103
103
  category: "text", // Par défaut pour AiPromptPanel
104
104
  autoFetch:
105
- enableModelManagement && availableModels.length === 0 && !!apiKey,
105
+ enableModelManagement &&
106
+ availableModels.length === 0 &&
107
+ (!!apiKey || !!baseUrl),
106
108
  });
107
109
 
108
110
  // Utiliser soit les props externes soit la gestion automatique
@@ -24,7 +24,7 @@ export function useAiStatus(options?: UseAiStatusOptions): UseAiStatusResult {
24
24
 
25
25
  const fetchStatus = useCallback(async () => {
26
26
  console.log("[useAiStatus] Starting status fetch");
27
-
27
+
28
28
  setLoading(true);
29
29
  setError(null);
30
30
  try {
@@ -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 - seulement si autoFetch ET apiKey sont présents
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
- if (autoFetch && apiOptions.apiKey) {
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
- }, [autoFetch, refreshModels, refreshUserModels, apiOptions.apiKey]);
203
+ }, [
204
+ autoFetch,
205
+ refreshModels,
206
+ refreshUserModels,
207
+ apiOptions.apiKey,
208
+ apiOptions.baseUrl,
209
+ ]);
197
210
 
198
211
  return {
199
212
  availableModels,
@@ -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(async (options?: UsePromptsOptions) => {
56
- try {
57
- setLoading(true);
58
- setError(null);
59
-
60
- const params = new URLSearchParams();
61
- if (options?.type) params.append("type", options.type);
62
- if (options?.favorite !== undefined)
63
- params.append("favorite", String(options.favorite));
64
-
65
- // Déterminer si on est dans un contexte externe (proxy nécessaire)
66
- const isExternalProxy = baseUrl && baseUrl.includes("/api/lastbrain");
67
-
68
- // Use public route without auth if public=true, otherwise use auth route
69
- let endpoint: string;
70
- if (options?.public) {
71
- endpoint = isExternalProxy
72
- ? `${baseUrl}/ai/public/prompts?${params}`
73
- : `/api/ai/public/prompts?${params}`;
74
- } else {
75
- endpoint = isExternalProxy
76
- ? `${baseUrl}/ai/auth/prompts?${params}`
77
- : `/api/ai/auth/prompts?${params}`;
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
- console.log("[usePrompts] Fetching prompts from:", endpoint);
81
+ console.log("[usePrompts] Fetching prompts from:", endpoint);
81
82
 
82
- const response = await fetch(endpoint);
83
+ const response = await fetch(endpoint);
83
84
 
84
- const data = await response.json();
85
+ const data = await response.json();
85
86
 
86
- if (response.ok) {
87
- setPrompts(data.prompts || []);
88
- } else {
89
- setError(data.error || "Failed to fetch prompts");
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
- } catch (err) {
92
- setError(err instanceof Error ? err.message : "Unknown error");
93
- } finally {
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(async (id: string) => {
163
- try {
164
- setError(null);
165
+ const deletePrompt = useCallback(
166
+ async (id: string) => {
167
+ try {
168
+ setError(null);
165
169
 
166
- const isExternalProxy = baseUrl && baseUrl.includes("/api/lastbrain");
167
- const endpoint = isExternalProxy
168
- ? `${baseUrl}/ai/auth/prompts?id=${id}`
169
- : `/api/ai/auth/prompts?id=${id}`;
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
- const response = await fetch(endpoint, {
172
- method: "DELETE",
173
- });
175
+ const response = await fetch(endpoint, {
176
+ method: "DELETE",
177
+ });
174
178
 
175
- const result = await response.json();
179
+ const result = await response.json();
176
180
 
177
- if (response.ok) {
178
- return true;
179
- } else {
180
- setError(result.error || "Failed to delete prompt");
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
- } catch (err) {
184
- setError(err instanceof Error ? err.message : "Unknown error");
185
- return false;
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` // → /api/lastbrain/ai/auth/ai-models-available
70
- : `/api/public/v1/ai/models/available`; // → /api/public/v1/ai/models/available
71
-
72
- console.log("[getAvailableModels] isExternalProxy:", isExternalProxy, "endpoint:", endpoint);
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 ? 'include' : 'same-origin',
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` // → /api/lastbrain/ai/auth/user-models
109
- : `/api/public/v1/ai/user/models`; // → /api/public/v1/ai/user/models
110
-
111
- console.log("[getUserModels] isExternalProxy:", isExternalProxy, "endpoint:", endpoint);
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 ? 'include' : 'same-origin',
133
+ credentials: isExternalProxy ? "include" : "same-origin",
124
134
  });
125
135
 
126
136
  if (!response.ok) {