File size: 1,943 Bytes
d7f7f62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from helpers import *

def get_icd_codes(medical_note, model_name, temperature=0.0):
    """

    Identifies relevant ICD-10 codes for a given medical note by querying a language model.



    This function implements the tree-search algorithm for ICD coding described in https://openreview.net/forum?id=mqnR8rGWkn.



    Args:

        medical_note (str): The medical note for which ICD-10 codes are to be identified.

        model_name (str): The identifier for the language model used in the API (default is 'gpt-3.5-turbo-0613').



    Returns:

        list of str: A list of confirmed ICD-10 codes that are relevant to the medical note.

    """
    assigned_codes = []
    candidate_codes = [x.name for x in CHAPTER_LIST]
    parent_codes = []
    prompt_count = 0

    while prompt_count < 50:
        code_descriptions = {}
        for x in candidate_codes:
            description, code = get_name_and_description(x, model_name)
            code_descriptions[description] = code

        prompt = build_zero_shot_prompt(medical_note, list(code_descriptions.keys()), model_name=model_name)
        lm_response = get_response(prompt, model_name, temperature=temperature, max_tokens=500)
       
        predicted_codes = parse_outputs(lm_response, code_descriptions, model_name=model_name)
       
        for code in predicted_codes:
            if cm.is_leaf(code["ICD Code"]):
                # assigned_codes.append(code["code"])
                assigned_codes.append({"ICD Code": code["ICD Code"], "Code Description": code["Code Description"],"Evidence From Notes":code["Evidence From Notes"]})
            else:
                parent_codes.append(code)

        if len(parent_codes) > 0:
            parent_code = parent_codes.pop(0)
            candidate_codes = cm.get_children(parent_code["ICD Code"])
        else:
            break

        prompt_count += 1

    return assigned_codes