mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 11:14:04 +00:00
Merge pull request #2877 from BerriAI/litellm_fix_text_completion
[Feat] Text-Completion-OpenAI - Re-use OpenAI Client
This commit is contained in:
commit
a2c63075ef
5 changed files with 99 additions and 1 deletions
|
@ -44,7 +44,11 @@ export OPENAI_API_KEY=""
|
||||||
model_list:
|
model_list:
|
||||||
- model_name: gpt-3.5-turbo
|
- model_name: gpt-3.5-turbo
|
||||||
litellm_params:
|
litellm_params:
|
||||||
model: gpt-3.5-turbo
|
model: openai/gpt-3.5-turbo # The `openai/` prefix will call openai.chat.completions.create
|
||||||
|
api_key: os.environ/OPENAI_API_KEY
|
||||||
|
- model_name: gpt-3.5-turbo-instruct
|
||||||
|
litellm_params:
|
||||||
|
model: text-completion-openai/gpt-3.5-turbo-instruct # The `text-completion-openai/` prefix will call openai.completions.create
|
||||||
api_key: os.environ/OPENAI_API_KEY
|
api_key: os.environ/OPENAI_API_KEY
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
|
@ -1060,6 +1060,7 @@ def completion(
|
||||||
api_key=api_key,
|
api_key=api_key,
|
||||||
api_base=api_base,
|
api_base=api_base,
|
||||||
acompletion=acompletion,
|
acompletion=acompletion,
|
||||||
|
client=client, # pass AsyncOpenAI, OpenAI client
|
||||||
logging_obj=logging,
|
logging_obj=logging,
|
||||||
optional_params=optional_params,
|
optional_params=optional_params,
|
||||||
litellm_params=litellm_params,
|
litellm_params=litellm_params,
|
||||||
|
|
|
@ -1769,6 +1769,7 @@ class Router:
|
||||||
or custom_llm_provider == "azure"
|
or custom_llm_provider == "azure"
|
||||||
or custom_llm_provider == "custom_openai"
|
or custom_llm_provider == "custom_openai"
|
||||||
or custom_llm_provider == "openai"
|
or custom_llm_provider == "openai"
|
||||||
|
or custom_llm_provider == "text-completion-openai"
|
||||||
or "ft:gpt-3.5-turbo" in model_name
|
or "ft:gpt-3.5-turbo" in model_name
|
||||||
or model_name in litellm.open_ai_embedding_models
|
or model_name in litellm.open_ai_embedding_models
|
||||||
):
|
):
|
||||||
|
|
|
@ -1228,3 +1228,35 @@ def test_router_add_deployment():
|
||||||
assert len(new_model_id_list) > len(init_model_id_list)
|
assert len(new_model_id_list) > len(init_model_id_list)
|
||||||
|
|
||||||
assert new_model_id_list[1] != new_model_id_list[0]
|
assert new_model_id_list[1] != new_model_id_list[0]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_router_text_completion_client():
|
||||||
|
# This tests if we re-use the Async OpenAI client
|
||||||
|
# This test fails when we create a new Async OpenAI client per request
|
||||||
|
try:
|
||||||
|
model_list = [
|
||||||
|
{
|
||||||
|
"model_name": "fake-openai-endpoint",
|
||||||
|
"litellm_params": {
|
||||||
|
"model": "text-completion-openai/gpt-3.5-turbo-instruct",
|
||||||
|
"api_key": os.getenv("OPENAI_API_KEY", None),
|
||||||
|
"api_base": "https://exampleopenaiendpoint-production.up.railway.app/",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
router = Router(model_list=model_list, debug_level="DEBUG", set_verbose=True)
|
||||||
|
tasks = []
|
||||||
|
for _ in range(300):
|
||||||
|
tasks.append(
|
||||||
|
router.atext_completion(
|
||||||
|
model="fake-openai-endpoint",
|
||||||
|
prompt="hello from litellm test",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Execute all coroutines concurrently
|
||||||
|
responses = await asyncio.gather(*tasks)
|
||||||
|
print(responses)
|
||||||
|
except Exception as e:
|
||||||
|
pytest.fail(f"Error occurred: {e}")
|
||||||
|
|
|
@ -490,3 +490,63 @@ def test_init_clients_azure_command_r_plus():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
pytest.fail(f"Error occurred: {e}")
|
pytest.fail(f"Error occurred: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_text_completion_with_organization():
|
||||||
|
try:
|
||||||
|
print("Testing Text OpenAI with organization")
|
||||||
|
model_list = [
|
||||||
|
{
|
||||||
|
"model_name": "openai-bad-org",
|
||||||
|
"litellm_params": {
|
||||||
|
"model": "text-completion-openai/gpt-3.5-turbo-instruct",
|
||||||
|
"api_key": os.getenv("OPENAI_API_KEY", None),
|
||||||
|
"organization": "org-ikDc4ex8NB",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model_name": "openai-good-org",
|
||||||
|
"litellm_params": {
|
||||||
|
"model": "text-completion-openai/gpt-3.5-turbo-instruct",
|
||||||
|
"api_key": os.getenv("OPENAI_API_KEY", None),
|
||||||
|
"organization": os.getenv("OPENAI_ORGANIZATION", None),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
router = Router(model_list=model_list)
|
||||||
|
|
||||||
|
print(router.model_list)
|
||||||
|
print(router.model_list[0])
|
||||||
|
|
||||||
|
openai_client = router._get_client(
|
||||||
|
deployment=router.model_list[0],
|
||||||
|
kwargs={"input": ["hello"], "model": "openai-bad-org"},
|
||||||
|
)
|
||||||
|
print(vars(openai_client))
|
||||||
|
|
||||||
|
assert openai_client.organization == "org-ikDc4ex8NB"
|
||||||
|
|
||||||
|
# bad org raises error
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = await router.atext_completion(
|
||||||
|
model="openai-bad-org",
|
||||||
|
prompt="this is a test",
|
||||||
|
)
|
||||||
|
pytest.fail("Request should have failed - This organization does not exist")
|
||||||
|
except Exception as e:
|
||||||
|
print("Got exception: " + str(e))
|
||||||
|
assert "No such organization: org-ikDc4ex8NB" in str(e)
|
||||||
|
|
||||||
|
# good org works
|
||||||
|
response = await router.atext_completion(
|
||||||
|
model="openai-good-org",
|
||||||
|
prompt="this is a test",
|
||||||
|
max_tokens=5,
|
||||||
|
)
|
||||||
|
print("working response: ", response)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
pytest.fail(f"Error occurred: {e}")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue