packages/instrumentation-openai/scripts/semconv-gen.js (73 lines of code) (raw):
#!/usr/bin/env node
/*
* Copyright Elasticsearch B.V. and contributors
* SPDX-License-Identifier: Apache-2.0
*/
/**
* A small script to aid with maintaining/generating src/semconv.ts.
*
* Currently this assumes that `@opentelemetry/semantic-conventions` is
* installed, which isn't a great assumption.
*
* Usage:
* 1. Update any used semconv constants in `names` below.
* 2. Run `./scripts/semconv-gen.js`.
* 3. Use that output to help update `src/semconv.ts`. Nothing fancy.
*/
const incubating = require('@opentelemetry/semantic-conventions/incubating');
const names = `
// stable
ATTR_SERVER_ADDRESS
ATTR_SERVER_PORT
// unstable
ATTR_EVENT_NAME
ATTR_GEN_AI_OPERATION_NAME
ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY
ATTR_GEN_AI_REQUEST_MAX_TOKENS
ATTR_GEN_AI_REQUEST_MODEL
ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY
ATTR_GEN_AI_REQUEST_TOP_P
ATTR_GEN_AI_RESPONSE_FINISH_REASONS
ATTR_GEN_AI_RESPONSE_ID
ATTR_GEN_AI_RESPONSE_MODEL
ATTR_GEN_AI_SYSTEM
ATTR_GEN_AI_TOKEN_TYPE
ATTR_GEN_AI_USAGE_INPUT_TOKENS
ATTR_GEN_AI_USAGE_OUTPUT_TOKENS
METRIC_GEN_AI_CLIENT_OPERATION_DURATION
METRIC_GEN_AI_CLIENT_TOKEN_USAGE
// not yet in published @opentelemetry/semantic-conventions package
ATTR_GEN_AI_REQUEST_ENCODING_FORMATS
`
.trim()
.split(/\n/g)
.map(line => {
const commentIdx = line.indexOf('//');
if (commentIdx !== -1) {
line = line.slice(0, commentIdx);
}
return line.trim();
});
for (let name of names) {
if (!name) {
process.stdout.write('\n');
continue;
}
const val = incubating[name];
switch (typeof val) {
case 'undefined':
console.log(
`exports const ${name} = ???; // not in the installed semconv pkg`
);
break;
case 'string':
console.log(`export const ${name} = '${val}';`);
break;
case 'number': // e.g. RPC_GRPC_STATUS_CODE_VALUE_OUT_OF_RANGE
// falls through
case 'function': // e.g. ATTR_RPC_GRPC_RESPONSE_METADATA
console.log(`export const ${name} = ${val};`);
break;
default:
throw new Error(`WAT semconv "${name}" type: ${typeof val}`);
}
}