@flutchai/flutch-sdk 0.2.16 → 0.2.17

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.cts CHANGED
@@ -1158,7 +1158,7 @@ declare function isReasoningModel(modelName: string): boolean;
1158
1158
  declare function hashToolsConfig(toolsConfig: IAgentToolConfig[]): string;
1159
1159
  declare function normalizeToolConfigs(tools?: ToolConfig[]): IAgentToolConfig[] | undefined;
1160
1160
  declare const DEFAULT_ROUTER_URL = "https://router.flutch.ai";
1161
- declare function resolveRouterURL(baseURL?: string): string;
1161
+ declare function resolveRouterURL(baseURL?: string): string | undefined;
1162
1162
  declare function generateModelCacheKey(modelId: string, temperature?: number, maxTokens?: number, toolsConfig?: IAgentToolConfig[], baseURL?: string): string;
1163
1163
  declare function buildOpenAIModelConfig(modelName: string, temperature: number, maxTokens: number, apiToken: string): Record<string, any>;
1164
1164
 
package/dist/index.d.ts CHANGED
@@ -1158,7 +1158,7 @@ declare function isReasoningModel(modelName: string): boolean;
1158
1158
  declare function hashToolsConfig(toolsConfig: IAgentToolConfig[]): string;
1159
1159
  declare function normalizeToolConfigs(tools?: ToolConfig[]): IAgentToolConfig[] | undefined;
1160
1160
  declare const DEFAULT_ROUTER_URL = "https://router.flutch.ai";
1161
- declare function resolveRouterURL(baseURL?: string): string;
1161
+ declare function resolveRouterURL(baseURL?: string): string | undefined;
1162
1162
  declare function generateModelCacheKey(modelId: string, temperature?: number, maxTokens?: number, toolsConfig?: IAgentToolConfig[], baseURL?: string): string;
1163
1163
  declare function buildOpenAIModelConfig(modelName: string, temperature: number, maxTokens: number, apiToken: string): Record<string, any>;
1164
1164
 
package/dist/index.js CHANGED
@@ -6445,7 +6445,10 @@ function normalizeToolConfigs(tools) {
6445
6445
  }
6446
6446
  var DEFAULT_ROUTER_URL = "https://router.flutch.ai";
6447
6447
  function resolveRouterURL(baseURL) {
6448
- return baseURL ?? process.env.FLUTCH_ROUTER_URL ?? DEFAULT_ROUTER_URL;
6448
+ if (baseURL) return baseURL;
6449
+ if (process.env.FLUTCH_ROUTER_URL) return process.env.FLUTCH_ROUTER_URL;
6450
+ if (process.env.FLUTCH_API_TOKEN) return DEFAULT_ROUTER_URL;
6451
+ return void 0;
6449
6452
  }
6450
6453
  function generateModelCacheKey(modelId, temperature, maxTokens, toolsConfig, baseURL) {
6451
6454
  const parts = [
@@ -6552,12 +6555,15 @@ var ModelInitializer = class _ModelInitializer {
6552
6555
  };
6553
6556
  /**
6554
6557
  * Resolve API key for a provider.
6555
- * Uses custom resolver if provided, falls back to process.env.
6558
+ * Priority: custom resolver > FLUTCH_API_TOKEN > provider-specific env var.
6556
6559
  */
6557
6560
  resolveApiKey(provider) {
6558
6561
  if (this.apiKeyResolver) {
6559
6562
  return this.apiKeyResolver(provider);
6560
6563
  }
6564
+ if (process.env.FLUTCH_API_TOKEN) {
6565
+ return process.env.FLUTCH_API_TOKEN;
6566
+ }
6561
6567
  const envVar = _ModelInitializer.DEFAULT_ENV_MAP[provider];
6562
6568
  return envVar ? process.env[envVar] : void 0;
6563
6569
  }
@@ -6603,7 +6609,10 @@ var ModelInitializer = class _ModelInitializer {
6603
6609
  defaultMaxTokens,
6604
6610
  apiToken || this.resolveApiKey("openai" /* OPENAI */) || ""
6605
6611
  );
6606
- config.configuration = { baseURL: `${resolveRouterURL(baseURL)}/v1` };
6612
+ const routerURL = resolveRouterURL(baseURL);
6613
+ if (routerURL) {
6614
+ config.configuration = { baseURL: `${routerURL}/v1` };
6615
+ }
6607
6616
  return new ChatOpenAI(config);
6608
6617
  },
6609
6618
  ["anthropic" /* ANTHROPIC */]: ({
@@ -6617,7 +6626,9 @@ var ModelInitializer = class _ModelInitializer {
6617
6626
  temperature: defaultTemperature,
6618
6627
  maxTokens: defaultMaxTokens,
6619
6628
  anthropicApiKey: apiToken || this.resolveApiKey("anthropic" /* ANTHROPIC */),
6620
- anthropicApiUrl: resolveRouterURL(baseURL)
6629
+ ...resolveRouterURL(baseURL) && {
6630
+ anthropicApiUrl: resolveRouterURL(baseURL)
6631
+ }
6621
6632
  }),
6622
6633
  ["cohere" /* COHERE */]: ({
6623
6634
  modelName,
@@ -6625,30 +6636,35 @@ var ModelInitializer = class _ModelInitializer {
6625
6636
  defaultMaxTokens,
6626
6637
  apiToken,
6627
6638
  baseURL
6628
- }) => new ChatCohere({
6629
- model: modelName,
6630
- temperature: defaultTemperature,
6631
- client: new CohereClient({
6632
- token: apiToken || this.resolveApiKey("cohere" /* COHERE */),
6633
- baseUrl: resolveRouterURL(baseURL)
6634
- })
6635
- }),
6639
+ }) => {
6640
+ const routerURL = resolveRouterURL(baseURL);
6641
+ const token = apiToken || this.resolveApiKey("cohere" /* COHERE */);
6642
+ return routerURL ? new ChatCohere({
6643
+ model: modelName,
6644
+ temperature: defaultTemperature,
6645
+ client: new CohereClient({ token, baseUrl: routerURL })
6646
+ }) : new ChatCohere({
6647
+ model: modelName,
6648
+ temperature: defaultTemperature,
6649
+ apiKey: token
6650
+ });
6651
+ },
6636
6652
  ["mistral" /* MISTRAL */]: ({
6637
6653
  modelName,
6638
6654
  defaultTemperature,
6639
6655
  defaultMaxTokens,
6640
6656
  apiToken,
6641
6657
  baseURL
6642
- }) => new ChatMistralAI({
6643
- model: modelName,
6644
- temperature: defaultTemperature,
6645
- maxTokens: defaultMaxTokens,
6646
- apiKey: apiToken || this.resolveApiKey("mistral" /* MISTRAL */),
6647
- // Route through the same gateway as OpenAI/Anthropic.
6648
- // Without serverURL, ChatMistralAI ignores FLUTCH_ROUTER_URL and calls
6649
- // api.mistral.ai directly inconsistent with other providers.
6650
- serverURL: `${resolveRouterURL(baseURL)}/v1`
6651
- }),
6658
+ }) => {
6659
+ const routerURL = resolveRouterURL(baseURL);
6660
+ return new ChatMistralAI({
6661
+ model: modelName,
6662
+ temperature: defaultTemperature,
6663
+ maxTokens: defaultMaxTokens,
6664
+ apiKey: apiToken || this.resolveApiKey("mistral" /* MISTRAL */),
6665
+ ...routerURL && { serverURL: `${routerURL}/v1` }
6666
+ });
6667
+ },
6652
6668
  ["voyageai" /* VOYAGEAI */]: () => {
6653
6669
  throw new Error("VoyageAI chat models not implemented");
6654
6670
  }
@@ -6661,13 +6677,16 @@ var ModelInitializer = class _ModelInitializer {
6661
6677
  maxDocuments,
6662
6678
  baseURL
6663
6679
  }) => {
6664
- return new CohereRerank({
6680
+ const routerURL = resolveRouterURL(baseURL);
6681
+ const token = apiToken || this.resolveApiKey("cohere" /* COHERE */);
6682
+ return routerURL ? new CohereRerank({
6665
6683
  model: modelName,
6666
6684
  topN: maxDocuments || 20,
6667
- client: new CohereClient({
6668
- token: apiToken || this.resolveApiKey("cohere" /* COHERE */),
6669
- baseUrl: resolveRouterURL(baseURL)
6670
- })
6685
+ client: new CohereClient({ token, baseUrl: routerURL })
6686
+ }) : new CohereRerank({
6687
+ model: modelName,
6688
+ topN: maxDocuments || 20,
6689
+ apiKey: token
6671
6690
  });
6672
6691
  },
6673
6692
  ["voyageai" /* VOYAGEAI */]: ({
@@ -6676,11 +6695,12 @@ var ModelInitializer = class _ModelInitializer {
6676
6695
  maxDocuments,
6677
6696
  baseURL
6678
6697
  }) => {
6698
+ const routerURL = resolveRouterURL(baseURL);
6679
6699
  return new VoyageAIRerank({
6680
6700
  apiKey: apiToken || this.resolveApiKey("voyageai" /* VOYAGEAI */),
6681
6701
  model: modelName,
6682
6702
  topN: maxDocuments || 20,
6683
- baseUrl: resolveRouterURL(baseURL)
6703
+ ...routerURL && { baseUrl: routerURL }
6684
6704
  });
6685
6705
  },
6686
6706
  // Other providers don't support rerank yet
@@ -6691,11 +6711,16 @@ var ModelInitializer = class _ModelInitializer {
6691
6711
  };
6692
6712
  // Embedding model creators
6693
6713
  embeddingModelCreators = {
6694
- ["openai" /* OPENAI */]: ({ modelName, apiToken, baseURL }) => new OpenAIEmbeddings({
6695
- model: modelName,
6696
- apiKey: apiToken || this.resolveApiKey("openai" /* OPENAI */),
6697
- configuration: { baseURL: `${resolveRouterURL(baseURL)}/v1` }
6698
- }),
6714
+ ["openai" /* OPENAI */]: ({ modelName, apiToken, baseURL }) => {
6715
+ const routerURL = resolveRouterURL(baseURL);
6716
+ return new OpenAIEmbeddings({
6717
+ model: modelName,
6718
+ apiKey: apiToken || this.resolveApiKey("openai" /* OPENAI */),
6719
+ ...routerURL && {
6720
+ configuration: { baseURL: `${routerURL}/v1` }
6721
+ }
6722
+ });
6723
+ },
6699
6724
  // Other providers not yet implemented for embeddings
6700
6725
  ["anthropic" /* ANTHROPIC */]: void 0,
6701
6726
  ["cohere" /* COHERE */]: void 0,