@lastbrain/module-ai 0.1.8 → 0.1.10
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/README.md +50 -442
- package/dist/components/Doc.d.ts +8 -1
- package/dist/components/Doc.d.ts.map +1 -1
- package/dist/components/Doc.js +20 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,481 +1,89 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 📦 Module ai
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> @lastbrain/module-ai
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 📋 Informations
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- **Nom du package**: `@lastbrain/module-ai`
|
|
8
|
+
- **Slug**: `module-ai`
|
|
9
|
+
- **Type**: Module LastBrain
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
- 🎨 **Génération d'images** - Intégration DALL-E pour créer des images
|
|
11
|
-
- 💳 **Gestion de tokens** - Système de crédits et suivi de consommation
|
|
12
|
-
- 📊 **Dashboard admin** - Gestion des tokens utilisateurs par les admins
|
|
13
|
-
- 🛡️ **Sécurité** - Protection RLS et contrôle d'accès
|
|
11
|
+
## 📄 Pages Disponibles
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
### Pages Protégées (Auth)
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
- **GET** `/token` - TokenPage
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
# Créer une nouvelle application avec le module AI inclus
|
|
21
|
-
pnpx @lastbrain/app@latest init mon-app
|
|
22
|
-
# Sélectionner "🤖 AI Generation" lors de la création
|
|
23
|
-
|
|
24
|
-
cd mon-app
|
|
25
|
-
pnpm db:init # Applique automatiquement les migrations
|
|
26
|
-
pnpm dev
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## 📦 Installation manuelle
|
|
30
|
-
|
|
31
|
-
Si vous intégrez LastBrain dans un projet existant :
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
pnpm add @lastbrain/module-ai @lastbrain/core @lastbrain/ui
|
|
35
|
-
```
|
|
17
|
+
### Pages Admin
|
|
36
18
|
|
|
37
|
-
|
|
19
|
+
- **GET** `/user-token` - UserTokenPage
|
|
38
20
|
|
|
39
|
-
|
|
40
|
-
pnpm lastbrain add-module ai
|
|
41
|
-
pnpm build:modules
|
|
42
|
-
```
|
|
21
|
+
## 🗄️ Base de Données
|
|
43
22
|
|
|
44
|
-
|
|
23
|
+
### Tables
|
|
45
24
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
# .env.local
|
|
50
|
-
OPENAI_API_KEY=sk-your-openai-api-key-here
|
|
51
|
-
|
|
52
|
-
# Supabase (requis)
|
|
53
|
-
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
|
|
54
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
|
55
|
-
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Configuration OpenAI
|
|
59
|
-
|
|
60
|
-
Le module utilise les modèles OpenAI suivants par défaut :
|
|
61
|
-
|
|
62
|
-
- **Texte** : `gpt-4o` (ou `gpt-4o-mini` pour les tâches simples)
|
|
63
|
-
- **Images** : `dall-e-3` (ou `dall-e-2` pour des coûts réduits)
|
|
64
|
-
|
|
65
|
-
## 🖼️ Pages Web fournies
|
|
66
|
-
|
|
67
|
-
### Pages Utilisateur Authentifié
|
|
68
|
-
|
|
69
|
-
#### 1. Gestion des Tokens (`/auth/ai/token`)
|
|
70
|
-
|
|
71
|
-
**Component**: `TokenPage`
|
|
72
|
-
|
|
73
|
-
Page de gestion des tokens utilisateur :
|
|
74
|
-
|
|
75
|
-
- Solde actuel de tokens
|
|
76
|
-
- Historique des transactions
|
|
77
|
-
- Bouton pour acheter des tokens (placeholder)
|
|
78
|
-
- Statistiques d'utilisation
|
|
25
|
+
#### `user_token_ledger`
|
|
79
26
|
|
|
80
27
|
```tsx
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
28
|
+
<TableStructure
|
|
29
|
+
tableName="user_token_ledger"
|
|
30
|
+
title="user_token_ledger"
|
|
31
|
+
description="Table user_token_ledger du module ai"
|
|
32
|
+
/>
|
|
86
33
|
```
|
|
87
34
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
#### 2. Administration des Tokens (`/admin/ai/user-token`)
|
|
91
|
-
|
|
92
|
-
**Component**: `AdminUserTokenPage`
|
|
93
|
-
|
|
94
|
-
Page d'administration pour gérer les tokens de tous les utilisateurs :
|
|
95
|
-
|
|
96
|
-
- Liste de tous les utilisateurs avec leurs soldes
|
|
97
|
-
- Recherche par email ou nom
|
|
98
|
-
- Ajout/retrait de tokens pour un utilisateur
|
|
99
|
-
- Pagination et tri
|
|
35
|
+
#### `user_prompts`
|
|
100
36
|
|
|
101
37
|
```tsx
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
#### 3. Détail Utilisateur (`/admin/ai/user-token/[id]`)
|
|
110
|
-
|
|
111
|
-
**Component**: `AdminUserTokenDetailPage`
|
|
112
|
-
|
|
113
|
-
Page détaillée pour un utilisateur spécifique :
|
|
114
|
-
|
|
115
|
-
- Historique complet des transactions
|
|
116
|
-
- Ajout/retrait de tokens avec commentaire
|
|
117
|
-
- Statistiques d'utilisation détaillées
|
|
118
|
-
|
|
119
|
-
```tsx
|
|
120
|
-
import { AdminUserTokenDetailPage } from "@lastbrain/module-ai";
|
|
121
|
-
|
|
122
|
-
export default function AdminUserDetail() {
|
|
123
|
-
return <AdminUserTokenDetailPage />;
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## 🔌 Routes API
|
|
128
|
-
|
|
129
|
-
### API Génération IA (`/api/ai/*`)
|
|
130
|
-
|
|
131
|
-
#### POST `/api/ai/generate-text`
|
|
132
|
-
|
|
133
|
-
Génère du texte avec GPT.
|
|
134
|
-
|
|
135
|
-
**Body** :
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"prompt": "Écris un article sur l'IA",
|
|
140
|
-
"model": "gpt-4o", // optionnel, défaut: gpt-4o
|
|
141
|
-
"max_tokens": 1000, // optionnel, défaut: 500
|
|
142
|
-
"temperature": 0.7, // optionnel, défaut: 0.7
|
|
143
|
-
"cost_tokens": 100 // coût en tokens pour cette génération
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Réponse** :
|
|
148
|
-
|
|
149
|
-
```json
|
|
150
|
-
{
|
|
151
|
-
"data": {
|
|
152
|
-
"text": "L'intelligence artificielle...",
|
|
153
|
-
"tokens_used": 95,
|
|
154
|
-
"model": "gpt-4o",
|
|
155
|
-
"cost_tokens": 100,
|
|
156
|
-
"remaining_tokens": 900
|
|
157
|
-
}
|
|
158
|
-
}
|
|
38
|
+
<TableStructure
|
|
39
|
+
tableName="user_prompts"
|
|
40
|
+
title="user_prompts"
|
|
41
|
+
description="Table user_prompts du module ai"
|
|
42
|
+
/>
|
|
159
43
|
```
|
|
160
44
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
Génère une image avec DALL-E.
|
|
164
|
-
|
|
165
|
-
**Body** :
|
|
166
|
-
|
|
167
|
-
```json
|
|
168
|
-
{
|
|
169
|
-
"prompt": "Un chat en costume d'astronaute",
|
|
170
|
-
"model": "dall-e-3", // optionnel, défaut: dall-e-3
|
|
171
|
-
"size": "1024x1024", // optionnel, défaut: 1024x1024
|
|
172
|
-
"quality": "hd", // optionnel, défaut: standard
|
|
173
|
-
"cost_tokens": 200 // coût en tokens pour cette génération
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
**Réponse** :
|
|
178
|
-
|
|
179
|
-
```json
|
|
180
|
-
{
|
|
181
|
-
"data": {
|
|
182
|
-
"image_url": "https://...",
|
|
183
|
-
"revised_prompt": "A cat wearing an astronaut suit...",
|
|
184
|
-
"model": "dall-e-3",
|
|
185
|
-
"cost_tokens": 200,
|
|
186
|
-
"remaining_tokens": 800
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### API Administration (`/api/ai/admin/*`)
|
|
192
|
-
|
|
193
|
-
⚠️ **Toutes les routes admin nécessitent un accès super admin.**
|
|
194
|
-
|
|
195
|
-
#### GET `/api/ai/admin/user-token`
|
|
196
|
-
|
|
197
|
-
Liste tous les utilisateurs avec leurs soldes de tokens.
|
|
45
|
+
### Migrations
|
|
198
46
|
|
|
199
|
-
|
|
47
|
+
- `20251121000000_ai_tokens.sql`
|
|
48
|
+
- `20251121093113_module-ai_init.sql`
|
|
200
49
|
|
|
201
|
-
|
|
202
|
-
- `per_page` (optionnel, défaut: 20)
|
|
203
|
-
- `search` (optionnel) : Recherche par email ou nom
|
|
50
|
+
## 📦 Installation
|
|
204
51
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
{
|
|
209
|
-
"data": [
|
|
210
|
-
{
|
|
211
|
-
"user_id": "uuid",
|
|
212
|
-
"email": "user@example.com",
|
|
213
|
-
"full_name": "John Doe",
|
|
214
|
-
"balance": 1500,
|
|
215
|
-
"total_spent": 500,
|
|
216
|
-
"last_transaction": "2024-01-01T00:00:00Z"
|
|
217
|
-
}
|
|
218
|
-
],
|
|
219
|
-
"pagination": {
|
|
220
|
-
"page": 1,
|
|
221
|
-
"per_page": 20,
|
|
222
|
-
"total": 100,
|
|
223
|
-
"total_pages": 5
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
#### POST `/api/ai/admin/user-token`
|
|
229
|
-
|
|
230
|
-
Ajoute ou retire des tokens pour un utilisateur.
|
|
231
|
-
|
|
232
|
-
**Body** :
|
|
233
|
-
|
|
234
|
-
```json
|
|
235
|
-
{
|
|
236
|
-
"user_id": "uuid",
|
|
237
|
-
"amount": 1000, // positif pour ajouter, négatif pour retirer
|
|
238
|
-
"description": "Achat de tokens premium",
|
|
239
|
-
"transaction_type": "purchase" // purchase, admin_grant, admin_debit, etc.
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
#### GET `/api/ai/admin/user-token/[id]`
|
|
244
|
-
|
|
245
|
-
Détails et historique pour un utilisateur spécifique.
|
|
246
|
-
|
|
247
|
-
**Réponse** :
|
|
248
|
-
|
|
249
|
-
```json
|
|
250
|
-
{
|
|
251
|
-
"data": {
|
|
252
|
-
"user": {
|
|
253
|
-
"id": "uuid",
|
|
254
|
-
"email": "user@example.com",
|
|
255
|
-
"full_name": "John Doe",
|
|
256
|
-
"balance": 1500
|
|
257
|
-
},
|
|
258
|
-
"transactions": [
|
|
259
|
-
{
|
|
260
|
-
"id": "uuid",
|
|
261
|
-
"amount": 1000,
|
|
262
|
-
"description": "Achat de tokens",
|
|
263
|
-
"transaction_type": "purchase",
|
|
264
|
-
"created_at": "2024-01-01T00:00:00Z"
|
|
265
|
-
}
|
|
266
|
-
],
|
|
267
|
-
"stats": {
|
|
268
|
-
"total_spent": 500,
|
|
269
|
-
"total_generated_texts": 25,
|
|
270
|
-
"total_generated_images": 10
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
## 🗄️ Schéma de Base de Données
|
|
277
|
-
|
|
278
|
-
### Table `user_token_ledger`
|
|
279
|
-
|
|
280
|
-
Stocke les transactions de tokens des utilisateurs.
|
|
281
|
-
|
|
282
|
-
```sql
|
|
283
|
-
CREATE TABLE public.user_token_ledger (
|
|
284
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
285
|
-
owner_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
286
|
-
amount INTEGER NOT NULL,
|
|
287
|
-
balance_after INTEGER NOT NULL,
|
|
288
|
-
description TEXT,
|
|
289
|
-
transaction_type TEXT NOT NULL DEFAULT 'usage',
|
|
290
|
-
metadata JSONB DEFAULT '{}'::jsonb,
|
|
291
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
292
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
293
|
-
);
|
|
52
|
+
```bash
|
|
53
|
+
pnpm lastbrain add-module ai
|
|
54
|
+
pnpm build:modules
|
|
294
55
|
```
|
|
295
56
|
|
|
296
|
-
|
|
57
|
+
### Appliquer les migrations
|
|
297
58
|
|
|
298
|
-
|
|
299
|
-
-
|
|
300
|
-
|
|
301
|
-
- `admin_debit` : Retrait par un admin
|
|
302
|
-
- `refund` : Remboursement
|
|
303
|
-
|
|
304
|
-
### Table `user_prompts`
|
|
305
|
-
|
|
306
|
-
Stocke l'historique des prompts et générations.
|
|
307
|
-
|
|
308
|
-
```sql
|
|
309
|
-
CREATE TABLE public.user_prompts (
|
|
310
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
311
|
-
owner_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
312
|
-
prompt TEXT NOT NULL,
|
|
313
|
-
response TEXT,
|
|
314
|
-
model TEXT NOT NULL,
|
|
315
|
-
tokens_used INTEGER,
|
|
316
|
-
cost_tokens INTEGER,
|
|
317
|
-
generation_type TEXT NOT NULL, -- 'text' ou 'image'
|
|
318
|
-
metadata JSONB DEFAULT '{}'::jsonb,
|
|
319
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
320
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
321
|
-
);
|
|
59
|
+
```bash
|
|
60
|
+
cd apps/votre-app
|
|
61
|
+
supabase migration up
|
|
322
62
|
```
|
|
323
63
|
|
|
324
|
-
|
|
64
|
+
## 💡 Utilisation
|
|
325
65
|
|
|
326
|
-
|
|
66
|
+
<!-- 📝 Section à compléter par l'auteur du module -->
|
|
327
67
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
```sql
|
|
331
|
-
CREATE VIEW user_token_balance_v AS
|
|
332
|
-
SELECT
|
|
333
|
-
owner_id,
|
|
334
|
-
COALESCE(SUM(amount), 0) as balance,
|
|
335
|
-
COUNT(*) as total_transactions,
|
|
336
|
-
MAX(created_at) as last_transaction
|
|
337
|
-
FROM user_token_ledger
|
|
338
|
-
GROUP BY owner_id;
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
## 🔧 Utilisation dans le Code
|
|
342
|
-
|
|
343
|
-
### Hooks React
|
|
68
|
+
### Exemple d'utilisation
|
|
344
69
|
|
|
345
70
|
```tsx
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
function MyAIComponent() {
|
|
349
|
-
const { balance, loading, refetch } = useTokenBalance();
|
|
350
|
-
const { generateText, generating } = useAIGeneration();
|
|
351
|
-
|
|
352
|
-
const handleGenerate = async () => {
|
|
353
|
-
const result = await generateText({
|
|
354
|
-
prompt: "Écris un poème sur l'automne",
|
|
355
|
-
max_tokens: 200,
|
|
356
|
-
cost_tokens: 50,
|
|
357
|
-
});
|
|
358
|
-
|
|
359
|
-
if (result.success) {
|
|
360
|
-
console.log("Texte généré:", result.data.text);
|
|
361
|
-
refetch(); // Rafraîchir le solde
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
|
|
365
|
-
return (
|
|
366
|
-
<div>
|
|
367
|
-
<p>Solde: {balance} tokens</p>
|
|
368
|
-
<Button onPress={handleGenerate} isLoading={generating}>
|
|
369
|
-
Générer du texte
|
|
370
|
-
</Button>
|
|
371
|
-
</div>
|
|
372
|
-
);
|
|
373
|
-
}
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### Utilisation directe des APIs
|
|
377
|
-
|
|
378
|
-
```typescript
|
|
379
|
-
// Génération de texte
|
|
380
|
-
const response = await fetch("/api/ai/generate-text", {
|
|
381
|
-
method: "POST",
|
|
382
|
-
headers: { "Content-Type": "application/json" },
|
|
383
|
-
body: JSON.stringify({
|
|
384
|
-
prompt: "Explique l'intelligence artificielle",
|
|
385
|
-
max_tokens: 500,
|
|
386
|
-
cost_tokens: 100,
|
|
387
|
-
}),
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
const result = await response.json();
|
|
391
|
-
console.log(result.data.text);
|
|
392
|
-
|
|
393
|
-
// Génération d'image
|
|
394
|
-
const imageResponse = await fetch("/api/ai/generate-image", {
|
|
395
|
-
method: "POST",
|
|
396
|
-
headers: { "Content-Type": "application/json" },
|
|
397
|
-
body: JSON.stringify({
|
|
398
|
-
prompt: "Un paysage futuriste",
|
|
399
|
-
size: "1024x1024",
|
|
400
|
-
cost_tokens: 200,
|
|
401
|
-
}),
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
const imageResult = await imageResponse.json();
|
|
405
|
-
console.log(imageResult.data.image_url);
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
## 💳 Système de Tokens
|
|
409
|
-
|
|
410
|
-
### Coûts par défaut
|
|
411
|
-
|
|
412
|
-
Les coûts en tokens sont configurables mais voici les valeurs par défaut :
|
|
413
|
-
|
|
414
|
-
**Génération de texte** :
|
|
415
|
-
|
|
416
|
-
- GPT-4o : 1 token = ~10 tokens OpenAI
|
|
417
|
-
- GPT-4o-mini : 1 token = ~5 tokens OpenAI
|
|
418
|
-
|
|
419
|
-
**Génération d'images** :
|
|
420
|
-
|
|
421
|
-
- DALL-E 3 (1024x1024) : 200 tokens
|
|
422
|
-
- DALL-E 2 (1024x1024) : 100 tokens
|
|
423
|
-
|
|
424
|
-
### Gestion du solde
|
|
425
|
-
|
|
426
|
-
```typescript
|
|
427
|
-
// Vérifier le solde avant génération
|
|
428
|
-
const checkBalance = async (requiredTokens: number) => {
|
|
429
|
-
const response = await fetch("/api/ai/user/balance");
|
|
430
|
-
const { balance } = await response.json();
|
|
431
|
-
|
|
432
|
-
if (balance < requiredTokens) {
|
|
433
|
-
throw new Error("Solde insuffisant");
|
|
434
|
-
}
|
|
435
|
-
};
|
|
71
|
+
// Importez les composants depuis le module
|
|
72
|
+
import { TokenPage } from "@lastbrain/module-ai";
|
|
436
73
|
|
|
437
|
-
//
|
|
438
|
-
|
|
439
|
-
prompt: "...",
|
|
440
|
-
cost_tokens: 100, // Sera automatiquement débité
|
|
441
|
-
});
|
|
74
|
+
// Utilisez-les dans votre application
|
|
75
|
+
<TokenPage />;
|
|
442
76
|
```
|
|
443
77
|
|
|
444
|
-
|
|
78
|
+
### Configuration
|
|
445
79
|
|
|
446
|
-
|
|
80
|
+
<!-- Ajoutez ici les détails de configuration spécifiques -->
|
|
447
81
|
|
|
448
|
-
|
|
449
|
-
- **Validation des prompts** : Filtrage du contenu inapproprié
|
|
450
|
-
- **Vérification du solde** : Impossible de générer sans tokens suffisants
|
|
82
|
+
## ⚠️ Danger Zone
|
|
451
83
|
|
|
452
|
-
|
|
84
|
+
La suppression du module supprimera toutes les pages, routes API et migrations associées. **Cette action est irréversible.**
|
|
453
85
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
### Exemple de politique RLS
|
|
458
|
-
|
|
459
|
-
```sql
|
|
460
|
-
-- Les utilisateurs ne voient que leurs propres transactions
|
|
461
|
-
CREATE POLICY "user_token_ledger_owner_select" ON public.user_token_ledger
|
|
462
|
-
FOR SELECT USING (auth.uid() = owner_id);
|
|
463
|
-
|
|
464
|
-
-- Seuls les admins peuvent modifier via les APIs admin
|
|
465
|
-
CREATE POLICY "user_token_ledger_admin_all" ON public.user_token_ledger
|
|
466
|
-
FOR ALL USING (public.is_superadmin(auth.uid()));
|
|
86
|
+
```bash
|
|
87
|
+
pnpm lastbrain remove-module ai
|
|
88
|
+
pnpm build:modules
|
|
467
89
|
```
|
|
468
|
-
|
|
469
|
-
## 🤝 Contribuer
|
|
470
|
-
|
|
471
|
-
Ce package fait partie du monorepo LastBrain. Voir le [CONTRIBUTING.md](../../CONTRIBUTING.md) principal.
|
|
472
|
-
|
|
473
|
-
## 📄 Licence
|
|
474
|
-
|
|
475
|
-
MIT - Voir [LICENSE](../../LICENSE)
|
|
476
|
-
|
|
477
|
-
## 🔗 Liens utiles
|
|
478
|
-
|
|
479
|
-
- [OpenAI API Documentation](https://platform.openai.com/docs/api-reference)
|
|
480
|
-
- [DALL-E Guide](https://platform.openai.com/docs/guides/images)
|
|
481
|
-
- [GPT-4 Documentation](https://platform.openai.com/docs/models/gpt-4)
|
package/dist/components/Doc.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Documentation component for @lastbrain/module-ai
|
|
3
|
+
* Auto-generated from module-ai.build.config.ts
|
|
4
|
+
*
|
|
5
|
+
* To regenerate this file, run:
|
|
6
|
+
* pnpm update:module-docs
|
|
7
|
+
*/
|
|
8
|
+
export declare function Doc(): import("react/jsx-runtime").JSX.Element;
|
|
2
9
|
//# sourceMappingURL=Doc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Doc.d.ts","sourceRoot":"","sources":["../../src/components/Doc.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Doc.d.ts","sourceRoot":"","sources":["../../src/components/Doc.tsx"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,wBAAgB,GAAG,4CA4PlB"}
|
package/dist/components/Doc.js
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Card, CardBody, CardHeader
|
|
3
|
-
|
|
4
|
-
return (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "flex items-start justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-3xl font-bold mb-2", children: "Module AI" }), _jsx("p", { className: "text-slate-600 dark:text-slate-400", children: "G\u00E9n\u00E9ration IA (texte et images) avec syst\u00E8me de tokens et gestion des co\u00FBts" })] }), _jsx(Chip, { color: "primary", variant: "flat", children: "v0.1.0" })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDCDD Informations" }) }), _jsxs(CardBody, { className: "space-y-2", children: [_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Auteur:" }), " LastBrain Team"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Package:" }), " @lastbrain/module-ai"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Derni\u00E8re mise \u00E0 jour:" }), " 21 novembre 2025"] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83C\uDFA8 Composants Disponibles" }) }), _jsxs(CardBody, { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2", children: "TextareaGenerative" }), _jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400 mb-2", children: "Textarea avec g\u00E9n\u00E9ration de texte IA int\u00E9gr\u00E9e. Bouton de g\u00E9n\u00E9ration avec s\u00E9lection de prompts." }), _jsx(Snippet, { symbol: "", color: "default", size: "sm", hideSymbol: true, children: _jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { children: ["import ", "{ TextareaGenerative }", " from \"@lastbrain/module-ai\";"] }), _jsx("span", {}), _jsx("span", { children: "<TextareaGenerative" }), _jsx("span", { children: " label=\"Description\"" }), _jsx("span", { children: " placeholder=\"Entrez une description...\"" }), _jsxs("span", { children: [" value=", "{value}"] }), _jsxs("span", { children: [" onChange=", "{setValue}"] }), _jsx("span", { children: "/>" })] }) })] }), _jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2 mt-4", children: "ImageGenerative" }), _jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400 mb-2", children: "Composant de g\u00E9n\u00E9ration d'images avec DALL-E. Upload ou g\u00E9n\u00E9ration IA." }), _jsx(Snippet, { symbol: "", color: "default", size: "sm", hideSymbol: true, children: _jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { children: ["import ", "{ ImageGenerative }", " from \"@lastbrain/module-ai\";"] }), _jsx("span", {}), _jsx("span", { children: "<ImageGenerative" }), _jsx("span", { children: " label=\"Image du produit\"" }), _jsxs("span", { children: [" value=", "{imageUrl}"] }), _jsxs("span", { children: [" onChange=", "{setImageUrl}"] }), _jsx("span", { children: "/>" })] }) })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDCC4 Pages Disponibles" }) }), _jsxs(CardBody, { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2", children: "Pages Prot\u00E9g\u00E9es (Auth)" }), _jsx("div", { className: "space-y-2", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "primary", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/auth/token" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- Historique et balance des tokens" })] }) })] }), _jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2", children: "Pages Admin" }), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "danger", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/admin/user-token" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- Gestion des tokens utilisateurs" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "danger", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/admin/user-token/[id]" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- D\u00E9tail d'un utilisateur" })] })] })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDD0C Routes API" }) }), _jsxs(CardBody, { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "warning", variant: "flat", children: "POST" }), _jsx("code", { className: "text-sm", children: "/api/ai/generate-text" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- G\u00E9n\u00E9ration de texte" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "warning", variant: "flat", children: "POST" }), _jsx("code", { className: "text-sm", children: "/api/ai/generate-image" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- G\u00E9n\u00E9ration d'image" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "success", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/api/ai/admin/user-token" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- Liste des tokens utilisateurs" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "warning", variant: "flat", children: "POST" }), _jsx("code", { className: "text-sm", children: "/api/ai/admin/user-token" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- Cr\u00E9er/modifier des tokens" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Chip, { size: "sm", color: "success", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/api/ai/admin/user-token/[id]" }), _jsx("span", { className: "text-slate-600 dark:text-slate-400", children: "- D\u00E9tails tokens utilisateur" })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDCC1 Structure" }) }), _jsx(CardBody, { children: _jsx(Snippet, { symbol: "", color: "default", size: "sm", hideSymbol: true, children: _jsxs("div", { className: "flex flex-col gap-1 text-xs font-mono", children: [_jsx("span", { children: "module-ai/" }), _jsx("span", { children: "\u251C\u2500\u2500 src/" }), _jsx("span", { children: "\u2502 \u251C\u2500\u2500 web/" }), _jsx("span", { children: "\u2502 \u2502 \u251C\u2500\u2500 TextareaGenerative.tsx" }), _jsx("span", { children: "\u2502 \u2502 \u2514\u2500\u2500 ImageGenerative.tsx" }), _jsx("span", { children: "\u2502 \u251C\u2500\u2500 api/" }), _jsx("span", { children: "\u2502 \u2502 \u251C\u2500\u2500 generate-text.ts" }), _jsx("span", { children: "\u2502 \u2502 \u251C\u2500\u2500 generate-image.ts" }), _jsx("span", { children: "\u2502 \u2502 \u251C\u2500\u2500 prompts.ts" }), _jsx("span", { children: "\u2502 \u2502 \u2514\u2500\u2500 balance.ts" }), _jsx("span", { children: "\u2502 \u251C\u2500\u2500 components/" }), _jsx("span", { children: "\u2502 \u2502 \u2514\u2500\u2500 Doc.tsx" }), _jsx("span", { children: "\u2502 \u2514\u2500\u2500 ai.build.config.ts" }), _jsx("span", { children: "\u2514\u2500\u2500 supabase/" }), _jsx("span", { children: " \u2514\u2500\u2500 migrations/" }), _jsx("span", { children: " \u251C\u2500\u2500 20251121000000_ai_tokens.sql" }), _jsx("span", { children: " \u2514\u2500\u2500 20251121093113_module-ai_init.sql" })] }) }) })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDDC4\uFE0F Tables de Donn\u00E9es" }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsx(TableStructure, { tableName: "user_token_ledger", title: "user_token_ledger", description: "Comptabilit\u00E9 des tokens (cr\u00E9dits, d\u00E9bits, balance). Vue user_token_balance pour le solde actuel." }), _jsx(TableStructure, { tableName: "user_prompts", title: "user_prompts", description: "Biblioth\u00E8que de prompts r\u00E9utilisables par utilisateur (titre, contenu, type)." })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDCE6 Installation" }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Snippet, { symbol: "", color: "default", size: "sm", children: "pnpm lastbrain add-module ai" }), _jsx(Snippet, { symbol: "", color: "default", size: "sm", children: "pnpm build:modules" }), _jsx(Snippet, { symbol: "", color: "default", size: "sm", children: "supabase migration up" })] }), _jsxs("div", { className: "border-2 border-danger rounded-lg p-4 mt-6", children: [_jsx("h4", { className: "text-lg font-semibold text-danger mb-3", children: "\u26A0\uFE0F Danger Zone" }), _jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400 mb-3", children: "La suppression du module supprimera toutes les pages, routes API et migrations associ\u00E9es. Cette action est irr\u00E9versible." }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Snippet, { symbol: "", color: "danger", size: "sm", children: "pnpm lastbrain remove-module ai" }), _jsx(Snippet, { symbol: "", color: "danger", size: "sm", children: "pnpm build:modules" })] })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\u2699\uFE0F Configuration" }) }), _jsxs(CardBody, { className: "space-y-3", children: [_jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400", children: "Ajoutez votre cl\u00E9 API OpenAI dans vos variables d'environnement :" }), _jsx(Snippet, { symbol: "", color: "default", size: "sm", children: "OPENAI_API_KEY=sk-..." })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx("h3", { className: "text-xl font-semibold", children: "\uD83D\uDCB0 Syst\u00E8me de Tokens" }) }), _jsxs(CardBody, { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2", children: "Co\u00FBts" }), _jsxs("ul", { className: "text-sm text-slate-600 dark:text-slate-400 space-y-1", children: [_jsx("li", { children: "\u2022 G\u00E9n\u00E9ration de texte : 10 tokens" }), _jsx("li", { children: "\u2022 G\u00E9n\u00E9ration d'image : 50 tokens" })] })] }), _jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2 mt-4", children: "Trigger de validation" }), _jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400", children: "Un trigger emp\u00EAche les transactions si le solde devient n\u00E9gatif." })] }), _jsxs("div", { children: [_jsx("h4", { className: "font-semibold mb-2 mt-4", children: "Ajouter des tokens" }), _jsx(Snippet, { symbol: "", color: "default", size: "sm", hideSymbol: true, children: _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { children: "INSERT INTO user_token_ledger" }), _jsx("span", { children: "(user_id, amount, transaction_type, description)" }), _jsx("span", { children: "VALUES" }), _jsx("span", { children: "(\"('user-uuid', 1000, 'credit', 'Achat de tokens');\")" })] }) })] })] })] })] }));
|
|
3
|
+
import { Card, CardBody, CardHeader } from "@lastbrain/ui";
|
|
4
|
+
import { Chip } from "@lastbrain/ui";
|
|
5
|
+
import { Snippet } from "@lastbrain/ui";
|
|
6
|
+
import { Alert } from "@lastbrain/ui";
|
|
7
|
+
import { TableStructure } from "@lastbrain/ui";
|
|
8
|
+
import { FileText, Zap, Database, Package, BookOpen, AlertTriangle, } from "lucide-react";
|
|
9
|
+
/**
|
|
10
|
+
* Documentation component for @lastbrain/module-ai
|
|
11
|
+
* Auto-generated from module-ai.build.config.ts
|
|
12
|
+
*
|
|
13
|
+
* To regenerate this file, run:
|
|
14
|
+
* pnpm update:module-docs
|
|
15
|
+
*/
|
|
16
|
+
export function Doc() {
|
|
17
|
+
return (_jsxs("div", { className: "container mx-auto p-6 space-y-6", children: [_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("div", { children: [_jsx("h1", { className: "text-3xl font-bold mb-2", children: "\uD83D\uDCE6 Module ai" }), _jsx("p", { className: "text-slate-600 dark:text-slate-400", children: "@lastbrain/module-ai" })] }) }), _jsx(CardBody, { children: _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400", children: "Package" }), _jsx("code", { className: "text-sm font-semibold", children: "@lastbrain/module-ai" })] }), _jsxs("div", { children: [_jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400", children: "Slug" }), _jsx("code", { className: "text-sm font-semibold", children: "module-ai" })] }), _jsxs("div", { children: [_jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400", children: "Type" }), _jsx("code", { className: "text-sm font-semibold", children: "Module LastBrain" })] })] }) })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("h2", { className: "text-2xl font-semibold flex items-center gap-2", children: [_jsx(FileText, { size: 24 }), "Pages Disponibles"] }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: "Pages Prot\u00E9g\u00E9es (Auth)" }), _jsx("div", { className: "space-y-2", children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(Chip, { size: "sm", color: "primary", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/token" }), _jsx("span", { className: "text-sm text-slate-600 dark:text-slate-400", children: "- TokenPage" })] }) })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: "Pages Admin" }), _jsx("div", { className: "space-y-2", children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(Chip, { size: "sm", color: "secondary", variant: "flat", children: "GET" }), _jsx("code", { className: "text-sm", children: "/user-token" }), _jsx("span", { className: "text-sm text-slate-600 dark:text-slate-400", children: "- UserTokenPage" })] }) })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("h2", { className: "text-2xl font-semibold flex items-center gap-2", children: [_jsx(Zap, { size: 24 }), "API Routes"] }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: _jsx("code", { children: "/api/auth/user_token_ledger" }) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Chip, { size: "sm", color: "success", variant: "flat", children: "GET" }), _jsx(Chip, { size: "sm", color: "primary", variant: "flat", children: "POST" }), _jsx(Chip, { size: "sm", color: "warning", variant: "flat", children: "PUT" }), _jsx(Chip, { size: "sm", color: "danger", variant: "flat", children: "DELETE" })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: _jsx("code", { children: "/api/auth/user_prompts" }) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Chip, { size: "sm", color: "success", variant: "flat", children: "GET" }), _jsx(Chip, { size: "sm", color: "primary", variant: "flat", children: "POST" }), _jsx(Chip, { size: "sm", color: "warning", variant: "flat", children: "PUT" }), _jsx(Chip, { size: "sm", color: "danger", variant: "flat", children: "DELETE" })] })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("h2", { className: "text-2xl font-semibold flex items-center gap-2", children: [_jsx(Database, { size: 24 }), "Base de Donn\u00E9es"] }) }), _jsxs(CardBody, { className: "space-y-6", children: [_jsx(TableStructure, { tableName: "user_token_ledger", title: "user_token_ledger", description: "Table user_token_ledger du module ai" }), _jsx(TableStructure, { tableName: "user_prompts", title: "user_prompts", description: "Table user_prompts du module ai" })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("h2", { className: "text-2xl font-semibold flex items-center gap-2", children: [_jsx(Package, { size: 24 }), "Installation"] }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: "Ajouter le module" }), _jsx(Snippet, { symbol: "", hideSymbol: true, className: "text-sm mb-2", children: "pnpm lastbrain add-module ai" }), _jsx(Snippet, { symbol: "", hideSymbol: true, className: "text-sm mb-2", children: "pnpm build:modules" })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: "Appliquer les migrations" }), _jsx(Snippet, { symbol: "", hideSymbol: true, className: "text-sm mb-2", children: "cd apps/votre-app" }), _jsx(Snippet, { symbol: "", hideSymbol: true, className: "text-sm mb-2", children: "supabase migration up" })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("h2", { className: "text-2xl font-semibold flex items-center gap-2", children: [_jsx(BookOpen, { size: 24 }), "Utilisation"] }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs(Alert, { color: "default", className: "mb-4", children: [_jsxs("p", { className: "text-sm", children: ["\uD83D\uDCDD ", _jsx("strong", { children: "Section \u00E0 compl\u00E9ter par l'auteur du module" })] }), _jsx("p", { className: "text-sm text-slate-600 dark:text-slate-400 mt-2", children: "Ajoutez ici des exemples d'utilisation, des configurations sp\u00E9cifiques, et toute information utile pour les d\u00E9veloppeurs utilisant ce module." })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: "Exemple d'utilisation" }), _jsx(Alert, { color: "primary", className: "p-4 mb-4", children: _jsx("pre", { className: "whitespace-pre-wrap", children: `// Importez les composants depuis le module
|
|
18
|
+
import { TokenPage } from "@lastbrain/module-ai";
|
|
19
|
+
|
|
20
|
+
// Utilisez-les dans votre application
|
|
21
|
+
<TokenPage />` }) })] })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("h2", { className: "text-2xl font-semibold flex items-center gap-2 text-danger", children: [_jsx(AlertTriangle, { size: 24 }), "Danger Zone"] }) }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs(Alert, { color: "danger", className: "mb-4", children: [_jsx("p", { className: "text-sm font-semibold", children: "\u26A0\uFE0F Cette action est irr\u00E9versible" }), _jsx("p", { className: "text-sm mt-2", children: "La suppression du module supprimera toutes les pages, routes API et migrations associ\u00E9es." })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-2", children: "Supprimer le module" }), _jsx(Snippet, { symbol: "", hideSymbol: true, color: "danger", className: "text-sm mb-2", children: "pnpm lastbrain remove-module ai" }), _jsx(Snippet, { symbol: "", hideSymbol: true, color: "danger", className: "text-sm mb-2", children: "pnpm build:modules" })] })] })] })] }));
|
|
5
22
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export { ImageGenerative } from "./web/components/ImageGenerative.js";
|
|
|
3
3
|
export { TokenPage } from "./web/auth/TokenPage.js";
|
|
4
4
|
export { UserTokenPage } from "./web/admin/UserTokenPage.js";
|
|
5
5
|
export { UserTokenIdPage } from "./web/admin/UserTokenIdPage.js";
|
|
6
|
-
export {
|
|
6
|
+
export { Doc } from "./components/Doc.js";
|
|
7
|
+
export { Doc as AiModuleDoc } from "./components/Doc.js";
|
|
7
8
|
export type { GenerativeResponse, TextareaGenerativeProps, } from "./web/components/TextareaGenerative.js";
|
|
8
9
|
export type { GenerativeImageResponse, ImageGenerativeProps, } from "./web/components/ImageGenerative.js";
|
|
9
10
|
export { default as buildConfig } from "./ai.build.config.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGzD,YAAY,EACV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAEhD,YAAY,EACV,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export { TokenPage } from "./web/auth/TokenPage.js";
|
|
|
7
7
|
export { UserTokenPage } from "./web/admin/UserTokenPage.js";
|
|
8
8
|
export { UserTokenIdPage } from "./web/admin/UserTokenIdPage.js";
|
|
9
9
|
// Documentation
|
|
10
|
-
export {
|
|
10
|
+
export { Doc } from "./components/Doc.js";
|
|
11
|
+
export { Doc as AiModuleDoc } from "./components/Doc.js";
|
|
11
12
|
// Configuration de build
|
|
12
13
|
export { default as buildConfig } from "./ai.build.config.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lastbrain/module-ai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Module de génération IA (texte et images) avec gestion de tokens pour LastBrain",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"react": "^19.0.0",
|
|
39
39
|
"react-dom": "^19.0.0",
|
|
40
40
|
"zod": "^3.23.8",
|
|
41
|
-
"@lastbrain/core": "0.1.
|
|
42
|
-
"@lastbrain/ui": "0.1.
|
|
41
|
+
"@lastbrain/core": "0.1.11",
|
|
42
|
+
"@lastbrain/ui": "0.1.14"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"next": ">=15.0.0"
|