opik-vercel 1.10.38 → 1.10.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var opik=require('opik');var
|
|
1
|
+
'use strict';var api=require('@opentelemetry/api'),opik=require('opik');var C=new opik.Opik,f=class{constructor({client:n=C,tags:e=[],metadata:t={},threadId:s}={}){this.traces=new Map;this.spans=new Map;this.getSpanInput=n=>{let e={},{attributes:t}=n;return Object.keys(t).forEach(a=>{if(a==="ai.prompt"||a==="gen_ai.request"){let o=T(t[a]);o&&(e={...e,...o});}if(a.startsWith("ai.prompt.")){let o=a.replace("ai.prompt.","");e[o]=l(t[a]);}if(a.startsWith("gen_ai.request.")){let o=a.replace("gen_ai.request.","");e[o]=l(t[a]);}}),Object.keys(e).length>0||("ai.toolCall.name"in t&&(e.toolName=t["ai.toolCall.name"]),"ai.toolCall.args"in t&&(e.args=t["ai.toolCall.args"])),e};this.getSpanOutput=n=>{let{attributes:e}=n;return e["ai.response.text"]?{text:e["ai.response.text"]}:e["ai.response.object"]?{object:l(e["ai.response.object"])}:e["ai.toolCall.result"]?{result:e["ai.toolCall.result"]}:e["ai.response.toolCalls"]?{toolCalls:l(e["ai.response.toolCalls"])}:{}};this.getSpanMetadata=n=>{let{attributes:e}=n,t={};return e["gen_ai.response.model"]&&(t.model=e["gen_ai.response.model"]),e["gen_ai.system"]&&(t.system=e["gen_ai.system"]),t};this.getSpanUsage=n=>{let{attributes:e}=n,t={};return "ai.usage.promptTokens"in e&&(t.prompt_tokens=e["ai.usage.promptTokens"]),"gen_ai.usage.input_tokens"in e&&(t.prompt_tokens=e["gen_ai.usage.input_tokens"]),"ai.usage.completionTokens"in e&&(t.completion_tokens=e["ai.usage.completionTokens"]),"gen_ai.usage.output_tokens"in e&&(t.completion_tokens=e["gen_ai.usage.output_tokens"]),("prompt_tokens"in t||"completion_tokens"in t)&&(t.total_tokens=(t.prompt_tokens||0)+(t.completion_tokens||0)),t};this.getThreadId=n=>{var t;let{attributes:e}=n;return e["ai.telemetry.metadata.threadId"]!=null?(t=e["ai.telemetry.metadata.threadId"])==null?void 0:t.toString():this.threadId};this.getErrorInfo=n=>{var u,r,p;if(n.status.code!==api.SpanStatusCode.ERROR)return;let e=n.events.find(c=>c.name==="exception");if(!e)return {exceptionType:"Error",message:n.status.message||"An error occurred",traceback:""};let{attributes:t}=e,s=((u=t==null?void 0:t["exception.type"])==null?void 0:u.toString())||"Error",a=(r=t==null?void 0:t["exception.message"])==null?void 0:r.toString(),o=((p=t==null?void 0:t["exception.stacktrace"])==null?void 0:p.toString())||"";return {exceptionType:s,message:a,traceback:o}};this.processSpan=({otelSpan:n,parentSpan:e,trace:t})=>{let s=this.getErrorInfo(n);return t.span({name:n.name,startTime:new Date(g(n.startTime)),endTime:new Date(g(n.endTime)),parentSpanId:e==null?void 0:e.data.id,input:this.getSpanInput(n),output:this.getSpanOutput(n),metadata:this.getSpanMetadata(n),usage:this.getSpanUsage(n),type:"llm",...s&&{errorInfo:s}})};this.shutdown=async()=>{await this.client.flush();};this.forceFlush=async()=>{await this.client.flush();};this.export=async(n,e)=>{let t=n.filter(o=>O(o)==="ai"),s=n.length-t.length;if(s>0&&opik.logger.debug(`Ignored ${s} non-AI SDK spans`),t.length===0){opik.logger.debug("No AI SDK spans found"),e({code:0});return}let a=w(t);opik.logger.debug("Exporting spans",t),Object.entries(a).forEach(([o,u])=>{var h,b;let[r,...p]=u,c=this.getErrorInfo(r),S=this.client.trace({startTime:new Date(g(r.startTime)),endTime:new Date(g(r.endTime)),name:(b=(h=r.attributes["ai.telemetry.metadata.traceName"])==null?void 0:h.toString())!=null?b:r.name,input:this.getSpanInput(r),output:this.getSpanOutput(r),metadata:{...this.getSpanMetadata(r),...this.metadata},tags:this.tags,usage:this.getSpanUsage(r),threadId:this.getThreadId(r),...c&&{errorInfo:c}});this.traces.set(o,S),p.forEach(m=>{var y,I;let x=this.spans.get((I=(y=m.parentSpanContext)==null?void 0:y.spanId)!=null?I:""),R=this.processSpan({parentSpan:x,otelSpan:m,trace:S});this.spans.set(m.spanContext().spanId,R);});});try{await this.client.flush(),e({code:0});}catch(o){opik.logger.error("Error exporting spans",o),e({code:1,error:o instanceof Error?o:new Error("Unknown error")});}};this.client=n,this.tags=[...e],this.metadata={...t},this.threadId=s;}static getSettings(n){var t,s,a;let e={...n.metadata};return n.name&&(e.traceName=n.name),{isEnabled:(t=n.isEnabled)!=null?t:true,recordInputs:(s=n.recordInputs)!=null?s:true,recordOutputs:(a=n.recordOutputs)!=null?a:true,functionId:n.functionId,metadata:e}}};function w(i){let n={};return i.forEach(e=>{let t=e.spanContext();n[t.traceId]||(n[t.traceId]=[]),n[t.traceId].push(e);}),Object.entries(n).forEach(([e,t])=>{n[e]=_(t);}),n}function O(i){var e,t,s,a;let n=i;return (a=(s=(e=n.instrumentationScope)==null?void 0:e.name)!=null?s:(t=n.instrumentationLibrary)==null?void 0:t.name)!=null?a:void 0}function g(i){return i[0]*1e3+i[1]/1e6}function l(i){try{return JSON.parse(i)}catch{return i}}function T(i){if(typeof i=="string")try{let n=JSON.parse(i);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{return}}function _(i){var o,u;let n=new Map,e=new Map;for(let r of i){let{spanId:p}=r.spanContext(),c=(u=(o=r.parentSpanContext)==null?void 0:o.spanId)!=null?u:"";n.set(p,r),c&&(e.has(c)||e.set(c,[]),e.get(c).push(r));}let t=i.filter(r=>{var p;return !((p=r.parentSpanContext)!=null&&p.spanId)||!n.has(r.parentSpanContext.spanId)}),s=[],a=[...t];for(;a.length>0;){let r=a.shift();s.push(r);let p=r.spanContext().spanId,c=e.get(p)||[];a.push(...c);}return s}exports.OpikExporter=f;
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {Opik,logger}from'opik';var
|
|
1
|
+
import {SpanStatusCode}from'@opentelemetry/api';import {Opik,logger}from'opik';var C=new Opik,f=class{constructor({client:n=C,tags:e=[],metadata:t={},threadId:s}={}){this.traces=new Map;this.spans=new Map;this.getSpanInput=n=>{let e={},{attributes:t}=n;return Object.keys(t).forEach(a=>{if(a==="ai.prompt"||a==="gen_ai.request"){let o=T(t[a]);o&&(e={...e,...o});}if(a.startsWith("ai.prompt.")){let o=a.replace("ai.prompt.","");e[o]=l(t[a]);}if(a.startsWith("gen_ai.request.")){let o=a.replace("gen_ai.request.","");e[o]=l(t[a]);}}),Object.keys(e).length>0||("ai.toolCall.name"in t&&(e.toolName=t["ai.toolCall.name"]),"ai.toolCall.args"in t&&(e.args=t["ai.toolCall.args"])),e};this.getSpanOutput=n=>{let{attributes:e}=n;return e["ai.response.text"]?{text:e["ai.response.text"]}:e["ai.response.object"]?{object:l(e["ai.response.object"])}:e["ai.toolCall.result"]?{result:e["ai.toolCall.result"]}:e["ai.response.toolCalls"]?{toolCalls:l(e["ai.response.toolCalls"])}:{}};this.getSpanMetadata=n=>{let{attributes:e}=n,t={};return e["gen_ai.response.model"]&&(t.model=e["gen_ai.response.model"]),e["gen_ai.system"]&&(t.system=e["gen_ai.system"]),t};this.getSpanUsage=n=>{let{attributes:e}=n,t={};return "ai.usage.promptTokens"in e&&(t.prompt_tokens=e["ai.usage.promptTokens"]),"gen_ai.usage.input_tokens"in e&&(t.prompt_tokens=e["gen_ai.usage.input_tokens"]),"ai.usage.completionTokens"in e&&(t.completion_tokens=e["ai.usage.completionTokens"]),"gen_ai.usage.output_tokens"in e&&(t.completion_tokens=e["gen_ai.usage.output_tokens"]),("prompt_tokens"in t||"completion_tokens"in t)&&(t.total_tokens=(t.prompt_tokens||0)+(t.completion_tokens||0)),t};this.getThreadId=n=>{var t;let{attributes:e}=n;return e["ai.telemetry.metadata.threadId"]!=null?(t=e["ai.telemetry.metadata.threadId"])==null?void 0:t.toString():this.threadId};this.getErrorInfo=n=>{var u,r,p;if(n.status.code!==SpanStatusCode.ERROR)return;let e=n.events.find(c=>c.name==="exception");if(!e)return {exceptionType:"Error",message:n.status.message||"An error occurred",traceback:""};let{attributes:t}=e,s=((u=t==null?void 0:t["exception.type"])==null?void 0:u.toString())||"Error",a=(r=t==null?void 0:t["exception.message"])==null?void 0:r.toString(),o=((p=t==null?void 0:t["exception.stacktrace"])==null?void 0:p.toString())||"";return {exceptionType:s,message:a,traceback:o}};this.processSpan=({otelSpan:n,parentSpan:e,trace:t})=>{let s=this.getErrorInfo(n);return t.span({name:n.name,startTime:new Date(g(n.startTime)),endTime:new Date(g(n.endTime)),parentSpanId:e==null?void 0:e.data.id,input:this.getSpanInput(n),output:this.getSpanOutput(n),metadata:this.getSpanMetadata(n),usage:this.getSpanUsage(n),type:"llm",...s&&{errorInfo:s}})};this.shutdown=async()=>{await this.client.flush();};this.forceFlush=async()=>{await this.client.flush();};this.export=async(n,e)=>{let t=n.filter(o=>O(o)==="ai"),s=n.length-t.length;if(s>0&&logger.debug(`Ignored ${s} non-AI SDK spans`),t.length===0){logger.debug("No AI SDK spans found"),e({code:0});return}let a=w(t);logger.debug("Exporting spans",t),Object.entries(a).forEach(([o,u])=>{var h,b;let[r,...p]=u,c=this.getErrorInfo(r),S=this.client.trace({startTime:new Date(g(r.startTime)),endTime:new Date(g(r.endTime)),name:(b=(h=r.attributes["ai.telemetry.metadata.traceName"])==null?void 0:h.toString())!=null?b:r.name,input:this.getSpanInput(r),output:this.getSpanOutput(r),metadata:{...this.getSpanMetadata(r),...this.metadata},tags:this.tags,usage:this.getSpanUsage(r),threadId:this.getThreadId(r),...c&&{errorInfo:c}});this.traces.set(o,S),p.forEach(m=>{var y,I;let x=this.spans.get((I=(y=m.parentSpanContext)==null?void 0:y.spanId)!=null?I:""),R=this.processSpan({parentSpan:x,otelSpan:m,trace:S});this.spans.set(m.spanContext().spanId,R);});});try{await this.client.flush(),e({code:0});}catch(o){logger.error("Error exporting spans",o),e({code:1,error:o instanceof Error?o:new Error("Unknown error")});}};this.client=n,this.tags=[...e],this.metadata={...t},this.threadId=s;}static getSettings(n){var t,s,a;let e={...n.metadata};return n.name&&(e.traceName=n.name),{isEnabled:(t=n.isEnabled)!=null?t:true,recordInputs:(s=n.recordInputs)!=null?s:true,recordOutputs:(a=n.recordOutputs)!=null?a:true,functionId:n.functionId,metadata:e}}};function w(i){let n={};return i.forEach(e=>{let t=e.spanContext();n[t.traceId]||(n[t.traceId]=[]),n[t.traceId].push(e);}),Object.entries(n).forEach(([e,t])=>{n[e]=_(t);}),n}function O(i){var e,t,s,a;let n=i;return (a=(s=(e=n.instrumentationScope)==null?void 0:e.name)!=null?s:(t=n.instrumentationLibrary)==null?void 0:t.name)!=null?a:void 0}function g(i){return i[0]*1e3+i[1]/1e6}function l(i){try{return JSON.parse(i)}catch{return i}}function T(i){if(typeof i=="string")try{let n=JSON.parse(i);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{return}}function _(i){var o,u;let n=new Map,e=new Map;for(let r of i){let{spanId:p}=r.spanContext(),c=(u=(o=r.parentSpanContext)==null?void 0:o.spanId)!=null?u:"";n.set(p,r),c&&(e.has(c)||e.set(c,[]),e.get(c).push(r));}let t=i.filter(r=>{var p;return !((p=r.parentSpanContext)!=null&&p.spanId)||!n.has(r.parentSpanContext.spanId)}),s=[],a=[...t];for(;a.length>0;){let r=a.shift();s.push(r);let p=r.spanContext().spanId,c=e.get(p)||[];a.push(...c);}return s}export{f as OpikExporter};
|