const { v4: uuidv4 } = require('uuid');
// Adaline constants
const ADX_API_KEY = "my_workspace_api_key";
const ADX_PROMPT_ID = "my_prompt_id";
const ADX_DEPLOYMENT_ENVIRONMENT_ID = "my_deployment_environment_id";
const ADX_BASE_URL = "https://api.adaline.ai";
// OpenAI constants
const OPENAI_API_KEY = "my_openai_api_key";
// Replace variables in prompt with your runtime values
function injectVariables(messages, variables) {
return messages.map(message => ({
role: message.role,
content: message.content.map(c => {
let text = c.value;
variables.forEach(v => {
const placeholder = `{{${v.name}}}`;
text = text.replaceAll(placeholder, v.value);
});
return text;
}).join(" "),
}));
}
// Fetch latest deployment from Adaline
async function getLatestDeployment(promptId, deploymentEnvironmentId) {
const response = await fetch(`${ADX_BASE_URL}/v2/deployments?promptId=${promptId}&deploymentId=latest&deploymentEnvironmentId=${deploymentEnvironmentId}`, {
headers: {
Authorization: `Bearer ${ADX_API_KEY}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(`API Error: ${error.error}`);
}
return response.json();
}
// Send log to Adaline after workflow execution
async function sendLog(projectId, trace, span) {
const response = await fetch(`${ADX_BASE_URL}/v2/logs/trace`, {
method: "POST",
headers: {
Authorization: `Bearer ${ADX_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
projectId,
trace,
spans: [span],
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(`API Error: ${error.error}`);
}
return response.json();
}
// Sample workflow using OpenAI
async function callOpenAIChatCompletion(model, messages) {
const spanId = uuidv4();
const spanStartTime = Date.now();
const response = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${OPENAI_API_KEY}`,
"Content-Type": "application/json",
"X-Span-Id": spanId,
},
body: JSON.stringify({
model: model,
messages: messages,
}),
});
const spanEndTime = Date.now();
if (!response.ok) {
const error = await response.json();
throw new Error(`OpenAI API Error: ${error.error.message}`);
}
const data = await response.json();
return {
spanId,
spanStartTime,
spanEndTime,
rawResponse: data,
content: data.choices[0].message.content,
};
}
// Main function
(async () => {
try {
// Start trace
const traceId = uuidv4();
const traceStartTime = Date.now();
// Get latest deployment
const deployment = await getLatestDeployment(ADX_PROMPT_ID, ADX_DEPLOYMENT_ENVIRONMENT_ID);
const deploymentId = deployment.id;
const projectId = deployment.projectId;
const prompt = deployment.prompt;
const model = prompt.config.model;
const provider = prompt.config.providerName;
// Inject variables into prompt
const inputVariables = [{ name: "persona", value: "financial analyst" }];
const messages = injectVariables(prompt.messages, inputVariables);
// Run sample workflow
const openAIResult = await callOpenAIChatCompletion(model, messages);
// End trace
const traceEndTime = Date.now();
console.log("========== TRACE INFO ==========");
console.log("Trace ID:", traceId);
console.log("Trace Start:", new Date(traceStartTime).toISOString());
console.log("Trace End: ", new Date(traceEndTime).toISOString());
console.log("Trace Duration (ms):", traceEndTime - traceStartTime);
console.log("\n---- Span: OpenAI API Call ----");
console.log("Span ID:", openAIResult.spanId);
console.log("Span Start:", new Date(openAIResult.spanStartTime).toISOString());
console.log("Span End: ", new Date(openAIResult.spanEndTime).toISOString());
console.log("Span Duration (ms):", openAIResult.spanEndTime - openAIResult.spanStartTime);
console.log("\n✅ OpenAI LLM Response:");
console.log(openAIResult.content);
// Construct log payload
const trace = {
startedAt: traceStartTime,
endedAt: traceEndTime,
name: "test-trace",
status: "success",
referenceId: traceId,
attributes: {
application: "test-app",
environment: "test-env"
},
tags: ["test-trace-tag"]
};
const span = {
promptId: ADX_PROMPT_ID,
deploymentId,
startedAt: openAIResult.spanStartTime,
endedAt: openAIResult.spanEndTime,
name: "test-span",
status: "success",
referenceId: openAIResult.spanId,
content: {
type: "Model",
provider,
model,
input: JSON.stringify({
config: prompt.config,
messages: prompt.messages,
tools: prompt.tools
}),
output: JSON.stringify(openAIResult.rawResponse),
variables: inputVariables.reduce((acc, v) => {
acc[v.name] = {
modality: "text",
value: v.value
}
return acc;
}, {})
},
attributes: {
application: "test-app",
environment: "test-env"
},
tags: ["test-span-tag"]
};
// Send trace and span to Adaline
const logIds = await sendLog(projectId, trace, span);
// Print log IDs from Adaline
console.log("\n✅ Log IDs:", logIds);
} catch (error) {
console.error("\n❌ Error:", error.message);
}
})();