@agentforge/tools 0.18.6 → 0.18.7

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.js CHANGED
@@ -2862,6 +2862,61 @@ var OpenAIEmbeddingProvider = class {
2862
2862
  });
2863
2863
  }
2864
2864
  };
2865
+ async function generateHostedEmbedding(text, model, generateBatch) {
2866
+ const result = await generateBatch([text], model);
2867
+ return {
2868
+ embedding: result.embeddings[0],
2869
+ model: result.model,
2870
+ dimensions: result.dimensions,
2871
+ usage: result.usage
2872
+ };
2873
+ }
2874
+ function generateHostedBatchEmbeddings({
2875
+ texts,
2876
+ model,
2877
+ request: request2,
2878
+ formatError
2879
+ }) {
2880
+ return retryWithBackoff2(async () => {
2881
+ try {
2882
+ const { embeddings, usage } = await request2(texts, model);
2883
+ return {
2884
+ embeddings,
2885
+ model,
2886
+ dimensions: embeddings[0]?.length || 0,
2887
+ usage
2888
+ };
2889
+ } catch (error) {
2890
+ if (!axios5.isAxiosError(error)) throw error;
2891
+ const status = error.response?.status;
2892
+ const providerMessage = error.response?.data?.message || error.message;
2893
+ throw withProviderErrorMetadata(
2894
+ error,
2895
+ formatError({
2896
+ kind: classifyHttpError(status),
2897
+ status,
2898
+ providerMessage
2899
+ })
2900
+ );
2901
+ }
2902
+ });
2903
+ }
2904
+ function classifyHttpError(status) {
2905
+ if (status === 401) return "authentication";
2906
+ if (status === 429) return "rate-limit";
2907
+ if (status === 400) return "invalid-request";
2908
+ return "other";
2909
+ }
2910
+
2911
+ // src/data/neo4j/embeddings/providers/cohere.ts
2912
+ function formatCohereError({ kind, status, providerMessage }) {
2913
+ if (kind === "authentication") {
2914
+ return `Cohere API authentication failed. Please check your COHERE_API_KEY. ${providerMessage}`;
2915
+ }
2916
+ if (kind === "rate-limit") return `Cohere API rate limit exceeded. ${providerMessage}`;
2917
+ if (kind === "invalid-request") return `Cohere API request invalid: ${providerMessage}`;
2918
+ return `Cohere API error (${status}): ${providerMessage}`;
2919
+ }
2865
2920
  var CohereEmbeddingProvider = class {
2866
2921
  name = "cohere";
2867
2922
  defaultModel = "embed-english-v3.0";
@@ -2877,62 +2932,43 @@ var CohereEmbeddingProvider = class {
2877
2932
  return !!this.apiKey;
2878
2933
  }
2879
2934
  async generateEmbedding(text, model) {
2880
- const result = await this.generateBatchEmbeddings([text], model);
2881
- return {
2882
- embedding: result.embeddings[0],
2883
- model: result.model,
2884
- dimensions: result.dimensions,
2885
- usage: result.usage
2886
- };
2935
+ return generateHostedEmbedding(
2936
+ text,
2937
+ model,
2938
+ (texts, batchModel) => this.generateBatchEmbeddings(texts, batchModel)
2939
+ );
2887
2940
  }
2888
2941
  async generateBatchEmbeddings(texts, model) {
2889
2942
  const modelToUse = model || this.defaultModel;
2890
- return retryWithBackoff2(async () => {
2891
- try {
2943
+ return generateHostedBatchEmbeddings({
2944
+ texts,
2945
+ model: modelToUse,
2946
+ formatError: formatCohereError,
2947
+ request: async (requestTexts, requestModel) => {
2892
2948
  const response = await axios5.post(
2893
2949
  `${this.baseUrl}/embed`,
2894
2950
  {
2895
- texts,
2896
- model: modelToUse,
2951
+ texts: requestTexts,
2952
+ model: requestModel,
2897
2953
  input_type: "search_document",
2898
2954
  // For storing in vector DB
2899
2955
  embedding_types: ["float"]
2900
2956
  },
2901
2957
  {
2902
2958
  headers: {
2903
- "Authorization": `Bearer ${this.apiKey}`,
2959
+ Authorization: `Bearer ${this.apiKey}`,
2904
2960
  "Content-Type": "application/json"
2905
2961
  }
2906
2962
  }
2907
2963
  );
2908
2964
  const embeddings = response.data.embeddings.float;
2909
- const dimensions = embeddings[0]?.length || 0;
2910
2965
  return {
2911
2966
  embeddings,
2912
- model: modelToUse,
2913
- dimensions,
2914
2967
  usage: response.data.meta?.billed_units ? {
2915
2968
  promptTokens: response.data.meta.billed_units.input_tokens || 0,
2916
2969
  totalTokens: response.data.meta.billed_units.input_tokens || 0
2917
2970
  } : void 0
2918
2971
  };
2919
- } catch (error) {
2920
- if (axios5.isAxiosError(error)) {
2921
- const status = error.response?.status;
2922
- const providerMessage = error.response?.data?.message || error.message;
2923
- let message;
2924
- if (status === 401) {
2925
- message = `Cohere API authentication failed. Please check your COHERE_API_KEY. ${providerMessage}`;
2926
- } else if (status === 429) {
2927
- message = `Cohere API rate limit exceeded. ${providerMessage}`;
2928
- } else if (status === 400) {
2929
- message = `Cohere API request invalid: ${providerMessage}`;
2930
- } else {
2931
- message = `Cohere API error (${status}): ${providerMessage}`;
2932
- }
2933
- throw withProviderErrorMetadata(error, message);
2934
- }
2935
- throw error;
2936
2972
  }
2937
2973
  });
2938
2974
  }
@@ -3021,6 +3057,14 @@ var HuggingFaceEmbeddingProvider = class {
3021
3057
  });
3022
3058
  }
3023
3059
  };
3060
+ function formatVoyageError({ kind, status, providerMessage }) {
3061
+ if (kind === "authentication") {
3062
+ return `Voyage AI API authentication failed. Please check your VOYAGE_API_KEY. ${providerMessage}`;
3063
+ }
3064
+ if (kind === "rate-limit") return `Voyage AI API rate limit exceeded. ${providerMessage}`;
3065
+ if (kind === "invalid-request") return `Voyage AI API request invalid: ${providerMessage}`;
3066
+ return `Voyage AI API error (${status}): ${providerMessage}`;
3067
+ }
3024
3068
  var VoyageEmbeddingProvider = class {
3025
3069
  name = "voyage";
3026
3070
  defaultModel = "voyage-2";
@@ -3036,61 +3080,44 @@ var VoyageEmbeddingProvider = class {
3036
3080
  return !!this.apiKey;
3037
3081
  }
3038
3082
  async generateEmbedding(text, model) {
3039
- const result = await this.generateBatchEmbeddings([text], model);
3040
- return {
3041
- embedding: result.embeddings[0],
3042
- model: result.model,
3043
- dimensions: result.dimensions,
3044
- usage: result.usage
3045
- };
3083
+ return generateHostedEmbedding(
3084
+ text,
3085
+ model,
3086
+ (texts, batchModel) => this.generateBatchEmbeddings(texts, batchModel)
3087
+ );
3046
3088
  }
3047
3089
  async generateBatchEmbeddings(texts, model) {
3048
3090
  const modelToUse = model || this.defaultModel;
3049
- return retryWithBackoff2(async () => {
3050
- try {
3091
+ return generateHostedBatchEmbeddings({
3092
+ texts,
3093
+ model: modelToUse,
3094
+ formatError: formatVoyageError,
3095
+ request: async (requestTexts, requestModel) => {
3051
3096
  const response = await axios5.post(
3052
3097
  `${this.baseUrl}/embeddings`,
3053
3098
  {
3054
- input: texts,
3055
- model: modelToUse,
3099
+ input: requestTexts,
3100
+ model: requestModel,
3056
3101
  input_type: "document"
3057
3102
  // For storing in vector DB
3058
3103
  },
3059
3104
  {
3060
3105
  headers: {
3061
- "Authorization": `Bearer ${this.apiKey}`,
3106
+ Authorization: `Bearer ${this.apiKey}`,
3062
3107
  "Content-Type": "application/json"
3063
3108
  }
3064
3109
  }
3065
3110
  );
3066
- const embeddings = response.data.data.map((item) => item.embedding);
3067
- const dimensions = embeddings[0]?.length || 0;
3111
+ const embeddings = response.data.data.map(
3112
+ (item) => item.embedding
3113
+ );
3068
3114
  return {
3069
3115
  embeddings,
3070
- model: modelToUse,
3071
- dimensions,
3072
3116
  usage: response.data.usage ? {
3073
3117
  promptTokens: response.data.usage.total_tokens || 0,
3074
3118
  totalTokens: response.data.usage.total_tokens || 0
3075
3119
  } : void 0
3076
3120
  };
3077
- } catch (error) {
3078
- if (axios5.isAxiosError(error)) {
3079
- const status = error.response?.status;
3080
- const message = error.response?.data?.message || error.message;
3081
- let messageText;
3082
- if (status === 401) {
3083
- messageText = `Voyage AI API authentication failed. Please check your VOYAGE_API_KEY. ${message}`;
3084
- } else if (status === 429) {
3085
- messageText = `Voyage AI API rate limit exceeded. ${message}`;
3086
- } else if (status === 400) {
3087
- messageText = `Voyage AI API request invalid: ${message}`;
3088
- } else {
3089
- messageText = `Voyage AI API error (${status}): ${message}`;
3090
- }
3091
- throw withProviderErrorMetadata(error, messageText);
3092
- }
3093
- throw error;
3094
3121
  }
3095
3122
  });
3096
3123
  }