> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.emtelligent.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.emtelligent.com/_mcp/server.

# Release notes for NLP API 2.27

## Contents

* [Summary](#summary)
* [Python SDK updates](#python-sdk-updates)

## Summary

### Added

* NLP API admin UI is now included for Azure deployments and for on-premises customers (e.g. VMWare deployments).
* NLP API admin UI allows CSV download of the audit log for billing.
* Persistent storage for identity and access management database.
* Section parsing improvements for better compatibility with the Medcin ontology.
* Added month names to date parsing.
* Added `poss` as uncertainty trigger.
* Added new Radiology section headings.
* Added new qualifiers.

### Changed

* Negation finding improvement for `favor ... over`, `not detected`, `no ... change`, and `no ... is` negation cases.
* Annotation updates for SNOMED, Medcin and RxNorm ontologies.
* Significant improvement in coverage for the `known_ambiguity` entity attribute.
* Improved handling of CCD section headings.
* New data cleaning and sentence detection module.
* Removed `man` and `woman` as experiencer triggers.
* Fix bug in measurement unit spans when there is header or footer deletion in some Radiology report types.

### Fixed

* Bug fix for a small number of invalid concept descriptions that were being reported by emtellipro.
* Fix false positive for 2C/3C/4C (number of chambers) in ejection fraction measurement relations.
* Fix for matching case sensitive entities.
* Fixed some issues with Past Medical History and Physical Exam section headings in section parsing.
* Fix false positive for Calcium as subject in measurement relation.
* Fix bug where two letter acronyms with periods were not detected due to tokenization.

## Python SDK updates

The new NLP API Python SDK is version 5.17.1. Refer to the [changelog for the Python SDK](/nlp/python/changelog) for a full explanation of the updates made since the last public release which was version 5.14.1 released with the NLP API v2.26. You will need to use version 5.7.0 of the Python SDK or later to send requests to the NLP API v2.27.

### Added

* The database client's process command now accepts a `--max-save-shard-size` which specifies the number of reports to store to the database at once; this is ideally used for lowering the default value from 50, since large numbers can cause database errors.
* You can now press `CTRL-C` when the database client is running and it will finish saving to the database what it has so far, and will exit cleanly. Pressing `CTRL-C` a second time will cause it to exit immediately.
* Support for key-pair authentication for Snowflake has been added to the database client. All commands now take `--snowflake-private-key-path` as an option alongside `--database` which is the path to the private key used for the connecting to Snowflake. If using this option, omit the password in the connection URL. To be consistent with SnowSQL, the passphrase for this key file can be passed using `SNOWFLAKE_PRIVATE_KEY_PASSPHRASE` or `SNOWSQL_PRIVATE_KEY_PASSPHRASE` in the environment, or if those environment variables are not set, the client will prompt for the passphrase if necessary. Both encrypted and unencrypted key files are supported.
* The Python database client now has a plugin architecture based on signals.
* Improved error handling when running `create-db` on an existing database, and checking whether the database schema version stored in the `alembic_version` table has been accidentally deleted.
* If the `alembic_version` table has been accidentally cleared, the `create-db` command will now allow the user to re-insert the database schema version in that table.
* The simple client now has a `cancel` command that allows cancelling one or more tasks. See `emtellipro-client cancel --help` for available options.
* The simple client will now print the last unfinished task ID when it receives a SIGINT (e.g. from CTRL-C) while a job is in progress

### Changed

* The database client is now multi-threaded, so it can read files, submit them for processing, and store results to the database in parallel.
* The database client's `--max-submit-shard-size` default is now 100, to avoid having the database thread waiting too long for results.

### Fixed

* There was a bug introduced in 5.17.0 when exporting to CSV which caused a crash; this has now been fixed.
* The `--features` option was not parsed properly in 5.17.0; this has now been fixed.
* There was a memory leak in the SDK which has now been fixed, so running the simple client or database client will now use a stable amount of memory.