doc2vec 1.3.0 → 2.2.0

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.
@@ -1,157 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransformersEmbeddingProvider = exports.OpenAIEmbeddingProvider = void 0;
4
- exports.createEmbeddingProvider = createEmbeddingProvider;
5
- const openai_1 = require("openai");
6
- const transformers_1 = require("@huggingface/transformers");
7
- class OpenAIEmbeddingProvider {
8
- constructor(params, logger) {
9
- this.logger = logger.child('openai-embeddings');
10
- this.model = params.model || 'text-embedding-3-large';
11
- this.openai = new openai_1.OpenAI({
12
- apiKey: params.api_key || process.env.OPENAI_API_KEY
13
- });
14
- this.logger.info(`OpenAI embedding provider initialized with model: ${this.model}`);
15
- }
16
- async createEmbeddings(texts) {
17
- try {
18
- this.logger.debug(`Creating embeddings for ${texts.length} texts using OpenAI`);
19
- const response = await this.openai.embeddings.create({
20
- model: this.model,
21
- input: texts,
22
- });
23
- this.logger.debug(`Successfully created ${response.data.length} embeddings`);
24
- return response.data.map(d => d.embedding);
25
- }
26
- catch (error) {
27
- this.logger.error('Failed to create OpenAI embeddings:', error);
28
- return [];
29
- }
30
- }
31
- getDimensions() {
32
- // Return dimensions based on model
33
- if (this.model === 'text-embedding-3-large')
34
- return 3072;
35
- if (this.model === 'text-embedding-3-small')
36
- return 1536;
37
- if (this.model === 'text-embedding-ada-002')
38
- return 1536;
39
- return 1536; // Default fallback
40
- }
41
- getModelName() {
42
- return this.model;
43
- }
44
- }
45
- exports.OpenAIEmbeddingProvider = OpenAIEmbeddingProvider;
46
- class TransformersEmbeddingProvider {
47
- constructor(params, logger) {
48
- this.params = params;
49
- this.dimensions = 384; // Default, will be updated after model loading
50
- this.isInitialized = false;
51
- this.logger = logger.child('transformers-embeddings');
52
- this.modelName = params.model;
53
- // Configure transformers.js environment
54
- if (params.local_files_only) {
55
- transformers_1.env.allowLocalModels = true;
56
- transformers_1.env.allowRemoteModels = false;
57
- }
58
- if (params.cache_dir) {
59
- transformers_1.env.cacheDir = params.cache_dir;
60
- }
61
- this.logger.info(`Transformers embedding provider initialized with model: ${this.modelName}`);
62
- }
63
- async initialize() {
64
- if (this.isInitialized)
65
- return;
66
- try {
67
- this.logger.info(`Loading transformers model: ${this.modelName}`);
68
- // Load tokenizer and model
69
- this.tokenizer = await transformers_1.AutoTokenizer.from_pretrained(this.modelName);
70
- this.model = await transformers_1.AutoModel.from_pretrained(this.modelName);
71
- // Try to determine dimensions from model config
72
- if (this.model.config && this.model.config.hidden_size) {
73
- this.dimensions = this.model.config.hidden_size;
74
- }
75
- this.isInitialized = true;
76
- this.logger.info(`Transformers model loaded successfully. Dimensions: ${this.dimensions}`);
77
- }
78
- catch (error) {
79
- this.logger.error(`Failed to load transformers model: ${this.modelName}`, error);
80
- throw error;
81
- }
82
- }
83
- async createEmbeddings(texts) {
84
- await this.initialize();
85
- try {
86
- this.logger.debug(`Creating embeddings for ${texts.length} texts using transformers.js`);
87
- const embeddings = [];
88
- // Process texts in batches to avoid memory issues
89
- const batchSize = Math.min(8, texts.length);
90
- for (let i = 0; i < texts.length; i += batchSize) {
91
- const batch = texts.slice(i, i + batchSize);
92
- for (const text of batch) {
93
- // Tokenize the text
94
- const tokens = await this.tokenizer(text, {
95
- truncation: true,
96
- padding: true,
97
- max_length: 512,
98
- return_tensors: 'pt'
99
- });
100
- // Get model output
101
- const output = await this.model(tokens);
102
- // Mean pooling to get sentence embeddings
103
- let embedding;
104
- if (output.last_hidden_state) {
105
- // Mean pooling over sequence length
106
- const tensor = output.last_hidden_state;
107
- const meanPooled = tensor.mean(1); // Mean along sequence dimension
108
- embedding = Array.from(meanPooled.data);
109
- }
110
- else if (output.pooler_output) {
111
- // Use pooler output if available
112
- embedding = Array.from(output.pooler_output.data);
113
- }
114
- else {
115
- throw new Error('Unable to extract embeddings from model output');
116
- }
117
- embeddings.push(embedding);
118
- }
119
- // Log progress for large batches
120
- if (texts.length > 10) {
121
- this.logger.debug(`Processed ${Math.min(i + batchSize, texts.length)}/${texts.length} texts`);
122
- }
123
- }
124
- this.logger.debug(`Successfully created ${embeddings.length} embeddings`);
125
- return embeddings;
126
- }
127
- catch (error) {
128
- this.logger.error('Failed to create transformers embeddings:', error);
129
- return [];
130
- }
131
- }
132
- getDimensions() {
133
- return this.dimensions;
134
- }
135
- getModelName() {
136
- return this.modelName;
137
- }
138
- async cleanup() {
139
- // Clean up model resources if needed
140
- this.model = null;
141
- this.tokenizer = null;
142
- this.isInitialized = false;
143
- this.logger.info('Transformers embedding provider cleaned up');
144
- }
145
- }
146
- exports.TransformersEmbeddingProvider = TransformersEmbeddingProvider;
147
- function createEmbeddingProvider(config, logger) {
148
- if (config.provider === 'openai') {
149
- return new OpenAIEmbeddingProvider(config.params, logger);
150
- }
151
- else if (config.provider === 'transformers') {
152
- return new TransformersEmbeddingProvider(config.params, logger);
153
- }
154
- else {
155
- throw new Error(`Unsupported embedding provider: ${config.provider}`);
156
- }
157
- }