Metadata-Version: 2.5
Name: langchain-runcrate
Version: 0.1.0
Summary: LangChain integration for Runcrate: 200+ open models behind one OpenAI-compatible API
Project-URL: Homepage, https://www.runcrate.ai/docs?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=gpu_pricing
Project-URL: Documentation, https://www.runcrate.ai/docs/api-reference/chat/chat-llm-completion?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=gpu_pricing
Project-URL: Pricing, https://www.runcrate.ai/inference/pricing?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=gpu_pricing
Author-email: Aeonmind LLC <hello@runcrate.ai>
License: MIT
License-File: LICENSE
Keywords: gpu,inference,langchain,llm,openai-compatible,runcrate
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: <4.0,>=3.10
Requires-Dist: langchain-core<2.0.0,>=1.0.0
Requires-Dist: langchain-openai<2.0.0,>=1.0.0
Description-Content-Type: text/markdown

# langchain-runcrate

LangChain chat model for [Runcrate](https://www.runcrate.ai/?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=gpu_pricing): 200+ open models (DeepSeek, Qwen, Llama, Kimi, gpt-oss and more) behind one OpenAI-compatible API, billed per token from one prepaid balance. The same account rents GPUs by the hour when you want to fine-tune or serve your own model.

## Install

```bash
pip install -U langchain-runcrate
```

Create an API key ([docs](https://www.runcrate.ai/docs/account/api-keys?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=gpu_pricing)) and export it:

```bash
export RUNCRATE_API_KEY="..."
```

## Chat

```python
from langchain_runcrate import ChatRuncrate

llm = ChatRuncrate(model="deepseek-ai/DeepSeek-V3.2", temperature=0)
print(llm.invoke("Explain LoRA fine-tuning in one sentence.").content)

for chunk in llm.stream("Write a haiku about GPUs."):
    print(chunk.text, end="", flush=True)
```

## Tool calling and structured output

```python
from pydantic import BaseModel
from langchain_core.tools import tool


@tool
def gpu_price(gpu: str) -> str:
    """Return the hourly price of a GPU."""
    return "see https://www.runcrate.ai/api/gpu-pricing"


llm_with_tools = llm.bind_tools([gpu_price])
print(llm_with_tools.invoke("What does an H100 cost per hour?").tool_calls)


class Summary(BaseModel):
    title: str
    bullets: list[str]


print(llm.with_structured_output(Summary).invoke("Summarize what a GPU cloud is."))
```

## Agents (LangGraph / `create_agent`)

```python
from langchain.agents import create_agent

agent = create_agent(ChatRuncrate(model="Qwen/Qwen3-235B-A22B-Instruct-2507"), tools=[gpu_price])
agent.invoke({"messages": [{"role": "user", "content": "Price an H100 for 10 hours."}]})
```

## Reasoning models

Reasoning models such as `deepseek-ai/DeepSeek-R1-0528` return their reasoning in `message.additional_kwargs["reasoning_content"]`, both in `invoke` and in `stream`.

## Configuration

| Argument | Env var | Default |
|---|---|---|
| `api_key` | `RUNCRATE_API_KEY` | required |
| `base_url` | `RUNCRATE_API_BASE` | `https://api.runcrate.ai/v1` |
| `model` | | required, any id from `GET https://api.runcrate.ai/v1/models` |

Every other `ChatOpenAI` argument (`temperature`, `max_tokens`, `timeout`, `max_retries`, `streaming`, `model_kwargs` ...) works the same way.

Models and per-token prices: [runcrate.ai/inference/pricing](https://www.runcrate.ai/inference/pricing?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=gpu_pricing).

## Let your agent rent GPUs too

Runcrate also runs a remote MCP server at `https://mcp.runcrate.ai/mcp` (OAuth sign-in, no key) so Claude Code, Cursor or any MCP client can launch and drive GPU instances. Setup: [runcrate.ai/docs/mcp/setup](https://www.runcrate.ai/docs/mcp/setup?utm_source=pypi-langchain-runcrate&utm_medium=directory&utm_campaign=mcp), client packages: [aeonmindai/runcrate-mcp](https://github.com/aeonmindai/runcrate-mcp).

## Development

```bash
uv run --group test pytest tests/unit_tests
RUNCRATE_API_KEY=... uv run --group test pytest tests/integration_tests
```

## License

MIT, Aeonmind LLC.
