@elasticdash/langchain 0.0.1 → 0.0.2
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/LICENSE +24 -0
- package/README.md +2 -2
- package/dist/index.cjs +559 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +69 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.mjs +538 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +12 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/CallbackHandler.ts"],"sourcesContent":["export { CallbackHandler } from \"./CallbackHandler.js\";\n","import { getGlobalLogger } from \"@elasticdash/core\";\nimport {\n startObservation,\n LangfuseGeneration,\n LangfuseSpan,\n LangfuseGenerationAttributes,\n LangfuseSpanAttributes,\n} from \"@elasticdash/tracing\";\nimport type { AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport type { Document } from \"@langchain/core/documents\";\nimport type { Serialized } from \"@langchain/core/load/serializable\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContent,\n} from \"@langchain/core/messages\";\nimport type { Generation, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChainValues } from \"@langchain/core/utils/types\";\n\nconst LANGSMITH_HIDDEN_TAG = \"langsmith:hidden\";\n\ntype LangfusePrompt = {\n name: string;\n version: number;\n isFallback: boolean;\n};\n\nexport type LlmMessage = {\n role: string;\n content: BaseMessageFields[\"content\"];\n additional_kwargs?: BaseMessageFields[\"additional_kwargs\"];\n};\n\nexport type AnonymousLlmMessage = {\n content: BaseMessageFields[\"content\"];\n additional_kwargs?: BaseMessageFields[\"additional_kwargs\"];\n};\n\ntype ConstructorParams = {\n userId?: string;\n sessionId?: string;\n tags?: string[];\n version?: string; // added to all traces and observations\n traceMetadata?: Record<string, unknown>; // added to all traces\n};\n\nexport class CallbackHandler extends BaseCallbackHandler {\n name = \"LangfuseCallbackHandler\";\n\n private userId?: string;\n private version?: string;\n private sessionId?: string;\n private tags: string[];\n private traceMetadata?: Record<string, unknown>;\n\n private completionStartTimes: Record<string, Date> = {};\n private promptToParentRunMap;\n private runMap: Map<string, LangfuseSpan | LangfuseGeneration> = new Map();\n\n public last_trace_id: string | null = null;\n\n constructor(params?: ConstructorParams) {\n super();\n\n this.sessionId = params?.sessionId;\n this.userId = params?.userId;\n this.tags = params?.tags ?? [];\n this.traceMetadata = params?.traceMetadata;\n this.version = params?.version;\n\n this.promptToParentRunMap = new Map<string, LangfusePrompt>();\n }\n\n get logger() {\n return getGlobalLogger();\n }\n\n async handleLLMNewToken(\n token: string,\n _idx: any,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n _fields?: any,\n ): Promise<void> {\n // if this is the first token, add it to completionStartTimes\n if (runId && !(runId in this.completionStartTimes)) {\n this.logger.debug(`LLM first streaming token: ${runId}`);\n this.completionStartTimes[runId] = new Date();\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n runType?: string,\n name?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`Chain start with Id: ${runId}`);\n\n const runName = name ?? chain.id.at(-1)?.toString() ?? \"Langchain Run\";\n\n this.registerLangfusePrompt(parentRunId, metadata);\n\n // In chains, inputs can be a string or an array of BaseMessage\n let finalInput: string | ChainValues = inputs;\n if (\n typeof inputs === \"object\" &&\n \"input\" in inputs &&\n Array.isArray(inputs[\"input\"]) &&\n inputs[\"input\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalInput = inputs[\"input\"].map((m: BaseMessage) =>\n this.extractChatMessageContent(m),\n );\n } else if (\n typeof inputs === \"object\" &&\n \"messages\" in inputs &&\n Array.isArray(inputs[\"messages\"]) &&\n inputs[\"messages\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalInput = inputs[\"messages\"].map((m: BaseMessage) =>\n this.extractChatMessageContent(m),\n );\n } else if (\n typeof inputs === \"object\" &&\n \"content\" in inputs &&\n typeof inputs[\"content\"] === \"string\"\n ) {\n finalInput = inputs[\"content\"];\n }\n\n const span = this.startAndRegisterOtelSpan({\n runName,\n parentRunId,\n runId,\n tags,\n metadata,\n attributes: {\n input: finalInput,\n },\n });\n\n // If there's no parent run, this is a top-level chain execution\n // and we need to store trace attributes on the span\n const traceTags = [...new Set([...(tags ?? []), ...this.tags])];\n\n if (!parentRunId) {\n span.updateTrace({\n tags: traceTags,\n userId:\n metadata &&\n \"langfuseUserId\" in metadata &&\n typeof metadata[\"langfuseUserId\"] === \"string\"\n ? metadata[\"langfuseUserId\"]\n : this.userId,\n sessionId:\n metadata &&\n \"langfuseSessionId\" in metadata &&\n typeof metadata[\"langfuseSessionId\"] === \"string\"\n ? metadata[\"langfuseSessionId\"]\n : this.sessionId,\n metadata: this.traceMetadata,\n version: this.version,\n });\n }\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleAgentAction(\n action: AgentAction,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`Agent action ${action.tool} with ID: ${runId}`);\n this.startAndRegisterOtelSpan({\n runId,\n parentRunId,\n runName: action.tool,\n attributes: {\n input: action,\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`Agent finish with ID: ${runId}`);\n\n this.handleOtelSpanEnd({\n runId,\n attributes: { output: action },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleChainError(\n err: any,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`Chain error: ${err} with ID: ${runId}`);\n\n const azureRefusalError = this.parseAzureRefusalError(err);\n\n this.handleOtelSpanEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString() + azureRefusalError,\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleGenerationStart(\n llm: Serialized,\n messages: (LlmMessage | MessageContent | AnonymousLlmMessage)[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string,\n ): Promise<void> {\n this.logger.debug(\n `Generation start with ID: ${runId} and parentRunId ${parentRunId}`,\n );\n\n const runName = name ?? llm.id.at(-1)?.toString() ?? \"Langchain Generation\";\n\n const modelParameters: Record<string, any> = {};\n const invocationParams = extraParams?.[\"invocation_params\"];\n\n for (const [key, value] of Object.entries({\n temperature: (invocationParams as any)?.temperature,\n max_tokens: (invocationParams as any)?.max_tokens,\n top_p: (invocationParams as any)?.top_p,\n frequency_penalty: (invocationParams as any)?.frequency_penalty,\n presence_penalty: (invocationParams as any)?.presence_penalty,\n request_timeout: (invocationParams as any)?.request_timeout,\n })) {\n if (value !== undefined && value !== null) {\n modelParameters[key] = value;\n }\n }\n\n interface InvocationParams {\n _type?: string;\n model?: string;\n model_name?: string;\n repo_id?: string;\n }\n\n let extractedModelName: string | undefined;\n if (extraParams) {\n const invocationParamsModelName = (\n extraParams.invocation_params as InvocationParams\n ).model;\n const metadataModelName =\n metadata && \"ls_model_name\" in metadata\n ? (metadata[\"ls_model_name\"] as string)\n : undefined;\n\n extractedModelName = invocationParamsModelName ?? metadataModelName;\n }\n\n const registeredPrompt = this.promptToParentRunMap.get(\n parentRunId ?? \"root\",\n );\n if (registeredPrompt && parentRunId) {\n this.deregisterLangfusePrompt(parentRunId);\n }\n\n this.startAndRegisterOtelSpan({\n type: \"generation\",\n runId,\n parentRunId,\n metadata,\n tags,\n runName,\n attributes: {\n input: messages,\n model: extractedModelName,\n modelParameters: modelParameters,\n prompt: registeredPrompt,\n },\n });\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`Chat model start with ID: ${runId}`);\n\n const prompts = messages.flatMap((message) =>\n message.map((m) => this.extractChatMessageContent(m)),\n );\n\n this.handleGenerationStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name,\n );\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`Chain end with ID: ${runId}`);\n\n let finalOutput: ChainValues | string = outputs;\n if (\n typeof outputs === \"object\" &&\n \"output\" in outputs &&\n typeof outputs[\"output\"] === \"string\"\n ) {\n finalOutput = outputs[\"output\"];\n } else if (\n typeof outputs === \"object\" &&\n \"messages\" in outputs &&\n Array.isArray(outputs[\"messages\"]) &&\n outputs[\"messages\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalOutput = {\n messages: outputs.messages.map((message: BaseMessage) =>\n this.extractChatMessageContent(message),\n ),\n };\n }\n\n this.handleOtelSpanEnd({\n runId,\n attributes: {\n output: finalOutput,\n },\n });\n this.deregisterLangfusePrompt(runId);\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`LLM start with ID: ${runId}`);\n\n this.handleGenerationStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name,\n );\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`Tool start with ID: ${runId}`);\n\n this.startAndRegisterOtelSpan({\n runId,\n parentRunId,\n runName: name ?? tool.id.at(-1)?.toString() ?? \"Tool execution\",\n attributes: {\n input,\n },\n metadata,\n tags,\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string,\n ): Promise<void> {\n try {\n this.logger.debug(`Retriever start with ID: ${runId}`);\n\n this.startAndRegisterOtelSpan({\n runId,\n parentRunId,\n runName: name ?? retriever.id.at(-1)?.toString() ?? \"Retriever\",\n attributes: {\n input: query,\n },\n tags,\n metadata,\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverEnd(\n documents: Document<Record<string, any>>[],\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`Retriever end with ID: ${runId}`);\n\n this.handleOtelSpanEnd({\n runId,\n attributes: {\n output: documents,\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverError(\n err: any,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`Retriever error: ${err} with ID: ${runId}`);\n this.handleOtelSpanEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n async handleToolEnd(\n output: string,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`Tool end with ID: ${runId}`);\n\n this.handleOtelSpanEnd({\n runId,\n attributes: { output },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolError(\n err: any,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`Tool error ${err} with ID: ${runId}`);\n\n this.handleOtelSpanEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`LLM end with ID: ${runId}`);\n\n const lastResponse =\n output.generations[output.generations.length - 1][\n output.generations[output.generations.length - 1].length - 1\n ];\n const llmUsage =\n this.extractUsageMetadata(lastResponse) ??\n output.llmOutput?.[\"tokenUsage\"];\n const modelName = this.extractModelNameFromMetadata(lastResponse);\n\n const usageDetails: Record<string, any> = {\n input:\n llmUsage?.input_tokens ??\n (\"promptTokens\" in llmUsage ? llmUsage?.promptTokens : undefined),\n output:\n llmUsage?.output_tokens ??\n (\"completionTokens\" in llmUsage\n ? llmUsage?.completionTokens\n : undefined),\n total:\n llmUsage?.total_tokens ??\n (\"totalTokens\" in llmUsage ? llmUsage?.totalTokens : undefined),\n };\n\n if (llmUsage && \"input_token_details\" in llmUsage) {\n for (const [key, val] of Object.entries(\n llmUsage[\"input_token_details\"] ?? {},\n )) {\n usageDetails[`input_${key}`] = val;\n\n if (\"input\" in usageDetails && typeof val === \"number\") {\n usageDetails[\"input\"] = Math.max(0, usageDetails[\"input\"] - val);\n }\n }\n }\n\n if (llmUsage && \"output_token_details\" in llmUsage) {\n for (const [key, val] of Object.entries(\n llmUsage[\"output_token_details\"] ?? {},\n )) {\n usageDetails[`output_${key}`] = val;\n\n if (\"output\" in usageDetails && typeof val === \"number\") {\n usageDetails[\"output\"] = Math.max(0, usageDetails[\"output\"] - val);\n }\n }\n }\n\n const extractedOutput =\n \"message\" in lastResponse\n ? this.extractChatMessageContent(\n lastResponse[\"message\"] as BaseMessage,\n )\n : lastResponse.text;\n\n this.handleOtelSpanEnd({\n runId,\n type: \"generation\",\n attributes: {\n model: modelName,\n output: extractedOutput,\n completionStartTime:\n runId in this.completionStartTimes\n ? this.completionStartTimes[runId]\n : undefined,\n usageDetails: usageDetails,\n },\n });\n\n if (runId in this.completionStartTimes) {\n delete this.completionStartTimes[runId];\n }\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRunId?: string | undefined,\n ): Promise<void> {\n try {\n this.logger.debug(`LLM error ${err} with ID: ${runId}`);\n\n // Azure has the refusal status for harmful messages in the error property\n // This would not be logged as the error message is only a generic message\n // that there has been a refusal\n const azureRefusalError = this.parseAzureRefusalError(err);\n\n this.handleOtelSpanEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString() + azureRefusalError,\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n private registerLangfusePrompt(\n parentRunId?: string,\n metadata?: Record<string, unknown>,\n ): void {\n /*\n Register a prompt for linking to a generation with the same parentRunId.\n\n `parentRunId` must exist when we want to do any prompt linking to a generation. If it does not exist, it means the execution is solely a Prompt template formatting without any following LLM invocation, so no generation will be created to link to.\n For the simplest chain, a parent run is always created to wrap the individual runs consisting of prompt template formatting and LLM invocation.\n So, we do not need to register any prompt for linking if parentRunId is missing.\n */\n if (metadata && \"langfusePrompt\" in metadata && parentRunId) {\n this.promptToParentRunMap.set(\n parentRunId,\n metadata.langfusePrompt as LangfusePrompt,\n );\n }\n }\n\n private deregisterLangfusePrompt(runId: string): void {\n this.promptToParentRunMap.delete(runId);\n }\n\n private startAndRegisterOtelSpan(params: {\n type?: \"span\";\n runName: string;\n runId: string;\n parentRunId?: string;\n attributes: LangfuseGenerationAttributes;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): LangfuseSpan;\n private startAndRegisterOtelSpan(params: {\n type: \"generation\";\n runName: string;\n runId: string;\n parentRunId?: string;\n attributes: LangfuseGenerationAttributes;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): LangfuseGeneration;\n private startAndRegisterOtelSpan(params: {\n type?: \"span\" | \"generation\";\n runName: string;\n runId: string;\n parentRunId?: string;\n attributes: LangfuseGenerationAttributes;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): LangfuseSpan | LangfuseGeneration {\n const { type, runName, runId, parentRunId, attributes, metadata, tags } =\n params;\n\n const observation =\n type === \"generation\"\n ? startObservation(\n runName,\n {\n version: this.version,\n metadata: this.joinTagsAndMetaData(tags, metadata),\n level:\n tags && tags.includes(LANGSMITH_HIDDEN_TAG)\n ? \"DEBUG\"\n : undefined,\n ...attributes,\n },\n {\n asType: \"generation\",\n parentSpanContext: parentRunId\n ? this.runMap.get(parentRunId)?.otelSpan.spanContext()\n : undefined,\n },\n )\n : startObservation(\n runName,\n {\n version: this.version,\n metadata: this.joinTagsAndMetaData(tags, metadata),\n level:\n tags && tags.includes(LANGSMITH_HIDDEN_TAG)\n ? \"DEBUG\"\n : undefined,\n ...attributes,\n },\n {\n parentSpanContext: parentRunId\n ? this.runMap.get(parentRunId)?.otelSpan.spanContext()\n : undefined,\n },\n );\n this.runMap.set(runId, observation);\n\n return observation;\n }\n\n private handleOtelSpanEnd(params: {\n runId: string;\n attributes?: LangfuseSpanAttributes;\n type?: \"span\";\n }): void;\n private handleOtelSpanEnd(params: {\n runId: string;\n attributes?: LangfuseGenerationAttributes;\n type: \"generation\";\n }): void;\n private handleOtelSpanEnd(params: {\n runId: string;\n attributes?: LangfuseGenerationAttributes | LangfuseSpanAttributes;\n type?: \"span\" | \"generation\";\n }) {\n const { runId, attributes = {} } = params;\n\n const span = this.runMap.get(runId);\n if (!span) {\n this.logger.warn(\"Span not found in runMap. Skipping operation\");\n\n return;\n }\n\n span.update(attributes).end();\n\n this.last_trace_id = span.traceId;\n this.runMap.delete(runId);\n }\n private parseAzureRefusalError(err: any): string {\n // Azure has the refusal status for harmful messages in the error property\n // This would not be logged as the error message is only a generic message\n // that there has been a refusal\n let azureRefusalError = \"\";\n if (typeof err == \"object\" && \"error\" in err) {\n try {\n azureRefusalError =\n \"\\n\\nError details:\\n\" + JSON.stringify(err[\"error\"], null, 2);\n } catch {}\n }\n\n return azureRefusalError;\n }\n\n private joinTagsAndMetaData(\n tags?: string[] | undefined,\n metadata1?: Record<string, unknown> | undefined,\n metadata2?: Record<string, unknown> | undefined,\n ): Record<string, unknown> | undefined {\n const finalDict: Record<string, unknown> = {};\n if (tags && tags.length > 0) {\n finalDict.tags = tags;\n }\n if (metadata1) {\n Object.assign(finalDict, metadata1);\n }\n if (metadata2) {\n Object.assign(finalDict, metadata2);\n }\n return this.stripLangfuseKeysFromMetadata(finalDict);\n }\n\n private stripLangfuseKeysFromMetadata(\n metadata?: Record<string, unknown>,\n ): Record<string, unknown> | undefined {\n if (!metadata) {\n return;\n }\n\n const langfuseKeys = [\n \"langfusePrompt\",\n \"langfuseUserId\",\n \"langfuseSessionId\",\n ];\n\n return Object.fromEntries(\n Object.entries(metadata).filter(\n ([key, _]) => !langfuseKeys.includes(key),\n ),\n );\n }\n\n /** Not all models supports tokenUsage in llmOutput, can use AIMessage.usage_metadata instead */\n private extractUsageMetadata(\n generation: Generation,\n ): UsageMetadata | undefined {\n try {\n const usageMetadata =\n \"message\" in generation &&\n (generation[\"message\"] instanceof AIMessage ||\n generation[\"message\"] instanceof AIMessageChunk)\n ? generation[\"message\"].usage_metadata\n : undefined;\n\n return usageMetadata;\n } catch (err) {\n this.logger.debug(`Error extracting usage metadata: ${err}`);\n\n return;\n }\n }\n\n private extractModelNameFromMetadata(generation: any): string | undefined {\n try {\n return \"message\" in generation &&\n (generation[\"message\"] instanceof AIMessage ||\n generation[\"message\"] instanceof AIMessageChunk)\n ? generation[\"message\"].response_metadata.model_name\n : undefined;\n } catch {}\n }\n\n private extractChatMessageContent(\n message: BaseMessage,\n ): LlmMessage | AnonymousLlmMessage | MessageContent {\n let response = undefined;\n\n if (message.getType() === \"human\") {\n response = { content: message.content, role: \"user\" };\n } else if (message.getType() === \"generic\") {\n response = {\n content: message.content,\n role: \"human\",\n };\n } else if (message.getType() === \"ai\") {\n response = { content: message.content, role: \"assistant\" };\n\n if (\n \"tool_calls\" in message &&\n Array.isArray(message.tool_calls) &&\n (message.tool_calls?.length ?? 0) > 0\n ) {\n (response as any)[\"tool_calls\"] = message[\"tool_calls\"];\n }\n if (\n \"additional_kwargs\" in message &&\n \"tool_calls\" in message[\"additional_kwargs\"]\n ) {\n (response as any)[\"tool_calls\"] =\n message[\"additional_kwargs\"][\"tool_calls\"];\n }\n } else if (message.getType() === \"system\") {\n response = { content: message.content, role: \"system\" };\n } else if (message.getType() === \"function\") {\n response = {\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n role: message.name,\n };\n } else if (message.getType() === \"tool\") {\n response = {\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n role: message.name,\n };\n } else if (!message.name) {\n response = { content: message.content };\n } else {\n response = {\n role: message.name,\n content: message.content,\n };\n }\n\n if (\n (message.additional_kwargs.function_call ||\n message.additional_kwargs.tool_calls) &&\n (response as any)[\"tool_calls\"] === undefined\n ) {\n return { ...response, additional_kwargs: message.additional_kwargs };\n }\n\n return response;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as _elasticdash_core from '@elasticdash/core';
|
|
2
|
+
import { AgentAction, AgentFinish } from '@langchain/core/agents';
|
|
3
|
+
import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
|
|
4
|
+
import { Document } from '@langchain/core/documents';
|
|
5
|
+
import { Serialized } from '@langchain/core/load/serializable';
|
|
6
|
+
import { BaseMessageFields, MessageContent, BaseMessage } from '@langchain/core/messages';
|
|
7
|
+
import { LLMResult } from '@langchain/core/outputs';
|
|
8
|
+
import { ChainValues } from '@langchain/core/utils/types';
|
|
9
|
+
|
|
10
|
+
type LlmMessage = {
|
|
11
|
+
role: string;
|
|
12
|
+
content: BaseMessageFields["content"];
|
|
13
|
+
additional_kwargs?: BaseMessageFields["additional_kwargs"];
|
|
14
|
+
};
|
|
15
|
+
type AnonymousLlmMessage = {
|
|
16
|
+
content: BaseMessageFields["content"];
|
|
17
|
+
additional_kwargs?: BaseMessageFields["additional_kwargs"];
|
|
18
|
+
};
|
|
19
|
+
type ConstructorParams = {
|
|
20
|
+
userId?: string;
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
tags?: string[];
|
|
23
|
+
version?: string;
|
|
24
|
+
traceMetadata?: Record<string, unknown>;
|
|
25
|
+
};
|
|
26
|
+
declare class CallbackHandler extends BaseCallbackHandler {
|
|
27
|
+
name: string;
|
|
28
|
+
private userId?;
|
|
29
|
+
private version?;
|
|
30
|
+
private sessionId?;
|
|
31
|
+
private tags;
|
|
32
|
+
private traceMetadata?;
|
|
33
|
+
private completionStartTimes;
|
|
34
|
+
private promptToParentRunMap;
|
|
35
|
+
private runMap;
|
|
36
|
+
last_trace_id: string | null;
|
|
37
|
+
constructor(params?: ConstructorParams);
|
|
38
|
+
get logger(): _elasticdash_core.Logger;
|
|
39
|
+
handleLLMNewToken(token: string, _idx: any, runId: string, _parentRunId?: string, _tags?: string[], _fields?: any): Promise<void>;
|
|
40
|
+
handleChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, runType?: string, name?: string): Promise<void>;
|
|
41
|
+
handleAgentAction(action: AgentAction, runId: string, parentRunId?: string): Promise<void>;
|
|
42
|
+
handleAgentEnd?(action: AgentFinish, runId: string, parentRunId?: string): Promise<void>;
|
|
43
|
+
handleChainError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
44
|
+
handleGenerationStart(llm: Serialized, messages: (LlmMessage | MessageContent | AnonymousLlmMessage)[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
45
|
+
handleChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
46
|
+
handleChainEnd(outputs: ChainValues, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
47
|
+
handleLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
48
|
+
handleToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
49
|
+
handleRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
50
|
+
handleRetrieverEnd(documents: Document<Record<string, any>>[], runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
51
|
+
handleRetrieverError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
52
|
+
handleToolEnd(output: string, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
53
|
+
handleToolError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
54
|
+
handleLLMEnd(output: LLMResult, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
55
|
+
handleLLMError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
56
|
+
private registerLangfusePrompt;
|
|
57
|
+
private deregisterLangfusePrompt;
|
|
58
|
+
private startAndRegisterOtelSpan;
|
|
59
|
+
private handleOtelSpanEnd;
|
|
60
|
+
private parseAzureRefusalError;
|
|
61
|
+
private joinTagsAndMetaData;
|
|
62
|
+
private stripLangfuseKeysFromMetadata;
|
|
63
|
+
/** Not all models supports tokenUsage in llmOutput, can use AIMessage.usage_metadata instead */
|
|
64
|
+
private extractUsageMetadata;
|
|
65
|
+
private extractModelNameFromMetadata;
|
|
66
|
+
private extractChatMessageContent;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { CallbackHandler };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as _elasticdash_core from '@elasticdash/core';
|
|
2
|
+
import { AgentAction, AgentFinish } from '@langchain/core/agents';
|
|
3
|
+
import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
|
|
4
|
+
import { Document } from '@langchain/core/documents';
|
|
5
|
+
import { Serialized } from '@langchain/core/load/serializable';
|
|
6
|
+
import { BaseMessageFields, MessageContent, BaseMessage } from '@langchain/core/messages';
|
|
7
|
+
import { LLMResult } from '@langchain/core/outputs';
|
|
8
|
+
import { ChainValues } from '@langchain/core/utils/types';
|
|
9
|
+
|
|
10
|
+
type LlmMessage = {
|
|
11
|
+
role: string;
|
|
12
|
+
content: BaseMessageFields["content"];
|
|
13
|
+
additional_kwargs?: BaseMessageFields["additional_kwargs"];
|
|
14
|
+
};
|
|
15
|
+
type AnonymousLlmMessage = {
|
|
16
|
+
content: BaseMessageFields["content"];
|
|
17
|
+
additional_kwargs?: BaseMessageFields["additional_kwargs"];
|
|
18
|
+
};
|
|
19
|
+
type ConstructorParams = {
|
|
20
|
+
userId?: string;
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
tags?: string[];
|
|
23
|
+
version?: string;
|
|
24
|
+
traceMetadata?: Record<string, unknown>;
|
|
25
|
+
};
|
|
26
|
+
declare class CallbackHandler extends BaseCallbackHandler {
|
|
27
|
+
name: string;
|
|
28
|
+
private userId?;
|
|
29
|
+
private version?;
|
|
30
|
+
private sessionId?;
|
|
31
|
+
private tags;
|
|
32
|
+
private traceMetadata?;
|
|
33
|
+
private completionStartTimes;
|
|
34
|
+
private promptToParentRunMap;
|
|
35
|
+
private runMap;
|
|
36
|
+
last_trace_id: string | null;
|
|
37
|
+
constructor(params?: ConstructorParams);
|
|
38
|
+
get logger(): _elasticdash_core.Logger;
|
|
39
|
+
handleLLMNewToken(token: string, _idx: any, runId: string, _parentRunId?: string, _tags?: string[], _fields?: any): Promise<void>;
|
|
40
|
+
handleChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, runType?: string, name?: string): Promise<void>;
|
|
41
|
+
handleAgentAction(action: AgentAction, runId: string, parentRunId?: string): Promise<void>;
|
|
42
|
+
handleAgentEnd?(action: AgentFinish, runId: string, parentRunId?: string): Promise<void>;
|
|
43
|
+
handleChainError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
44
|
+
handleGenerationStart(llm: Serialized, messages: (LlmMessage | MessageContent | AnonymousLlmMessage)[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
45
|
+
handleChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
46
|
+
handleChainEnd(outputs: ChainValues, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
47
|
+
handleLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
48
|
+
handleToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
49
|
+
handleRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
|
|
50
|
+
handleRetrieverEnd(documents: Document<Record<string, any>>[], runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
51
|
+
handleRetrieverError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
52
|
+
handleToolEnd(output: string, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
53
|
+
handleToolError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
54
|
+
handleLLMEnd(output: LLMResult, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
55
|
+
handleLLMError(err: any, runId: string, parentRunId?: string | undefined): Promise<void>;
|
|
56
|
+
private registerLangfusePrompt;
|
|
57
|
+
private deregisterLangfusePrompt;
|
|
58
|
+
private startAndRegisterOtelSpan;
|
|
59
|
+
private handleOtelSpanEnd;
|
|
60
|
+
private parseAzureRefusalError;
|
|
61
|
+
private joinTagsAndMetaData;
|
|
62
|
+
private stripLangfuseKeysFromMetadata;
|
|
63
|
+
/** Not all models supports tokenUsage in llmOutput, can use AIMessage.usage_metadata instead */
|
|
64
|
+
private extractUsageMetadata;
|
|
65
|
+
private extractModelNameFromMetadata;
|
|
66
|
+
private extractChatMessageContent;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { CallbackHandler };
|