Skip to content

Commit

Permalink
Release 1.0.1 (#43)
Browse files Browse the repository at this point in the history
* Update README and package.json

* Re-generate server for API version 1.0.1

* Update API and tool version in Tool object
  • Loading branch information
tschaffter authored Feb 26, 2021
1 parent a0290fc commit 6fd9be3
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 14 deletions.
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
[![GitHub License](https://img.shields.io/github/license/nlpsandbox/person-name-annotator-example.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/nlpsandbox/person-name-annotator-example/blob/develop/LICENSE)
[![Docker Pulls](https://img.shields.io/docker/pulls/nlpsandbox/person-name-annotator-example.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/nlpsandbox/person-name-annotator-example)
[![Discord](https://img.shields.io/discord/770484164393828373.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/Zb4ymtF "Realtime support / chat with the community and the team")
[![nlpsandbox.io](https://img.shields.io/badge/OpenAPI-nlpsandbox.io-blue?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjMxIiBoZWlnaHQ9IjMxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImxheWVyIj4KICA8dGl0bGU+U3luYXBzZSBMb2dvPC90aXRsZT4KICA8ZyBpZD0ic3ZnXzkiPgogICA8cmVjdCBmaWxsPSIjNUM5NEI5IiBoZWlnaHQ9IjIuNDg2MDUiIGlkPSJzdmdfMSIgdHJhbnNmb3JtPSJtYXRyaXgoMC43ODU4MTUgLTAuNDU1Nzg3IDAuNDU1Nzg3IDAuNzg1ODE1IC01LjQ0MzQ3IDguMDYyOTcpIiB3aWR0aD0iMTIiIHg9IjkuMjM5NTM3IiB5PSIxMi41NDQyNTQiLz4KICAgPHJlY3QgZmlsbD0iIzYyQUM2MiIgaGVpZ2h0PSIyLjQ5NjUyIiBpZD0ic3ZnXzIiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzg4NzI2IDAuNDUwNzMxIC0wLjQ1NDU0NyAwLjc4NjUzMyA5LjI4Mjc0IDE4LjgzMjYpIiB3aWR0aD0iMTEuOTQ5OCIgeD0iLTIuMTE0ODg0IiB5PSItMS4zNTIwNjkiLz4KICAgPHJlY3QgZmlsbD0iI0U4NzYyQiIgaGVpZ2h0PSIyLjQ5NjUyIiBpZD0ic3ZnXzMiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjAwMDM4OTA3OSAwLjkwODQzMSAwLjkwODQyMiAtMC4wMDQwMTI0MiAyMC44ODgzIDEyLjEwMTkpIiB3aWR0aD0iMTEuOTQ5OCIgeD0iLTIuMjI1MDk4IiB5PSItMS4xNjA2NCIvPgogICA8cGF0aCBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Im03LjUwMzIwMSwxOS45OTIyMjdjMi4xNjk5NDMsLTEuMjU4ODU4IDIuOTE0MjQ5LC00LjAyODUxIDEuNjYyNDkxLC02LjE4NjAzMWMtMS4yNTA4NjQsLTIuMTU4NDA2IC00LjAyNDk1NSwtMi44ODc2NDEgLTYuMTk0ODk3LC0xLjYyODc4M2MtMi4xNjk5NDMsMS4yNTg4NTggLTIuOTE0MjUzLDQuMDI4NTAyIC0xLjY2MjQ5Niw2LjE4NjAyM2MxLjI1MDg2OSwyLjE1ODQxNCA0LjAyNDk1NywyLjg4Njc1OCA2LjE5NDkwMiwxLjYyODc5MXptLTEuMTMyODgsLTEuOTUzNDg4YzEuMDg0OTcyLC0wLjYyOTg3MSAxLjQ1NzU2MywtMi4wMTQ2OTMgMC44MzEyNDUsLTMuMDkzNDUxYy0wLjYyNTQzMiwtMS4wNzg3NjggLTIuMDEyOTIyLC0xLjQ0MzM3NCAtMy4wOTc4ODYsLTAuODEzNTA4Yy0xLjA4NDk3NSwwLjYyODk3OSAtMS40NTY2OSwyLjAxMzgwOSAtMC44MzEyNTEsMy4wOTI1NzJjMC42MjYzMTgsMS4wNzg3NTcgMi4wMTI5MjIsMS40NDMzNzQgMy4wOTc4OTIsMC44MTQzODd6IiBmaWxsPSIjQzRDNEM0IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGlkPSJzdmdfNCIvPgogICA8cGF0aCBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0yMy4yMTk3ODYsMTAuODc1OTM5YzIuMTY5OTQzLC0xLjI1ODg1OCAyLjkxNDI0OSwtNC4wMjg1MSAxLjY2MjQ5MSwtNi4xODYwMzFjLTEuMjUwODY0LC0yLjE1ODQwNiAtNC4wMjQ5NTUsLTIuODg3NjQxIC02LjE5NDg5NywtMS42Mjg3ODNjLTIuMTY5OTQzLDEuMjU4ODU4IC0yLjkxNDI1Myw0LjAyODUwMiAtMS42NjI0OTYsNi4xODYwMjNjMS4yNTA4NjksMi4xNTg0MTQgNC4wMjQ5NTcsMi44ODY3NTggNi4xOTQ5MDIsMS42Mjg3OTF6bS0xLjEzMjg4LC0xLjk1MzQ4OGMxLjA4NDk3MiwtMC42Mjk4NzEgMS40NTc1NjMsLTIuMDE0NjkzIDAuODMxMjQ1LC0zLjA5MzQ1MWMtMC42MjU0MzIsLTEuMDc4NzY4IC0yLjAxMjkyMiwtMS40NDMzNzQgLTMuMDk3ODg2LC0wLjgxMzUwOGMtMS4wODQ5NzUsMC42Mjg5NzkgLTEuNDU2NjksMi4wMTM4MDkgLTAuODMxMjUxLDMuMDkyNTcyYzAuMTUxNjk3LDAuMjYxNzAyIDAuMzQ4NjQsMC40ODE3MTIgMC41NzQ4NjYsMC42NTU1OTVjMC43MDYxNjQsMC41NDIwNDMgMS43MDE1MywwLjYzNTE5IDIuNTIzMDI2LDAuMTU4NzkxeiIgZmlsbD0iI0M0QzRDNCIgZmlsbC1ydWxlPSJldmVub2RkIiBpZD0ic3ZnXzUiLz4KICAgPHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMjMuMjE5MTk0LDEwLjg3NjgyOWMyLjE2OTk0MiwtMS4yNTg4NDkgMi45MTQyMzgsLTQuMDI4NTAxIDEuNjYyNTAyLC02LjE4NjAyNWMtMS4yNTA4NjQsLTIuMTU4NDA1IC00LjAyNDk1LC0yLjg4NzYzOSAtNi4xOTQ5MDEsLTEuNjI4NzljLTIuMTY5OTQyLDEuMjU4ODU4IC0yLjkxNDI0Nyw0LjAyODUxMSAtMS42NjI1MDIsNi4xODYwMzVjMS4yNTA4NzMsMi4xNTg0MDUgNC4wMjQ5NTksMi44ODY3OTQgNi4xOTQ5MDEsMS42Mjg3ODF6bS0xLjEzMjg3NywtMS45NTQzNjJjMS4wODQ5NzYsLTAuNjI5ODcgMS40NTc1NjksLTIuMDE0NyAwLjgzMTI1MSwtMy4wOTM0NjJjLTAuNjI1NDM3LC0xLjA3ODc2MiAtMi4wMTI5MiwtMS40NDMzNyAtMy4wOTc4OTYsLTAuODEzNWMtMS4wODQ5NjcsMC42Mjg5OCAtMS40NTY2NzgsMi4wMTM4MDEgLTAuODMxMjUxLDMuMDkyNTYzYzAuMTUxNzA4LDAuMjYxNzEgMC4zNDg2NDcsMC40ODE3MjMgMC41NzQ4NzMsMC42NTU1OTdjMC43MDYxNiwwLjU0MjA0MyAxLjcwMTUyOCwwLjYzNTE5MyAyLjUyMzAyMiwwLjE1ODgwM3oiIGZpbGw9IiM1Qzk0QjkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaWQ9InN2Z182Ii8+CiAgIDxwYXRoIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibTE4LjQxMTg5NiwyOC4xNDE4MThjMi4xNjkwNTIsMS4yMzkzMzYgNC45NDMxMzcsMC40ODYxNTYgNi4xOTY2NzIsLTEuNjgyOTA1YzEuMjUzNTE3LC0yLjE2OTA1MiAwLjUxMTg3NCwtNC45MzE2MDkgLTEuNjU3MTc4LC02LjE3MDk0NWMtMi4xNjkwNjEsLTEuMjM5MzI3IC00Ljk0MzE0NiwtMC40ODYxNDcgLTYuMTk2NjcyLDEuNjgyOTA1Yy0xLjI1MzUyNiwyLjE2OTA2MSAtMC41MTE4ODMsNC45MzE2MDkgMS42NTcxNzgsNi4xNzA5NDV6bTEuMTM0NjQ5LC0xLjk2MzIzOGMxLjA4NDA4NSwwLjYxOTIyMyAyLjQ3MTU2OSwwLjI0MzA3OCAzLjA5ODc3NywtMC44NDE4OThjMC42MjYzMjcsLTEuMDg0MDg1IDAuMjU1NDk2LC0yLjQ2NjI0NSAtMC44Mjk0NywtMy4wODU0NjhjLTEuMDg0MDg1LC0wLjYyMDExMyAtMi40NzE1NzgsLTAuMjQzMDc4IC0zLjA5Nzg5NiwwLjg0MTAwN2MtMC42MjcyMDgsMS4wODQ5NjcgLTAuMjU1NDk2LDIuNDY2MjQ1IDAuODI4NTg5LDMuMDg2MzU4eiIgZmlsbD0iI0U4NzYyQiIgZmlsbC1ydWxlPSJldmVub2RkIiBpZD0ic3ZnXzciLz4KICAgPHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtNy41MDI2MDksMTkuOTYxMTU4YzIuMTY5OTQyLC0xLjI1ODg0OSAyLjkxNDIzOCwtNC4wMjg1MDEgMS42NjI1MDIsLTYuMTg2MDI1Yy0xLjI1MDg2NCwtMi4xNTg0MDUgLTQuMDI0OTUsLTIuODg3NjM5IC02LjE5NDkwMSwtMS42Mjg3OWMtMi4xNjk5NDIsMS4yNTg4NTggLTIuOTE0MjQ3LDQuMDI4NTExIC0xLjY2MjUwMiw2LjE4NjAzNWMxLjI1MDg3MywyLjE1ODQwNSA0LjAyNDk1OSwyLjg4Njc5NCA2LjE5NDkwMSwxLjYyODc4MXptLTAuMTM1NzI5LC0zLjE0MjI0NWMwLjIyMTc4NCwtMC42MDc2OTUgMC4xODM2MzksLTEuMzA0MDk4IC0wLjE2NTg5OCwtMS45MDU1OGMtMC4zMzA5MDUsLTAuNTcwNDMxIC0wLjg3NDcxOSwtMC45NDEyNTMgLTEuNDczNTM5LC0xLjA3MDc3N2MtMC41MzQwNTgsLTAuMTE1MzI1IC0xLjExMjQ3NCwtMC4wMzk5MTYgLTEuNjI0MzU3LDAuMjU3Mjc3Yy0wLjU0NzM2NiwwLjMxNzU5NyAtMC45MTM3NTUsMC44Mjc2OTkgLTEuMDYxOTAxLDEuMzkzNjk3Yy0wLjE0NDYwNCwwLjU1NTM0MiAtMC4wNzg5NjEsMS4xNjQ4MDkgMC4yMzA2NTEsMS42OTg4NjZjMC42MjYzMjcsMS4wNzg3NjIgMi4wMTI5MiwxLjQ0MzM3OSAzLjA5Nzg5NiwwLjgxNDM5OWMwLjQ3OTk0MiwtMC4yNzg1NjEgMC44MjA2MDQsLTAuNzA1Mjc5IDAuOTk3MTQ5LC0xLjE4Nzg4M3oiIGZpbGw9IiM2MkFDNjIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaWQ9InN2Z184Ii8+CiAgPC9nPgogPC9nPgo8L3N2Zz4=&label=)](https://www.nlpsandbox.io/tools/person-name-annotator/leaderboards "View the performance of this NLP Tool on nlpsandbox.io")

Example implementation of the [NLP Sandbox Person Name Annotator]

Expand All @@ -19,8 +18,8 @@ found in the clinical note.

### Specification

- Person Name Annotator API version: 1.0.0
- Tool version: 1.0.0
- Person Name Annotator API version: 1.0.1
- Tool version: 1.0.1
- Docker image: [nlpsandbox/person-name-annotator-example]

## Model
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
},
"scripts": {
"generate:server": "openapi-generator-cli generate -g python-flask -o server -i $npm_config_specification",
"generate:server:latest": "openapi-generator-cli generate -g python-flask -o server -i https://nlpsandbox.github.io/nlpsandbox-schemas/person-name-annotator/latest/openapi.json",
"lint": "cd server && flake8",
"test": "cd server && tox"
}
Expand Down
4 changes: 2 additions & 2 deletions server/openapi_server/controllers/tool_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def get_tool(): # noqa: E501
"""
tool = Tool(
name="person-name-annotator-example",
version="1.0.0",
version="1.0.1",
license=License.APACHE_2_0,
repository="github:nlpsandbox/person-name-annotator-example",
description="Example implementation of the NLP Sandbox Person " +
Expand All @@ -22,7 +22,7 @@ def get_tool(): # noqa: E501
author_email="[email protected]",
url="https://github.com/nlpsandbox/person-name-annotator-example",
tool_type="nlpsandbox:person-name-annotator",
tool_api_version="1.0.0"
tool_api_version="1.0.1"
)
return tool, 200

Expand Down
1 change: 1 addition & 0 deletions server/openapi_server/models/license.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class License(Model):
NCSA = "ncsa"
UNLICENSE = "unlicense"
ZLIB = "zlib"
NONE = "none"
def __init__(self): # noqa: E501
"""License - a model defined in OpenAPI
Expand Down
2 changes: 2 additions & 0 deletions server/openapi_server/models/text_annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ def confidence(self, confidence):
:param confidence: The confidence of this TextAnnotation.
:type confidence: float
"""
if confidence is None:
raise ValueError("Invalid value for `confidence`, must not be `None`") # noqa: E501
if confidence is not None and confidence > 100: # noqa: E501
raise ValueError("Invalid value for `confidence`, must be a value less than or equal to `100`") # noqa: E501
if confidence is not None and confidence < 0: # noqa: E501
Expand Down
2 changes: 2 additions & 0 deletions server/openapi_server/models/text_person_name_annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ def confidence(self, confidence):
:param confidence: The confidence of this TextPersonNameAnnotation.
:type confidence: float
"""
if confidence is None:
raise ValueError("Invalid value for `confidence`, must not be `None`") # noqa: E501
if confidence is not None and confidence > 100: # noqa: E501
raise ValueError("Invalid value for `confidence`, must be a value less than or equal to `100`") # noqa: E501
if confidence is not None and confidence < 0: # noqa: E501
Expand Down
29 changes: 20 additions & 9 deletions server/openapi_server/openapi/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,28 @@ info:
name: The NLP Sandbox Team
url: https://nlpsandbox.io
description: |
# Overview
# Introduction
The Person Name Annotator is one of the first type of NLP Tools that can be benchmarked on [nlpsandbox.io](https://nlpsandbox.io). A Person Name Annotator takes as input a clinical note and outputs a list of predicted person name annotations found in the clinical note. This OpenAPI document describes the specification of a Person Name Annotator. This specification includes the schemas of the input and output data, and the conditions that this annotator must meet if you want to benchmark its performance on [nlpsandbox.io](https://nlpsandbox.io).
# Getting Started
The GitHub repository [nlpsandbox/person-name-annotator-example](https://github.com/nlpsandbox/person-name-annotator-example) provides a simple example implementation of a Python-Flask Person Name Annotator. By the end of the tutorial available in this repository, you will have built a Docker image for a simple Person Name Annotator. You will then be able to submit this image to [nlpsandbox.io](https://nlpsandbox.io) to benchmark its performance.
# Benchmarking Requirements
The following conditions must be met by your Person Name Annotator if you want to benchmark its performance on [nlpsandbox.io](https://nlpsandbox.io).
- The endpoint `/` must redirect to `/api/v1/tool`.
- The endpoint `/ui` must redirect to the web interface (UI).
- The output of this tool must be reproducible: a given input should always
generate the same output.
This NLP tool detects references of person names in the clinical note given
as input and returns a list of person name annotations.
- This tool must not attempt to connect to remote server for reproducibility,
robustness, and security reasons. When benchmarked on [nlpsandbox.io](https://nlpsandbox.io),
this tool will not be able to connect to remote servers.
# Examples
- [NLP Sandbox Person Name Annotator (Python)](https://github.com/nlpsandbox/person-name-annotator-example)
- [Person Name Annotator Example (Python)](https://github.com/nlpsandbox/person-name-annotator-example)
license:
name: Apache 2.0
url: https://github.com/nlpsandbox/nlpsandbox-schemas/blob/develop/LICENSE
title: NLP Sandbox Person Name Annotator API
version: 1.0.0
version: 1.0.1
x-logo:
url: https://nlpsandbox.github.io/nlpsandbox-schemas/logo.png
servers:
Expand Down Expand Up @@ -290,6 +299,7 @@ components:
minimum: 0
type: number
required:
- confidence
- length
- start
- text
Expand Down Expand Up @@ -362,6 +372,7 @@ components:
- ncsa
- unlicense
- zlib
- none
example: apache-2.0
type: string
ToolType:
Expand All @@ -383,7 +394,7 @@ components:
authorEmail: [email protected]
url: https://example.com
toolType: nlpsandbox:date-annotator
toolApiVersion: 1.0.0
toolApiVersion: 1.0.1
properties:
name:
description: The tool name
Expand Down Expand Up @@ -453,7 +464,7 @@ components:
authorEmail: [email protected]
url: https://example.com
toolType: nlpsandbox:date-annotator
toolApiVersion: 1.0.0
toolApiVersion: 1.0.1
- name: awesome-nlp-tool
version: 1.0.6
license: apache-2.0
Expand All @@ -463,7 +474,7 @@ components:
authorEmail: [email protected]
url: https://example.com
toolType: nlpsandbox:date-annotator
toolApiVersion: 1.0.0
toolApiVersion: 1.0.1
properties:
toolDependencies:
description: A list of tools
Expand Down

0 comments on commit 6fd9be3

Please sign in to comment.