Chat de IA com streaming, prompts versionados, tool calling e registro de uso e custo; modelo por env
Código11 arquivosContexto~668 tokensanálise aprovada
Instalar
$
genpm add @core/aiO que você recebe
- Código em src/lib/ai/, 11 arquivos. (12,9 kB)
- Regras de IA em src/lib/ai/AGENTS.md, mais arquivos de regras da IDE.
- Variáveis de ambiente adicionadas ao .env.example: AI_MODEL, AI_PROVIDER_API_KEY.
- Resolve @core/db para você.
README
Este pacote não tem README.
~668 tokens→ src/lib/ai/AGENTS.md→ .cursor/rules/genpm-core-ai.mdc
Isto é exatamente o que sua IA lê quando trabalha em src/lib/ai. Nada mais é adicionado ao contexto dela.
@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.
A árvore exata que será injetada, após o .genpmignore. Fixada em
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.
Este pacote não declara servidores MCP.
| Versão | Commit | Publicado | Análise |
|---|---|---|---|
| 1.0.0 | 5b1e62b | há 4 horas | ✔ análise aprovada |
- genpm
- @core/db ^1.0.0
- proposto
- O GenPM propõe o comando npm e só o executa se você disser sim.
- análise
- análise aprovada · 0 achados
- commit
- v1.0.0 → 5b1e62b6abcfd9ec65065b64fb87aad6d3a6b23f · verificado após o download
- scripts
- Nenhum. O GenPM nunca executa código de pacotes.
- licença
- MIT
- denúncia
- Viu algo errado?