-
Notifications
You must be signed in to change notification settings - Fork 1
Add getter functions for TLM defaults #59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 14 commits
4e24abc
65278e4
e1b7162
ee94b0e
53382fb
cc91018
8a528bd
d456a60
c132348
0b9c607
5d14592
8521516
9045cf5
71c802e
43f6628
23605da
3608f9c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
# SPDX-License-Identifier: MIT | ||
__version__ = "1.1.1" | ||
__version__ = "1.1.2" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
from cleanlab_tlm.internal.constants import ( | ||
_DEFAULT_TLM_MAX_TOKENS, | ||
_DEFAULT_TLM_QUALITY_PRESET, | ||
_TLM_DEFAULT_CONTEXT_LIMIT, | ||
_TLM_DEFAULT_MODEL, | ||
) | ||
|
||
|
||
def get_default_model() -> str: | ||
""" | ||
Get the default model name for TLM. | ||
|
||
Returns: | ||
str: The default model name for TLM. | ||
""" | ||
return _TLM_DEFAULT_MODEL | ||
|
||
|
||
def get_default_quality_preset() -> str: | ||
""" | ||
Get the default quality preset for TLM. | ||
|
||
Returns: | ||
str: The default quality preset for TLM. | ||
""" | ||
return _DEFAULT_TLM_QUALITY_PRESET | ||
|
||
|
||
def get_default_context_limit() -> int: | ||
""" | ||
Get the default context limit for TLM. | ||
|
||
Returns: | ||
int: The default context limit for TLM. | ||
""" | ||
return _TLM_DEFAULT_CONTEXT_LIMIT | ||
|
||
|
||
def get_default_max_tokens() -> int: | ||
""" | ||
Get the default maximum output tokens allowed. | ||
|
||
Returns: | ||
int: The default maximum output tokens. | ||
""" | ||
return _DEFAULT_TLM_MAX_TOKENS | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
import pytest | ||
AshishSardana marked this conversation as resolved.
Show resolved
Hide resolved
|
||
import tiktoken | ||
|
||
from cleanlab_tlm.errors import TlmBadRequestError | ||
from cleanlab_tlm.tlm import TLM | ||
from cleanlab_tlm.utils.config import ( | ||
get_default_context_limit, | ||
get_default_max_tokens, | ||
get_default_model, | ||
get_default_quality_preset, | ||
) | ||
from tests.constants import WORD_THAT_EQUALS_ONE_TOKEN | ||
|
||
tlm_with_default_setting = TLM() | ||
|
||
|
||
def test_get_default_model(tlm: TLM) -> None: | ||
assert tlm.get_model_name() == get_default_model() | ||
|
||
|
||
def test_get_default_quality_preset(tlm: TLM) -> None: | ||
assert get_default_quality_preset() == tlm._quality_preset | ||
|
||
|
||
def test_prompt_too_long_exception_single_prompt(tlm: TLM) -> None: | ||
"""Tests that bad request error is raised when prompt is too long when calling tlm.prompt with a single prompt.""" | ||
with pytest.raises(TlmBadRequestError) as exc_info: | ||
tlm.prompt(WORD_THAT_EQUALS_ONE_TOKEN * (get_default_context_limit() + 1)) | ||
|
||
assert exc_info.value.message.startswith("Prompt length exceeds") | ||
assert exc_info.value.retryable is False | ||
|
||
|
||
def test_prompt_within_context_limit_returns_response(tlm: TLM) -> None: | ||
"""Tests that no error is raised when prompt length is within limit.""" | ||
response = tlm.prompt(WORD_THAT_EQUALS_ONE_TOKEN * (get_default_context_limit() - 1000)) | ||
|
||
assert isinstance(response, dict) | ||
assert "response" in response | ||
assert isinstance(response["response"], str) | ||
|
||
|
||
def test_response_within_max_tokens() -> None: | ||
"""Tests that response is within max tokens limit.""" | ||
tlm_base = TLM(quality_preset="base") | ||
prompt = "write a 100 page book about computer science. make sure it is extremely long and comprehensive." | ||
|
||
result = tlm_base.prompt(prompt) | ||
assert isinstance(result, dict) | ||
response = result["response"] | ||
assert isinstance(response, str) | ||
|
||
enc = tiktoken.encoding_for_model(get_default_model()) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you confirm this code will still work:
because we're going to shortly be upgrading the default model There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The code will not work at the moment because of a pending PR openai/tiktoken#396 Though, its confirmed that 4.1-* uses the same tokenizer as 4o here When we upgrade to 4.1, we can spoof / hardcode to fetch gpt-4o tokenizer (just setting a variable) until the above PR gets merged. Let me know if you want me to do this as part of this PR There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yep I made the suggestion in the code, if you can fix it up / test it works still
AshishSardana marked this conversation as resolved.
Show resolved
Hide resolved
|
||
tokens_in_response = len(enc.encode(response)) | ||
assert tokens_in_response <= get_default_max_tokens() |
Uh oh!
There was an error while loading. Please reload this page.