@empiricalrun/llm
Advanced tools
+7
-0
| # @empiricalrun/llm | ||
| ## 0.4.3 | ||
| ### Patch Changes | ||
| - 3c714f7: feat: add master agent support | ||
| - d1a1ff2: fix: restrict usage of llm basis token usage | ||
| ## 0.4.2 | ||
@@ -4,0 +11,0 @@ |
+24
-10
@@ -7,12 +7,26 @@ import { LangfuseGenerationClient, LangfuseSpanClient, LangfuseTraceClient } from "langfuse"; | ||
| type TraceClient = LangfuseTraceClient | LangfuseSpanClient; | ||
| export declare function getLLMResult({ traceName, messages, trace, tools, provider, providerApiKey, model, modelParameters, }: { | ||
| traceName?: string; | ||
| messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[]; | ||
| trace?: TraceClient; | ||
| tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; | ||
| provider: LLMProvider; | ||
| providerApiKey?: string; | ||
| model: LLMModel; | ||
| modelParameters?: LangfuseGenerationClient["generation"]["arguments"]["modelParameters"]; | ||
| }): Promise<OpenAI.Chat.Completions.ChatCompletionMessage | undefined>; | ||
| export declare class LLM { | ||
| private _trace; | ||
| private _provider; | ||
| private _providerApiKey; | ||
| private _traceName; | ||
| private _usedTokens; | ||
| private _defaultModel; | ||
| private _maxTokens; | ||
| constructor({ trace, provider, providerApiKey, traceName, maxTokens, defaultModel, }: { | ||
| trace: TraceClient; | ||
| traceName?: string; | ||
| provider: LLMProvider; | ||
| providerApiKey?: string; | ||
| maxTokens?: number; | ||
| defaultModel?: LLMModel; | ||
| }); | ||
| createChatCompletion({ messages, modelParameters, model, tools, trace, }: { | ||
| tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; | ||
| messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[]; | ||
| modelParameters?: LangfuseGenerationClient["generation"]["arguments"]["modelParameters"]; | ||
| model?: LLMModel; | ||
| trace?: TraceClient; | ||
| }): Promise<OpenAI.Chat.Completions.ChatCompletionMessage | undefined>; | ||
| } | ||
| export type { TraceClient }; | ||
@@ -19,0 +33,0 @@ export { flushAllTraces, getPrompt, langfuseInstance }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE,KAAK,WAAW,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAE5D,wBAAsB,YAAY,CAAC,EACjC,SAA4B,EAC5B,QAAQ,EACR,KAAK,EACL,KAAK,EACL,QAAQ,EACR,cAAc,EACd,KAAK,EACL,eAAe,GAChB,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC;IAC/D,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;IACrD,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,eAAe,CAAC,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAC,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAmCrE;AAED,YAAY,EAAE,WAAW,EAAE,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE,KAAK,WAAW,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAE5D,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,UAAU,CAAS;gBAEf,EACV,KAAK,EACL,QAAQ,EACR,cAAc,EACd,SAA4B,EAC5B,SAAS,EACT,YAAY,GACb,EAAE;QACD,KAAK,EAAE,WAAW,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,WAAW,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,QAAQ,CAAC;KACzB;IASK,oBAAoB,CAAC,EACzB,QAAQ,EACR,eAAe,EACf,KAAK,EACL,KAAK,EACL,KAAK,GACN,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACrD,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC;QAC/D,eAAe,CAAC,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACzF,KAAK,CAAC,EAAE,QAAQ,CAAC;QACjB,KAAK,CAAC,EAAE,WAAW,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,GAAG,SAAS,CAAC;CA+CvE;AAED,YAAY,EAAE,WAAW,EAAE,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"} |
+59
-33
@@ -6,3 +6,3 @@ "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.langfuseInstance = exports.getPrompt = exports.flushAllTraces = exports.getLLMResult = void 0; | ||
| exports.langfuseInstance = exports.getPrompt = exports.flushAllTraces = exports.LLM = void 0; | ||
| const async_retry_1 = __importDefault(require("async-retry")); | ||
@@ -16,34 +16,60 @@ const openai_1 = __importDefault(require("openai")); | ||
| Object.defineProperty(exports, "langfuseInstance", { enumerable: true, get: function () { return trace_1.langfuseInstance; } }); | ||
| async function getLLMResult({ traceName = "get-llm-result", messages, trace, tools, provider, providerApiKey, model, modelParameters, }) { | ||
| const openai = new openai_1.default({ | ||
| apiKey: providerApiKey, | ||
| baseURL: "https://ai.empirical.run/v1/", | ||
| defaultHeaders: (0, portkey_ai_1.createHeaders)({ | ||
| provider, | ||
| }), | ||
| }); | ||
| const generation = trace?.generation({ | ||
| name: traceName, | ||
| model, | ||
| modelParameters: modelParameters || {}, | ||
| input: messages, | ||
| }); | ||
| const completion = await (0, async_retry_1.default)(async () => await openai.chat.completions.create({ | ||
| messages, | ||
| model, | ||
| tools, | ||
| ...modelParameters, | ||
| max_tokens: 1000, | ||
| stream: false, | ||
| }), { | ||
| retries: 5, | ||
| factor: 3, | ||
| minTimeout: 1000, | ||
| maxTimeout: 60000, | ||
| randomize: true, | ||
| }); | ||
| const output = completion.choices[0]?.message; | ||
| generation?.end({ output }); | ||
| return output; | ||
| class LLM { | ||
| _trace; | ||
| _provider; | ||
| _providerApiKey; | ||
| _traceName; | ||
| _usedTokens = 0; | ||
| _defaultModel; | ||
| _maxTokens; // limit the max tokens to avoid infinite or high number of roundtrips to llm | ||
| constructor({ trace, provider, providerApiKey, traceName = "get-llm-result", maxTokens, defaultModel, }) { | ||
| this._trace = trace; | ||
| this._provider = provider; | ||
| this._providerApiKey = providerApiKey; | ||
| this._traceName = traceName; | ||
| this._maxTokens = maxTokens ?? 1000000; | ||
| this._defaultModel = defaultModel; | ||
| } | ||
| async createChatCompletion({ messages, modelParameters, model, tools, trace, }) { | ||
| if (this._usedTokens >= this._maxTokens) { | ||
| throw new Error(`Exceeded max tokens limit of ${this._maxTokens} tokens. Please try again later.`); | ||
| } | ||
| const openai = new openai_1.default({ | ||
| apiKey: this._providerApiKey, | ||
| baseURL: "https://ai.empirical.run/v1/", | ||
| defaultHeaders: (0, portkey_ai_1.createHeaders)({ | ||
| provider: this._provider, | ||
| }), | ||
| }); | ||
| // if model is not provided, use the default model | ||
| model = model || this._defaultModel; | ||
| const generation = (trace || this._trace)?.generation({ | ||
| name: this._traceName, | ||
| model, | ||
| modelParameters, | ||
| input: messages, | ||
| }); | ||
| const completion = await (0, async_retry_1.default)(async () => await openai.chat.completions.create({ | ||
| messages, | ||
| model, | ||
| tools, | ||
| ...modelParameters, | ||
| max_tokens: 1000, | ||
| stream: false, | ||
| }), { | ||
| retries: 5, | ||
| factor: 3, | ||
| minTimeout: 1000, | ||
| maxTimeout: 60000, | ||
| randomize: true, | ||
| }); | ||
| const output = completion.choices[0]?.message; | ||
| generation?.end({ output }); | ||
| if (!completion.usage?.total_tokens) { | ||
| console.warn("No usage.total_tokens in completion"); | ||
| } | ||
| this._usedTokens += completion.usage?.total_tokens || 0; | ||
| return output; | ||
| } | ||
| } | ||
| exports.getLLMResult = getLLMResult; | ||
| exports.LLM = LLM; |
| import OpenAI from "openai"; | ||
| export declare function getPrompt(name: string, vars: any): Promise<OpenAI.Chat.Completions.ChatCompletionMessageParam[]>; | ||
| export declare function getPrompt(name: string, vars: any, version?: number | undefined): Promise<OpenAI.Chat.Completions.ChatCompletionMessageParam[]>; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prompts/provider/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAS5B,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,CAI/D"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prompts/provider/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAS5B,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,CAI/D"} |
@@ -11,4 +11,4 @@ "use strict"; | ||
| }); | ||
| async function getPrompt(name, vars) { | ||
| const prompt = await langfuse.getPrompt(name, undefined, { type: "chat" }); | ||
| async function getPrompt(name, vars, version) { | ||
| const prompt = await langfuse.getPrompt(name, version, { type: "chat" }); | ||
| const compiledPrompt = prompt.compile(vars); | ||
@@ -15,0 +15,0 @@ return compiledPrompt; |
+1
-1
| { | ||
| "name": "@empiricalrun/llm", | ||
| "version": "0.4.2", | ||
| "version": "0.4.3", | ||
| "main": "dist/index.js", | ||
@@ -5,0 +5,0 @@ "publishConfig": { |
12295
19.59%184
27.78%