From 98aaa5c8da013d48bc548a476927925a74187b35 Mon Sep 17 00:00:00 2001 From: aiapienthusiast <327629069+aiapienthusiast@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:09:09 +0400 Subject: [PATCH 1/4] Add cheaperinference model configurations --- scrapegraphai/helpers/models_tokens.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scrapegraphai/helpers/models_tokens.py b/scrapegraphai/helpers/models_tokens.py index e64b1225b..5a81ecaa7 100644 --- a/scrapegraphai/helpers/models_tokens.py +++ b/scrapegraphai/helpers/models_tokens.py @@ -348,6 +348,10 @@ "deepseek-ai/deepseek-v4-pro": 1048576, "qwen/qwen3.5-flash": 1000000, }, + "cheaperinference": { + "gpt-5.4-mini": 400000, + "gpt-5.4": 1000000, + }, "deepseek": { "deepseek-chat": 128000, "deepseek-coder": 128000, From e1ddc319d2c91b4f91ec703576f221cab446b0db Mon Sep 17 00:00:00 2001 From: aiapienthusiast <327629069+aiapienthusiast@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:09:21 +0400 Subject: [PATCH 2/4] Add CheaperInference to module exports --- scrapegraphai/models/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scrapegraphai/models/__init__.py b/scrapegraphai/models/__init__.py index 1cbf0e06d..db01cd2e4 100644 --- a/scrapegraphai/models/__init__.py +++ b/scrapegraphai/models/__init__.py @@ -3,6 +3,7 @@ """ from .atlascloud import AtlasCloud +from .cheaperinference import CheaperInference from .clod import CLoD from .deepseek import DeepSeek from .minimax import MiniMax @@ -12,4 +13,4 @@ from .openai_tts import OpenAITextToSpeech from .xai import XAI -__all__ = ["AtlasCloud", "DeepSeek", "MiniMax", "OneApi", "OpenAIImageToText", "OpenAITextToSpeech", "CLoD", "XAI", "Nvidia"] +__all__ = ["AtlasCloud", "CheaperInference", "DeepSeek", "MiniMax", "OneApi", "OpenAIImageToText", "OpenAITextToSpeech", "CLoD", "XAI", "Nvidia"] From b6dd13e57aa3aea57cc6bb5dc66de41e231b28af Mon Sep 17 00:00:00 2001 From: aiapienthusiast <327629069+aiapienthusiast@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:10:59 +0400 Subject: [PATCH 3/4] feat(models): add Cheaper Inference OpenAI-compatible model wrapper --- scrapegraphai/models/cheaperinference.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 scrapegraphai/models/cheaperinference.py diff --git a/scrapegraphai/models/cheaperinference.py b/scrapegraphai/models/cheaperinference.py new file mode 100644 index 000000000..423d2cfec --- /dev/null +++ b/scrapegraphai/models/cheaperinference.py @@ -0,0 +1,22 @@ +""" +Cheaper Inference Module +""" + +from langchain_openai import ChatOpenAI + + +class CheaperInference(ChatOpenAI): + """ + A wrapper for ChatOpenAI configured for Cheaper Inference's OpenAI-compatible + LLM API. Each model costs 15–60% less than the list price of its lab. + + Args: + llm_config (dict): Configuration parameters for the language model. + """ + + def __init__(self, **llm_config): + if "api_key" in llm_config: + llm_config["openai_api_key"] = llm_config.pop("api_key") + llm_config["openai_api_base"] = "https://api.cheaperinference.com/v1" + + super().__init__(**llm_config) From 2dcc16e65fa8914cab2cc5ffa0129e0dabc92861 Mon Sep 17 00:00:00 2001 From: aiapienthusiast <327629069+aiapienthusiast@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:12:13 +0400 Subject: [PATCH 4/4] feat(models): add Cheaper Inference OpenAI-compatible model wrapper --- tests/test_cheaperinference_model.py | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/test_cheaperinference_model.py diff --git a/tests/test_cheaperinference_model.py b/tests/test_cheaperinference_model.py new file mode 100644 index 000000000..ba9413ec8 --- /dev/null +++ b/tests/test_cheaperinference_model.py @@ -0,0 +1,50 @@ +"""Tests for Cheaper Inference model configuration.""" + +import importlib.util +import os + + +def test_cheaperinference_model_sets_openai_compatible_base_url(): + """CheaperInference should map api_key and set its base URL.""" + spec = importlib.util.spec_from_file_location( + "cheaperinference", + os.path.join( + os.path.dirname(__file__), + "..", + "scrapegraphai", + "models", + "cheaperinference.py", + ), + ) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + model = module.CheaperInference( + api_key="test-key", + model="gpt-5.4-mini", + ) + + assert ( + str(model.openai_api_base).rstrip("/") == "https://api.cheaperinference.com/v1" + ) + assert model.openai_api_key.get_secret_value() == "test-key" + + +def test_cheaperinference_models_in_token_list(): + """Cheaper Inference defaults should be listed with current context lengths.""" + spec = importlib.util.spec_from_file_location( + "models_tokens", + os.path.join( + os.path.dirname(__file__), + "..", + "scrapegraphai", + "helpers", + "models_tokens.py", + ), + ) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + cheaperinference_models = module.models_tokens["cheaperinference"] + assert cheaperinference_models["gpt-5.4-mini"] == 400000 + assert cheaperinference_models["gpt-5.4"] == 1000000