@flutchai/flutch-sdk 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +80 -392
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -23
- package/dist/index.d.ts +11 -23
- package/dist/index.js +80 -392
- package/dist/index.js.map +1 -1
- package/package.json +56 -15
package/dist/index.cjs
CHANGED
|
@@ -22,7 +22,7 @@ var axios2 = require('axios');
|
|
|
22
22
|
var zodToJsonSchema = require('zod-to-json-schema');
|
|
23
23
|
var manager = require('@langchain/core/callbacks/manager');
|
|
24
24
|
var openai = require('@langchain/openai');
|
|
25
|
-
var
|
|
25
|
+
var aws = require('@langchain/aws');
|
|
26
26
|
var anthropic = require('@langchain/anthropic');
|
|
27
27
|
var cohere = require('@langchain/cohere');
|
|
28
28
|
var document_compressors = require('@langchain/core/retrievers/document_compressors');
|
|
@@ -6420,10 +6420,6 @@ exports.McpRuntimeHttpClient = __decorateClass([
|
|
|
6420
6420
|
|
|
6421
6421
|
// src/models/enums.ts
|
|
6422
6422
|
var ModelProvider = /* @__PURE__ */ ((ModelProvider2) => {
|
|
6423
|
-
ModelProvider2["FLUTCH"] = "flutch";
|
|
6424
|
-
ModelProvider2["FLUTCH_MISTRAL"] = "flutch-mistral";
|
|
6425
|
-
ModelProvider2["FLUTCH_OPENAI"] = "flutch-openai";
|
|
6426
|
-
ModelProvider2["FLUTCH_ANTHROPIC"] = "flutch-anthropic";
|
|
6427
6423
|
ModelProvider2["MISTRAL"] = "mistral";
|
|
6428
6424
|
ModelProvider2["OPENAI"] = "openai";
|
|
6429
6425
|
ModelProvider2["ANTHROPIC"] = "anthropic";
|
|
@@ -6466,6 +6462,25 @@ function generateModelCacheKey(modelId, temperature, maxTokens, toolsConfig) {
|
|
|
6466
6462
|
}
|
|
6467
6463
|
return parts.join(":");
|
|
6468
6464
|
}
|
|
6465
|
+
function buildOpenAIModelConfig(modelName, temperature, maxTokens, apiToken) {
|
|
6466
|
+
if (isReasoningModel(modelName)) {
|
|
6467
|
+
return {
|
|
6468
|
+
modelName,
|
|
6469
|
+
temperature: 1,
|
|
6470
|
+
// Reasoning models only support temperature=1
|
|
6471
|
+
maxCompletionTokens: maxTokens,
|
|
6472
|
+
streaming: true,
|
|
6473
|
+
openAIApiKey: apiToken
|
|
6474
|
+
};
|
|
6475
|
+
}
|
|
6476
|
+
return {
|
|
6477
|
+
modelName,
|
|
6478
|
+
temperature,
|
|
6479
|
+
maxTokens,
|
|
6480
|
+
streaming: true,
|
|
6481
|
+
openAIApiKey: apiToken
|
|
6482
|
+
};
|
|
6483
|
+
}
|
|
6469
6484
|
var VoyageAIRerank = class extends document_compressors.BaseDocumentCompressor {
|
|
6470
6485
|
apiKey;
|
|
6471
6486
|
model;
|
|
@@ -6517,235 +6532,10 @@ var VoyageAIRerank = class extends document_compressors.BaseDocumentCompressor {
|
|
|
6517
6532
|
}
|
|
6518
6533
|
}
|
|
6519
6534
|
};
|
|
6520
|
-
function patchChatOpenAIForGPT5() {
|
|
6521
|
-
const logger2 = new common.Logger("ModelInitializer.Patch");
|
|
6522
|
-
logger2.warn(
|
|
6523
|
-
`TEMPORARY WORKAROUND: Applying monkey patch for GPT-5 support in LangChain. Fixes: max_tokens->max_completion_tokens, temperature->1. This patch will be removed once LangChain officially supports GPT-5 models.`
|
|
6524
|
-
);
|
|
6525
|
-
const prototypes = [
|
|
6526
|
-
openai.ChatOpenAI.prototype,
|
|
6527
|
-
azureOpenai.AzureChatOpenAI.prototype
|
|
6528
|
-
];
|
|
6529
|
-
prototypes.forEach((prototype, index) => {
|
|
6530
|
-
const modelName = index === 0 ? "ChatOpenAI" : "AzureChatOpenAI";
|
|
6531
|
-
logger2.warn(`Patching ${modelName} for GPT-5 support`);
|
|
6532
|
-
const originalInvocationParams = prototype.invocationParams;
|
|
6533
|
-
if (originalInvocationParams) {
|
|
6534
|
-
prototype.invocationParams = function(options) {
|
|
6535
|
-
const params = originalInvocationParams.call(this, options);
|
|
6536
|
-
if (params.model && (params.model.includes("gpt-5") || /^gpt-(5|6|7|8|9)/.test(params.model))) {
|
|
6537
|
-
if (params.max_tokens !== void 0) {
|
|
6538
|
-
params.max_completion_tokens = params.max_tokens;
|
|
6539
|
-
delete params.max_tokens;
|
|
6540
|
-
}
|
|
6541
|
-
if (params.max_output_tokens !== void 0 && !params.max_completion_tokens) {
|
|
6542
|
-
params.max_completion_tokens = params.max_output_tokens;
|
|
6543
|
-
delete params.max_output_tokens;
|
|
6544
|
-
}
|
|
6545
|
-
const originalTemperature = params.temperature;
|
|
6546
|
-
if (params.temperature !== void 0 && params.temperature !== 1) {
|
|
6547
|
-
params.temperature = 1;
|
|
6548
|
-
logger2.debug(
|
|
6549
|
-
`Fixed temperature for ${params.model}: ${originalTemperature} -> 1 (GPT-5 models only support temperature=1)`
|
|
6550
|
-
);
|
|
6551
|
-
}
|
|
6552
|
-
}
|
|
6553
|
-
if (params.model && (params.model.includes("gpt-5") || /^gpt-(5|6|7|8|9)/.test(params.model))) {
|
|
6554
|
-
if (!params.stream_options) {
|
|
6555
|
-
params.stream_options = { include_usage: true };
|
|
6556
|
-
logger2.warn(
|
|
6557
|
-
`[GPT-5 PATCH] Added stream_options.include_usage=true for ${params.model}`
|
|
6558
|
-
);
|
|
6559
|
-
} else if (params.stream_options.include_usage !== true) {
|
|
6560
|
-
params.stream_options.include_usage = true;
|
|
6561
|
-
logger2.warn(
|
|
6562
|
-
`[GPT-5 PATCH] Updated stream_options.include_usage=true for ${params.model}`
|
|
6563
|
-
);
|
|
6564
|
-
}
|
|
6565
|
-
}
|
|
6566
|
-
return params;
|
|
6567
|
-
};
|
|
6568
|
-
logger2.warn(
|
|
6569
|
-
`Successfully patched ${modelName}.invocationParams for GPT-5 support (TEMPORARY WORKAROUND)`
|
|
6570
|
-
);
|
|
6571
|
-
} else {
|
|
6572
|
-
logger2.warn(
|
|
6573
|
-
`Could not find invocationParams method to patch in ${modelName}`
|
|
6574
|
-
);
|
|
6575
|
-
}
|
|
6576
|
-
const originalCompletionWithRetry = prototype.completionWithRetry;
|
|
6577
|
-
if (originalCompletionWithRetry) {
|
|
6578
|
-
prototype.completionWithRetry = async function(request, options) {
|
|
6579
|
-
if (request?.model && (request.model.includes("gpt-5") || /^gpt-(5|6|7|8|9)/.test(request.model))) {
|
|
6580
|
-
let hasChanges = false;
|
|
6581
|
-
if (request.max_tokens !== void 0) {
|
|
6582
|
-
request.max_completion_tokens = request.max_tokens;
|
|
6583
|
-
delete request.max_tokens;
|
|
6584
|
-
hasChanges = true;
|
|
6585
|
-
}
|
|
6586
|
-
if (request.temperature !== void 0 && request.temperature !== 1) {
|
|
6587
|
-
const originalTemp = request.temperature;
|
|
6588
|
-
request.temperature = 1;
|
|
6589
|
-
logger2.debug(
|
|
6590
|
-
`Fixed temperature in completionWithRetry for ${request.model}: ${originalTemp} -> 1`
|
|
6591
|
-
);
|
|
6592
|
-
hasChanges = true;
|
|
6593
|
-
}
|
|
6594
|
-
if (!request.stream_options) {
|
|
6595
|
-
request.stream_options = { include_usage: true };
|
|
6596
|
-
logger2.debug(
|
|
6597
|
-
`Added stream_options.include_usage=true in completionWithRetry for ${request.model}`
|
|
6598
|
-
);
|
|
6599
|
-
hasChanges = true;
|
|
6600
|
-
} else if (request.stream_options.include_usage !== true) {
|
|
6601
|
-
request.stream_options.include_usage = true;
|
|
6602
|
-
logger2.debug(
|
|
6603
|
-
`Updated stream_options.include_usage=true in completionWithRetry for ${request.model}`
|
|
6604
|
-
);
|
|
6605
|
-
hasChanges = true;
|
|
6606
|
-
}
|
|
6607
|
-
if (hasChanges) {
|
|
6608
|
-
logger2.debug(
|
|
6609
|
-
`Fixed request params in completionWithRetry for ${request.model}`
|
|
6610
|
-
);
|
|
6611
|
-
}
|
|
6612
|
-
}
|
|
6613
|
-
const result = await originalCompletionWithRetry.call(
|
|
6614
|
-
this,
|
|
6615
|
-
request,
|
|
6616
|
-
options
|
|
6617
|
-
);
|
|
6618
|
-
if (request?.model && (request.model.includes("gpt-5") || /^gpt-(5|6|7|8|9)/.test(request.model))) {
|
|
6619
|
-
logger2.warn(
|
|
6620
|
-
`[GPT-5 PATCH] Azure OpenAI Response for ${request.model}:`
|
|
6621
|
-
);
|
|
6622
|
-
logger2.warn(`Response keys: ${Object.keys(result || {}).join(", ")}`);
|
|
6623
|
-
if (result?.usage) {
|
|
6624
|
-
logger2.warn(
|
|
6625
|
-
`Usage found: ${JSON.stringify(result.usage, null, 2)}`
|
|
6626
|
-
);
|
|
6627
|
-
} else {
|
|
6628
|
-
logger2.warn(`No usage found in response`);
|
|
6629
|
-
}
|
|
6630
|
-
if (result?.choices && result.choices[0]) {
|
|
6631
|
-
logger2.warn(
|
|
6632
|
-
`First choice keys: ${Object.keys(result.choices[0]).join(", ")}`
|
|
6633
|
-
);
|
|
6634
|
-
}
|
|
6635
|
-
}
|
|
6636
|
-
return result;
|
|
6637
|
-
};
|
|
6638
|
-
logger2.warn(
|
|
6639
|
-
`Successfully patched ${modelName}.completionWithRetry for GPT-5 support (TEMPORARY WORKAROUND)`
|
|
6640
|
-
);
|
|
6641
|
-
}
|
|
6642
|
-
const originalIsReasoningModel = prototype.isReasoningModel;
|
|
6643
|
-
if (originalIsReasoningModel) {
|
|
6644
|
-
prototype.isReasoningModel = function() {
|
|
6645
|
-
const model = this.modelName || this.model || this.lc_kwargs?.modelName;
|
|
6646
|
-
const isReasoning = /^o\d/.test(model) || model.includes("gpt-5") || /^gpt-(6|7|8|9)/.test(model);
|
|
6647
|
-
const originalResult = originalIsReasoningModel.call(this);
|
|
6648
|
-
logger2.warn(
|
|
6649
|
-
`[GPT-5 PATCH] isReasoningModel check for "${model}": patched=${isReasoning}, original=${originalResult}, modelName=${this.modelName}, model=${this.model}, lc_kwargs=${JSON.stringify(this.lc_kwargs?.modelName)}`
|
|
6650
|
-
);
|
|
6651
|
-
return isReasoning;
|
|
6652
|
-
};
|
|
6653
|
-
logger2.warn(
|
|
6654
|
-
`Successfully patched ${modelName}.isReasoningModel for GPT-5+ reasoning models (TEMPORARY WORKAROUND)`
|
|
6655
|
-
);
|
|
6656
|
-
} else {
|
|
6657
|
-
logger2.warn(
|
|
6658
|
-
`Could not find isReasoningModel method to patch in ${modelName}`
|
|
6659
|
-
);
|
|
6660
|
-
}
|
|
6661
|
-
const originalInvoke = prototype.invoke;
|
|
6662
|
-
if (originalInvoke) {
|
|
6663
|
-
prototype.invoke = async function(...args) {
|
|
6664
|
-
const model = this.modelName || this.model || this.lc_kwargs?.modelName;
|
|
6665
|
-
if (model && model.includes("gpt-5")) {
|
|
6666
|
-
logger2.warn(`[GPT-5 PATCH] Starting invoke for ${model}`);
|
|
6667
|
-
if (args[1]) {
|
|
6668
|
-
const config = args[1];
|
|
6669
|
-
logger2.warn(
|
|
6670
|
-
`[GPT-5 PATCH] Invoke config keys: ${Object.keys(config || {}).join(", ")}`
|
|
6671
|
-
);
|
|
6672
|
-
if (config.tools) {
|
|
6673
|
-
logger2.warn(
|
|
6674
|
-
`[GPT-5 PATCH] Tools in config: ${config.tools.length} tools`
|
|
6675
|
-
);
|
|
6676
|
-
}
|
|
6677
|
-
}
|
|
6678
|
-
const boundTools = this.bound || this.boundTools || this.tools;
|
|
6679
|
-
if (boundTools) {
|
|
6680
|
-
logger2.warn(
|
|
6681
|
-
`[GPT-5 PATCH] Model has bound tools: ${Array.isArray(boundTools) ? boundTools.length : "yes"}`
|
|
6682
|
-
);
|
|
6683
|
-
} else {
|
|
6684
|
-
logger2.warn(`[GPT-5 PATCH] Model has NO bound tools`);
|
|
6685
|
-
}
|
|
6686
|
-
}
|
|
6687
|
-
let result;
|
|
6688
|
-
try {
|
|
6689
|
-
result = await originalInvoke.apply(this, args);
|
|
6690
|
-
} catch (error) {
|
|
6691
|
-
if (model && model.includes("gpt-5")) {
|
|
6692
|
-
logger2.error(
|
|
6693
|
-
`[GPT-5 PATCH] Azure OpenAI invoke failed for ${model}:`,
|
|
6694
|
-
{
|
|
6695
|
-
errorMessage: error instanceof Error ? error.message : String(error),
|
|
6696
|
-
errorStack: error instanceof Error ? error.stack : void 0,
|
|
6697
|
-
errorType: error?.constructor?.name,
|
|
6698
|
-
args: args.length,
|
|
6699
|
-
hasConfig: !!args[1],
|
|
6700
|
-
configKeys: args[1] ? Object.keys(args[1] || {}) : [],
|
|
6701
|
-
tools: args[1]?.tools?.length || 0
|
|
6702
|
-
}
|
|
6703
|
-
);
|
|
6704
|
-
}
|
|
6705
|
-
throw error;
|
|
6706
|
-
}
|
|
6707
|
-
if (model && model.includes("gpt-5")) {
|
|
6708
|
-
logger2.warn(`[GPT-5 PATCH] Azure OpenAI invoke result for ${model}:`);
|
|
6709
|
-
logger2.warn(`Result keys: ${Object.keys(result || {}).join(", ")}`);
|
|
6710
|
-
if (result?.usage_metadata || result?.usageMetadata) {
|
|
6711
|
-
const usage = result.usage_metadata || result.usageMetadata;
|
|
6712
|
-
logger2.warn(
|
|
6713
|
-
`Usage metadata found: ${JSON.stringify(usage, null, 2)}`
|
|
6714
|
-
);
|
|
6715
|
-
}
|
|
6716
|
-
if (result?.response_metadata || result?.responseMetadata) {
|
|
6717
|
-
const responseMetadata = result.response_metadata || result.responseMetadata;
|
|
6718
|
-
logger2.warn(
|
|
6719
|
-
`Response metadata found: ${JSON.stringify(responseMetadata, null, 2)}`
|
|
6720
|
-
);
|
|
6721
|
-
if (!result.usage_metadata && responseMetadata?.estimatedTokenUsage) {
|
|
6722
|
-
const estimatedUsage = responseMetadata.estimatedTokenUsage;
|
|
6723
|
-
result.usage_metadata = {
|
|
6724
|
-
input_tokens: estimatedUsage.promptTokens || 0,
|
|
6725
|
-
output_tokens: estimatedUsage.completionTokens || 0,
|
|
6726
|
-
total_tokens: estimatedUsage.totalTokens || 0
|
|
6727
|
-
};
|
|
6728
|
-
logger2.warn(
|
|
6729
|
-
`[GPT-5 PATCH] Created usage_metadata from estimatedTokenUsage: ${JSON.stringify(result.usage_metadata, null, 2)}`
|
|
6730
|
-
);
|
|
6731
|
-
}
|
|
6732
|
-
}
|
|
6733
|
-
if (!result?.usage_metadata && !result?.usageMetadata) {
|
|
6734
|
-
logger2.warn(`No usage_metadata found in invoke result`);
|
|
6735
|
-
}
|
|
6736
|
-
}
|
|
6737
|
-
return result;
|
|
6738
|
-
};
|
|
6739
|
-
logger2.warn(
|
|
6740
|
-
`Successfully patched ${modelName}.invoke for GPT-5 response logging (TEMPORARY WORKAROUND)`
|
|
6741
|
-
);
|
|
6742
|
-
}
|
|
6743
|
-
});
|
|
6744
|
-
}
|
|
6745
|
-
patchChatOpenAIForGPT5();
|
|
6746
6535
|
var ModelInitializer = class _ModelInitializer {
|
|
6747
|
-
constructor(configFetcher, logger2) {
|
|
6536
|
+
constructor(configFetcher, logger2, apiKeyResolver) {
|
|
6748
6537
|
this.configFetcher = configFetcher;
|
|
6538
|
+
this.apiKeyResolver = apiKeyResolver;
|
|
6749
6539
|
this.logger = logger2 || new common.Logger(_ModelInitializer.name);
|
|
6750
6540
|
}
|
|
6751
6541
|
logger;
|
|
@@ -6753,9 +6543,30 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6753
6543
|
modelConfigCache = /* @__PURE__ */ new Map();
|
|
6754
6544
|
// Cache for model instances to avoid recreating identical models
|
|
6755
6545
|
modelInstanceCache = /* @__PURE__ */ new Map();
|
|
6546
|
+
static DEFAULT_ENV_MAP = {
|
|
6547
|
+
["openai" /* OPENAI */]: "OPENAI_API_KEY",
|
|
6548
|
+
["anthropic" /* ANTHROPIC */]: "ANTHROPIC_API_KEY",
|
|
6549
|
+
["mistral" /* MISTRAL */]: "MISTRAL_API_KEY",
|
|
6550
|
+
["cohere" /* COHERE */]: "COHERE_API_KEY",
|
|
6551
|
+
["voyageai" /* VOYAGEAI */]: "VOYAGEAI_API_KEY"
|
|
6552
|
+
};
|
|
6756
6553
|
/**
|
|
6757
|
-
*
|
|
6554
|
+
* Resolve API key for a provider.
|
|
6555
|
+
* Uses custom resolver if provided, falls back to process.env.
|
|
6758
6556
|
*/
|
|
6557
|
+
resolveApiKey(provider) {
|
|
6558
|
+
if (this.apiKeyResolver) {
|
|
6559
|
+
return this.apiKeyResolver(provider);
|
|
6560
|
+
}
|
|
6561
|
+
const envVar = _ModelInitializer.DEFAULT_ENV_MAP[provider];
|
|
6562
|
+
return envVar ? process.env[envVar] : void 0;
|
|
6563
|
+
}
|
|
6564
|
+
/**
|
|
6565
|
+
* Resolve AWS region for Bedrock.
|
|
6566
|
+
*/
|
|
6567
|
+
resolveBedrockRegion() {
|
|
6568
|
+
return process.env.BEDROCK_AWS_REGION || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || "us-east-1";
|
|
6569
|
+
}
|
|
6759
6570
|
/**
|
|
6760
6571
|
* Generate hash from toolsConfig for cache key
|
|
6761
6572
|
* Uses MD5 hash to create short, unique identifier
|
|
@@ -6776,29 +6587,7 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6776
6587
|
config.toolsConfig
|
|
6777
6588
|
);
|
|
6778
6589
|
}
|
|
6779
|
-
|
|
6780
|
-
* TEMPORARY SOLUTION for compatibility with new OpenAI models
|
|
6781
|
-
*
|
|
6782
|
-
* OpenAI changed the API for new models (gpt-5, o-series):
|
|
6783
|
-
* - Old models (gpt-3.5, gpt-4, gpt-4o): use maxTokens, support custom temperature
|
|
6784
|
-
* - New reasoning models (gpt-5, gpt-o1, gpt-o3, gpt-o4): use maxCompletionTokens, only temperature = 1
|
|
6785
|
-
*
|
|
6786
|
-
* Patch fixes:
|
|
6787
|
-
* 1. max_tokens -> max_completion_tokens for reasoning GPT-5+ models
|
|
6788
|
-
* 2. temperature -> 1 (forced) for reasoning GPT-5+ models
|
|
6789
|
-
*
|
|
6790
|
-
* @param modelName - OpenAI model name
|
|
6791
|
-
* @returns true if model requires maxCompletionTokens and temperature = 1
|
|
6792
|
-
*/
|
|
6793
|
-
requiresMaxCompletionTokens(modelName) {
|
|
6794
|
-
const requiresNew = isReasoningModel(modelName);
|
|
6795
|
-
this.logger.debug(`Checking token parameter for model "${modelName}"`, {
|
|
6796
|
-
modelName,
|
|
6797
|
-
requiresMaxCompletionTokens: requiresNew
|
|
6798
|
-
});
|
|
6799
|
-
return requiresNew;
|
|
6800
|
-
}
|
|
6801
|
-
// Chat model creators (inherit from original LLMInitializer)
|
|
6590
|
+
// Chat model creators
|
|
6802
6591
|
chatModelCreators = {
|
|
6803
6592
|
["openai" /* OPENAI */]: ({
|
|
6804
6593
|
modelName,
|
|
@@ -6806,36 +6595,13 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6806
6595
|
defaultMaxTokens,
|
|
6807
6596
|
apiToken
|
|
6808
6597
|
}) => {
|
|
6809
|
-
|
|
6810
|
-
|
|
6811
|
-
|
|
6812
|
-
|
|
6813
|
-
|
|
6814
|
-
|
|
6815
|
-
|
|
6816
|
-
// Only this parameter for new models
|
|
6817
|
-
streaming: true,
|
|
6818
|
-
openAIApiKey: apiToken || process.env.OPENAI_API_KEY
|
|
6819
|
-
};
|
|
6820
|
-
if (defaultTemperature !== 1) {
|
|
6821
|
-
this.logger.debug(
|
|
6822
|
-
`Fixed temperature for GPT-5+ model ${modelName}: ${defaultTemperature} -> 1 (GPT-5+ models only support temperature=1)`
|
|
6823
|
-
);
|
|
6824
|
-
}
|
|
6825
|
-
const chatOpenAI = new openai.ChatOpenAI(config);
|
|
6826
|
-
return chatOpenAI;
|
|
6827
|
-
} else {
|
|
6828
|
-
const config = {
|
|
6829
|
-
modelName,
|
|
6830
|
-
temperature: defaultTemperature,
|
|
6831
|
-
maxTokens: defaultMaxTokens,
|
|
6832
|
-
// Only this parameter for legacy models
|
|
6833
|
-
streaming: true,
|
|
6834
|
-
openAIApiKey: apiToken || process.env.OPENAI_API_KEY
|
|
6835
|
-
};
|
|
6836
|
-
const chatOpenAI = new openai.ChatOpenAI(config);
|
|
6837
|
-
return chatOpenAI;
|
|
6838
|
-
}
|
|
6598
|
+
const config = buildOpenAIModelConfig(
|
|
6599
|
+
modelName,
|
|
6600
|
+
defaultTemperature,
|
|
6601
|
+
defaultMaxTokens,
|
|
6602
|
+
apiToken || this.resolveApiKey("openai" /* OPENAI */) || ""
|
|
6603
|
+
);
|
|
6604
|
+
return new openai.ChatOpenAI(config);
|
|
6839
6605
|
},
|
|
6840
6606
|
["anthropic" /* ANTHROPIC */]: ({
|
|
6841
6607
|
modelName,
|
|
@@ -6846,7 +6612,7 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6846
6612
|
modelName,
|
|
6847
6613
|
temperature: defaultTemperature,
|
|
6848
6614
|
maxTokens: defaultMaxTokens,
|
|
6849
|
-
anthropicApiKey: apiToken ||
|
|
6615
|
+
anthropicApiKey: apiToken || this.resolveApiKey("anthropic" /* ANTHROPIC */)
|
|
6850
6616
|
}),
|
|
6851
6617
|
["cohere" /* COHERE */]: ({
|
|
6852
6618
|
modelName,
|
|
@@ -6856,8 +6622,7 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6856
6622
|
}) => new cohere.ChatCohere({
|
|
6857
6623
|
model: modelName,
|
|
6858
6624
|
temperature: defaultTemperature,
|
|
6859
|
-
|
|
6860
|
-
apiKey: apiToken || process.env.COHERE_API_KEY
|
|
6625
|
+
apiKey: apiToken || this.resolveApiKey("cohere" /* COHERE */)
|
|
6861
6626
|
}),
|
|
6862
6627
|
["mistral" /* MISTRAL */]: ({
|
|
6863
6628
|
modelName,
|
|
@@ -6868,91 +6633,8 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6868
6633
|
model: modelName,
|
|
6869
6634
|
temperature: defaultTemperature,
|
|
6870
6635
|
maxTokens: defaultMaxTokens,
|
|
6871
|
-
apiKey: apiToken ||
|
|
6636
|
+
apiKey: apiToken || this.resolveApiKey("mistral" /* MISTRAL */)
|
|
6872
6637
|
}),
|
|
6873
|
-
// AWS Bedrock support removed - use Anthropic or OpenAI directly instead
|
|
6874
|
-
["flutch-openai" /* FLUTCH_OPENAI */]: ({
|
|
6875
|
-
modelName,
|
|
6876
|
-
defaultTemperature,
|
|
6877
|
-
defaultMaxTokens,
|
|
6878
|
-
apiToken
|
|
6879
|
-
}) => {
|
|
6880
|
-
if (this.requiresMaxCompletionTokens(modelName)) {
|
|
6881
|
-
const fixedTemperature = 1;
|
|
6882
|
-
const config = {
|
|
6883
|
-
modelName,
|
|
6884
|
-
temperature: fixedTemperature,
|
|
6885
|
-
// Force set to 1
|
|
6886
|
-
maxCompletionTokens: defaultMaxTokens,
|
|
6887
|
-
// Only this parameter for new models
|
|
6888
|
-
streaming: true,
|
|
6889
|
-
openAIApiKey: apiToken || process.env.OPENAI_API_KEY
|
|
6890
|
-
};
|
|
6891
|
-
if (defaultTemperature !== 1) {
|
|
6892
|
-
this.logger.debug(
|
|
6893
|
-
`Fixed temperature for FLUTCH GPT-5+ model ${modelName}: ${defaultTemperature} -> 1 (GPT-5+ models only support temperature=1)`
|
|
6894
|
-
);
|
|
6895
|
-
}
|
|
6896
|
-
this.logger.debug(`Creating FLUTCH GPT-5+ model with config`, {
|
|
6897
|
-
modelName,
|
|
6898
|
-
maxCompletionTokens: defaultMaxTokens,
|
|
6899
|
-
temperature: fixedTemperature,
|
|
6900
|
-
originalTemperature: defaultTemperature,
|
|
6901
|
-
hasApiKey: !!config.openAIApiKey
|
|
6902
|
-
});
|
|
6903
|
-
const chatOpenAI = new openai.ChatOpenAI(config);
|
|
6904
|
-
this.logger.debug(`FLUTCH ChatOpenAI GPT-5+ instance created`, {
|
|
6905
|
-
modelName,
|
|
6906
|
-
// Use modelName from parameters
|
|
6907
|
-
maxTokens: chatOpenAI.maxTokens,
|
|
6908
|
-
maxCompletionTokens: chatOpenAI.maxCompletionTokens,
|
|
6909
|
-
temperature: chatOpenAI.temperature,
|
|
6910
|
-
streaming: chatOpenAI.streaming,
|
|
6911
|
-
// Try to get internal parameters
|
|
6912
|
-
clientConfig: chatOpenAI.clientConfig,
|
|
6913
|
-
kwargs: chatOpenAI.kwargs
|
|
6914
|
-
});
|
|
6915
|
-
return chatOpenAI;
|
|
6916
|
-
} else {
|
|
6917
|
-
const config = {
|
|
6918
|
-
modelName,
|
|
6919
|
-
temperature: defaultTemperature,
|
|
6920
|
-
maxTokens: defaultMaxTokens,
|
|
6921
|
-
// Only this parameter for legacy models
|
|
6922
|
-
streaming: true,
|
|
6923
|
-
openAIApiKey: apiToken || process.env.OPENAI_API_KEY
|
|
6924
|
-
};
|
|
6925
|
-
this.logger.debug(`Creating FLUTCH legacy model with config`, {
|
|
6926
|
-
modelName,
|
|
6927
|
-
maxTokens: defaultMaxTokens,
|
|
6928
|
-
temperature: defaultTemperature,
|
|
6929
|
-
hasApiKey: !!config.openAIApiKey
|
|
6930
|
-
});
|
|
6931
|
-
const chatOpenAI = new openai.ChatOpenAI(config);
|
|
6932
|
-
this.logger.debug(`FLUTCH ChatOpenAI legacy instance created`, {
|
|
6933
|
-
modelName,
|
|
6934
|
-
// Use modelName from parameters
|
|
6935
|
-
maxTokens: chatOpenAI.maxTokens,
|
|
6936
|
-
maxCompletionTokens: chatOpenAI.maxCompletionTokens,
|
|
6937
|
-
temperature: chatOpenAI.temperature,
|
|
6938
|
-
streaming: chatOpenAI.streaming,
|
|
6939
|
-
// Try to get internal parameters
|
|
6940
|
-
clientConfig: chatOpenAI.clientConfig,
|
|
6941
|
-
kwargs: chatOpenAI.kwargs
|
|
6942
|
-
});
|
|
6943
|
-
return chatOpenAI;
|
|
6944
|
-
}
|
|
6945
|
-
},
|
|
6946
|
-
// Other providers not yet implemented for chat
|
|
6947
|
-
["flutch" /* FLUTCH */]: () => {
|
|
6948
|
-
throw new Error("Flutch chat models not implemented");
|
|
6949
|
-
},
|
|
6950
|
-
["flutch-mistral" /* FLUTCH_MISTRAL */]: () => {
|
|
6951
|
-
throw new Error("Flutch Mistral chat models not implemented");
|
|
6952
|
-
},
|
|
6953
|
-
["flutch-anthropic" /* FLUTCH_ANTHROPIC */]: () => {
|
|
6954
|
-
throw new Error("Flutch Anthropic chat models not implemented");
|
|
6955
|
-
},
|
|
6956
6638
|
["voyageai" /* VOYAGEAI */]: () => {
|
|
6957
6639
|
throw new Error("VoyageAI chat models not implemented");
|
|
6958
6640
|
}
|
|
@@ -6961,14 +6643,14 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6961
6643
|
rerankModelCreators = {
|
|
6962
6644
|
["cohere" /* COHERE */]: ({ modelName, apiToken, maxDocuments }) => {
|
|
6963
6645
|
return new cohere.CohereRerank({
|
|
6964
|
-
apiKey: apiToken ||
|
|
6646
|
+
apiKey: apiToken || this.resolveApiKey("cohere" /* COHERE */),
|
|
6965
6647
|
model: modelName,
|
|
6966
6648
|
topN: maxDocuments || 20
|
|
6967
6649
|
});
|
|
6968
6650
|
},
|
|
6969
6651
|
["voyageai" /* VOYAGEAI */]: ({ modelName, apiToken, maxDocuments }) => {
|
|
6970
6652
|
return new VoyageAIRerank({
|
|
6971
|
-
apiKey: apiToken ||
|
|
6653
|
+
apiKey: apiToken || this.resolveApiKey("voyageai" /* VOYAGEAI */),
|
|
6972
6654
|
model: modelName,
|
|
6973
6655
|
topN: maxDocuments || 20
|
|
6974
6656
|
});
|
|
@@ -6977,27 +6659,19 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
6977
6659
|
["openai" /* OPENAI */]: void 0,
|
|
6978
6660
|
["anthropic" /* ANTHROPIC */]: void 0,
|
|
6979
6661
|
["mistral" /* MISTRAL */]: void 0,
|
|
6980
|
-
["aws" /* AWS */]: void 0
|
|
6981
|
-
["flutch" /* FLUTCH */]: void 0,
|
|
6982
|
-
["flutch-mistral" /* FLUTCH_MISTRAL */]: void 0,
|
|
6983
|
-
["flutch-openai" /* FLUTCH_OPENAI */]: void 0,
|
|
6984
|
-
["flutch-anthropic" /* FLUTCH_ANTHROPIC */]: void 0
|
|
6662
|
+
["aws" /* AWS */]: void 0
|
|
6985
6663
|
};
|
|
6986
6664
|
// Embedding model creators
|
|
6987
6665
|
embeddingModelCreators = {
|
|
6988
6666
|
["openai" /* OPENAI */]: ({ modelName, apiToken }) => new openai.OpenAIEmbeddings({
|
|
6989
6667
|
model: modelName,
|
|
6990
|
-
apiKey: apiToken ||
|
|
6668
|
+
apiKey: apiToken || this.resolveApiKey("openai" /* OPENAI */)
|
|
6991
6669
|
}),
|
|
6992
6670
|
// Other providers not yet implemented for embeddings
|
|
6993
6671
|
["anthropic" /* ANTHROPIC */]: void 0,
|
|
6994
6672
|
["cohere" /* COHERE */]: void 0,
|
|
6995
6673
|
["mistral" /* MISTRAL */]: void 0,
|
|
6996
6674
|
["aws" /* AWS */]: void 0,
|
|
6997
|
-
["flutch" /* FLUTCH */]: void 0,
|
|
6998
|
-
["flutch-mistral" /* FLUTCH_MISTRAL */]: void 0,
|
|
6999
|
-
["flutch-openai" /* FLUTCH_OPENAI */]: void 0,
|
|
7000
|
-
["flutch-anthropic" /* FLUTCH_ANTHROPIC */]: void 0,
|
|
7001
6675
|
["voyageai" /* VOYAGEAI */]: void 0
|
|
7002
6676
|
};
|
|
7003
6677
|
async initializeChatModel(config) {
|
|
@@ -7013,12 +6687,6 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
7013
6687
|
`Model ${config.modelId} is not a chat model (type: ${modelConfig.modelType})`
|
|
7014
6688
|
);
|
|
7015
6689
|
}
|
|
7016
|
-
const creator = this.chatModelCreators[modelConfig.provider];
|
|
7017
|
-
if (!creator) {
|
|
7018
|
-
throw new Error(
|
|
7019
|
-
`Chat models not supported for provider: ${modelConfig.provider}`
|
|
7020
|
-
);
|
|
7021
|
-
}
|
|
7022
6690
|
const finalConfig = {
|
|
7023
6691
|
...modelConfig,
|
|
7024
6692
|
defaultTemperature: Number(
|
|
@@ -7029,7 +6697,27 @@ var ModelInitializer = class _ModelInitializer {
|
|
|
7029
6697
|
)
|
|
7030
6698
|
};
|
|
7031
6699
|
this.logger.debug(`Creating new chat model instance: ${cacheKey}`);
|
|
7032
|
-
|
|
6700
|
+
let model;
|
|
6701
|
+
if (finalConfig.useBedrock && finalConfig.bedrockModelId) {
|
|
6702
|
+
this.logger.debug(
|
|
6703
|
+
`Using Bedrock for model ${finalConfig.modelName}, bedrockModelId: ${finalConfig.bedrockModelId}`
|
|
6704
|
+
);
|
|
6705
|
+
model = new aws.ChatBedrockConverse({
|
|
6706
|
+
model: finalConfig.bedrockModelId,
|
|
6707
|
+
region: this.resolveBedrockRegion(),
|
|
6708
|
+
temperature: finalConfig.defaultTemperature,
|
|
6709
|
+
maxTokens: finalConfig.defaultMaxTokens,
|
|
6710
|
+
streaming: true
|
|
6711
|
+
});
|
|
6712
|
+
} else {
|
|
6713
|
+
const creator = this.chatModelCreators[modelConfig.provider];
|
|
6714
|
+
if (!creator) {
|
|
6715
|
+
throw new Error(
|
|
6716
|
+
`Chat models not supported for provider: ${modelConfig.provider}`
|
|
6717
|
+
);
|
|
6718
|
+
}
|
|
6719
|
+
model = creator(finalConfig);
|
|
6720
|
+
}
|
|
7033
6721
|
model.metadata = {
|
|
7034
6722
|
...model.metadata,
|
|
7035
6723
|
modelId: config.modelId
|