Skip to content

Tasks

To classify and abstract common NLP functionalities, INTELMO adopts the concept of tasks. From a Python interface perspective, each task is a function that satisfies specific constraints. For a single-task model, INTELMO allows defining rendering using the Python API. For multi-task models, INTELMO provides Composition to define interactions between tasks.

Task Definition

What can a task function get from INTELMO and what should it return? The answer is intuitive: a task function could get an Article object and should return a new Article object. The Article has the following fields that the function can access:

  • title: The title of the article.
  • url: The original URL of the article.
  • blocks: A list of blocks. See Block Section for more details.
  • global_block: A block with global level. See Block Section for more details.

With the above fields, a task function can modify the content of the article and return a new article. Here is an example:

python
def task(article: Article) -> Article:
    article.title = "New Title"
    article.blocks[0].content = "New Content"
    article.global_block = Block(
        level="global",
        type="bold",
        content="New Global Content",
        children=[]
    )
    return article

INTELMO provides a set of predefined tasks to simplify the integration of INTELMO into existing NLP models. These tasks have simplified parameters and return types.

Task Composition

When implementing multiple tasks, developers may want to specify the execution order and logic between these tasks. Intelmo categorizes this into three types: Exclusive, Pipelined, and Compatible. Their definitions are as follows:

  • Exclusive: When multiple tasks are Exclusive, only one of them can be executed at a time. When user turns on one task, other tasks will be disabled. This type of composition is useful to avoid conflicts between tasks.

  • Pipelined: When multiple tasks are Pipelined, they will be executed in the order specified by developer. This type of composition is useful to build a pipeline of tasks.

  • Compatible: When multiple tasks are Compatible, they can be executed at the same time and their results will be merged. INTELMO has a built-in mechanism to merge results, but developers can also customize the merging logic.

These compositions could also be nested and make up a tree structure. Here is an example:

python
server = create_server(
    name="Example Server",
    description="An example server",
    tasks=Compatible(
        Pipelined(
            { Task 1 },
            { Task 2 },
            { Task 3 }
        ),
        { Task 4 },
        Exclusive(
            { Task 5 },
            { Task 6 }
        ),
    )
  )

In the above example, Task 1, Task 2, and Task 3 will be executed in order. Task 4 will be executed after Task 1, Task 2, and Task 3. Task 5 and Task 6 will be executed exclusively.