File size: 3,431 Bytes
ea9bd81
f4d28cb
 
ea9bd81
0277199
892a247
0277199
 
 
e6241ff
0277199
9957bbd
0277199
e6241ff
0277199
 
892a247
0277199
e6241ff
0277199
 
f4d28cb
0277199
f4d28cb
e6241ff
f4d28cb
 
0277199
 
f4d28cb
 
0277199
e6241ff
 
0277199
f4d28cb
e6241ff
0277199
e6241ff
 
 
 
 
 
 
 
f4d28cb
 
0277199
 
f4d28cb
0277199
f4d28cb
 
 
 
 
 
 
 
0277199
f4d28cb
0277199
f4d28cb
0277199
f4d28cb
0277199
f4d28cb
 
0277199
f4d28cb
0277199
f4d28cb
 
 
 
0277199
 
f4d28cb
 
0277199
 
9957bbd
892a247
 
 
 
 
 
9957bbd
0277199
 
 
f4d28cb
 
0277199
 
 
f4d28cb
0277199
f4d28cb
0277199
 
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
---
license: apache-2.0  
inference: false  
---

# SLIM-NLI

<!-- Provide a quick summary of what the model is/does. -->

**slim-nli** is part of the SLIM ("**S**tructured **L**anguage **I**nstruction **M**odel") model series, consisting of small, specialized decoder-based models, fine-tuned for function-calling.  

slim-nli has been fine-tuned for **natural language inference (nli)** function calls, generating output consisting of a python dictionary corresponding to specified keys, e.g.:  

&nbsp;&nbsp;&nbsp;&nbsp;`{"evidence": ["contradicts"]}`


SLIM models are designed to generate structured outputs that can be used programmatically as part of a multi-step, multi-model LLM-based automation workflow.  

Each slim model has a 'quantized tool' version, e.g.,  [**'slim-nli-tool'**](https://huggingface.co/llmware/slim-nli-tool).  


## Prompt format:

`function = "classify"`  
`params = "nli"`  
`prompt = "<human> " + {text} + "\n" + `  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;`"<{function}> " + {params} + "</{function}>" + "\n<bot>:"`  


<details>
<summary>Transformers Script </summary>

    model = AutoModelForCausalLM.from_pretrained("llmware/slim-nli")
    tokenizer = AutoTokenizer.from_pretrained("llmware/slim-nli")

    function = "classify"
    params = "evidence"

    # expects two statements - the first is evidence, and the second is a conclusion  
    
    text1 = "The stock market declined yesterday as investors worried increasingly about the slowing economy."  
    text2 = "Investors are positive about the market."  

    # the two statements are concatenated with optional/helpful "Evidence: " and "Conclusion: " added  
    
    text = "Evidence: " + text1 + "\n" + "Conclusion: " + text2  
    
    prompt = "<human>: " + text + "\n" + f"<{function}> {params} </{function}>\n<bot>:"

    inputs = tokenizer(prompt, return_tensors="pt")
    start_of_input = len(inputs.input_ids[0])

    outputs = model.generate(
        inputs.input_ids.to('cpu'),
        eos_token_id=tokenizer.eos_token_id,
        pad_token_id=tokenizer.eos_token_id,
        do_sample=True,
        temperature=0.3,
        max_new_tokens=100
    )

    output_only = tokenizer.decode(outputs[0][start_of_input:], skip_special_tokens=True)

    print("output only: ", output_only)  

    # here's the fun part
    try:
        output_only = ast.literal_eval(llm_string_output)
        print("success - converted to python dictionary automatically")
    except:
        print("fail - could not convert to python dictionary automatically - ", llm_string_output)
   
   </details>  
 
<details>  



    
<summary>Using as Function Call in LLMWare</summary>

    from llmware.models import ModelCatalog
    slim_model = ModelCatalog().load_model("llmware/slim-nli")

    # input text - expects two statements - the first is evidence, and the second is a conclusion    
    text1 = "The stock market declined yesterday as investors worried increasingly about the slowing economy."    
    text2 = "Investors are positive about the market."  
    text = "Evidence: " + text1 + "\n" + "Conclusion: " + text2  
    
    response = slim_model.function_call(text,params=["evidence"], function="classify")

    print("llmware - llm_response: ", response)

</details>  

    
## Model Card Contact

Darren Oberst & llmware team  

[Join us on Discord](https://discord.gg/MhZn5Nc39h)