@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.cjs CHANGED
@@ -6475,7 +6475,10 @@ function normalizeToolConfigs(tools) {
6475
6475
  }
6476
6476
  var DEFAULT_ROUTER_URL = "https://router.flutch.ai";
6477
6477
  function resolveRouterURL(baseURL) {
6478
- return baseURL ?? process.env.FLUTCH_ROUTER_URL ?? DEFAULT_ROUTER_URL;
6478
+ if (baseURL) return baseURL;
6479
+ if (process.env.FLUTCH_ROUTER_URL) return process.env.FLUTCH_ROUTER_URL;
6480
+ if (process.env.FLUTCH_API_TOKEN) return DEFAULT_ROUTER_URL;
6481
+ return void 0;
6479
6482
  }
6480
6483
  function generateModelCacheKey(modelId, temperature, maxTokens, toolsConfig, baseURL) {
6481
6484
  const parts = [
@@ -6582,12 +6585,15 @@ var ModelInitializer = class _ModelInitializer {
6582
6585
  };
6583
6586
  /**
6584
6587
  * Resolve API key for a provider.
6585
- * Uses custom resolver if provided, falls back to process.env.
6588
+ * Priority: custom resolver > FLUTCH_API_TOKEN > provider-specific env var.
6586
6589
  */
6587
6590
  resolveApiKey(provider) {
6588
6591
  if (this.apiKeyResolver) {
6589
6592
  return this.apiKeyResolver(provider);
6590
6593
  }
6594
+ if (process.env.FLUTCH_API_TOKEN) {
6595
+ return process.env.FLUTCH_API_TOKEN;
6596
+ }
6591
6597
  const envVar = _ModelInitializer.DEFAULT_ENV_MAP[provider];
6592
6598
  return envVar ? process.env[envVar] : void 0;
6593
6599
  }
@@ -6633,7 +6639,10 @@ var ModelInitializer = class _ModelInitializer {
6633
6639
  defaultMaxTokens,
6634
6640
  apiToken || this.resolveApiKey("openai" /* OPENAI */) || ""
6635
6641
  );
6636
- config.configuration = { baseURL: `${resolveRouterURL(baseURL)}/v1` };
6642
+ const routerURL = resolveRouterURL(baseURL);
6643
+ if (routerURL) {
6644
+ config.configuration = { baseURL: `${routerURL}/v1` };
6645
+ }
6637
6646
  return new openai.ChatOpenAI(config);
6638
6647
  },
6639
6648
  ["anthropic" /* ANTHROPIC */]: ({
@@ -6647,7 +6656,9 @@ var ModelInitializer = class _ModelInitializer {
6647
6656
  temperature: defaultTemperature,
6648
6657
  maxTokens: defaultMaxTokens,
6649
6658
  anthropicApiKey: apiToken || this.resolveApiKey("anthropic" /* ANTHROPIC */),
6650
- anthropicApiUrl: resolveRouterURL(baseURL)
6659
+ ...resolveRouterURL(baseURL) && {
6660
+ anthropicApiUrl: resolveRouterURL(baseURL)
6661
+ }
6651
6662
  }),
6652
6663
  ["cohere" /* COHERE */]: ({
6653
6664
  modelName,
@@ -6655,30 +6666,35 @@ var ModelInitializer = class _ModelInitializer {
6655
6666
  defaultMaxTokens,
6656
6667
  apiToken,
6657
6668
  baseURL
6658
- }) => new cohere.ChatCohere({
6659
- model: modelName,
6660
- temperature: defaultTemperature,
6661
- client: new cohereAi.CohereClient({
6662
- token: apiToken || this.resolveApiKey("cohere" /* COHERE */),
6663
- baseUrl: resolveRouterURL(baseURL)
6664
- })
6665
- }),
6669
+ }) => {
6670
+ const routerURL = resolveRouterURL(baseURL);
6671
+ const token = apiToken || this.resolveApiKey("cohere" /* COHERE */);
6672
+ return routerURL ? new cohere.ChatCohere({
6673
+ model: modelName,
6674
+ temperature: defaultTemperature,
6675
+ client: new cohereAi.CohereClient({ token, baseUrl: routerURL })
6676
+ }) : new cohere.ChatCohere({
6677
+ model: modelName,
6678
+ temperature: defaultTemperature,
6679
+ apiKey: token
6680
+ });
6681
+ },
6666
6682
  ["mistral" /* MISTRAL */]: ({
6667
6683
  modelName,
6668
6684
  defaultTemperature,
6669
6685
  defaultMaxTokens,
6670
6686
  apiToken,
6671
6687
  baseURL
6672
- }) => new mistralai.ChatMistralAI({
6673
- model: modelName,
6674
- temperature: defaultTemperature,
6675
- maxTokens: defaultMaxTokens,
6676
- apiKey: apiToken || this.resolveApiKey("mistral" /* MISTRAL */),
6677
- // Route through the same gateway as OpenAI/Anthropic.
6678
- // Without serverURL, ChatMistralAI ignores FLUTCH_ROUTER_URL and calls
6679
- // api.mistral.ai directly inconsistent with other providers.
6680
- serverURL: `${resolveRouterURL(baseURL)}/v1`
6681
- }),
6688
+ }) => {
6689
+ const routerURL = resolveRouterURL(baseURL);
6690
+ return new mistralai.ChatMistralAI({
6691
+ model: modelName,
6692
+ temperature: defaultTemperature,
6693
+ maxTokens: defaultMaxTokens,
6694
+ apiKey: apiToken || this.resolveApiKey("mistral" /* MISTRAL */),
6695
+ ...routerURL && { serverURL: `${routerURL}/v1` }
6696
+ });
6697
+ },
6682
6698
  ["voyageai" /* VOYAGEAI */]: () => {
6683
6699
  throw new Error("VoyageAI chat models not implemented");
6684
6700
  }
@@ -6691,13 +6707,16 @@ var ModelInitializer = class _ModelInitializer {
6691
6707
  maxDocuments,
6692
6708
  baseURL
6693
6709
  }) => {
6694
- return new cohere.CohereRerank({
6710
+ const routerURL = resolveRouterURL(baseURL);
6711
+ const token = apiToken || this.resolveApiKey("cohere" /* COHERE */);
6712
+ return routerURL ? new cohere.CohereRerank({
6695
6713
  model: modelName,
6696
6714
  topN: maxDocuments || 20,
6697
- client: new cohereAi.CohereClient({
6698
- token: apiToken || this.resolveApiKey("cohere" /* COHERE */),
6699
- baseUrl: resolveRouterURL(baseURL)
6700
- })
6715
+ client: new cohereAi.CohereClient({ token, baseUrl: routerURL })
6716
+ }) : new cohere.CohereRerank({
6717
+ model: modelName,
6718
+ topN: maxDocuments || 20,
6719
+ apiKey: token
6701
6720
  });
6702
6721
  },
6703
6722
  ["voyageai" /* VOYAGEAI */]: ({
@@ -6706,11 +6725,12 @@ var ModelInitializer = class _ModelInitializer {
6706
6725
  maxDocuments,
6707
6726
  baseURL
6708
6727
  }) => {
6728
+ const routerURL = resolveRouterURL(baseURL);
6709
6729
  return new VoyageAIRerank({
6710
6730
  apiKey: apiToken || this.resolveApiKey("voyageai" /* VOYAGEAI */),
6711
6731
  model: modelName,
6712
6732
  topN: maxDocuments || 20,
6713
- baseUrl: resolveRouterURL(baseURL)
6733
+ ...routerURL && { baseUrl: routerURL }
6714
6734
  });
6715
6735
  },
6716
6736
  // Other providers don't support rerank yet
@@ -6721,11 +6741,16 @@ var ModelInitializer = class _ModelInitializer {
6721
6741
  };
6722
6742
  // Embedding model creators
6723
6743
  embeddingModelCreators = {
6724
- ["openai" /* OPENAI */]: ({ modelName, apiToken, baseURL }) => new openai.OpenAIEmbeddings({
6725
- model: modelName,
6726
- apiKey: apiToken || this.resolveApiKey("openai" /* OPENAI */),
6727
- configuration: { baseURL: `${resolveRouterURL(baseURL)}/v1` }
6728
- }),
6744
+ ["openai" /* OPENAI */]: ({ modelName, apiToken, baseURL }) => {
6745
+ const routerURL = resolveRouterURL(baseURL);
6746
+ return new openai.OpenAIEmbeddings({
6747
+ model: modelName,
6748
+ apiKey: apiToken || this.resolveApiKey("openai" /* OPENAI */),
6749
+ ...routerURL && {
6750
+ configuration: { baseURL: `${routerURL}/v1` }
6751
+ }
6752
+ });
6753
+ },
6729
6754
  // Other providers not yet implemented for embeddings
6730
6755
  ["anthropic" /* ANTHROPIC */]: void 0,
6731
6756
  ["cohere" /* COHERE */]: void 0,