litellm/tests
sundar-flex 35753be11f feat: add FlexAI as an OpenAI-compatible provider
FlexAI's Token Service (https://api.flex.ai/v1) is an OpenAI-compatible
inference endpoint serving open-weight models. This registers it as the
`flexai` provider via the JSON-based openai_like configuration.

- litellm/llms/openai_like/providers.json: `flexai` entry, base_url
  https://api.flex.ai/v1, FLEXAI_API_KEY, FLEXAI_API_BASE override,
  /v1/chat/completions + /v1/responses
- litellm/constants.py: `flexai` in openai_compatible_providers and
  https://api.flex.ai/v1 in openai_compatible_endpoints, so
  JSONProviderRegistry.get_by_base_url resolves an api_base override
- litellm/types/utils.py: FLEXAI in the LlmProviders enum
- litellm/proxy/public_endpoints/provider_create_fields.json: Add Model
  dropdown entry (api_key required, api_base optional)
- model_prices_and_context_window.json (+ the packaged backup copy):
  28 priced entries covering the full served roster — 23 chat, 1
  embedding, 1 image, 1 speech, 2 transcription — with per-model
  cache-read pricing so cost tracking stays accurate under prompt caching
- provider_endpoints_support.json: endpoint-support block
- tests/test_litellm/llms/openai_like/test_flexai_provider.py: 18 tests

Token pricing comes from FlexAI's GET /v1/models; per-image, per-character
and per-minute media rates come from GET /v1/pricing, which is the only
endpoint carrying them. The two agree on every chat row. Context windows
come from FlexAI's serving catalog rather than the /v1/models metadata,
which under-reports on some models (a 70,043-token prompt is accepted by a
model whose metadata advertises 65,536).

Non-chat entries use the cost fields the generic calculators actually read
(`input_cost_per_image`, `input_cost_per_character`, `input_cost_per_second`);
the output_* variants are ignored by those calculators and raise instead.
Regression tests exercise the image and speech paths.

No provider-specific branch is needed in get_llm_provider_logic.py: the
generic JSON-provider lookup resolves flexai from providers.json by base
URL, and already prefers an explicitly supplied api_key over the server
environment. The tests cover that path.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-22 18:35:43 -07:00
..
_support fix(proxy)!: end a chat completions stream with an error event when a guardrail blocks mid-stream (#46953) 2026-10-17 18:00:12 -07:00
audio_tests feat(vertex-ai)!: support gemini 3.1 flash tts (#31915) 2026-10-21 04:18:42 +00:00
base_sdk_tests fix(sdk): decide MCP gateway routing without importing the proxy handler (#45961) 2026-10-20 01:44:54 +00:00
benchmarks fix(responses)!: round-trip Anthropic compaction blocks as compaction items (#46754) 2026-10-21 08:50:19 +00:00
code_coverage_tests fix(security): stop trusting the compromised eMudhra root CA (#47670) 2026-10-22 02:09:52 +00:00
documentation_tests fix(proxy): let configured pass-through endpoints outrank built-in provider prefix routes (#44133) 2026-10-10 12:26:17 -07:00
e2e test(perf): ramp the load cases until the pod stops keeping up and floor sustained_rps (#47758) 2026-10-20 22:31:08 -07:00
e2e_harness test(perf): ramp the load cases until the pod stops keeping up and floor sustained_rps (#47758) 2026-10-20 22:31:08 -07:00
fixtures test: migrate tests/llm_translation into unit, integration and e2e tiers (#45759) 2026-10-11 07:58:53 +00:00
harness_e2e fix(harness): set PWD to the working directory of local sandbox commands (#47530) 2026-10-20 20:06:11 +00:00
integration fix(responses)!: round-trip Anthropic compaction blocks as compaction items (#46754) 2026-10-21 08:50:19 +00:00
rust-python-harness feat(rust): encode LiteLLM response ids on native responses (#46572) 2026-10-18 20:52:34 -07:00
test_litellm_rust fix(logging)!: fire one CustomLogger failure hook per async call outside the async flag list (#47124) 2026-10-20 15:19:14 -07:00
typing fix: support OpenAI SDK 3 while retaining SDK 2 compatibility (#44927) 2026-10-09 19:45:50 -07:00
unit feat: add FlexAI as an OpenAI-compatible provider 2026-10-22 18:35:43 -07:00
windows_tests test: move packaging and install checks off CircleCI build_and_test (#45757) 2026-10-10 09:33:51 -07:00
__init__.py refactor: expose core private helpers under public names (#44871) 2026-10-07 00:05:27 +00:00
_fake_openai_endpoint_server.py
_flush_vcr_cache.py
_live_test_helpers.py
_master_key.py fix(security): remove the publicly known master key from the repo (#44718) 2026-10-06 10:55:24 -07:00
_openai_record_replay_proxy.py
_process_helpers.py test: count a zombie grandchild as gone in the migrate deploy timeout test (#42570) 2026-09-22 14:59:26 -07:00
_vcr_conftest_common.py test: migrate tests/llm_translation into unit, integration and e2e tiers (#45759) 2026-10-11 07:58:53 +00:00
_vcr_redis_persister.py
_wait_helpers.py
_ws_vcr.py
AGENTS.md docs(agents): ban semicolons and colons in human-facing text (#45684) 2026-10-09 16:36:32 -07:00
capturing_transport.py test(vcr): guard leaked cassette patches and make injected-transport embedding tests immune (#42542) 2026-09-22 14:20:18 -07:00
eval_swe_bench.py
fake_openai_endpoint.py
gettysburg.wav
large_text.py
openai_batch_completions.jsonl
pyrightconfig.json
README.MD test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_logging.conf
test_rust_python_harness.py test: move 76 live top-level tests to offline unit and integration coverage (#45352) 2026-10-08 10:33:35 -07:00
VCR_TESTING.md test: migrate tests/llm_translation into unit, integration and e2e tiers (#45759) 2026-10-11 07:58:53 +00:00
white_100x100.png test: stop CI tests from downloading tokenizer files and images (#43257) 2026-09-25 19:27:48 -07:00

In total litellm runs 1000+ tests

[02/20/2025] Update:

To make it easier to contribute and map what behavior is tested,

we've started mapping the litellm directory in tests/unit

This folder can only run mock tests.