diff --git a/.github/workflows/_test-code-samples.yml b/.github/workflows/_test-code-samples.yml index 9263af5b..e707c685 100644 --- a/.github/workflows/_test-code-samples.yml +++ b/.github/workflows/_test-code-samples.yml @@ -4,6 +4,15 @@ on: workflow_call: workflow_dispatch: +env: + MINDEE_API_KEY: ${{ secrets.MINDEE_API_KEY_SE_TESTS }} + MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} + MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} + MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} + MINDEE_V2_SE_TESTS_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} + MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} + MINDEE_V2_SE_TESTS_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} + jobs: test: name: Run Code Samples @@ -38,9 +47,13 @@ jobs: python -m pip install pip pip install -e . - - name: Tests code samples + - name: Tests v2 sample code + run: | + ./tests/test_v2_code_samples.sh + + - name: Tests v1 sample code run: | - ./tests/test_code_samples.sh ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }} ${{ secrets.MINDEE_API_KEY_SE_TESTS }} ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} + ./tests/test_v1_code_samples.sh ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }} - name: Notify Slack Action on Failure uses: ravsamhq/notify-slack-action@2.3.0 diff --git a/docs/extras/code_samples/v2_classification.txt b/docs/extras/code_samples/v2_classification.txt index b5bbd237..f064cc33 100644 --- a/docs/extras/code_samples/v2_classification.txt +++ b/docs/extras/code_samples/v2_classification.txt @@ -7,7 +7,7 @@ from mindee import ( input_path = "/path/to/the/file.ext" api_key = "MY_API_KEY" -model_id = "MY_CLASSIFICATION_MODEL_ID" +model_id = "MY_MODEL_ID" # Init a new client mindee_client = ClientV2(api_key) diff --git a/docs/extras/code_samples/v2_crop.txt b/docs/extras/code_samples/v2_crop.txt index 115cba20..e13a4142 100644 --- a/docs/extras/code_samples/v2_crop.txt +++ b/docs/extras/code_samples/v2_crop.txt @@ -7,7 +7,7 @@ from mindee import ( input_path = "/path/to/the/file.ext" api_key = "MY_API_KEY" -model_id = "MY_CROP_MODEL_ID" +model_id = "MY_MODEL_ID" # Init a new client mindee_client = ClientV2(api_key) diff --git a/docs/extras/code_samples/v2_extraction.txt b/docs/extras/code_samples/v2_extraction.txt index 9586b210..30ecd7a8 100644 --- a/docs/extras/code_samples/v2_extraction.txt +++ b/docs/extras/code_samples/v2_extraction.txt @@ -42,3 +42,6 @@ response = mindee_client.enqueue_and_get_result( # Print a brief summary of the parsed data print(response.inference) + +# Access the result fields +fields: dict = response.inference.result.fields diff --git a/docs/extras/code_samples/v2_ocr.txt b/docs/extras/code_samples/v2_ocr.txt index c39a000b..0c022ea5 100644 --- a/docs/extras/code_samples/v2_ocr.txt +++ b/docs/extras/code_samples/v2_ocr.txt @@ -7,7 +7,7 @@ from mindee import ( input_path = "/path/to/the/file.ext" api_key = "MY_API_KEY" -model_id = "MY_OCR_MODEL_ID" +model_id = "MY_MODEL_ID" # Init a new client mindee_client = ClientV2(api_key) @@ -31,5 +31,5 @@ response = mindee_client.enqueue_and_get_result( # Print a brief summary of the parsed data print(response.inference) -# Access the ocr result +# Access the OCR result pages: list = response.inference.result.pages diff --git a/docs/extras/code_samples/v2_split.txt b/docs/extras/code_samples/v2_split.txt index d697ff37..08511d63 100644 --- a/docs/extras/code_samples/v2_split.txt +++ b/docs/extras/code_samples/v2_split.txt @@ -7,7 +7,7 @@ from mindee import ( input_path = "/path/to/the/file.ext" api_key = "MY_API_KEY" -model_id = "MY_SPLIT_MODEL_ID" +model_id = "MY_MODEL_ID" # Init a new client mindee_client = ClientV2(api_key) diff --git a/mindee/input/base_parameters.py b/mindee/input/base_parameters.py index d1159ad2..77e5bc76 100644 --- a/mindee/input/base_parameters.py +++ b/mindee/input/base_parameters.py @@ -9,9 +9,6 @@ class BaseParameters(ABC): """Base class for parameters accepted by all V2 endpoints.""" - _slug: str = field(init=False) - """Slug of the endpoint.""" - model_id: str """ID of the model, required.""" alias: Optional[str] = None @@ -23,6 +20,9 @@ class BaseParameters(ABC): close_file: bool = True """Whether to close the file after product.""" + _slug: str = field(init=False) + """Slug of the endpoint.""" + def get_form_data(self) -> Dict[str, Union[str, List[str]]]: """ Return the parameters as a config dictionary. diff --git a/mindee/input/inference_parameters.py b/mindee/input/inference_parameters.py index 807b2595..3c2f13b3 100644 --- a/mindee/input/inference_parameters.py +++ b/mindee/input/inference_parameters.py @@ -1,5 +1,5 @@ import json -from dataclasses import dataclass, asdict, field +from dataclasses import dataclass, asdict from typing import Dict, List, Optional, Union from mindee.input.base_parameters import BaseParameters @@ -81,9 +81,6 @@ def __post_init__(self) -> None: class InferenceParameters(BaseParameters): """Inference parameters to set when sending a file.""" - _slug: str = field(init=False, default="inferences") - """Slug of the endpoint.""" - rag: Optional[bool] = None """Enhance extraction accuracy with Retrieval-Augmented Generation.""" raw_text: Optional[bool] = None @@ -106,6 +103,9 @@ class InferenceParameters(BaseParameters): Not recommended, for specific use only. """ + _slug: str = "inferences" + """Slug of the endpoint.""" + def __post_init__(self): if isinstance(self.data_schema, str): self.data_schema = DataSchema(**json.loads(self.data_schema)) diff --git a/tests/test_code_samples.sh b/tests/test_code_samples.sh deleted file mode 100755 index c07bdd43..00000000 --- a/tests/test_code_samples.sh +++ /dev/null @@ -1,96 +0,0 @@ -#! /bin/sh -set -e - -OUTPUT_FILE='./_test.py' -ACCOUNT=$1 -ENDPOINT=$2 -API_KEY=$3 -API_KEY_V2=$4 -MODEL_ID=$5 -CLASSIFICATION_MODEL_ID=$6 -CROP_MODEL_ID=$7 -OCR_MODEL_ID=$8 -SPLIT_MODEL_ID=$9 - -for f in $(find ./docs/extras/code_samples -maxdepth 1 -name "*.txt" -not -name "workflow_*.txt" | sort -h) -do - if echo "${f}" | grep -q "default_v2.txt"; then - if [ -z "${API_KEY_V2}" ] || [ -z "${MODEL_ID}" ]; then - echo "Skipping ${f} (API_KEY_V2 or MODEL_ID not supplied)" - echo - continue - fi - fi - - echo - echo "###############################################" - echo "${f}" - echo "###############################################" - echo - - sed "s/my-api-key/${API_KEY}/" "${f}" > $OUTPUT_FILE - sed -i 's/\/path\/to\/the\/file.ext/.\/tests\/data\/file_types\/pdf\/blank_1.pdf/' $OUTPUT_FILE - - - if echo "${f}" | grep -q "v2_extraction.txt" - then - sed -i "s/MY_API_KEY/$API_KEY_V2/" $OUTPUT_FILE - sed -i "s/MY_MODEL_ID/$MODEL_ID/" $OUTPUT_FILE - else - sed -i "s/my-api-key/$API_KEY/" $OUTPUT_FILE - fi - - if echo "${f}" | grep -q "v2_classification.txt" - then - sed -i "s/MY_API_KEY/$API_KEY_V2/" $OUTPUT_FILE - sed -i "s/MY_CLASSIFICATION_MODEL_ID/$CLASSIFICATION_MODEL_ID/" $OUTPUT_FILE - else - sed -i "s/my-api-key/$API_KEY/" $OUTPUT_FILE - fi - - if echo "${f}" | grep -q "v2_crop.txt" - then - sed -i "s/MY_API_KEY/$API_KEY_V2/" $OUTPUT_FILE - sed -i "s/MY_CROP_MODEL_ID/$CROP_MODEL_ID/" $OUTPUT_FILE - else - sed -i "s/my-api-key/$API_KEY/" $OUTPUT_FILE - fi - - if echo "${f}" | grep -q "v2_split.txt" - then - sed -i "s/MY_API_KEY/$API_KEY_V2/" $OUTPUT_FILE - sed -i "s/MY_SPLIT_MODEL_ID/$SPLIT_MODEL_ID/" $OUTPUT_FILE - else - sed -i "s/my-api-key/$API_KEY/" $OUTPUT_FILE - fi - - if echo "${f}" | grep -q "v2_ocr.txt" - then - sed -i "s/MY_API_KEY/$API_KEY_V2/" $OUTPUT_FILE - sed -i "s/MY_OCR_MODEL_ID/$OCR_MODEL_ID/" $OUTPUT_FILE - else - sed -i "s/my-api-key/$API_KEY/" $OUTPUT_FILE - fi - - if echo "$f" | grep -q "custom_v1.txt" - then - sed -i "s/my-account/$ACCOUNT/g" $OUTPUT_FILE - sed -i "s/my-endpoint/$ENDPOINT/g" $OUTPUT_FILE - fi - - if echo "${f}" | grep -q "default.txt" - then - sed -i "s/my-account/$ACCOUNT/" $OUTPUT_FILE - sed -i "s/my-endpoint/$ENDPOINT/" $OUTPUT_FILE - sed -i "s/my-version/1/" $OUTPUT_FILE - fi - - if echo "${f}" | grep -q "default_async.txt" - then - sed -i "s/my-account/mindee/" $OUTPUT_FILE - sed -i "s/my-endpoint/invoice_splitter/" $OUTPUT_FILE - sed -i "s/my-version/1/" $OUTPUT_FILE - fi - - python $OUTPUT_FILE -done diff --git a/tests/test_v1_code_samples.sh b/tests/test_v1_code_samples.sh new file mode 100755 index 00000000..87e7a6dd --- /dev/null +++ b/tests/test_v1_code_samples.sh @@ -0,0 +1,51 @@ +#! /bin/sh +set -e + +OUTPUT_FILE='./_test_v1.py' +ACCOUNT=$1 +ENDPOINT=$2 + +for f in $( + find ./docs/extras/code_samples -maxdepth 1 -name "*.txt" -not -name "workflow_*.txt" -not -name "v2_*.txt" | sort -h +) +do + if echo "${f}" | grep -q "default_v2.txt"; then + if [ -z "${API_KEY_V2}" ] || [ -z "${MODEL_ID}" ]; then + echo "Skipping ${f} (API_KEY_V2 or MODEL_ID not supplied)" + echo + continue + fi + fi + + echo + echo "###############################################" + echo "${f}" + echo "###############################################" + echo + + sed "s/my-api-key/${MINDEE_API_KEY}/" "${f}" > $OUTPUT_FILE + sed -i 's/\/path\/to\/the\/file.ext/.\/tests\/data\/file_types\/pdf\/blank_1.pdf/' $OUTPUT_FILE + + if echo "$f" | grep -q "custom_v1.txt" + then + sed -i "s/my-account/$ACCOUNT/g" $OUTPUT_FILE + sed -i "s/my-endpoint/$ENDPOINT/g" $OUTPUT_FILE + fi + + if echo "${f}" | grep -q "default.txt" + then + sed -i "s/my-account/$ACCOUNT/" $OUTPUT_FILE + sed -i "s/my-endpoint/$ENDPOINT/" $OUTPUT_FILE + sed -i "s/my-version/1/" $OUTPUT_FILE + fi + + if echo "${f}" | grep -q "default_async.txt" + then + sed -i "s/my-account/mindee/" $OUTPUT_FILE + sed -i "s/my-endpoint/invoice_splitter/" $OUTPUT_FILE + sed -i "s/my-version/1/" $OUTPUT_FILE + fi + + sleep 0.5 # avoid too many request errors + python $OUTPUT_FILE +done diff --git a/tests/test_v2_code_samples.sh b/tests/test_v2_code_samples.sh new file mode 100755 index 00000000..72436b53 --- /dev/null +++ b/tests/test_v2_code_samples.sh @@ -0,0 +1,46 @@ +#! /bin/sh +set -e + +OUTPUT_FILE='./_test_v2.py' + +for f in $( + find ./docs/extras/code_samples -maxdepth 1 -name "v2_*.txt" | sort -h +) +do + echo + echo "###############################################" + echo "${f}" + echo "###############################################" + echo + + sed "s/MY_API_KEY/${MINDEE_V2_API_KEY}/" "${f}" > $OUTPUT_FILE + sed -i 's/\/path\/to\/the\/file.ext/.\/tests\/data\/file_types\/pdf\/blank_1.pdf/' $OUTPUT_FILE + + if echo "${f}" | grep -q "v2_extraction.txt" + then + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID}/" $OUTPUT_FILE + fi + + if echo "${f}" | grep -q "v2_classification.txt" + then + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID}/" $OUTPUT_FILE + fi + + if echo "${f}" | grep -q "v2_crop.txt" + then + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_CROP_MODEL_ID}/" $OUTPUT_FILE + fi + + if echo "${f}" | grep -q "v2_split.txt" + then + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID}/" $OUTPUT_FILE + fi + + if echo "${f}" | grep -q "v2_ocr.txt" + then + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_OCR_MODEL_ID}/" $OUTPUT_FILE + fi + + sleep 0.5 # avoid too many request errors + python $OUTPUT_FILE +done