feat(code): add Meta model provider (#4650)

Adds the Meta Model API to the model switcher, credential manager, model
discovery, and optional-provider installer.

The new `meta` extra installs the MIT-licensed `langchain-meta>=0.5.0`
integration (published by the `langchain-ai` org), and the base
`langchain` dependency is bumped to `>=1.3.13` so `init_chat_model`
resolves the `meta` provider through the standard LangChain provider
path. Verified against `langchain-meta` 0.5.0: `ChatMetaModel` reads
`MODEL_API_KEY` for the key and `MODEL_API_BASE` for the base URL.

Made by [Open
SWE](https://openswe.vercel.app/agents/4010ad30-bfc5-e865-9ab2-c08a10518889)

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Co-authored-by: Mason Daugherty <mason@langchain.dev>
Co-authored-by: Mason Daugherty <github@mdrxy.com>
This commit is contained in:
ccurme
2026-07-13 02:09:18 -04:00
committed by GitHub
parent aaeac99d9f
commit 70829c5846
10 changed files with 104 additions and 47 deletions
@@ -665,6 +665,7 @@ _PROVIDER_DEPENDENCIES: dict[str, tuple[str, str]] = {
"huggingface": ("langchain_huggingface", "huggingface"),
"ibm": ("langchain_ibm", "ibm"),
"litellm": ("langchain_litellm", "litellm"),
"meta": ("langchain_meta", "meta"),
"mistralai": ("langchain_mistralai", "mistralai"),
"nvidia": ("langchain_nvidia_ai_endpoints", "nvidia"),
"ollama": ("langchain_ollama", "ollama"),
+1
View File
@@ -183,6 +183,7 @@ MODEL_PROVIDER_EXTRAS: frozenset[str] = frozenset(
"huggingface",
"ibm",
"litellm",
"meta",
"mistralai",
"nvidia",
"ollama",
@@ -535,6 +535,7 @@ PROVIDER_API_KEY_ENV: dict[str, str] = {
"huggingface": "HUGGINGFACEHUB_API_TOKEN",
"ibm": "WATSONX_APIKEY",
"litellm": "LITELLM_API_KEY",
"meta": "MODEL_API_KEY",
"mistralai": "MISTRAL_API_KEY",
"nvidia": "NVIDIA_API_KEY",
"openai": "OPENAI_API_KEY",
@@ -624,6 +625,7 @@ RETRY_PARAM_BY_PROVIDER: dict[str, str] = {
"google_vertexai": "max_retries",
"groq": "max_retries",
"litellm": "max_retries",
"meta": "max_retries",
"mistralai": "max_retries",
"openai": "max_retries",
"openrouter": "max_retries",
@@ -669,6 +671,7 @@ PROVIDER_BASE_URL_ENV: dict[str, tuple[str, ...]] = {
# huggingface the integration and huggingface_hub both read
# HF_INFERENCE_ENDPOINT.
# ibm ChatWatsonx reads WATSONX_URL.
# meta ChatMetaModel reads MODEL_API_BASE.
# mistralai ChatMistralAI reads MISTRAL_BASE_URL.
# nvidia ChatNVIDIA reads NVIDIA_BASE_URL.
# openai langchain_openai reads OPENAI_API_BASE; the openai SDK
@@ -702,6 +705,7 @@ PROVIDER_BASE_URL_ENV: dict[str, tuple[str, ...]] = {
"groq": ("GROQ_BASE_URL", "GROQ_API_BASE"),
"huggingface": ("HF_INFERENCE_ENDPOINT",),
"ibm": ("WATSONX_URL",),
"meta": ("MODEL_API_BASE",),
"mistralai": ("MISTRAL_BASE_URL",),
"nvidia": ("NVIDIA_BASE_URL",),
"openai": ("OPENAI_BASE_URL", "OPENAI_API_BASE"),
@@ -171,6 +171,7 @@ PROVIDER_DISPLAY_NAMES: dict[str, str] = {
"ibm": "IBM watsonx",
"langsmith": "LangSmith (tracing)",
"litellm": "LiteLLM",
"meta": "Meta",
"mistralai": "Mistral AI",
"nvidia": "NVIDIA",
"openai": "OpenAI",
@@ -208,6 +209,7 @@ PROVIDER_API_KEY_URLS: dict[str, str] = {
"ibm": "https://cloud.ibm.com/iam/apikeys",
"langsmith": "https://smith.langchain.com/settings",
"litellm": "https://docs.litellm.ai/docs/proxy/virtual_keys",
"meta": "https://dev.meta.ai/api-keys/",
"mistralai": "https://console.mistral.ai/api-keys",
"nvidia": "https://build.nvidia.com/settings/api-keys",
"openai": "https://platform.openai.com/api-keys",
@@ -79,6 +79,7 @@ _RECOMMENDED_MODELS: dict[str, str] = {
"fireworks:accounts/fireworks/models/qwen3p7-plus": "Qwen 3.7 Plus",
"google_genai:gemini-3.5-flash": "Gemini 3.5 Flash",
"google_genai:gemini-3.1-pro-preview": "Gemini 3.1 Pro Preview",
"meta:muse-spark-1.1": "Muse Spark 1.1",
"ollama:deepseek-v4-flash:cloud": "DeepSeek V4 Flash",
"ollama:deepseek-v4-pro:cloud": "DeepSeek V4 Pro",
"ollama:glm-5.2:cloud": "GLM 5.2",
+3 -2
View File
@@ -27,7 +27,7 @@ classifiers = [
dependencies = [
# Framework
"deepagents==0.7.0a6",
"langchain>=1.3.12,<2.0.0",
"langchain>=1.3.13,<2.0.0",
"langgraph-checkpoint-sqlite>=3.1.0,<4.0.0",
# Client-server architecture
@@ -98,6 +98,7 @@ groq = ["langchain-groq>=1.1.3,<2.0.0"]
huggingface = ["langchain-huggingface>=1.2.2,<2.0.0"]
ibm = ["langchain-ibm>=1.1.0,<2.0.0"]
litellm = ["langchain-litellm>=0.7.0,<2.0.0"]
meta = ["langchain-meta>=0.5.0,<2.0.0"]
mistralai = ["langchain-mistralai>=1.1.6,<2.0.0"]
nvidia = [
"aiohttp>=3.14.1,<3.15.0",
@@ -111,7 +112,7 @@ together = ["langchain-together>=0.4.0,<2.0.0"]
vertex = ["langchain-google-vertexai>=3.2.4,<4.0.0"]
xai = ["langchain-xai>=1.2.2,<2.0.0"]
all-providers = [
"deepagents-code[anthropic,baseten,bedrock,cohere,deepseek,fireworks,google-genai,groq,huggingface,ibm,litellm,mistralai,nvidia,ollama,openai,openrouter,perplexity,together,vertex,xai]",
"deepagents-code[anthropic,baseten,bedrock,cohere,deepseek,fireworks,google-genai,groq,huggingface,ibm,litellm,meta,mistralai,nvidia,ollama,openai,openrouter,perplexity,together,vertex,xai]",
]
# Sandbox providers
@@ -83,6 +83,7 @@ class TestRetryParamByProvider:
"""Major retry-enabled providers use `max_retries`."""
assert RETRY_PARAM_BY_PROVIDER["bedrock"] == "max_retries"
assert RETRY_PARAM_BY_PROVIDER["fireworks"] == "max_retries"
assert RETRY_PARAM_BY_PROVIDER["meta"] == "max_retries"
assert RETRY_PARAM_BY_PROVIDER["openai"] == "max_retries"
@@ -1443,6 +1444,7 @@ class TestProviderApiKeyEnv:
assert PROVIDER_API_KEY_ENV["groq"] == "GROQ_API_KEY"
assert PROVIDER_API_KEY_ENV["huggingface"] == "HUGGINGFACEHUB_API_TOKEN"
assert PROVIDER_API_KEY_ENV["ibm"] == "WATSONX_APIKEY"
assert PROVIDER_API_KEY_ENV["meta"] == "MODEL_API_KEY"
assert PROVIDER_API_KEY_ENV["mistralai"] == "MISTRAL_API_KEY"
assert PROVIDER_API_KEY_ENV["nvidia"] == "NVIDIA_API_KEY"
assert PROVIDER_API_KEY_ENV["openai"] == "OPENAI_API_KEY"
@@ -1462,6 +1464,10 @@ class TestProviderBaseUrlEnv:
"BASETEN_API_BASE",
)
def test_meta_matches_langchain_meta(self) -> None:
"""Meta reads its dedicated model API base URL variable."""
assert PROVIDER_BASE_URL_ENV["meta"] == ("MODEL_API_BASE",)
class TestModelConfigLoad:
"""Tests for ModelConfig.load() method."""
@@ -166,6 +166,7 @@ class TestAuthPromptScreen:
PROVIDER_API_KEY_URLS["litellm"]
== "https://docs.litellm.ai/docs/proxy/virtual_keys"
)
assert PROVIDER_API_KEY_URLS["meta"] == "https://dev.meta.ai/api-keys/"
assert (
PROVIDER_API_KEY_URLS["openrouter"]
== "https://openrouter.ai/workspaces/default/keys"
@@ -2475,6 +2475,7 @@ class TestGetModelDisplayName:
("spec", "name"),
[
("fireworks:accounts/fireworks/models/kimi-k2p7-code", "Kimi K2.7 Code"),
("meta:muse-spark-1.1", "Muse Spark 1.1"),
("openai:gpt-5.6-luna", "GPT-5.6 Luna"),
("openai:gpt-5.6-sol", "GPT-5.6 Sol"),
("openai:gpt-5.6-terra", "GPT-5.6 Terra"),
+84 -45
View File
@@ -1167,6 +1167,7 @@ all-providers = [
{ name = "langchain-huggingface" },
{ name = "langchain-ibm" },
{ name = "langchain-litellm" },
{ name = "langchain-meta" },
{ name = "langchain-mistralai" },
{ name = "langchain-nvidia-ai-endpoints" },
{ name = "langchain-ollama" },
@@ -1223,6 +1224,9 @@ media = [
{ name = "av" },
{ name = "pillow" },
]
meta = [
{ name = "langchain-meta" },
]
mistralai = [
{ name = "langchain-mistralai" },
]
@@ -1290,10 +1294,10 @@ requires-dist = [
{ name = "deepagents", editable = "../deepagents" },
{ name = "deepagents-acp", specifier = ">=0.0.8,<1.0.0" },
{ name = "deepagents-code", extras = ["agentcore", "daytona", "modal", "runloop", "vercel"], marker = "extra == 'all-sandboxes'" },
{ name = "deepagents-code", extras = ["anthropic", "baseten", "bedrock", "cohere", "deepseek", "fireworks", "google-genai", "groq", "huggingface", "ibm", "litellm", "mistralai", "nvidia", "ollama", "openai", "openrouter", "perplexity", "together", "vertex", "xai"], marker = "extra == 'all-providers'" },
{ name = "deepagents-code", extras = ["anthropic", "baseten", "bedrock", "cohere", "deepseek", "fireworks", "google-genai", "groq", "huggingface", "ibm", "litellm", "meta", "mistralai", "nvidia", "ollama", "openai", "openrouter", "perplexity", "together", "vertex", "xai"], marker = "extra == 'all-providers'" },
{ name = "filelock", specifier = ">=3.12,<4.0.0" },
{ name = "httpx", specifier = ">=0.28.1,<1.0.0" },
{ name = "langchain", specifier = ">=1.3.12,<2.0.0" },
{ name = "langchain", specifier = ">=1.3.13,<2.0.0" },
{ name = "langchain-agentcore-codeinterpreter", marker = "extra == 'agentcore'", specifier = ">=0.0.5,<1.0.0" },
{ name = "langchain-anthropic", specifier = ">=1.4.8,<2.0.0" },
{ name = "langchain-anthropic", marker = "extra == 'anthropic'", specifier = ">=1.4.8,<2.0.0" },
@@ -1311,6 +1315,7 @@ requires-dist = [
{ name = "langchain-ibm", marker = "extra == 'ibm'", specifier = ">=1.1.0,<2.0.0" },
{ name = "langchain-litellm", marker = "extra == 'litellm'", specifier = ">=0.7.0,<2.0.0" },
{ name = "langchain-mcp-adapters", specifier = ">=0.3.0,<1.0.0" },
{ name = "langchain-meta", marker = "extra == 'meta'", specifier = ">=0.5.0,<2.0.0" },
{ name = "langchain-mistralai", marker = "extra == 'mistralai'", specifier = ">=1.1.6,<2.0.0" },
{ name = "langchain-modal", marker = "extra == 'modal'", editable = "../partners/modal" },
{ name = "langchain-nvidia-ai-endpoints", marker = "extra == 'nvidia'", specifier = ">=1.4.3,<2.0.0" },
@@ -1348,7 +1353,7 @@ requires-dist = [
{ name = "tomli-w", specifier = ">=1.2.0,<2.0.0" },
{ name = "uuid-utils", specifier = ">=0.16.2,<1.0.0" },
]
provides-extras = ["anthropic", "baseten", "bedrock", "cohere", "deepseek", "fireworks", "google-genai", "groq", "huggingface", "ibm", "litellm", "mistralai", "nvidia", "ollama", "openai", "openrouter", "perplexity", "together", "vertex", "xai", "all-providers", "agentcore", "daytona", "modal", "runloop", "vercel", "all-sandboxes", "media", "quickjs"]
provides-extras = ["anthropic", "baseten", "bedrock", "cohere", "deepseek", "fireworks", "google-genai", "groq", "huggingface", "ibm", "litellm", "meta", "mistralai", "nvidia", "ollama", "openai", "openrouter", "perplexity", "together", "vertex", "xai", "all-providers", "agentcore", "daytona", "modal", "runloop", "vercel", "all-sandboxes", "media", "quickjs"]
[package.metadata.requires-dev]
test = [
@@ -2296,9 +2301,9 @@ name = "ibm-cos-sdk"
version = "2.14.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "ibm-cos-sdk-core" },
{ name = "ibm-cos-sdk-s3transfer" },
{ name = "jmespath", version = "1.0.1", source = { registry = "https://pypi.org/simple" } },
{ name = "ibm-cos-sdk-core", marker = "python_full_version < '3.15'" },
{ name = "ibm-cos-sdk-s3transfer", marker = "python_full_version < '3.15'" },
{ name = "jmespath", version = "1.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.15'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/98/b8/b99f17ece72d4bccd7e75539b9a294d0f73ace5c6c475d8f2631afd6f65b/ibm_cos_sdk-2.14.3.tar.gz", hash = "sha256:643b6f2aa1683adad7f432df23407d11ae5adb9d9ad01214115bee77dc64364a", size = 58831, upload-time = "2025-08-01T06:35:51.722Z" }
@@ -2307,10 +2312,10 @@ name = "ibm-cos-sdk-core"
version = "2.14.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "jmespath", version = "1.0.1", source = { registry = "https://pypi.org/simple" } },
{ name = "python-dateutil" },
{ name = "requests" },
{ name = "urllib3" },
{ name = "jmespath", version = "1.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.15'" },
{ name = "python-dateutil", marker = "python_full_version < '3.15'" },
{ name = "requests", marker = "python_full_version < '3.15'" },
{ name = "urllib3", marker = "python_full_version < '3.15'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/7e/45/80c23aa1e13175a9deefe43cbf8e853a3d3bfc8dfa8b6d6fe83e5785fe21/ibm_cos_sdk_core-2.14.3.tar.gz", hash = "sha256:85dee7790c92e8db69bf39dae4c02cac211e3c1d81bb86e64fa2d1e929674623", size = 1103637, upload-time = "2025-08-01T06:35:41.645Z" }
@@ -2319,7 +2324,7 @@ name = "ibm-cos-sdk-s3transfer"
version = "2.14.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "ibm-cos-sdk-core" },
{ name = "ibm-cos-sdk-core", marker = "python_full_version < '3.15'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f3/ff/c9baf0997266d398ae08347951a2970e5e96ed6232ed0252f649f2b9a7eb/ibm_cos_sdk_s3transfer-2.14.3.tar.gz", hash = "sha256:2251ebfc4a46144401e431f4a5d9f04c262a0d6f95c88a8e71071da056e55f72", size = 139594, upload-time = "2025-08-01T06:35:46.403Z" }
@@ -2328,17 +2333,17 @@ name = "ibm-watsonx-ai"
version = "1.5.14"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cachetools" },
{ name = "certifi" },
{ name = "httpx" },
{ name = "ibm-cos-sdk" },
{ name = "lomond" },
{ name = "packaging" },
{ name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version != '3.14.*'" },
{ name = "cachetools", marker = "python_full_version < '3.15'" },
{ name = "certifi", marker = "python_full_version < '3.15'" },
{ name = "httpx", marker = "python_full_version < '3.15'" },
{ name = "ibm-cos-sdk", marker = "python_full_version < '3.15'" },
{ name = "lomond", marker = "python_full_version < '3.15'" },
{ name = "packaging", marker = "python_full_version < '3.15'" },
{ name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" },
{ name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.14.*'" },
{ name = "requests" },
{ name = "tabulate" },
{ name = "urllib3" },
{ name = "requests", marker = "python_full_version < '3.15'" },
{ name = "tabulate", marker = "python_full_version < '3.15'" },
{ name = "urllib3", marker = "python_full_version < '3.15'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/29/a3/c756b534696ab2f3f29882fdb7ca7198b7a5c94e10c0a3a327853d6d6b79/ibm_watsonx_ai-1.5.14.tar.gz", hash = "sha256:a756488bd57e87c0fc51be42dcba871143cfe0ac1e805c497c5047e1e4f13e9d", size = 735804, upload-time = "2026-06-22T12:32:43.85Z" }
wheels = [
@@ -2684,16 +2689,16 @@ wheels = [
[[package]]
name = "langchain"
version = "1.3.12"
version = "1.3.13"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "langchain-core" },
{ name = "langgraph" },
{ name = "pydantic" },
]
sdist = { url = "https://files.pythonhosted.org/packages/68/c0/8481c93a3899d7e05ac27f21a4e984dab613b72631f39fe01fe0100e3be0/langchain-1.3.12.tar.gz", hash = "sha256:3321f86824a0c0720004d28797d729a58b9bb8a0ac73c6ea2b856cac38117879", size = 642308, upload-time = "2026-07-08T22:38:12.466Z" }
sdist = { url = "https://files.pythonhosted.org/packages/29/33/fd716d0273c8495482953bd63461bf02f71f3a8f4a2fe6c0a70a0e6ff799/langchain-1.3.13.tar.gz", hash = "sha256:bcf874680f31e9970f0db2264509df5bc2115d9680e9d651d537eb49bf1a7d8a", size = 642868, upload-time = "2026-07-10T23:06:08.555Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b1/31/33ba60f3aaa88dc7b97f9c7680f431237466804bf6826efb75400dfd2e6c/langchain-1.3.12-py3-none-any.whl", hash = "sha256:19685eb9dce01ebd71b11281d5489453e7ab3d2caf61eacb2a76d15574246535", size = 136863, upload-time = "2026-07-08T22:38:11.003Z" },
{ url = "https://files.pythonhosted.org/packages/95/c6/dc676c632f3d20c88789b0726c43ad5e039c25338cc3bb7090fc247d1522/langchain-1.3.13-py3-none-any.whl", hash = "sha256:20a8fe4b1dea7db74356f7d2b5455c4970099b9f7f53c2122ea97f115c907fbd", size = 136911, upload-time = "2026-07-10T23:06:07.012Z" },
]
[[package]]
@@ -2953,6 +2958,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/66/89/b4869db84ce529de6c7548319197df50c24d0f8a7412f74f889e22324036/langchain_mcp_adapters-0.3.0-py3-none-any.whl", hash = "sha256:1af511a95e028d9546502e360f95698ae8b691dbc07981fc48170c2cb1ebd7a9", size = 25855, upload-time = "2026-06-10T01:10:27.524Z" },
]
[[package]]
name = "langchain-meta"
version = "0.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
{ name = "langchain-core" },
{ name = "langchain-openai" },
{ name = "llama-api-client" },
{ name = "regex" },
{ name = "requests" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4f/f3/b2fb2c60e1cca510ad324b23e22122dd55362ab0a4017d3fa2743aef4191/langchain_meta-0.5.0.tar.gz", hash = "sha256:55c4b0bf4ee7e5909105c60cfb1a58a60c8409bd53144bea018e898a70f7d6ae", size = 54701, upload-time = "2026-07-10T22:20:21.448Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/78/36/8533d8d3c36588746ed00fbdef4df7507c00268751d165eab71f9acd9a1b/langchain_meta-0.5.0-py3-none-any.whl", hash = "sha256:eb370ed42e2e0ed8dfd469dda0791fbb911ad4da6588eabbaf700c9be1357d11", size = 57588, upload-time = "2026-07-10T22:20:20.536Z" },
]
[[package]]
name = "langchain-mistralai"
version = "1.1.6"
@@ -3026,16 +3048,16 @@ wheels = [
[[package]]
name = "langchain-openai"
version = "1.3.4"
version = "1.3.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "langchain-core" },
{ name = "openai" },
{ name = "tiktoken" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2a/fe/cfd11b9ebc54f7667e3c8f847f64246fad169ad998b8a08d7c3c9d9bccaf/langchain_openai-1.3.4.tar.gz", hash = "sha256:d888d5f39c2a8c3d0d8aa88f5cf50e58a8e7d242f3f15e39422add520eec8e31", size = 3258207, upload-time = "2026-07-08T22:59:50.651Z" }
sdist = { url = "https://files.pythonhosted.org/packages/d1/7e/43eef3f8fae2668f52e2222fdc26b6de58acf158bcb580e32e88a299260d/langchain_openai-1.3.5.tar.gz", hash = "sha256:c1db2256a42ac46e8e7b0564c5ccb478b9f58dc047a58935da33c82e6e1f9a07", size = 3261548, upload-time = "2026-07-10T18:58:29.576Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/51/6e/f8f47f2c6976a4520b5416eaeeaee5e6aa7dd906b39685dc1ad4ef6d1ba2/langchain_openai-1.3.4-py3-none-any.whl", hash = "sha256:3241b8392b29c1af233b902b7d9a84bfc5fe26ccb210a7febdfc3972af7e5771", size = 120529, upload-time = "2026-07-08T22:59:49.451Z" },
{ url = "https://files.pythonhosted.org/packages/61/64/4e0918cb96ff2b49e06acd9c11c250297d727d2fcce9e012d62efb73b4d6/langchain_openai-1.3.5-py3-none-any.whl", hash = "sha256:f586263b884bceb3d426ec84d3bfbd27051c3c92ae668da6175629e3f44dcec5", size = 121601, upload-time = "2026-07-10T18:58:28.327Z" },
]
[[package]]
@@ -3433,12 +3455,29 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/42/01/84692b534d4bf42da7fa7b1fac8056fbf769276bb584d747b3e5b7fd2c71/litellm-1.90.0rc1-py3-none-any.whl", hash = "sha256:3e404be700ffee4ccb494fc7fa66170098d1fec5a4a22b5730de1c91eeca5ca0", size = 16684425, upload-time = "2026-06-21T01:24:37.983Z" },
]
[[package]]
name = "llama-api-client"
version = "0.6.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
{ name = "distro" },
{ name = "httpx" },
{ name = "pydantic" },
{ name = "sniffio" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6a/98/1bc43b6d2bb2261facf93b3b6557df7aabe37bd0d6435bba25fb2d061628/llama_api_client-0.6.0.tar.gz", hash = "sha256:f6dd125110b9bdfd31b4cea9376d0457b01481ded6ab70efbe115a94a97eb145", size = 127273, upload-time = "2025-12-18T20:30:55.956Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c4/65/aacd8e608f2b57dc114ec33ef6a18f4a451da2b0265aa13a6eeab2e8de64/llama_api_client-0.6.0-py3-none-any.whl", hash = "sha256:b41ccced2dfb17f15ae0c2ae2f70cb3cfc76705aa4412286ebfaae61e7fc37ce", size = 94606, upload-time = "2025-12-18T20:30:53.777Z" },
]
[[package]]
name = "lomond"
version = "0.3.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "six" },
{ name = "six", marker = "python_full_version < '3.15'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c0/9e/ef7813c910d4a893f2bc763ce9246269f55cc68db21dc1327e376d6a2d02/lomond-0.3.3.tar.gz", hash = "sha256:427936596b144b4ec387ead99aac1560b77c8a78107d3d49415d3abbe79acbd3", size = 28789, upload-time = "2018-09-21T15:17:43.297Z" }
wheels = [
@@ -4138,7 +4177,7 @@ wheels = [
[[package]]
name = "openai"
version = "2.43.0"
version = "2.45.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -4150,9 +4189,9 @@ dependencies = [
{ name = "tqdm" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f3/fa/88d0c58a0c58df7e6758e66b99c5d028d5e0bb49f8812d7203940cd9dbf1/openai-2.43.0.tar.gz", hash = "sha256:e74d238200a26868977002190fb6631613480a93dfe0c9c982e77021ed60a017", size = 785369, upload-time = "2026-06-17T17:06:56.06Z" }
sdist = { url = "https://files.pythonhosted.org/packages/78/60/d4219875289b11d2c2f7da93c36283da224a2e55865ed865ab64e0ce9217/openai-2.45.0.tar.gz", hash = "sha256:10d34ca9c5643bce775852fddbfc172505cb1d4de1ccd101696c3ecff358765d", size = 1109653, upload-time = "2026-07-09T18:02:44.091Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a3/d2/ba767f4bbb30776c03d40906a2d3afad716a165ffa1771fc23b8992f7920/openai-2.43.0-py3-none-any.whl", hash = "sha256:65a670b54fadf2268c9e1330133373c963eb779ee969e5cbad419ec2c21dce97", size = 1355077, upload-time = "2026-06-17T17:06:53.614Z" },
{ url = "https://files.pythonhosted.org/packages/f1/b0/2291689e3ec4723fbf5bbf3b54afcd7b160f9ddc98ca7aedfd0132af5677/openai-2.45.0-py3-none-any.whl", hash = "sha256:5df105f5f8c9b711fcb9d06d2d3888cebc82506db216484c14a4e53cdf651777", size = 1629470, upload-time = "2026-07-09T18:02:42.21Z" },
]
[[package]]
@@ -4401,11 +4440,11 @@ resolution-markers = [
"python_full_version < '3.12'",
]
dependencies = [
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12' or python_full_version >= '3.14'" },
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
{ name = "numpy", version = "2.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and python_full_version < '3.14'" },
{ name = "python-dateutil" },
{ name = "pytz" },
{ name = "tzdata" },
{ name = "python-dateutil", marker = "python_full_version < '3.14'" },
{ name = "pytz", marker = "python_full_version < '3.14'" },
{ name = "tzdata", marker = "python_full_version < '3.14'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" }
wheels = [
@@ -4461,9 +4500,9 @@ resolution-markers = [
"python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
]
dependencies = [
{ name = "numpy", version = "2.5.0", source = { registry = "https://pypi.org/simple" } },
{ name = "python-dateutil" },
{ name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" },
{ name = "numpy", version = "2.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.14.*'" },
{ name = "python-dateutil", marker = "python_full_version == '3.14.*'" },
{ name = "tzdata", marker = "(python_full_version == '3.14.*' and sys_platform == 'emscripten') or (python_full_version == '3.14.*' and sys_platform == 'win32')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" }
wheels = [
@@ -5755,8 +5794,8 @@ name = "secretstorage"
version = "3.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cryptography" },
{ name = "jeepney" },
{ name = "cryptography", marker = "(python_full_version != '3.14.*' and sys_platform == 'emscripten') or (python_full_version != '3.14.*' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" },
{ name = "jeepney", marker = "(python_full_version != '3.14.*' and sys_platform == 'emscripten') or (python_full_version != '3.14.*' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" }
wheels = [
@@ -6548,11 +6587,11 @@ name = "vercel-workers"
version = "0.0.25"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
{ name = "httpx" },
{ name = "pydantic" },
{ name = "python-dotenv" },
{ name = "vercel" },
{ name = "anyio", marker = "python_full_version >= '3.12'" },
{ name = "httpx", marker = "python_full_version >= '3.12'" },
{ name = "pydantic", marker = "python_full_version >= '3.12'" },
{ name = "python-dotenv", marker = "python_full_version >= '3.12'" },
{ name = "vercel", marker = "python_full_version >= '3.12'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/30/df/04d37021ad7ca53b7599c313e411d91623c7a005c741f491d1eefb7a9f0c/vercel_workers-0.0.25.tar.gz", hash = "sha256:212ded01400b524be51d251df49f801caf115ad7d48cca7eb168cbeceda3def3", size = 64149, upload-time = "2026-06-20T19:26:27.177Z" }
wheels = [