@agentforge/tools 0.18.6 → 0.18.8

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
@@ -2890,6 +2890,61 @@ var OpenAIEmbeddingProvider = class {
2890
2890
  });
2891
2891
  }
2892
2892
  };
2893
+ async function generateHostedEmbedding(text, model, generateBatch) {
2894
+ const result = await generateBatch([text], model);
2895
+ return {
2896
+ embedding: result.embeddings[0],
2897
+ model: result.model,
2898
+ dimensions: result.dimensions,
2899
+ usage: result.usage
2900
+ };
2901
+ }
2902
+ function generateHostedBatchEmbeddings({
2903
+ texts,
2904
+ model,
2905
+ request: request2,
2906
+ formatError
2907
+ }) {
2908
+ return retryWithBackoff2(async () => {
2909
+ try {
2910
+ const { embeddings, usage } = await request2(texts, model);
2911
+ return {
2912
+ embeddings,
2913
+ model,
2914
+ dimensions: embeddings[0]?.length || 0,
2915
+ usage
2916
+ };
2917
+ } catch (error) {
2918
+ if (!axios5__default.default.isAxiosError(error)) throw error;
2919
+ const status = error.response?.status;
2920
+ const providerMessage = error.response?.data?.message || error.message;
2921
+ throw withProviderErrorMetadata(
2922
+ error,
2923
+ formatError({
2924
+ kind: classifyHttpError(status),
2925
+ status,
2926
+ providerMessage
2927
+ })
2928
+ );
2929
+ }
2930
+ });
2931
+ }
2932
+ function classifyHttpError(status) {
2933
+ if (status === 401) return "authentication";
2934
+ if (status === 429) return "rate-limit";
2935
+ if (status === 400) return "invalid-request";
2936
+ return "other";
2937
+ }
2938
+
2939
+ // src/data/neo4j/embeddings/providers/cohere.ts
2940
+ function formatCohereError({ kind, status, providerMessage }) {
2941
+ if (kind === "authentication") {
2942
+ return `Cohere API authentication failed. Please check your COHERE_API_KEY. ${providerMessage}`;
2943
+ }
2944
+ if (kind === "rate-limit") return `Cohere API rate limit exceeded. ${providerMessage}`;
2945
+ if (kind === "invalid-request") return `Cohere API request invalid: ${providerMessage}`;
2946
+ return `Cohere API error (${status}): ${providerMessage}`;
2947
+ }
2893
2948
  var CohereEmbeddingProvider = class {
2894
2949
  name = "cohere";
2895
2950
  defaultModel = "embed-english-v3.0";
@@ -2905,62 +2960,43 @@ var CohereEmbeddingProvider = class {
2905
2960
  return !!this.apiKey;
2906
2961
  }
2907
2962
  async generateEmbedding(text, model) {
2908
- const result = await this.generateBatchEmbeddings([text], model);
2909
- return {
2910
- embedding: result.embeddings[0],
2911
- model: result.model,
2912
- dimensions: result.dimensions,
2913
- usage: result.usage
2914
- };
2963
+ return generateHostedEmbedding(
2964
+ text,
2965
+ model,
2966
+ (texts, batchModel) => this.generateBatchEmbeddings(texts, batchModel)
2967
+ );
2915
2968
  }
2916
2969
  async generateBatchEmbeddings(texts, model) {
2917
2970
  const modelToUse = model || this.defaultModel;
2918
- return retryWithBackoff2(async () => {
2919
- try {
2971
+ return generateHostedBatchEmbeddings({
2972
+ texts,
2973
+ model: modelToUse,
2974
+ formatError: formatCohereError,
2975
+ request: async (requestTexts, requestModel) => {
2920
2976
  const response = await axios5__default.default.post(
2921
2977
  `${this.baseUrl}/embed`,
2922
2978
  {
2923
- texts,
2924
- model: modelToUse,
2979
+ texts: requestTexts,
2980
+ model: requestModel,
2925
2981
  input_type: "search_document",
2926
2982
  // For storing in vector DB
2927
2983
  embedding_types: ["float"]
2928
2984
  },
2929
2985
  {
2930
2986
  headers: {
2931
- "Authorization": `Bearer ${this.apiKey}`,
2987
+ Authorization: `Bearer ${this.apiKey}`,
2932
2988
  "Content-Type": "application/json"
2933
2989
  }
2934
2990
  }
2935
2991
  );
2936
2992
  const embeddings = response.data.embeddings.float;
2937
- const dimensions = embeddings[0]?.length || 0;
2938
2993
  return {
2939
2994
  embeddings,
2940
- model: modelToUse,
2941
- dimensions,
2942
2995
  usage: response.data.meta?.billed_units ? {
2943
2996
  promptTokens: response.data.meta.billed_units.input_tokens || 0,
2944
2997
  totalTokens: response.data.meta.billed_units.input_tokens || 0
2945
2998
  } : void 0
2946
2999
  };
2947
- } catch (error) {
2948
- if (axios5__default.default.isAxiosError(error)) {
2949
- const status = error.response?.status;
2950
- const providerMessage = error.response?.data?.message || error.message;
2951
- let message;
2952
- if (status === 401) {
2953
- message = `Cohere API authentication failed. Please check your COHERE_API_KEY. ${providerMessage}`;
2954
- } else if (status === 429) {
2955
- message = `Cohere API rate limit exceeded. ${providerMessage}`;
2956
- } else if (status === 400) {
2957
- message = `Cohere API request invalid: ${providerMessage}`;
2958
- } else {
2959
- message = `Cohere API error (${status}): ${providerMessage}`;
2960
- }
2961
- throw withProviderErrorMetadata(error, message);
2962
- }
2963
- throw error;
2964
3000
  }
2965
3001
  });
2966
3002
  }
@@ -3049,6 +3085,14 @@ var HuggingFaceEmbeddingProvider = class {
3049
3085
  });
3050
3086
  }
3051
3087
  };
3088
+ function formatVoyageError({ kind, status, providerMessage }) {
3089
+ if (kind === "authentication") {
3090
+ return `Voyage AI API authentication failed. Please check your VOYAGE_API_KEY. ${providerMessage}`;
3091
+ }
3092
+ if (kind === "rate-limit") return `Voyage AI API rate limit exceeded. ${providerMessage}`;
3093
+ if (kind === "invalid-request") return `Voyage AI API request invalid: ${providerMessage}`;
3094
+ return `Voyage AI API error (${status}): ${providerMessage}`;
3095
+ }
3052
3096
  var VoyageEmbeddingProvider = class {
3053
3097
  name = "voyage";
3054
3098
  defaultModel = "voyage-2";
@@ -3064,61 +3108,44 @@ var VoyageEmbeddingProvider = class {
3064
3108
  return !!this.apiKey;
3065
3109
  }
3066
3110
  async generateEmbedding(text, model) {
3067
- const result = await this.generateBatchEmbeddings([text], model);
3068
- return {
3069
- embedding: result.embeddings[0],
3070
- model: result.model,
3071
- dimensions: result.dimensions,
3072
- usage: result.usage
3073
- };
3111
+ return generateHostedEmbedding(
3112
+ text,
3113
+ model,
3114
+ (texts, batchModel) => this.generateBatchEmbeddings(texts, batchModel)
3115
+ );
3074
3116
  }
3075
3117
  async generateBatchEmbeddings(texts, model) {
3076
3118
  const modelToUse = model || this.defaultModel;
3077
- return retryWithBackoff2(async () => {
3078
- try {
3119
+ return generateHostedBatchEmbeddings({
3120
+ texts,
3121
+ model: modelToUse,
3122
+ formatError: formatVoyageError,
3123
+ request: async (requestTexts, requestModel) => {
3079
3124
  const response = await axios5__default.default.post(
3080
3125
  `${this.baseUrl}/embeddings`,
3081
3126
  {
3082
- input: texts,
3083
- model: modelToUse,
3127
+ input: requestTexts,
3128
+ model: requestModel,
3084
3129
  input_type: "document"
3085
3130
  // For storing in vector DB
3086
3131
  },
3087
3132
  {
3088
3133
  headers: {
3089
- "Authorization": `Bearer ${this.apiKey}`,
3134
+ Authorization: `Bearer ${this.apiKey}`,
3090
3135
  "Content-Type": "application/json"
3091
3136
  }
3092
3137
  }
3093
3138
  );
3094
- const embeddings = response.data.data.map((item) => item.embedding);
3095
- const dimensions = embeddings[0]?.length || 0;
3139
+ const embeddings = response.data.data.map(
3140
+ (item) => item.embedding
3141
+ );
3096
3142
  return {
3097
3143
  embeddings,
3098
- model: modelToUse,
3099
- dimensions,
3100
3144
  usage: response.data.usage ? {
3101
3145
  promptTokens: response.data.usage.total_tokens || 0,
3102
3146
  totalTokens: response.data.usage.total_tokens || 0
3103
3147
  } : void 0
3104
3148
  };
3105
- } catch (error) {
3106
- if (axios5__default.default.isAxiosError(error)) {
3107
- const status = error.response?.status;
3108
- const message = error.response?.data?.message || error.message;
3109
- let messageText;
3110
- if (status === 401) {
3111
- messageText = `Voyage AI API authentication failed. Please check your VOYAGE_API_KEY. ${message}`;
3112
- } else if (status === 429) {
3113
- messageText = `Voyage AI API rate limit exceeded. ${message}`;
3114
- } else if (status === 400) {
3115
- messageText = `Voyage AI API request invalid: ${message}`;
3116
- } else {
3117
- messageText = `Voyage AI API error (${status}): ${message}`;
3118
- }
3119
- throw withProviderErrorMetadata(error, messageText);
3120
- }
3121
- throw error;
3122
3149
  }
3123
3150
  });
3124
3151
  }