@anvia/langfuse 0.1.7 → 0.2.0

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.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { JsonValue, AgentObserver, EvalReporter } from '@anvia/core';
1
+ import { JsonValue } from '@anvia/core/completion';
2
+ import { EvalReporter } from '@anvia/core/evals';
3
+ import { AgentObserver } from '@anvia/core/observability';
2
4
 
3
5
  type LangfuseTracingOptions = {
4
6
  publicKey?: string | undefined;
package/dist/index.js CHANGED
@@ -1,7 +1,5 @@
1
1
  // src/index.ts
2
- import {
3
- textFromAssistantContent
4
- } from "@anvia/core";
2
+ import { textFromAssistantContent } from "@anvia/core/completion";
5
3
  import { LangfuseSpanProcessor } from "@langfuse/otel";
6
4
  import {
7
5
  LangfuseOtelSpanAttributes,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n type AgentGenerationEndArgs,\n type AgentGenerationErrorArgs,\n type AgentGenerationObserver,\n type AgentGenerationStartArgs,\n type AgentObserver,\n type AgentRunEndArgs,\n type AgentRunErrorArgs,\n type AgentRunObserver,\n type AgentRunStartArgs,\n type AgentToolEndArgs,\n type AgentToolErrorArgs,\n type AgentToolObserver,\n type AgentToolStartArgs,\n type AgentToolStreamEventArgs,\n type AgentTraceInfo,\n type EvalOutcome,\n type EvalReportArgs,\n type EvalReporter,\n type JsonValue,\n textFromAssistantContent,\n} from \"@anvia/core\";\nimport { LangfuseSpanProcessor } from \"@langfuse/otel\";\nimport {\n type LangfuseAgent,\n type LangfuseGeneration,\n LangfuseOtelSpanAttributes,\n type LangfuseSpan,\n type LangfuseTool,\n startObservation,\n} from \"@langfuse/tracing\";\nimport { NodeSDK } from \"@opentelemetry/sdk-node\";\n\nexport type LangfuseTracingOptions = {\n publicKey?: string | undefined;\n secretKey?: string | undefined;\n baseUrl?: string | undefined;\n environment?: string | undefined;\n release?: string | undefined;\n};\n\nexport type LangfuseScoreArgs = {\n traceId?: string | undefined;\n observationId?: string | undefined;\n name: string;\n value: number;\n comment?: string | undefined;\n metadata?: Record<string, JsonValue | undefined> | undefined;\n};\n\nexport type LangfuseTracing = AgentObserver & {\n flush(): Promise<void>;\n shutdown(): Promise<void>;\n score(args: LangfuseScoreArgs): Promise<void>;\n};\n\nexport type LangfuseEvalReporterOptions = {\n publishInvalid?: boolean | undefined;\n strict?: boolean | undefined;\n};\n\nexport const langfuse = {\n create(options: LangfuseTracingOptions = {}): LangfuseTracing {\n return new LangfuseAgentObserver(options);\n },\n};\n\nexport function createLangfuseEvalReporter<Input = unknown, Output = unknown, Expected = unknown>(\n tracing: Pick<LangfuseTracing, \"score\">,\n options: LangfuseEvalReporterOptions = {},\n): EvalReporter<Input, Output, Expected> {\n return {\n async report(args) {\n if (args.outcome.outcome === \"invalid\" && options.publishInvalid !== true) {\n return;\n }\n\n const trace = traceFromEvalReport(args);\n if (trace?.traceId === undefined || trace.traceId.length === 0) {\n if (options.strict === true) {\n throw new Error(\"Langfuse eval reporter requires traceId\");\n }\n return;\n }\n\n await tracing.score({\n traceId: trace.traceId,\n name: args.metric.name,\n value: scoreValue(args.outcome),\n metadata: {\n suiteName: args.suiteName,\n caseId: args.case.id,\n outcome: args.outcome.outcome,\n },\n ...(trace.observationId === undefined ? {} : { observationId: trace.observationId }),\n ...(scoreComment(args.outcome) === undefined\n ? {}\n : { comment: scoreComment(args.outcome) as string }),\n });\n },\n };\n}\n\nfunction scoreValue(outcome: EvalOutcome): number {\n if (outcome.outcome === \"invalid\") {\n return 0;\n }\n if (typeof outcome.score === \"number\") {\n return outcome.score;\n }\n if (typeof outcome.score === \"boolean\") {\n return outcome.score ? 1 : 0;\n }\n if (\n typeof outcome.score === \"object\" &&\n outcome.score !== null &&\n \"score\" in outcome.score &&\n typeof (outcome.score as { score?: unknown }).score === \"number\"\n ) {\n return (outcome.score as { score: number }).score;\n }\n return outcome.outcome === \"pass\" ? 1 : 0;\n}\n\nfunction scoreComment(outcome: EvalOutcome): string | undefined {\n return outcome.comment ?? (outcome.outcome === \"invalid\" ? outcome.reason : undefined);\n}\n\nfunction traceFromEvalReport<Input, Output, Expected>(\n args: EvalReportArgs<Input, Output, unknown, Expected>,\n): AgentTraceInfo | undefined {\n const outputTrace = traceFromOutput(args.output);\n if (outputTrace !== undefined) {\n return outputTrace;\n }\n const traceId = args.case.metadata?.traceId;\n const observationId = args.case.metadata?.observationId;\n if (typeof traceId !== \"string\") {\n return undefined;\n }\n return {\n traceId,\n ...(typeof observationId === \"string\" ? { observationId } : {}),\n };\n}\n\nfunction traceFromOutput(output: unknown): AgentTraceInfo | undefined {\n if (typeof output !== \"object\" || output === null || !(\"trace\" in output)) {\n return undefined;\n }\n const trace = (output as { trace?: unknown }).trace;\n if (typeof trace !== \"object\" || trace === null) {\n return undefined;\n }\n const traceId = (trace as { traceId?: unknown }).traceId;\n const observationId = (trace as { observationId?: unknown }).observationId;\n if (typeof traceId !== \"string\") {\n return undefined;\n }\n return {\n traceId,\n ...(typeof observationId === \"string\" ? { observationId } : {}),\n };\n}\n\nclass LangfuseAgentObserver implements LangfuseTracing {\n private readonly processor: LangfuseSpanProcessor;\n private readonly sdk: NodeSDK;\n private readonly publicKey: string | undefined;\n private readonly secretKey: string | undefined;\n private readonly baseUrl: string;\n\n constructor(options: LangfuseTracingOptions) {\n this.publicKey = emptyToUndefined(options.publicKey);\n this.secretKey = emptyToUndefined(options.secretKey);\n this.baseUrl = emptyToUndefined(options.baseUrl) ?? \"https://cloud.langfuse.com\";\n const processorOptions: ConstructorParameters<typeof LangfuseSpanProcessor>[0] = {\n baseUrl: this.baseUrl,\n };\n if (this.publicKey !== undefined) processorOptions.publicKey = this.publicKey;\n if (this.secretKey !== undefined) processorOptions.secretKey = this.secretKey;\n const environment = emptyToUndefined(options.environment);\n if (environment !== undefined) processorOptions.environment = environment;\n const release = emptyToUndefined(options.release);\n if (release !== undefined) processorOptions.release = release;\n this.processor = new LangfuseSpanProcessor(processorOptions);\n this.sdk = new NodeSDK({\n spanProcessors: [this.processor],\n });\n this.sdk.start();\n }\n\n async startRun(args: AgentRunStartArgs): Promise<AgentRunObserver> {\n const traceId = args.trace?.traceId;\n const rootAttributes: Parameters<typeof startObservation>[1] = {\n input: {\n prompt: args.prompt,\n history: args.history,\n },\n metadata: {\n agentName: args.agentName,\n agentDescription: args.agentDescription,\n maxTurns: args.maxTurns,\n ...(args.trace?.metadata ?? {}),\n },\n };\n if (args.trace?.version !== undefined) {\n rootAttributes.version = args.trace.version;\n }\n\n const root = startObservation(\n args.agentName ?? \"agent.run\",\n rootAttributes,\n traceId === undefined\n ? { asType: \"agent\" }\n : {\n asType: \"agent\",\n parentSpanContext: {\n traceId,\n spanId: \"0000000000000001\",\n traceFlags: 1,\n },\n },\n );\n applyTraceAttributes(root, args);\n\n return new LangfuseRunObserver(root, {\n traceId: root.traceId,\n observationId: root.id,\n });\n }\n\n async flush(): Promise<void> {\n await this.processor.forceFlush();\n }\n\n async shutdown(): Promise<void> {\n await this.sdk.shutdown();\n }\n\n async score(args: LangfuseScoreArgs): Promise<void> {\n if (args.traceId === undefined || args.traceId.length === 0) {\n throw new Error(\"Langfuse score requires traceId\");\n }\n if (this.publicKey === undefined || this.secretKey === undefined) {\n throw new Error(\"Langfuse score requires publicKey and secretKey\");\n }\n\n const body: Record<string, unknown> = {\n traceId: args.traceId,\n name: args.name,\n value: args.value,\n };\n if (args.observationId !== undefined) body.observationId = args.observationId;\n if (args.comment !== undefined) body.comment = args.comment;\n if (args.metadata !== undefined) body.metadata = args.metadata;\n\n const response = await fetch(`${this.baseUrl}/api/public/scores`, {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${Buffer.from(`${this.publicKey}:${this.secretKey}`).toString(\"base64\")}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n throw new Error(\n `Langfuse score failed with HTTP ${response.status}: ${await response.text()}`,\n );\n }\n }\n}\n\nfunction applyTraceAttributes(root: LangfuseAgent, args: AgentRunStartArgs): void {\n const traceName = args.trace?.name ?? args.agentName;\n if (traceName !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_NAME, traceName);\n }\n if (args.trace?.userId !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_USER_ID, args.trace.userId);\n }\n if (args.trace?.sessionId !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_SESSION_ID, args.trace.sessionId);\n }\n if (args.trace?.tags !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_TAGS, args.trace.tags);\n }\n for (const [key, value] of Object.entries(args.trace?.metadata ?? {})) {\n const serialized = serializeMetadataValue(value);\n if (serialized === undefined) {\n continue;\n }\n root.otelSpan.setAttribute(`${LangfuseOtelSpanAttributes.TRACE_METADATA}.${key}`, serialized);\n }\n}\n\nfunction serializeMetadataValue(value: unknown): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return \"<failed to serialize>\";\n }\n}\n\nclass LangfuseRunObserver implements AgentRunObserver {\n private readonly turnSpans = new Map<number, LangfuseSpan>();\n\n constructor(\n private readonly root: LangfuseAgent,\n readonly trace: AgentTraceInfo,\n ) {}\n\n startGeneration(args: AgentGenerationStartArgs): AgentGenerationObserver {\n this.closeEarlierTurns(args.turn);\n const turn = this.turnSpan(args.turn);\n const generation = turn.startObservation(\n `model.turn.${args.turn}`,\n {\n input: args.request.chatHistory,\n model: args.request.model ?? \"default\",\n modelParameters: modelParameters(args.request),\n metadata: {\n turn: args.turn,\n toolCount: args.request.tools.length,\n hasOutputSchema: args.request.outputSchema !== undefined,\n },\n },\n { asType: \"generation\" },\n );\n return new LangfuseGenerationObserver(generation);\n }\n\n startTool(args: AgentToolStartArgs): AgentToolObserver {\n const turn = this.turnSpan(args.turn);\n const tool = turn.startObservation(\n `tool.${args.toolName}`,\n {\n input: {\n args: args.args,\n toolCall: args.toolCall,\n },\n metadata: {\n turn: args.turn,\n internalCallId: args.internalCallId,\n toolCallId: args.toolCallId,\n },\n },\n { asType: \"tool\" },\n );\n return new LangfuseToolObserver(tool);\n }\n\n end(args: AgentRunEndArgs): void {\n this.closeAllTurns();\n this.root\n .update({\n output: args.output,\n metadata: {\n usage: args.usage,\n messages: args.messages,\n },\n })\n .end();\n }\n\n error(args: AgentRunErrorArgs): void {\n this.closeAllTurns();\n this.root\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(args.error),\n output: {\n error: errorMessage(args.error),\n },\n metadata: {\n usage: args.usage,\n messages: args.messages,\n },\n })\n .end();\n }\n\n private turnSpan(turn: number): LangfuseSpan {\n const existing = this.turnSpans.get(turn);\n if (existing !== undefined) {\n return existing;\n }\n\n const span = this.root.startObservation(\n `turn.${turn}`,\n {\n metadata: { turn },\n },\n { asType: \"span\" },\n );\n this.turnSpans.set(turn, span);\n return span;\n }\n\n private closeEarlierTurns(currentTurn: number): void {\n for (const [turn, span] of this.turnSpans) {\n if (turn < currentTurn) {\n span.end();\n this.turnSpans.delete(turn);\n }\n }\n }\n\n private closeAllTurns(): void {\n for (const span of this.turnSpans.values()) {\n span.end();\n }\n this.turnSpans.clear();\n }\n}\n\nclass LangfuseGenerationObserver implements AgentGenerationObserver {\n constructor(private readonly generation: LangfuseGeneration) {}\n\n end(args: AgentGenerationEndArgs): void {\n this.generation\n .update({\n output: {\n messageId: args.response.messageId,\n content: args.response.choice,\n text: textFromAssistantContent(args.response.choice),\n },\n usageDetails: usageDetails(args.response.usage),\n metadata: {\n turn: args.turn,\n },\n })\n .end();\n }\n\n error(args: AgentGenerationErrorArgs): void {\n this.generation\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(args.error),\n output: { error: errorMessage(args.error) },\n metadata: { turn: args.turn },\n })\n .end();\n }\n}\n\nclass LangfuseToolObserver implements AgentToolObserver {\n private readonly childAgents = new Map<string, LangfuseAgent>();\n private readonly childGenerations = new Map<string, LangfuseGeneration>();\n private readonly childTools: Array<{\n agentId: string;\n toolName: string;\n toolCallId?: string;\n tool: LangfuseTool;\n ended: boolean;\n }> = [];\n\n constructor(private readonly tool: LangfuseTool) {}\n\n streamEvent(args: AgentToolStreamEventArgs): void {\n const wrapper = args.event;\n const child = isRecord(wrapper.event) ? wrapper.event : undefined;\n if (child === undefined) {\n return;\n }\n\n const agentId = wrapper.agentId;\n const agentName = wrapper.agentName;\n const childTurn = typeof child.turn === \"number\" ? child.turn : args.turn;\n const agent = this.childAgent(agentId, agentName, args);\n\n if (child.type === \"turn_start\") {\n const generation = agent.startObservation(\n `${agentLabel(agentId, agentName)}.model.turn.${childTurn}`,\n {\n input: {\n prompt: child.prompt,\n history: child.history,\n },\n metadata: childMetadata(args, agentId, agentName, childTurn),\n },\n { asType: \"generation\" },\n );\n this.childGenerations.set(generationKey(agentId, childTurn), generation);\n return;\n }\n\n if (child.type === \"turn_end\") {\n const generation = this.childGenerations.get(generationKey(agentId, childTurn));\n if (generation !== undefined) {\n generation\n .update({\n output: child.response,\n ...(isRecord(child.response) && isRecord(child.response.usage)\n ? { usageDetails: usageDetailsFromRecord(child.response.usage) }\n : {}),\n metadata: childMetadata(args, agentId, agentName, childTurn),\n })\n .end();\n this.childGenerations.delete(generationKey(agentId, childTurn));\n }\n return;\n }\n\n if (child.type === \"tool_call\" && isRecord(child.toolCall)) {\n const toolCall = child.toolCall;\n const toolCallFunction = isRecord(toolCall.function) ? toolCall.function : undefined;\n const toolName = typeof toolCallFunction?.name === \"string\" ? toolCallFunction.name : \"tool\";\n const toolCallId =\n typeof toolCall.callId === \"string\"\n ? toolCall.callId\n : typeof toolCall.id === \"string\"\n ? toolCall.id\n : undefined;\n const childTool = agent.startObservation(\n `${agentLabel(agentId, agentName)}.${toolName}`,\n {\n input: {\n args: toolCallFunction?.arguments ?? {},\n toolCall,\n },\n metadata: {\n ...childMetadata(args, agentId, agentName, childTurn),\n toolName,\n toolCallId,\n },\n },\n { asType: \"tool\" },\n );\n this.childTools.push({\n agentId,\n toolName,\n ...(toolCallId === undefined ? {} : { toolCallId }),\n tool: childTool,\n ended: false,\n });\n return;\n }\n\n if (child.type === \"tool_result\") {\n const toolName = typeof child.toolName === \"string\" ? child.toolName : \"tool\";\n const toolCallId = typeof child.toolCallId === \"string\" ? child.toolCallId : undefined;\n const childTool = this.findChildTool(agentId, toolName, toolCallId);\n if (childTool !== undefined) {\n childTool.ended = true;\n childTool.tool\n .update({\n output: typeof child.result === \"string\" ? child.result : child,\n metadata: {\n ...childMetadata(args, agentId, agentName, childTurn),\n toolName,\n toolCallId,\n internalCallId:\n typeof child.internalCallId === \"string\" ? child.internalCallId : undefined,\n args: typeof child.args === \"string\" ? child.args : undefined,\n },\n })\n .end();\n }\n return;\n }\n\n if (child.type === \"final\") {\n agent\n .update({\n output: child.output,\n ...(isRecord(child.usage) ? { metadata: { usage: child.usage } } : {}),\n })\n .end();\n this.childAgents.delete(agentId);\n return;\n }\n\n if (child.type === \"error\") {\n agent\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(child.error),\n output: { error: errorMessage(child.error) },\n })\n .end();\n this.childAgents.delete(agentId);\n }\n }\n\n end(args: AgentToolEndArgs): void {\n this.endOpenChildren();\n const attributes: Parameters<LangfuseTool[\"update\"]>[0] = {\n output: args.result,\n metadata: {\n turn: args.turn,\n internalCallId: args.internalCallId,\n toolCallId: args.toolCallId,\n skipped: args.skipped,\n },\n level: args.skipped ? \"WARNING\" : \"DEFAULT\",\n };\n if (args.skipped) {\n attributes.statusMessage = \"Tool call skipped by hook\";\n }\n this.tool.update(attributes).end();\n }\n\n error(args: AgentToolErrorArgs): void {\n this.endOpenChildren();\n this.tool\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(args.error),\n output: { error: errorMessage(args.error) },\n metadata: {\n turn: args.turn,\n internalCallId: args.internalCallId,\n toolCallId: args.toolCallId,\n },\n })\n .end();\n }\n\n private childAgent(\n agentId: string,\n agentName: string | undefined,\n args: AgentToolStartArgs,\n ): LangfuseAgent {\n const existing = this.childAgents.get(agentId);\n if (existing !== undefined) {\n return existing;\n }\n const agent = this.tool.startObservation(\n `${agentLabel(agentId, agentName)}.run`,\n {\n metadata: childMetadata(args, agentId, agentName, args.turn),\n },\n { asType: \"agent\" },\n );\n this.childAgents.set(agentId, agent);\n return agent;\n }\n\n private findChildTool(\n agentId: string,\n toolName: string,\n toolCallId: string | undefined,\n ): (typeof this.childTools)[number] | undefined {\n for (let index = this.childTools.length - 1; index >= 0; index -= 1) {\n const childTool = this.childTools[index];\n if (\n childTool === undefined ||\n childTool.ended ||\n childTool.agentId !== agentId ||\n childTool.toolName !== toolName\n ) {\n continue;\n }\n if (toolCallId === undefined || childTool.toolCallId === toolCallId) {\n return childTool;\n }\n }\n return undefined;\n }\n\n private endOpenChildren(): void {\n for (const generation of this.childGenerations.values()) {\n generation.end();\n }\n this.childGenerations.clear();\n for (const tool of this.childTools) {\n if (!tool.ended) {\n tool.tool.end();\n tool.ended = true;\n }\n }\n for (const agent of this.childAgents.values()) {\n agent.end();\n }\n this.childAgents.clear();\n }\n}\n\nfunction modelParameters(\n request: AgentGenerationStartArgs[\"request\"],\n): Record<string, string | number> {\n const params: Record<string, string | number> = {};\n if (request.temperature !== undefined) params.temperature = request.temperature;\n if (request.maxTokens !== undefined) params.maxTokens = request.maxTokens;\n if (request.toolChoice !== undefined) {\n params.toolChoice =\n typeof request.toolChoice === \"string\" ? request.toolChoice : request.toolChoice.name;\n }\n return params;\n}\n\nfunction usageDetails(usage: AgentGenerationEndArgs[\"response\"][\"usage\"]): Record<string, number> {\n return {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n totalTokens: usage.totalTokens,\n cachedInputTokens: usage.cachedInputTokens,\n cacheCreationInputTokens: usage.cacheCreationInputTokens,\n };\n}\n\nfunction usageDetailsFromRecord(usage: Record<string, unknown>): Record<string, number> {\n return {\n inputTokens: numberValue(usage.inputTokens) ?? 0,\n outputTokens: numberValue(usage.outputTokens) ?? 0,\n totalTokens:\n numberValue(usage.totalTokens) ??\n (numberValue(usage.inputTokens) ?? 0) + (numberValue(usage.outputTokens) ?? 0),\n };\n}\n\nfunction childMetadata(\n args: AgentToolStartArgs,\n agentId: string,\n agentName: string | undefined,\n childTurn: number,\n): Record<string, unknown> {\n return {\n source: \"agent_tool_event\",\n childAgentId: agentId,\n childAgentName: agentName,\n childTurn,\n parentToolName: args.toolName,\n parentInternalCallId: args.internalCallId,\n parentToolCallId: args.toolCallId,\n };\n}\n\nfunction generationKey(agentId: string, turn: number): string {\n return `${agentId}:${turn}`;\n}\n\nfunction agentLabel(agentId: string, agentName: string | undefined): string {\n return (agentName ?? agentId).replaceAll(/\\s+/g, \"_\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction emptyToUndefined(value: string | undefined): string | undefined {\n return value === undefined || value.length === 0 ? undefined : value;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":";AAAA;AAAA,EAoBE;AAAA,OACK;AACP,SAAS,6BAA6B;AACtC;AAAA,EAGE;AAAA,EAGA;AAAA,OACK;AACP,SAAS,eAAe;AA8BjB,IAAM,WAAW;AAAA,EACtB,OAAO,UAAkC,CAAC,GAAoB;AAC5D,WAAO,IAAI,sBAAsB,OAAO;AAAA,EAC1C;AACF;AAEO,SAAS,2BACd,SACA,UAAuC,CAAC,GACD;AACvC,SAAO;AAAA,IACL,MAAM,OAAO,MAAM;AACjB,UAAI,KAAK,QAAQ,YAAY,aAAa,QAAQ,mBAAmB,MAAM;AACzE;AAAA,MACF;AAEA,YAAM,QAAQ,oBAAoB,IAAI;AACtC,UAAI,OAAO,YAAY,UAAa,MAAM,QAAQ,WAAW,GAAG;AAC9D,YAAI,QAAQ,WAAW,MAAM;AAC3B,gBAAM,IAAI,MAAM,yCAAyC;AAAA,QAC3D;AACA;AAAA,MACF;AAEA,YAAM,QAAQ,MAAM;AAAA,QAClB,SAAS,MAAM;AAAA,QACf,MAAM,KAAK,OAAO;AAAA,QAClB,OAAO,WAAW,KAAK,OAAO;AAAA,QAC9B,UAAU;AAAA,UACR,WAAW,KAAK;AAAA,UAChB,QAAQ,KAAK,KAAK;AAAA,UAClB,SAAS,KAAK,QAAQ;AAAA,QACxB;AAAA,QACA,GAAI,MAAM,kBAAkB,SAAY,CAAC,IAAI,EAAE,eAAe,MAAM,cAAc;AAAA,QAClF,GAAI,aAAa,KAAK,OAAO,MAAM,SAC/B,CAAC,IACD,EAAE,SAAS,aAAa,KAAK,OAAO,EAAY;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,WAAW,SAA8B;AAChD,MAAI,QAAQ,YAAY,WAAW;AACjC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,QAAQ,UAAU,UAAU;AACrC,WAAO,QAAQ;AAAA,EACjB;AACA,MAAI,OAAO,QAAQ,UAAU,WAAW;AACtC,WAAO,QAAQ,QAAQ,IAAI;AAAA,EAC7B;AACA,MACE,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,QAClB,WAAW,QAAQ,SACnB,OAAQ,QAAQ,MAA8B,UAAU,UACxD;AACA,WAAQ,QAAQ,MAA4B;AAAA,EAC9C;AACA,SAAO,QAAQ,YAAY,SAAS,IAAI;AAC1C;AAEA,SAAS,aAAa,SAA0C;AAC9D,SAAO,QAAQ,YAAY,QAAQ,YAAY,YAAY,QAAQ,SAAS;AAC9E;AAEA,SAAS,oBACP,MAC4B;AAC5B,QAAM,cAAc,gBAAgB,KAAK,MAAM;AAC/C,MAAI,gBAAgB,QAAW;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,UAAU,KAAK,KAAK,UAAU;AACpC,QAAM,gBAAgB,KAAK,KAAK,UAAU;AAC1C,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL;AAAA,IACA,GAAI,OAAO,kBAAkB,WAAW,EAAE,cAAc,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,gBAAgB,QAA6C;AACpE,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,EAAE,WAAW,SAAS;AACzE,WAAO;AAAA,EACT;AACA,QAAM,QAAS,OAA+B;AAC9C,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,WAAO;AAAA,EACT;AACA,QAAM,UAAW,MAAgC;AACjD,QAAM,gBAAiB,MAAsC;AAC7D,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL;AAAA,IACA,GAAI,OAAO,kBAAkB,WAAW,EAAE,cAAc,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,IAAM,wBAAN,MAAuD;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,SAAiC;AAC3C,SAAK,YAAY,iBAAiB,QAAQ,SAAS;AACnD,SAAK,YAAY,iBAAiB,QAAQ,SAAS;AACnD,SAAK,UAAU,iBAAiB,QAAQ,OAAO,KAAK;AACpD,UAAM,mBAA2E;AAAA,MAC/E,SAAS,KAAK;AAAA,IAChB;AACA,QAAI,KAAK,cAAc,OAAW,kBAAiB,YAAY,KAAK;AACpE,QAAI,KAAK,cAAc,OAAW,kBAAiB,YAAY,KAAK;AACpE,UAAM,cAAc,iBAAiB,QAAQ,WAAW;AACxD,QAAI,gBAAgB,OAAW,kBAAiB,cAAc;AAC9D,UAAM,UAAU,iBAAiB,QAAQ,OAAO;AAChD,QAAI,YAAY,OAAW,kBAAiB,UAAU;AACtD,SAAK,YAAY,IAAI,sBAAsB,gBAAgB;AAC3D,SAAK,MAAM,IAAI,QAAQ;AAAA,MACrB,gBAAgB,CAAC,KAAK,SAAS;AAAA,IACjC,CAAC;AACD,SAAK,IAAI,MAAM;AAAA,EACjB;AAAA,EAEA,MAAM,SAAS,MAAoD;AACjE,UAAM,UAAU,KAAK,OAAO;AAC5B,UAAM,iBAAyD;AAAA,MAC7D,OAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,QACR,WAAW,KAAK;AAAA,QAChB,kBAAkB,KAAK;AAAA,QACvB,UAAU,KAAK;AAAA,QACf,GAAI,KAAK,OAAO,YAAY,CAAC;AAAA,MAC/B;AAAA,IACF;AACA,QAAI,KAAK,OAAO,YAAY,QAAW;AACrC,qBAAe,UAAU,KAAK,MAAM;AAAA,IACtC;AAEA,UAAM,OAAO;AAAA,MACX,KAAK,aAAa;AAAA,MAClB;AAAA,MACA,YAAY,SACR,EAAE,QAAQ,QAAQ,IAClB;AAAA,QACE,QAAQ;AAAA,QACR,mBAAmB;AAAA,UACjB;AAAA,UACA,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACN;AACA,yBAAqB,MAAM,IAAI;AAE/B,WAAO,IAAI,oBAAoB,MAAM;AAAA,MACnC,SAAS,KAAK;AAAA,MACd,eAAe,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,UAAU,WAAW;AAAA,EAClC;AAAA,EAEA,MAAM,WAA0B;AAC9B,UAAM,KAAK,IAAI,SAAS;AAAA,EAC1B;AAAA,EAEA,MAAM,MAAM,MAAwC;AAClD,QAAI,KAAK,YAAY,UAAa,KAAK,QAAQ,WAAW,GAAG;AAC3D,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AACA,QAAI,KAAK,cAAc,UAAa,KAAK,cAAc,QAAW;AAChE,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AAEA,UAAM,OAAgC;AAAA,MACpC,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,IACd;AACA,QAAI,KAAK,kBAAkB,OAAW,MAAK,gBAAgB,KAAK;AAChE,QAAI,KAAK,YAAY,OAAW,MAAK,UAAU,KAAK;AACpD,QAAI,KAAK,aAAa,OAAW,MAAK,WAAW,KAAK;AAEtD,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,sBAAsB;AAAA,MAChE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,eAAe,SAAS,OAAO,KAAK,GAAG,KAAK,SAAS,IAAI,KAAK,SAAS,EAAE,EAAE,SAAS,QAAQ,CAAC;AAAA,QAC7F,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,mCAAmC,SAAS,MAAM,KAAK,MAAM,SAAS,KAAK,CAAC;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,MAAqB,MAA+B;AAChF,QAAM,YAAY,KAAK,OAAO,QAAQ,KAAK;AAC3C,MAAI,cAAc,QAAW;AAC3B,SAAK,SAAS,aAAa,2BAA2B,YAAY,SAAS;AAAA,EAC7E;AACA,MAAI,KAAK,OAAO,WAAW,QAAW;AACpC,SAAK,SAAS,aAAa,2BAA2B,eAAe,KAAK,MAAM,MAAM;AAAA,EACxF;AACA,MAAI,KAAK,OAAO,cAAc,QAAW;AACvC,SAAK,SAAS,aAAa,2BAA2B,kBAAkB,KAAK,MAAM,SAAS;AAAA,EAC9F;AACA,MAAI,KAAK,OAAO,SAAS,QAAW;AAClC,SAAK,SAAS,aAAa,2BAA2B,YAAY,KAAK,MAAM,IAAI;AAAA,EACnF;AACA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,OAAO,YAAY,CAAC,CAAC,GAAG;AACrE,UAAM,aAAa,uBAAuB,KAAK;AAC/C,QAAI,eAAe,QAAW;AAC5B;AAAA,IACF;AACA,SAAK,SAAS,aAAa,GAAG,2BAA2B,cAAc,IAAI,GAAG,IAAI,UAAU;AAAA,EAC9F;AACF;AAEA,SAAS,uBAAuB,OAAoC;AAClE,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI;AACF,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,sBAAN,MAAsD;AAAA,EAGpD,YACmB,MACR,OACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJM,YAAY,oBAAI,IAA0B;AAAA,EAO3D,gBAAgB,MAAyD;AACvE,SAAK,kBAAkB,KAAK,IAAI;AAChC,UAAM,OAAO,KAAK,SAAS,KAAK,IAAI;AACpC,UAAM,aAAa,KAAK;AAAA,MACtB,cAAc,KAAK,IAAI;AAAA,MACvB;AAAA,QACE,OAAO,KAAK,QAAQ;AAAA,QACpB,OAAO,KAAK,QAAQ,SAAS;AAAA,QAC7B,iBAAiB,gBAAgB,KAAK,OAAO;AAAA,QAC7C,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,WAAW,KAAK,QAAQ,MAAM;AAAA,UAC9B,iBAAiB,KAAK,QAAQ,iBAAiB;AAAA,QACjD;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,aAAa;AAAA,IACzB;AACA,WAAO,IAAI,2BAA2B,UAAU;AAAA,EAClD;AAAA,EAEA,UAAU,MAA6C;AACrD,UAAM,OAAO,KAAK,SAAS,KAAK,IAAI;AACpC,UAAM,OAAO,KAAK;AAAA,MAChB,QAAQ,KAAK,QAAQ;AAAA,MACrB;AAAA,QACE,OAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,QACjB;AAAA,QACA,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,gBAAgB,KAAK;AAAA,UACrB,YAAY,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,MACA,EAAE,QAAQ,OAAO;AAAA,IACnB;AACA,WAAO,IAAI,qBAAqB,IAAI;AAAA,EACtC;AAAA,EAEA,IAAI,MAA6B;AAC/B,SAAK,cAAc;AACnB,SAAK,KACF,OAAO;AAAA,MACN,QAAQ,KAAK;AAAA,MACb,UAAU;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,MACjB;AAAA,IACF,CAAC,EACA,IAAI;AAAA,EACT;AAAA,EAEA,MAAM,MAA+B;AACnC,SAAK,cAAc;AACnB,SAAK,KACF,OAAO;AAAA,MACN,OAAO;AAAA,MACP,eAAe,aAAa,KAAK,KAAK;AAAA,MACtC,QAAQ;AAAA,QACN,OAAO,aAAa,KAAK,KAAK;AAAA,MAChC;AAAA,MACA,UAAU;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,MACjB;AAAA,IACF,CAAC,EACA,IAAI;AAAA,EACT;AAAA,EAEQ,SAAS,MAA4B;AAC3C,UAAM,WAAW,KAAK,UAAU,IAAI,IAAI;AACxC,QAAI,aAAa,QAAW;AAC1B,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,KAAK,KAAK;AAAA,MACrB,QAAQ,IAAI;AAAA,MACZ;AAAA,QACE,UAAU,EAAE,KAAK;AAAA,MACnB;AAAA,MACA,EAAE,QAAQ,OAAO;AAAA,IACnB;AACA,SAAK,UAAU,IAAI,MAAM,IAAI;AAC7B,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,aAA2B;AACnD,eAAW,CAAC,MAAM,IAAI,KAAK,KAAK,WAAW;AACzC,UAAI,OAAO,aAAa;AACtB,aAAK,IAAI;AACT,aAAK,UAAU,OAAO,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,eAAW,QAAQ,KAAK,UAAU,OAAO,GAAG;AAC1C,WAAK,IAAI;AAAA,IACX;AACA,SAAK,UAAU,MAAM;AAAA,EACvB;AACF;AAEA,IAAM,6BAAN,MAAoE;AAAA,EAClE,YAA6B,YAAgC;AAAhC;AAAA,EAAiC;AAAA,EAAjC;AAAA,EAE7B,IAAI,MAAoC;AACtC,SAAK,WACF,OAAO;AAAA,MACN,QAAQ;AAAA,QACN,WAAW,KAAK,SAAS;AAAA,QACzB,SAAS,KAAK,SAAS;AAAA,QACvB,MAAM,yBAAyB,KAAK,SAAS,MAAM;AAAA,MACrD;AAAA,MACA,cAAc,aAAa,KAAK,SAAS,KAAK;AAAA,MAC9C,UAAU;AAAA,QACR,MAAM,KAAK;AAAA,MACb;AAAA,IACF,CAAC,EACA,IAAI;AAAA,EACT;AAAA,EAEA,MAAM,MAAsC;AAC1C,SAAK,WACF,OAAO;AAAA,MACN,OAAO;AAAA,MACP,eAAe,aAAa,KAAK,KAAK;AAAA,MACtC,QAAQ,EAAE,OAAO,aAAa,KAAK,KAAK,EAAE;AAAA,MAC1C,UAAU,EAAE,MAAM,KAAK,KAAK;AAAA,IAC9B,CAAC,EACA,IAAI;AAAA,EACT;AACF;AAEA,IAAM,uBAAN,MAAwD;AAAA,EAWtD,YAA6B,MAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAVZ,cAAc,oBAAI,IAA2B;AAAA,EAC7C,mBAAmB,oBAAI,IAAgC;AAAA,EACvD,aAMZ,CAAC;AAAA,EAIN,YAAY,MAAsC;AAChD,UAAM,UAAU,KAAK;AACrB,UAAM,QAAQ,SAAS,QAAQ,KAAK,IAAI,QAAQ,QAAQ;AACxD,QAAI,UAAU,QAAW;AACvB;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ;AACxB,UAAM,YAAY,QAAQ;AAC1B,UAAM,YAAY,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO,KAAK;AACrE,UAAM,QAAQ,KAAK,WAAW,SAAS,WAAW,IAAI;AAEtD,QAAI,MAAM,SAAS,cAAc;AAC/B,YAAM,aAAa,MAAM;AAAA,QACvB,GAAG,WAAW,SAAS,SAAS,CAAC,eAAe,SAAS;AAAA,QACzD;AAAA,UACE,OAAO;AAAA,YACL,QAAQ,MAAM;AAAA,YACd,SAAS,MAAM;AAAA,UACjB;AAAA,UACA,UAAU,cAAc,MAAM,SAAS,WAAW,SAAS;AAAA,QAC7D;AAAA,QACA,EAAE,QAAQ,aAAa;AAAA,MACzB;AACA,WAAK,iBAAiB,IAAI,cAAc,SAAS,SAAS,GAAG,UAAU;AACvE;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,YAAY;AAC7B,YAAM,aAAa,KAAK,iBAAiB,IAAI,cAAc,SAAS,SAAS,CAAC;AAC9E,UAAI,eAAe,QAAW;AAC5B,mBACG,OAAO;AAAA,UACN,QAAQ,MAAM;AAAA,UACd,GAAI,SAAS,MAAM,QAAQ,KAAK,SAAS,MAAM,SAAS,KAAK,IACzD,EAAE,cAAc,uBAAuB,MAAM,SAAS,KAAK,EAAE,IAC7D,CAAC;AAAA,UACL,UAAU,cAAc,MAAM,SAAS,WAAW,SAAS;AAAA,QAC7D,CAAC,EACA,IAAI;AACP,aAAK,iBAAiB,OAAO,cAAc,SAAS,SAAS,CAAC;AAAA,MAChE;AACA;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,eAAe,SAAS,MAAM,QAAQ,GAAG;AAC1D,YAAM,WAAW,MAAM;AACvB,YAAM,mBAAmB,SAAS,SAAS,QAAQ,IAAI,SAAS,WAAW;AAC3E,YAAM,WAAW,OAAO,kBAAkB,SAAS,WAAW,iBAAiB,OAAO;AACtF,YAAM,aACJ,OAAO,SAAS,WAAW,WACvB,SAAS,SACT,OAAO,SAAS,OAAO,WACrB,SAAS,KACT;AACR,YAAM,YAAY,MAAM;AAAA,QACtB,GAAG,WAAW,SAAS,SAAS,CAAC,IAAI,QAAQ;AAAA,QAC7C;AAAA,UACE,OAAO;AAAA,YACL,MAAM,kBAAkB,aAAa,CAAC;AAAA,YACtC;AAAA,UACF;AAAA,UACA,UAAU;AAAA,YACR,GAAG,cAAc,MAAM,SAAS,WAAW,SAAS;AAAA,YACpD;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA,EAAE,QAAQ,OAAO;AAAA,MACnB;AACA,WAAK,WAAW,KAAK;AAAA,QACnB;AAAA,QACA;AAAA,QACA,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,QACjD,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,eAAe;AAChC,YAAM,WAAW,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;AACvE,YAAM,aAAa,OAAO,MAAM,eAAe,WAAW,MAAM,aAAa;AAC7E,YAAM,YAAY,KAAK,cAAc,SAAS,UAAU,UAAU;AAClE,UAAI,cAAc,QAAW;AAC3B,kBAAU,QAAQ;AAClB,kBAAU,KACP,OAAO;AAAA,UACN,QAAQ,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAAA,UAC1D,UAAU;AAAA,YACR,GAAG,cAAc,MAAM,SAAS,WAAW,SAAS;AAAA,YACpD;AAAA,YACA;AAAA,YACA,gBACE,OAAO,MAAM,mBAAmB,WAAW,MAAM,iBAAiB;AAAA,YACpE,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,UACtD;AAAA,QACF,CAAC,EACA,IAAI;AAAA,MACT;AACA;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,SAAS;AAC1B,YACG,OAAO;AAAA,QACN,QAAQ,MAAM;AAAA,QACd,GAAI,SAAS,MAAM,KAAK,IAAI,EAAE,UAAU,EAAE,OAAO,MAAM,MAAM,EAAE,IAAI,CAAC;AAAA,MACtE,CAAC,EACA,IAAI;AACP,WAAK,YAAY,OAAO,OAAO;AAC/B;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,SAAS;AAC1B,YACG,OAAO;AAAA,QACN,OAAO;AAAA,QACP,eAAe,aAAa,MAAM,KAAK;AAAA,QACvC,QAAQ,EAAE,OAAO,aAAa,MAAM,KAAK,EAAE;AAAA,MAC7C,CAAC,EACA,IAAI;AACP,WAAK,YAAY,OAAO,OAAO;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,IAAI,MAA8B;AAChC,SAAK,gBAAgB;AACrB,UAAM,aAAoD;AAAA,MACxD,QAAQ,KAAK;AAAA,MACb,UAAU;AAAA,QACR,MAAM,KAAK;AAAA,QACX,gBAAgB,KAAK;AAAA,QACrB,YAAY,KAAK;AAAA,QACjB,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,OAAO,KAAK,UAAU,YAAY;AAAA,IACpC;AACA,QAAI,KAAK,SAAS;AAChB,iBAAW,gBAAgB;AAAA,IAC7B;AACA,SAAK,KAAK,OAAO,UAAU,EAAE,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,MAAgC;AACpC,SAAK,gBAAgB;AACrB,SAAK,KACF,OAAO;AAAA,MACN,OAAO;AAAA,MACP,eAAe,aAAa,KAAK,KAAK;AAAA,MACtC,QAAQ,EAAE,OAAO,aAAa,KAAK,KAAK,EAAE;AAAA,MAC1C,UAAU;AAAA,QACR,MAAM,KAAK;AAAA,QACX,gBAAgB,KAAK;AAAA,QACrB,YAAY,KAAK;AAAA,MACnB;AAAA,IACF,CAAC,EACA,IAAI;AAAA,EACT;AAAA,EAEQ,WACN,SACA,WACA,MACe;AACf,UAAM,WAAW,KAAK,YAAY,IAAI,OAAO;AAC7C,QAAI,aAAa,QAAW;AAC1B,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,KAAK,KAAK;AAAA,MACtB,GAAG,WAAW,SAAS,SAAS,CAAC;AAAA,MACjC;AAAA,QACE,UAAU,cAAc,MAAM,SAAS,WAAW,KAAK,IAAI;AAAA,MAC7D;AAAA,MACA,EAAE,QAAQ,QAAQ;AAAA,IACpB;AACA,SAAK,YAAY,IAAI,SAAS,KAAK;AACnC,WAAO;AAAA,EACT;AAAA,EAEQ,cACN,SACA,UACA,YAC8C;AAC9C,aAAS,QAAQ,KAAK,WAAW,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AACnE,YAAM,YAAY,KAAK,WAAW,KAAK;AACvC,UACE,cAAc,UACd,UAAU,SACV,UAAU,YAAY,WACtB,UAAU,aAAa,UACvB;AACA;AAAA,MACF;AACA,UAAI,eAAe,UAAa,UAAU,eAAe,YAAY;AACnE,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAwB;AAC9B,eAAW,cAAc,KAAK,iBAAiB,OAAO,GAAG;AACvD,iBAAW,IAAI;AAAA,IACjB;AACA,SAAK,iBAAiB,MAAM;AAC5B,eAAW,QAAQ,KAAK,YAAY;AAClC,UAAI,CAAC,KAAK,OAAO;AACf,aAAK,KAAK,IAAI;AACd,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AACA,eAAW,SAAS,KAAK,YAAY,OAAO,GAAG;AAC7C,YAAM,IAAI;AAAA,IACZ;AACA,SAAK,YAAY,MAAM;AAAA,EACzB;AACF;AAEA,SAAS,gBACP,SACiC;AACjC,QAAM,SAA0C,CAAC;AACjD,MAAI,QAAQ,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AACpE,MAAI,QAAQ,cAAc,OAAW,QAAO,YAAY,QAAQ;AAChE,MAAI,QAAQ,eAAe,QAAW;AACpC,WAAO,aACL,OAAO,QAAQ,eAAe,WAAW,QAAQ,aAAa,QAAQ,WAAW;AAAA,EACrF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,OAA4E;AAChG,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IACpB,aAAa,MAAM;AAAA,IACnB,mBAAmB,MAAM;AAAA,IACzB,0BAA0B,MAAM;AAAA,EAClC;AACF;AAEA,SAAS,uBAAuB,OAAwD;AACtF,SAAO;AAAA,IACL,aAAa,YAAY,MAAM,WAAW,KAAK;AAAA,IAC/C,cAAc,YAAY,MAAM,YAAY,KAAK;AAAA,IACjD,aACE,YAAY,MAAM,WAAW,MAC5B,YAAY,MAAM,WAAW,KAAK,MAAM,YAAY,MAAM,YAAY,KAAK;AAAA,EAChF;AACF;AAEA,SAAS,cACP,MACA,SACA,WACA,WACyB;AACzB,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB;AAAA,IACA,gBAAgB,KAAK;AAAA,IACrB,sBAAsB,KAAK;AAAA,IAC3B,kBAAkB,KAAK;AAAA,EACzB;AACF;AAEA,SAAS,cAAc,SAAiB,MAAsB;AAC5D,SAAO,GAAG,OAAO,IAAI,IAAI;AAC3B;AAEA,SAAS,WAAW,SAAiB,WAAuC;AAC1E,UAAQ,aAAa,SAAS,WAAW,QAAQ,GAAG;AACtD;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,OAAoC;AACvD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,iBAAiB,OAA+C;AACvE,SAAO,UAAU,UAAa,MAAM,WAAW,IAAI,SAAY;AACjE;AAEA,SAAS,aAAa,OAAwB;AAC5C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { type JsonValue, textFromAssistantContent } from \"@anvia/core/completion\";\nimport type { EvalOutcome, EvalReportArgs, EvalReporter } from \"@anvia/core/evals\";\nimport type {\n AgentGenerationEndArgs,\n AgentGenerationErrorArgs,\n AgentGenerationObserver,\n AgentGenerationStartArgs,\n AgentObserver,\n AgentRunEndArgs,\n AgentRunErrorArgs,\n AgentRunObserver,\n AgentRunStartArgs,\n AgentToolEndArgs,\n AgentToolErrorArgs,\n AgentToolObserver,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n AgentTraceInfo,\n} from \"@anvia/core/observability\";\nimport { LangfuseSpanProcessor } from \"@langfuse/otel\";\nimport {\n type LangfuseAgent,\n type LangfuseGeneration,\n LangfuseOtelSpanAttributes,\n type LangfuseSpan,\n type LangfuseTool,\n startObservation,\n} from \"@langfuse/tracing\";\nimport { NodeSDK } from \"@opentelemetry/sdk-node\";\n\nexport type LangfuseTracingOptions = {\n publicKey?: string | undefined;\n secretKey?: string | undefined;\n baseUrl?: string | undefined;\n environment?: string | undefined;\n release?: string | undefined;\n};\n\nexport type LangfuseScoreArgs = {\n traceId?: string | undefined;\n observationId?: string | undefined;\n name: string;\n value: number;\n comment?: string | undefined;\n metadata?: Record<string, JsonValue | undefined> | undefined;\n};\n\nexport type LangfuseTracing = AgentObserver & {\n flush(): Promise<void>;\n shutdown(): Promise<void>;\n score(args: LangfuseScoreArgs): Promise<void>;\n};\n\nexport type LangfuseEvalReporterOptions = {\n publishInvalid?: boolean | undefined;\n strict?: boolean | undefined;\n};\n\nexport const langfuse = {\n create(options: LangfuseTracingOptions = {}): LangfuseTracing {\n return new LangfuseAgentObserver(options);\n },\n};\n\nexport function createLangfuseEvalReporter<Input = unknown, Output = unknown, Expected = unknown>(\n tracing: Pick<LangfuseTracing, \"score\">,\n options: LangfuseEvalReporterOptions = {},\n): EvalReporter<Input, Output, Expected> {\n return {\n async report(args) {\n if (args.outcome.outcome === \"invalid\" && options.publishInvalid !== true) {\n return;\n }\n\n const trace = traceFromEvalReport(args);\n if (trace?.traceId === undefined || trace.traceId.length === 0) {\n if (options.strict === true) {\n throw new Error(\"Langfuse eval reporter requires traceId\");\n }\n return;\n }\n\n await tracing.score({\n traceId: trace.traceId,\n name: args.metric.name,\n value: scoreValue(args.outcome),\n metadata: {\n suiteName: args.suiteName,\n caseId: args.case.id,\n outcome: args.outcome.outcome,\n },\n ...(trace.observationId === undefined ? {} : { observationId: trace.observationId }),\n ...(scoreComment(args.outcome) === undefined\n ? {}\n : { comment: scoreComment(args.outcome) as string }),\n });\n },\n };\n}\n\nfunction scoreValue(outcome: EvalOutcome): number {\n if (outcome.outcome === \"invalid\") {\n return 0;\n }\n if (typeof outcome.score === \"number\") {\n return outcome.score;\n }\n if (typeof outcome.score === \"boolean\") {\n return outcome.score ? 1 : 0;\n }\n if (\n typeof outcome.score === \"object\" &&\n outcome.score !== null &&\n \"score\" in outcome.score &&\n typeof (outcome.score as { score?: unknown }).score === \"number\"\n ) {\n return (outcome.score as { score: number }).score;\n }\n return outcome.outcome === \"pass\" ? 1 : 0;\n}\n\nfunction scoreComment(outcome: EvalOutcome): string | undefined {\n return outcome.comment ?? (outcome.outcome === \"invalid\" ? outcome.reason : undefined);\n}\n\nfunction traceFromEvalReport<Input, Output, Expected>(\n args: EvalReportArgs<Input, Output, unknown, Expected>,\n): AgentTraceInfo | undefined {\n const outputTrace = traceFromOutput(args.output);\n if (outputTrace !== undefined) {\n return outputTrace;\n }\n const traceId = args.case.metadata?.traceId;\n const observationId = args.case.metadata?.observationId;\n if (typeof traceId !== \"string\") {\n return undefined;\n }\n return {\n traceId,\n ...(typeof observationId === \"string\" ? { observationId } : {}),\n };\n}\n\nfunction traceFromOutput(output: unknown): AgentTraceInfo | undefined {\n if (typeof output !== \"object\" || output === null || !(\"trace\" in output)) {\n return undefined;\n }\n const trace = (output as { trace?: unknown }).trace;\n if (typeof trace !== \"object\" || trace === null) {\n return undefined;\n }\n const traceId = (trace as { traceId?: unknown }).traceId;\n const observationId = (trace as { observationId?: unknown }).observationId;\n if (typeof traceId !== \"string\") {\n return undefined;\n }\n return {\n traceId,\n ...(typeof observationId === \"string\" ? { observationId } : {}),\n };\n}\n\nclass LangfuseAgentObserver implements LangfuseTracing {\n private readonly processor: LangfuseSpanProcessor;\n private readonly sdk: NodeSDK;\n private readonly publicKey: string | undefined;\n private readonly secretKey: string | undefined;\n private readonly baseUrl: string;\n\n constructor(options: LangfuseTracingOptions) {\n this.publicKey = emptyToUndefined(options.publicKey);\n this.secretKey = emptyToUndefined(options.secretKey);\n this.baseUrl = emptyToUndefined(options.baseUrl) ?? \"https://cloud.langfuse.com\";\n const processorOptions: ConstructorParameters<typeof LangfuseSpanProcessor>[0] = {\n baseUrl: this.baseUrl,\n };\n if (this.publicKey !== undefined) processorOptions.publicKey = this.publicKey;\n if (this.secretKey !== undefined) processorOptions.secretKey = this.secretKey;\n const environment = emptyToUndefined(options.environment);\n if (environment !== undefined) processorOptions.environment = environment;\n const release = emptyToUndefined(options.release);\n if (release !== undefined) processorOptions.release = release;\n this.processor = new LangfuseSpanProcessor(processorOptions);\n this.sdk = new NodeSDK({\n spanProcessors: [this.processor],\n });\n this.sdk.start();\n }\n\n async startRun(args: AgentRunStartArgs): Promise<AgentRunObserver> {\n const traceId = args.trace?.traceId;\n const rootAttributes: Parameters<typeof startObservation>[1] = {\n input: {\n prompt: args.prompt,\n history: args.history,\n },\n metadata: {\n agentName: args.agentName,\n agentDescription: args.agentDescription,\n maxTurns: args.maxTurns,\n ...(args.trace?.metadata ?? {}),\n },\n };\n if (args.trace?.version !== undefined) {\n rootAttributes.version = args.trace.version;\n }\n\n const root = startObservation(\n args.agentName ?? \"agent.run\",\n rootAttributes,\n traceId === undefined\n ? { asType: \"agent\" }\n : {\n asType: \"agent\",\n parentSpanContext: {\n traceId,\n spanId: \"0000000000000001\",\n traceFlags: 1,\n },\n },\n );\n applyTraceAttributes(root, args);\n\n return new LangfuseRunObserver(root, {\n traceId: root.traceId,\n observationId: root.id,\n });\n }\n\n async flush(): Promise<void> {\n await this.processor.forceFlush();\n }\n\n async shutdown(): Promise<void> {\n await this.sdk.shutdown();\n }\n\n async score(args: LangfuseScoreArgs): Promise<void> {\n if (args.traceId === undefined || args.traceId.length === 0) {\n throw new Error(\"Langfuse score requires traceId\");\n }\n if (this.publicKey === undefined || this.secretKey === undefined) {\n throw new Error(\"Langfuse score requires publicKey and secretKey\");\n }\n\n const body: Record<string, unknown> = {\n traceId: args.traceId,\n name: args.name,\n value: args.value,\n };\n if (args.observationId !== undefined) body.observationId = args.observationId;\n if (args.comment !== undefined) body.comment = args.comment;\n if (args.metadata !== undefined) body.metadata = args.metadata;\n\n const response = await fetch(`${this.baseUrl}/api/public/scores`, {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${Buffer.from(`${this.publicKey}:${this.secretKey}`).toString(\"base64\")}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n throw new Error(\n `Langfuse score failed with HTTP ${response.status}: ${await response.text()}`,\n );\n }\n }\n}\n\nfunction applyTraceAttributes(root: LangfuseAgent, args: AgentRunStartArgs): void {\n const traceName = args.trace?.name ?? args.agentName;\n if (traceName !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_NAME, traceName);\n }\n if (args.trace?.userId !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_USER_ID, args.trace.userId);\n }\n if (args.trace?.sessionId !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_SESSION_ID, args.trace.sessionId);\n }\n if (args.trace?.tags !== undefined) {\n root.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_TAGS, args.trace.tags);\n }\n for (const [key, value] of Object.entries(args.trace?.metadata ?? {})) {\n const serialized = serializeMetadataValue(value);\n if (serialized === undefined) {\n continue;\n }\n root.otelSpan.setAttribute(`${LangfuseOtelSpanAttributes.TRACE_METADATA}.${key}`, serialized);\n }\n}\n\nfunction serializeMetadataValue(value: unknown): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return \"<failed to serialize>\";\n }\n}\n\nclass LangfuseRunObserver implements AgentRunObserver {\n private readonly turnSpans = new Map<number, LangfuseSpan>();\n\n constructor(\n private readonly root: LangfuseAgent,\n readonly trace: AgentTraceInfo,\n ) {}\n\n startGeneration(args: AgentGenerationStartArgs): AgentGenerationObserver {\n this.closeEarlierTurns(args.turn);\n const turn = this.turnSpan(args.turn);\n const generation = turn.startObservation(\n `model.turn.${args.turn}`,\n {\n input: args.request.chatHistory,\n model: args.request.model ?? \"default\",\n modelParameters: modelParameters(args.request),\n metadata: {\n turn: args.turn,\n toolCount: args.request.tools.length,\n hasOutputSchema: args.request.outputSchema !== undefined,\n },\n },\n { asType: \"generation\" },\n );\n return new LangfuseGenerationObserver(generation);\n }\n\n startTool(args: AgentToolStartArgs): AgentToolObserver {\n const turn = this.turnSpan(args.turn);\n const tool = turn.startObservation(\n `tool.${args.toolName}`,\n {\n input: {\n args: args.args,\n toolCall: args.toolCall,\n },\n metadata: {\n turn: args.turn,\n internalCallId: args.internalCallId,\n toolCallId: args.toolCallId,\n },\n },\n { asType: \"tool\" },\n );\n return new LangfuseToolObserver(tool);\n }\n\n end(args: AgentRunEndArgs): void {\n this.closeAllTurns();\n this.root\n .update({\n output: args.output,\n metadata: {\n usage: args.usage,\n messages: args.messages,\n },\n })\n .end();\n }\n\n error(args: AgentRunErrorArgs): void {\n this.closeAllTurns();\n this.root\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(args.error),\n output: {\n error: errorMessage(args.error),\n },\n metadata: {\n usage: args.usage,\n messages: args.messages,\n },\n })\n .end();\n }\n\n private turnSpan(turn: number): LangfuseSpan {\n const existing = this.turnSpans.get(turn);\n if (existing !== undefined) {\n return existing;\n }\n\n const span = this.root.startObservation(\n `turn.${turn}`,\n {\n metadata: { turn },\n },\n { asType: \"span\" },\n );\n this.turnSpans.set(turn, span);\n return span;\n }\n\n private closeEarlierTurns(currentTurn: number): void {\n for (const [turn, span] of this.turnSpans) {\n if (turn < currentTurn) {\n span.end();\n this.turnSpans.delete(turn);\n }\n }\n }\n\n private closeAllTurns(): void {\n for (const span of this.turnSpans.values()) {\n span.end();\n }\n this.turnSpans.clear();\n }\n}\n\nclass LangfuseGenerationObserver implements AgentGenerationObserver {\n constructor(private readonly generation: LangfuseGeneration) {}\n\n end(args: AgentGenerationEndArgs): void {\n this.generation\n .update({\n output: {\n messageId: args.response.messageId,\n content: args.response.choice,\n text: textFromAssistantContent(args.response.choice),\n },\n usageDetails: usageDetails(args.response.usage),\n metadata: {\n turn: args.turn,\n },\n })\n .end();\n }\n\n error(args: AgentGenerationErrorArgs): void {\n this.generation\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(args.error),\n output: { error: errorMessage(args.error) },\n metadata: { turn: args.turn },\n })\n .end();\n }\n}\n\nclass LangfuseToolObserver implements AgentToolObserver {\n private readonly childAgents = new Map<string, LangfuseAgent>();\n private readonly childGenerations = new Map<string, LangfuseGeneration>();\n private readonly childTools: Array<{\n agentId: string;\n toolName: string;\n toolCallId?: string;\n tool: LangfuseTool;\n ended: boolean;\n }> = [];\n\n constructor(private readonly tool: LangfuseTool) {}\n\n streamEvent(args: AgentToolStreamEventArgs): void {\n const wrapper = args.event;\n const child = isRecord(wrapper.event) ? wrapper.event : undefined;\n if (child === undefined) {\n return;\n }\n\n const agentId = wrapper.agentId;\n const agentName = wrapper.agentName;\n const childTurn = typeof child.turn === \"number\" ? child.turn : args.turn;\n const agent = this.childAgent(agentId, agentName, args);\n\n if (child.type === \"turn_start\") {\n const generation = agent.startObservation(\n `${agentLabel(agentId, agentName)}.model.turn.${childTurn}`,\n {\n input: {\n prompt: child.prompt,\n history: child.history,\n },\n metadata: childMetadata(args, agentId, agentName, childTurn),\n },\n { asType: \"generation\" },\n );\n this.childGenerations.set(generationKey(agentId, childTurn), generation);\n return;\n }\n\n if (child.type === \"turn_end\") {\n const generation = this.childGenerations.get(generationKey(agentId, childTurn));\n if (generation !== undefined) {\n generation\n .update({\n output: child.response,\n ...(isRecord(child.response) && isRecord(child.response.usage)\n ? { usageDetails: usageDetailsFromRecord(child.response.usage) }\n : {}),\n metadata: childMetadata(args, agentId, agentName, childTurn),\n })\n .end();\n this.childGenerations.delete(generationKey(agentId, childTurn));\n }\n return;\n }\n\n if (child.type === \"tool_call\" && isRecord(child.toolCall)) {\n const toolCall = child.toolCall;\n const toolCallFunction = isRecord(toolCall.function) ? toolCall.function : undefined;\n const toolName = typeof toolCallFunction?.name === \"string\" ? toolCallFunction.name : \"tool\";\n const toolCallId =\n typeof toolCall.callId === \"string\"\n ? toolCall.callId\n : typeof toolCall.id === \"string\"\n ? toolCall.id\n : undefined;\n const childTool = agent.startObservation(\n `${agentLabel(agentId, agentName)}.${toolName}`,\n {\n input: {\n args: toolCallFunction?.arguments ?? {},\n toolCall,\n },\n metadata: {\n ...childMetadata(args, agentId, agentName, childTurn),\n toolName,\n toolCallId,\n },\n },\n { asType: \"tool\" },\n );\n this.childTools.push({\n agentId,\n toolName,\n ...(toolCallId === undefined ? {} : { toolCallId }),\n tool: childTool,\n ended: false,\n });\n return;\n }\n\n if (child.type === \"tool_result\") {\n const toolName = typeof child.toolName === \"string\" ? child.toolName : \"tool\";\n const toolCallId = typeof child.toolCallId === \"string\" ? child.toolCallId : undefined;\n const childTool = this.findChildTool(agentId, toolName, toolCallId);\n if (childTool !== undefined) {\n childTool.ended = true;\n childTool.tool\n .update({\n output: typeof child.result === \"string\" ? child.result : child,\n metadata: {\n ...childMetadata(args, agentId, agentName, childTurn),\n toolName,\n toolCallId,\n internalCallId:\n typeof child.internalCallId === \"string\" ? child.internalCallId : undefined,\n args: typeof child.args === \"string\" ? child.args : undefined,\n },\n })\n .end();\n }\n return;\n }\n\n if (child.type === \"final\") {\n agent\n .update({\n output: child.output,\n ...(isRecord(child.usage) ? { metadata: { usage: child.usage } } : {}),\n })\n .end();\n this.childAgents.delete(agentId);\n return;\n }\n\n if (child.type === \"error\") {\n agent\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(child.error),\n output: { error: errorMessage(child.error) },\n })\n .end();\n this.childAgents.delete(agentId);\n }\n }\n\n end(args: AgentToolEndArgs): void {\n this.endOpenChildren();\n const attributes: Parameters<LangfuseTool[\"update\"]>[0] = {\n output: args.result,\n metadata: {\n turn: args.turn,\n internalCallId: args.internalCallId,\n toolCallId: args.toolCallId,\n skipped: args.skipped,\n },\n level: args.skipped ? \"WARNING\" : \"DEFAULT\",\n };\n if (args.skipped) {\n attributes.statusMessage = \"Tool call skipped by hook\";\n }\n this.tool.update(attributes).end();\n }\n\n error(args: AgentToolErrorArgs): void {\n this.endOpenChildren();\n this.tool\n .update({\n level: \"ERROR\",\n statusMessage: errorMessage(args.error),\n output: { error: errorMessage(args.error) },\n metadata: {\n turn: args.turn,\n internalCallId: args.internalCallId,\n toolCallId: args.toolCallId,\n },\n })\n .end();\n }\n\n private childAgent(\n agentId: string,\n agentName: string | undefined,\n args: AgentToolStartArgs,\n ): LangfuseAgent {\n const existing = this.childAgents.get(agentId);\n if (existing !== undefined) {\n return existing;\n }\n const agent = this.tool.startObservation(\n `${agentLabel(agentId, agentName)}.run`,\n {\n metadata: childMetadata(args, agentId, agentName, args.turn),\n },\n { asType: \"agent\" },\n );\n this.childAgents.set(agentId, agent);\n return agent;\n }\n\n private findChildTool(\n agentId: string,\n toolName: string,\n toolCallId: string | undefined,\n ): (typeof this.childTools)[number] | undefined {\n for (let index = this.childTools.length - 1; index >= 0; index -= 1) {\n const childTool = this.childTools[index];\n if (\n childTool === undefined ||\n childTool.ended ||\n childTool.agentId !== agentId ||\n childTool.toolName !== toolName\n ) {\n continue;\n }\n if (toolCallId === undefined || childTool.toolCallId === toolCallId) {\n return childTool;\n }\n }\n return undefined;\n }\n\n private endOpenChildren(): void {\n for (const generation of this.childGenerations.values()) {\n generation.end();\n }\n this.childGenerations.clear();\n for (const tool of this.childTools) {\n if (!tool.ended) {\n tool.tool.end();\n tool.ended = true;\n }\n }\n for (const agent of this.childAgents.values()) {\n agent.end();\n }\n this.childAgents.clear();\n }\n}\n\nfunction modelParameters(\n request: AgentGenerationStartArgs[\"request\"],\n): Record<string, string | number> {\n const params: Record<string, string | number> = {};\n if (request.temperature !== undefined) params.temperature = request.temperature;\n if (request.maxTokens !== undefined) params.maxTokens = request.maxTokens;\n if (request.toolChoice !== undefined) {\n params.toolChoice =\n typeof request.toolChoice === \"string\" ? request.toolChoice : request.toolChoice.name;\n }\n return params;\n}\n\nfunction usageDetails(usage: AgentGenerationEndArgs[\"response\"][\"usage\"]): Record<string, number> {\n return {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n totalTokens: usage.totalTokens,\n cachedInputTokens: usage.cachedInputTokens,\n cacheCreationInputTokens: usage.cacheCreationInputTokens,\n };\n}\n\nfunction usageDetailsFromRecord(usage: Record<string, unknown>): Record<string, number> {\n return {\n inputTokens: numberValue(usage.inputTokens) ?? 0,\n outputTokens: numberValue(usage.outputTokens) ?? 0,\n totalTokens:\n numberValue(usage.totalTokens) ??\n (numberValue(usage.inputTokens) ?? 0) + (numberValue(usage.outputTokens) ?? 0),\n };\n}\n\nfunction childMetadata(\n args: AgentToolStartArgs,\n agentId: string,\n agentName: string | undefined,\n childTurn: number,\n): Record<string, unknown> {\n return {\n source: \"agent_tool_event\",\n childAgentId: agentId,\n childAgentName: agentName,\n childTurn,\n parentToolName: args.toolName,\n parentInternalCallId: args.internalCallId,\n parentToolCallId: args.toolCallId,\n };\n}\n\nfunction generationKey(agentId: string, turn: number): string {\n return `${agentId}:${turn}`;\n}\n\nfunction agentLabel(agentId: string, agentName: string | undefined): string {\n return (agentName ?? agentId).replaceAll(/\\s+/g, \"_\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction emptyToUndefined(value: string | undefined): string | undefined {\n return value === undefined || value.length === 0 ? undefined : value;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/langfuse",
3
- "version": "0.1.7",
3
+ "version": "0.2.0",
4
4
  "description": "Langfuse tracing adapter for Anvia.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@anvia/core": "^0.3.1",
29
+ "@anvia/core": "^0.4.0",
30
30
  "@langfuse/otel": "^5.4.1",
31
31
  "@langfuse/tracing": "^5.4.1",
32
32
  "@opentelemetry/sdk-node": "^0.218.0"