Package: nlm-utils
AboutThis repo contains the utils for nlmatics projects. Any modules/funcs used across two repos should be listed here.model_clientThis module provides clients to access nlp models from model server.EncoderClient with DPRfrom nlm_utils.model_client import EncoderClient
model_server_url = <suppy model server url>
encoder = EncoderClient(
    model="dpr-context",
    url=model_server_url,
)
encoder(["sales was 20 million dollars"])

from nlm_utils.model_client import EncoderClient
model_server_url = <suppy model server url>
encoder = EncoderClient(
    model="dpr-question",
    url=model_server_url,
)
encoder(["how much was sales"])EncoderClient with SIFfrom nlm_utils.model_client import EncoderClient
model_server_url = <suppy model server url>
encoder = EncoderClient(
    model="sif",
    url=model_server_url,
)
encoder(["sales was 20 million dollars"])ClassificationClient used to get possible answer type of a qafrom nlm_utils.model_client.classification import ClassificationClient
model_server_url = <suppy model server url>
qa_type_client = ClassificationClient(
    model="roberta",
    task="qa_type",
    url=serverUrl,
    retry=1,
)
qa_type_client(["What is the name of the company"])returns{'predictions': ['HUM:gr']}ClassificationClient used for QAfrom nlm_utils.model_client.classification import ClassificationClient
model_server_url = <suppy model server url>
qa_client = ClassificationClient(
    model='roberta',
    task="roberta-qa",
    host=model_server_url,
    port=80,
)
qa_client(["wht is the listing symbol of common stock or shares"], ["Our common stock is listed on the NYSE under the symbol 'MSFT'."])returns{'answers': [{'0': {'end_byte': 60,
    'end_logit': 16,
    'probability': 0.9999986487212269,
    'start_byte': 57,
    'start_logit': 14,
    'text': 'MSFT'}},
  {}]}ClassificationClient used for boolean (yes/no) question answeringfrom nlm_utils.model_client.classification import ClassificationClient
model_server_url = <suppy model server url>
boolq_client = ClassificationClient(
    model="roberta",
    task="boolq",
    url=model_server_url,
    retry=1,
)
sentences = ["it is snowing outside"]
question = ["is it snowing"]
boolq_client(question, sentences)returns{'predictions': ['True']}lazy cacheThis module provides lazy cache for different types of data.
Cache can be configured to saved to different stroageFilesMemoryRedisMongoDBGoogle Cloud (planning)Usage# import Cache module
from nlm_utils.cache import Cache

# init cache with FileAgent
cache = Cache("FileAgent")

# apply cache on function
@cache
def func1(args):
    pass

# specify cache_key
func1(args, cache_key="cache_key")
# force_overwrite_cache
func1(args, overwrite=True)
# do not read and write cache
func1(args, no_cache=True)cache agentCurrently, cache support following agents# file
cache = Cache("FileAgent", path=".cache", collection="collection")

# memory
cache = Cache("MemoryAgent", prefix="prefix")

# Mongodb
cache = Cache("MongodbAgent", db="cache", collection="cache")

# Redis
cache = Cache("RedisAgent", prefix="collection")Key for the cacheBy default, cache layer will detect the arguments and generate the cache automaticly.
You can also specify thecache_keyor includeuidas a attribute in the argument.
The cache can be force overwrite by passing inoverwriteargument.Cache will also block the I/O if writing cache is happening (lock) -- planningutils (planning)Functions can be shared across multiple repos.read_config(config_file)Credits 2020-2024The code was written by the following while working at Nlmatics Corp.The initial skeleton and model clients were written by Suhail Kandanur.Reshav Abraham wrote the nlp_client.Yi Zhang refactored the code and created the core framework.Ambika Sukla wrote the value parser added code and prompts for flan-t5, encoder and openai models.Tom Liu wrote yolo client and made several bug fixes.Kiran Panicker wrote the location parser, search summarization prompts for openai and made several bug fixes.