sparrow-parse 0.4.6__tar.gz → 0.4.7__tar.gz

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.
Files changed (25) hide show
  1. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/PKG-INFO +1 -1
  2. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/setup.py +1 -1
  3. sparrow-parse-0.4.7/sparrow_parse/__init__.py +1 -0
  4. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/vllm/inference_factory.py +0 -6
  5. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/vllm/mlx_inference.py +42 -70
  6. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse.egg-info/PKG-INFO +1 -1
  7. sparrow-parse-0.4.6/sparrow_parse/__init__.py +0 -1
  8. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/README.md +0 -0
  9. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/setup.cfg +0 -0
  10. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/__main__.py +0 -0
  11. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/extractors/__init__.py +0 -0
  12. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/extractors/vllm_extractor.py +0 -0
  13. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/helpers/__init__.py +0 -0
  14. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/helpers/pdf_optimizer.py +0 -0
  15. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/processors/__init__.py +0 -0
  16. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/processors/table_structure_processor.py +0 -0
  17. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/vllm/__init__.py +0 -0
  18. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/vllm/huggingface_inference.py +0 -0
  19. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/vllm/inference_base.py +0 -0
  20. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse/vllm/local_gpu_inference.py +0 -0
  21. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse.egg-info/SOURCES.txt +0 -0
  22. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse.egg-info/dependency_links.txt +0 -0
  23. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse.egg-info/entry_points.txt +0 -0
  24. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse.egg-info/requires.txt +0 -0
  25. {sparrow-parse-0.4.6 → sparrow-parse-0.4.7}/sparrow_parse.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sparrow-parse
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: Sparrow Parse is a Python package (part of Sparrow) for parsing and extracting information from documents.
5
5
  Home-page: https://github.com/katanaml/sparrow/tree/main/sparrow-data/parse
6
6
  Author: Andrej Baranovskij
@@ -8,7 +8,7 @@ with open("requirements.txt", "r", encoding="utf-8") as fh:
8
8
 
9
9
  setup(
10
10
  name="sparrow-parse",
11
- version="0.4.6",
11
+ version="0.4.7",
12
12
  author="Andrej Baranovskij",
13
13
  author_email="andrejus.baranovskis@gmail.com",
14
14
  description="Sparrow Parse is a Python package (part of Sparrow) for parsing and extracting information from documents.",
@@ -0,0 +1 @@
1
+ __version__ = '0.4.7'
@@ -23,9 +23,3 @@ class InferenceFactory:
23
23
  # model = torch.load('model.pth')
24
24
  # return model
25
25
  raise NotImplementedError("Model loading logic not implemented")
26
-
27
-
28
- def unload_inference_instance(self, instance):
29
- if instance and hasattr(instance, "unload_model"):
30
- instance.unload_model()
31
- print(f"Inference instance of type {type(instance).__name__} has been unloaded.")
@@ -4,7 +4,6 @@ from mlx_vlm.utils import load_image
4
4
  from sparrow_parse.vllm.inference_base import ModelInference
5
5
  import os
6
6
  import json
7
- import gc
8
7
 
9
8
 
10
9
  class MLXInference(ModelInference):
@@ -20,40 +19,19 @@ class MLXInference(ModelInference):
20
19
  :param model_name: Name of the model to load.
21
20
  """
22
21
  self.model_name = model_name
23
- self.model = None
24
- self.processor = None
25
- print(f"MLXInference initialized with model: {model_name}")
22
+ print(f"MLXInference initialized for model: {model_name}")
26
23
 
27
24
 
28
- def unload_model(self):
29
- """
30
- Unload the model and release resources.
31
- """
32
- if self.model:
33
- print(f"Unloading model: {self.model_name}")
34
- del self.model
35
- self.model = None
36
- if self.processor:
37
- print(f"Unloading processor for model: {self.model_name}")
38
- del self.processor
39
- self.processor = None
40
-
41
- # Force garbage collection to release memory
42
- gc.collect()
43
- print(f"Model {self.model_name} and its resources have been unloaded, memory cleared.")
44
-
45
-
46
- def _load_model_and_processor(self, model_name):
25
+ @staticmethod
26
+ def _load_model_and_processor(model_name):
47
27
  """
48
28
  Load the model and processor for inference.
29
+
49
30
  :param model_name: Name of the model to load.
50
31
  :return: Tuple containing the loaded model and processor.
51
32
  """
52
- print(f"Loading model and processor for: {model_name}...")
53
33
  model, processor = load(model_name)
54
- self.model = model # Store model instance
55
- self.processor = processor # Store processor instance
56
- print(f"Model and processor for '{model_name}' loaded successfully.")
34
+ print(f"Loaded model: {model_name}")
57
35
  return model, processor
58
36
 
59
37
 
@@ -103,54 +81,48 @@ class MLXInference(ModelInference):
103
81
  def inference(self, input_data, mode=None):
104
82
  """
105
83
  Perform inference on input data using the specified model.
84
+
106
85
  :param input_data: A list of dictionaries containing image file paths and text inputs.
107
86
  :param mode: Optional mode for inference ("static" for simple JSON output).
108
87
  :return: List of processed model responses.
109
88
  """
110
- try:
111
- if mode == "static":
112
- return [self.get_simple_json()]
113
-
114
- # Load the model and processor
115
- model, processor = self._load_model_and_processor(self.model_name)
116
- config = model.config
117
-
118
- # Prepare absolute file paths
119
- file_paths = self._extract_file_paths(input_data)
120
-
121
- results = []
122
- for file_path in file_paths:
123
- image, width, height = self.load_image_data(file_path)
124
-
125
- # Prepare messages for the chat model
126
- messages = [
127
- {"role": "system",
128
- "content": "You are an expert at extracting structured text from image documents."},
129
- {"role": "user", "content": input_data[0]["text_input"]},
130
- ]
131
-
132
- # Generate and process response
133
- prompt = apply_chat_template(processor, config, messages)
134
- response = generate(
135
- model,
136
- processor,
137
- image,
138
- prompt,
139
- resize_shape=(width, height),
140
- max_tokens=4000,
141
- temperature=0.0,
142
- verbose=False
143
- )
144
- results.append(self.process_response(response))
145
-
146
- print("Inference completed successfully for: ", file_path)
147
-
148
- return results
149
-
150
- finally:
151
- # Always unload the model after inference
152
- self.unload_model()
89
+ if mode == "static":
90
+ return [self.get_simple_json()]
91
+
92
+ # Load the model and processor
93
+ model, processor = self._load_model_and_processor(self.model_name)
94
+ config = model.config
95
+
96
+ # Prepare absolute file paths
97
+ file_paths = self._extract_file_paths(input_data)
98
+
99
+ results = []
100
+ for file_path in file_paths:
101
+ image, width, height = self.load_image_data(file_path)
102
+
103
+ # Prepare messages for the chat model
104
+ messages = [
105
+ {"role": "system", "content": "You are an expert at extracting structured text from image documents."},
106
+ {"role": "user", "content": input_data[0]["text_input"]},
107
+ ]
108
+
109
+ # Generate and process response
110
+ prompt = apply_chat_template(processor, config, messages) # Assuming defined
111
+ response = generate(
112
+ model,
113
+ processor,
114
+ image,
115
+ prompt,
116
+ resize_shape=(width, height),
117
+ max_tokens=4000,
118
+ temperature=0.0,
119
+ verbose=False
120
+ )
121
+ results.append(self.process_response(response))
122
+
123
+ print("Inference completed successfully for: ", file_path)
153
124
 
125
+ return results
154
126
 
155
127
  @staticmethod
156
128
  def _extract_file_paths(input_data):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sparrow-parse
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: Sparrow Parse is a Python package (part of Sparrow) for parsing and extracting information from documents.
5
5
  Home-page: https://github.com/katanaml/sparrow/tree/main/sparrow-data/parse
6
6
  Author: Andrej Baranovskij
@@ -1 +0,0 @@
1
- __version__ = '0.4.6'
File without changes
File without changes