@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 +92 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +92 -65
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
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
|
|
2891
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
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
|
|
3050
|
-
|
|
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:
|
|
3055
|
-
model:
|
|
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
|
-
|
|
3106
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
3062
3107
|
"Content-Type": "application/json"
|
|
3063
3108
|
}
|
|
3064
3109
|
}
|
|
3065
3110
|
);
|
|
3066
|
-
const embeddings = response.data.data.map(
|
|
3067
|
-
|
|
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
|
}
|