Non-supported models

If you're not using LangChain or OpenAI, you can still integrate Lunary with your own LLMs.

Method 1: wrapModel

In addition to the lunary.wrapAgent & lunary.wrapTool methods, we provide a wrapModel method.

It allows to wrap any async function. It also takes the following options:

const wrapped = lunary.wrapModel(yourLlmModel, {
  nameParser: (args) => 'custom-model-1.3', // name of the model used
  inputParser: (args) => { // parse the input to message format
    return [{
      role: 'system',
      text: args.systemPrompt
    }, {
      role: 'user',
      text: args.userPrompt
    }]
  },
  extraParser: (args) => { // Report any extre properties like temperature
    return {
      temperature: args.temperature,
    }
  },
  outputParser: (result) => { // Parse the result
    return {
      role: 'ai',
      text: result.content,
    }
  },
  tokensUsageParser: async (result) => { // Return the number of tokens used
    return {
      completion: 10
      prompt: 10
    }
  },
})

Method 2: .trackEvent

If you don't want to wrap your model, you can also use the lunary.trackEvent method.

First, track the start of your query:

// Report the start of the model
const runId = 'some-unique-id'
lunary.trackEvent('llm','start',{
  runId,
  name: 'custom-model-1.3',
  input: [{
    role: 'system',
    text: args.systemPrompt
  }, {
    role: 'user',
    text: args.userPrompt
  }],
  extra: {
    temperature: args.temperature,
  },
})

Run your model:

const result = await yourLlmModel('Hello!')

Then, track the result of your query:

lunary.trackEvent('llm','end',{
  runId,
  output: {
    role: 'ai',
    text: result.content,
  },
  tokensUsage: {
    completion: 10
    prompt: 10
  }
})

Note

Input & output can be any object or array of object, however we recommend using the ChatMessage format:

interface ChatMessage {
  role: "user" | "ai" | "system" | "function"
  text: string
  functions?: cJSON[]
  functionCall?: {
    name: string
    arguments: cJSON
  }
}

Questions? We're here to help.

Email