You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
KKlochko 53944c8082
Update prompts in README.
1 month ago
gliner_inference_server Update models to cache the value of MAX_TEXT_LENGTH. 1 month ago
tests Add the validation for empty texts. 1 month ago
.dockerignore Add Dockerfile and .dockerignore. 1 month ago
.gitignore Update .gitignore. 1 month ago
Dockerfile Update the default value of MAX_TEXT_LENGTH to 1000 for the image. 1 month ago
README.rst Update prompts in README. 1 month ago
requirements.txt Add requirements for prod and dev profiles. 1 month ago
requirements_dev.txt Add requirements for prod and dev profiles. 1 month ago

README.rst

GLiNER_Inference_Server
=========

GLiNER_Inference_Server - an inference server using FastAPI.

Quick start
-----------

1. Build the Docker image
~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: bash

   docker build -t gliner-server .

2. Run the container
~~~~~~~~~~~~~~~~~~~~

.. code:: bash

   docker run -p 8000:8000 gliner-server

Use PORT enviroment variable to override port:

.. code:: bash

   docker run -p 9000:9000 -e PORT=9000 gliner-server

3. Health check
~~~~~~~~~~~~~~~

.. code:: bash

   curl http://localhost:8000/health

enviroment variables
--------------------

- ``PORT`` - server's port (default: 8000)
- ``MODEL_NAME`` - model name HuggingFace (default: knowledgator/gliner-multitask-large-v0.5)
- ``MAX_TEXT_LENGTH`` - maximum text length (default: 1000)

API Endpoints Examples
----------------------

1. ``/general`` - Named Entity Recognition
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Single request:**

.. code:: bash

   curl -X POST http://localhost:8000/general \
     -H "Content-Type: application/json" \
     -d '{
       "text": "Apple Inc. was founded by Steve Jobs in California.",
       "entities": ["organization", "person", "location"],
       "threshold": 0.5
     }'

**Batch request:**

.. code:: bash

   curl -X POST http://localhost:8000/general \
     -H "Content-Type: application/json" \
     -d '{
       "texts": [
         "Apple Inc. was founded by Steve Jobs in California.",
         "Microsoft is located in Redmond, Washington."
       ],
       "entities": ["organization", "person", "location"],
       "threshold": 0.5
     }'

**Batch request with `prompt`:**

.. code:: json

   curl -X POST http://localhost:8000/general \
     -H "Content-Type: application/json" \
     -d '{
       "texts": [
         "Apple Inc. was founded by Steve Jobs in California.",
         "Microsoft is located in Redmond, Washington."
       ],
       "entities": ["organization", "person", "location"],
       "prompt": "Identify organizations, people, and places from the text:\n",
       "threshold": 0.5
     }'

**Response:**

.. code:: json

   {
     "outputs": [
       {
         "entity": "organization",
         "span": "Apple Inc.",
         "start": 0,
         "end": 10,
         "score": 0.95
       },
       {
         "entity": "person",
         "span": "Steve Jobs",
         "start": 27,
         "end": 37,
         "score": 0.92
       }
     ]
   }

2. ``/relation-extraction`` - Extraction відносин
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Single request:**

.. code:: bash

   curl -X POST http://localhost:8000/relation-extraction \
     -H "Content-Type: application/json" \
     -d '{
       "text": "Steve Jobs founded Apple Inc. in California.",
       "relations": ["founded_by", "located_in"],
       "entities": ["person", "organization", "location"],
       "threshold": 0.5
     }'

**Batch request:**

.. code:: bash

   curl -X POST http://localhost:8000/relation-extraction \
     -H "Content-Type: application/json" \
     -d '{
       "texts": [
         "Steve Jobs founded Apple Inc. in California.",
         "Bill Gates leads Microsoft."
       ],
       "relations": ["founded_by", "leads"],
       "threshold": 0.5
     }'

**Batch request with prompt:**

.. code:: bash

   curl -X POST http://localhost:8000/relation-extraction \
     -H "Content-Type: application/json" \
     -d '{
       "texts": [
         "Steve Jobs founded Apple Inc. in California.",
         "Bill Gates leads Microsoft."
       ],
       "relations": ["founded_by", "leads"],
       "prompt": "Extract the relationships between the entities:\n",
       "threshold": 0.5
     }'

**Response:**

.. code:: json

   {
     "outputs": [
       {
         "source": {
           "entity": "organization",
           "span": "Apple Inc.",
           "start": 20,
           "end": 30,
           "score": 0.95
         },
         "relation": "founded_by",
         "target": {
           "entity": "person",
           "span": "Steve Jobs",
           "start": 0,
           "end": 10,
           "score": 0.92
         },
         "score": 0.88
       }
     ]
   }

3. ``/summarization`` - Summarization
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Single request:**

.. code:: bash

   curl -X POST http://localhost:8000/summarization \
     -H "Content-Type: application/json" \
     -d '{
       "text": "Artificial intelligence is transforming industries worldwide. Machine learning enables computers to learn from data. Deep learning uses neural networks for complex tasks.",
       "threshold": 0.5
     }'

**Batch request:**

.. code:: bash

   curl -X POST http://localhost:8000/summarization \
     -H "Content-Type: application/json" \
     -d '{
       "texts": [
         "First document about AI and ML...",
         "Second document about data science..."
       ],
       "threshold": 0.5
     }'

**Single request with `prompt`:**

.. code:: bash

   curl -X POST http://localhost:8000/summarization \
     -H "Content-Type: application/json" \
     -d '{
       "text": "Artificial intelligence is transforming industries worldwide. Machine learning enables computers to learn from data. Deep learning uses neural networks for complex tasks.",
       "prompt": "Generate a concise summary of the key concepts:\n",
       "threshold": 0.5
     }'

**Response:**

.. code:: json

   {
     "outputs": [
       {
         "text": "Artificial intelligence is transforming industries worldwide.",
         "start": 0,
         "end": 61,
         "score": 0.8586996793746948
       },
       {
         "text": "Machine learning enables computers to learn from data.",
         "start": 62,
         "end": 116,
         "score": 0.9330101013183594
       },
       {
         "text": "Deep learning uses neural networks for complex tasks.",
         "start": 117,
         "end": 170,
         "score": 0.8803190588951111
       }
     ]
   }

Error handling
--------------

All errors are returned in the standard format:

.. code:: json

   {
     "error": {
       "code": "INVALID_INPUT",
       "message": "Provide either 'text' or 'texts', not both",
       "details": {}
     }
   }

Error codes
~~~~~~~~~~~

- ``INVALID_INPUT`` (400) - invalid input data
- ``INTERNAL_ERROR`` (500) - internal server error

Validation
----------

- **text** or **texts** - one of them is mandatory (but not both)
- **entities/relations** - cannot be empty lists
- **threshold** - value from 0.0 to 1.0
- **texts** - cannot be an empty list
- The maximum length of the text is controlled through ``MAX_TEXT_LENGTH``

Author
======

Kostiantyn Klochko 2025