Chat IA en streaming : prompts versionnés, appels d’outils, suivi d’usage et de coût ; modèle via env
Code11 fichiersContexte~668 tokensanalyse réussie
Installer
$
genpm add @core/aiCe que vous obtenez
- Source dans src/lib/ai/, 11 fichiers. (12,9 ko)
- Règles IA dans src/lib/ai/AGENTS.md, plus les fichiers de règles de l’IDE.
- Variables d’environnement ajoutées à .env.example : AI_MODEL, AI_PROVIDER_API_KEY.
- Résout @core/db pour vous.
README
Ce paquet n’a pas de README.
~668 tokens→ src/lib/ai/AGENTS.md→ .cursor/rules/genpm-core-ai.mdc
Voici exactement ce que lit votre IA quand elle travaille dans src/lib/ai. Rien d’autre n’est ajouté à son contexte.
@core/ai — rules for AI agents
Purpose
Streaming chat endpoint on the Vercel AI SDK, with versioned system prompts, a tool-calling scaffold and per-response
usage logging (tokens and cost) in the database. Provider and model come from env: nothing is hardcoded. No RAG,
embeddings or chat history storage (store UIMessage[] yourself if you need it).
Map
index.ts— public API:streamChat,getModel,setModel,recordUsage,prompts,tools,PRICES.prompts.ts— your config: system prompts withversion. Bumpversionwhenever you change a prompt.tools.ts— your config: tools the model can call (zodinputSchema+ server-sideexecute).prices.ts— your config: USD per million tokens perAI_MODEL, for cost logging.schema.ts—ai_usagetable. Depends on../db(@core/db).adapters/hono.ts,adapters/next.ts—POST /ai/chatreturning a UI message stream foruseChat.
Integration
- Requires Node 22+ (AI SDK 7). Env:
AI_MODELas<provider>:<model-id>plusAI_PROVIDER_API_KEY, and install that provider package:anthropic→@ai-sdk/anthropic,openai→@ai-sdk/openai, alsogoogle,mistral,groq,xai. OrAI_MODEL=<provider>/<model-id>withAI_GATEWAY_API_KEY(Vercel AI Gateway, no extra package). Ask the user which provider and model to use; do not pick one for them. - Generate and apply migrations (see
src/lib/db/AGENTS.md). - Hono:
app.route('/ai', aiRoutes({ getUserId: (c) => c.get('user')?.id, requireUser: true }))after@core/auth'ssessionMiddleware(omit both options without auth). Next.js:app/api/ai/chat/route.ts→export const POST = chatRoute({ getUserId, requireUser: true }). Delete the adapter of the framework you don't use. - Frontend:
useChat({ transport: new DefaultChatTransport({ api: '/ai/chat' }) })from@ai-sdk/react. - Verify:
curl -N -X POST localhost:3000/ai/chat -H 'content-type: application/json' -d '{"messages":[{"id":"1","role":"user","parts":[{"type":"text","text":"hi"}]}]}'.
Conventions
- One prompt per use case in
prompts.ts; pass it withstreamChat({ prompt: 'assistant', … }). - Tools authorize inside
executeusing the user id; never trust ids sent by the model. - Query
ai_usagefor quotas (e.g. tokens per user per day) before callingstreamChat. - Tests:
setModel(new MockLanguageModelV4(...))fromai/test.
Don't
- Don't hardcode a model or API key, and don't call the provider from the browser.
- Don't log prompts or completions with user data in production.
- Don't let tools run destructive actions without an explicit user confirmation step.
# @core/ai — rules for AI agents
## Purpose
Streaming chat endpoint on the Vercel AI SDK, with versioned system prompts, a tool-calling scaffold and per-response
usage logging (tokens and cost) in the database. Provider and model come from env: nothing is hardcoded. No RAG,
embeddings or chat history storage (store `UIMessage[]` yourself if you need it).
## Map
- `index.ts` — public API: `streamChat`, `getModel`, `setModel`, `recordUsage`, `prompts`, `tools`, `PRICES`.
- `prompts.ts` — **your config**: system prompts with `version`. Bump `version` whenever you change a prompt.
- `tools.ts` — **your config**: tools the model can call (zod `inputSchema` + server-side `execute`).
- `prices.ts` — **your config**: USD per million tokens per `AI_MODEL`, for cost logging.
- `schema.ts` — `ai_usage` table. Depends on `../db` (@core/db).
- `adapters/hono.ts`, `adapters/next.ts` — `POST /ai/chat` returning a UI message stream for `useChat`.
## Integration
1. Requires Node 22+ (AI SDK 7). Env: `AI_MODEL` as `<provider>:<model-id>` plus `AI_PROVIDER_API_KEY`, and install
that provider package: `anthropic` → `@ai-sdk/anthropic`, `openai` → `@ai-sdk/openai`, also `google`, `mistral`,
`groq`, `xai`. Or `AI_MODEL=<provider>/<model-id>` with `AI_GATEWAY_API_KEY` (Vercel AI Gateway, no extra package).
Ask the user which provider and model to use; do not pick one for them.
2. Generate and apply migrations (see `src/lib/db/AGENTS.md`).
3. Hono: `app.route('/ai', aiRoutes({ getUserId: (c) => c.get('user')?.id, requireUser: true }))` after
`@core/auth`'s `sessionMiddleware` (omit both options without auth).
Next.js: `app/api/ai/chat/route.ts` → `export const POST = chatRoute({ getUserId, requireUser: true })`.
Delete the adapter of the framework you don't use.
4. Frontend: `useChat({ transport: new DefaultChatTransport({ api: '/ai/chat' }) })` from `@ai-sdk/react`.
5. Verify: `curl -N -X POST localhost:3000/ai/chat -H 'content-type: application/json' -d '{"messages":[{"id":"1","role":"user","parts":[{"type":"text","text":"hi"}]}]}'`.
## Conventions
- One prompt per use case in `prompts.ts`; pass it with `streamChat({ prompt: 'assistant', … })`.
- Tools authorize inside `execute` using the user id; never trust ids sent by the model.
- Query `ai_usage` for quotas (e.g. tokens per user per day) before calling `streamChat`.
- Tests: `setModel(new MockLanguageModelV4(...))` from `ai/test`.
## Don't
- Don't hardcode a model or API key, and don't call the provider from the browser.
- Don't log prompts or completions with user data in production.
- Don't let tools run destructive actions without an explicit user confirmation step.
L’arborescence exacte qui sera injectée, après .genpmignore. Épinglée à
MIT License
Copyright (c) 2026 GenPM
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Ce paquet ne déclare aucun serveur MCP.
| Version | Commit | Publié | Analyse |
|---|---|---|---|
| 1.0.0 | 5b1e62b | il y a 5 heures | ✔ analyse réussie |
- genpm
- @core/db ^1.0.0
- proposé
- GenPM propose la commande npm et ne l’exécute que si vous acceptez.
- analyse
- analyse réussie · 0 problème
- commit
- v1.0.0 → 5b1e62b6abcfd9ec65065b64fb87aad6d3a6b23f · vérifié après téléchargement
- scripts
- Aucun. GenPM n’exécute jamais le code des paquets.
- licence
- MIT
- signalement
- Vous avez repéré un problème ?