Instrumenting a Single Method
By default, weflayr_instrument wraps a full LLM client. When you only need to observe one specific call or instrument a plain function there are two patterns.
Wrapping a plain function
Pass any async function to weflayr_instrument. The name in methods must match the function’s .name property.
const { weflayr_setup, weflayr_instrument } = require('weflayr');
async function generateSummary(text) {
const res = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ model: 'gpt-4o-mini', messages: [{ role: 'user', content: text }] }),
});
return res.json();
}
weflayr_setup({
intake_url: process.env.WEFLAYR_INTAKE_URL,
client_id: process.env.WEFLAYR_CLIENT_ID,
client_secret: process.env.WEFLAYR_CLIENT_SECRET,
methods: [
{
call: 'generateSummary'
},
],
});
const trackedSummary = weflayr_instrument(generateSummary);
const result = await trackedSummary('Summarise this document', {
__weflayr_tags: { feature: 'summarize', customer_id: '42' },
});
import os
import httpx
from weflayr import weflayr_setup, weflayr_instrument
def generate_summary(text, **kwargs):
with httpx.Client() as client:
res = client.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"},
json={"model": "gpt-4o-mini", "messages": [{"role": "user", "content": text}]},
)
return res.json()
weflayr_setup({
"intake_url": os.environ["WEFLAYR_INTAKE_URL"],
"client_id": os.environ["WEFLAYR_CLIENT_ID"],
"client_secret": os.environ["WEFLAYR_CLIENT_SECRET"],
"methods": [
{"call": "generate_summary"},
],
})
tracked_summary = weflayr_instrument(generate_summary)
result = tracked_summary(
"Summarise this document",
__weflayr_tags={"feature": "summarize", "customer_id": "42"},
)