Vercel AI: `gen_ai.system_instructions` is missing when the system prompt is a message object

Aberta Para iniciantes
#26,079 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
73/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
javascript, node.js, typescript
Domínio
observability

Direção de pesquisa

Leia vercel-ai-orchestrion-subscriber.js para v4–v6 e vercel-ai-dc-subscriber.js para v7, com foco no tratamento do prompt do sistema descrito na issue. Reproduza o problema com os exemplos fornecidos de generateText, usando prompts tanto como string quanto como objetos de mensagem. O trabalho estará concluído quando as duas formas preencherem gen_ai.system_instructions nos spans invoke_agent em todas as versões afetadas.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Bug Package: node Spans vercel ai

SDK: @sentry/node 11.10.0 (also @sentry/nextjs 11.10.0) · ai 6.0.316 and 7.0.162

Steps to reproduce
const Sentry = require('@sentry/node');
Sentry.init({
  dsn: '…',
  tracesSampleRate: 1,
  sendDefaultPii: true,
  traceLifecycle: 'stream',
  beforeSendSpan: Sentry.withStreamedSpan(span => {
    if (span.name.startsWith('invoke_agent')) console.log(span.name, span.attributes['gen_ai.system_instructions'] ?? '(missing)');
    return span;
  }),
});
const { generateText } = require('ai');
const { MockLanguageModelV3 } = require('ai/test'); // MockLanguageModelV4 on ai v7

const model = () => new MockLanguageModelV3({
  doGenerate: async () => ({ content: [{ type: 'text', text: 'ok' }], finishReason: { unified: 'stop', raw: 'stop' }, usage: { inputTokens: { total: 1 }, outputTokens: { total: 1 } }, warnings: [] }),
});

// ai v7: use `instructions` instead of `system`
await generateText({ model: model(), experimental_telemetry: { functionId: 'string' }, system: 'Be brief.', prompt: 'hi' });
await generateText({
  model: model(),
  experimental_telemetry: { functionId: 'object' },
  system: { role: 'system', content: 'Be brief.', providerOptions: { anthropic: { cacheControl: { type: 'ephemeral' } } } },
  prompt: 'hi',
});
Expected result

Both invoke_agent spans have gen_ai.system_instructions.

Actual result
invoke_agent string [{"type":"text","content":"Be brief."}]
invoke_agent object (missing)

The same happens on ai v7 with instructions.

Additional context

The AI SDK accepts string | SystemModelMessage | SystemModelMessage[] for the system prompt. The object form is the documented way to set provider options on it, for example Anthropic prompt caching. The integration reads only strings:

  • v4–v6: instructions: util.asString(options.system) in vercel-ai-orchestrion-subscriber.js
  • v7: util.asString(event.instructions) in buildInputMessageAttributes (vercel-ai-dc-subscriber.js)

Possible fix: when the value is an object or an array, take each message's content.

Related: #20581 (the "System messages extracted to gen_ai.system_instructions" item).

I can open a PR if this approach works for you.

Linguagem predominante
TypeScript
Estrelas
8.8k
Forks
1.9k
Merge médio
1d 19h
PRs com merge (30d)
664

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de getsentry/sentry-javascript

Todas as issues de getsentry/sentry-javascript

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.