# RikkaHub with OpenCheese

> Set up the RikkaHub Android chat app with OpenCheese: an OpenAI or Claude provider, base URL, API key, the Fast Model setting, image models, reasoning levels.
>
> Web page: https://opencheese.dev/en/docs/rikkahub/ · Every docs page: https://opencheese.dev/llms.txt

[RikkaHub](https://github.com/rikkahub/rikkahub) is an Android chat app that works with
OpenCheese through either of its two provider types: **OpenAI**, for every model, or
**Claude**, the Anthropic format for Claude models.

## Add the provider

Open the sidebar, tap **Settings**, then **Providers** under Models & Services, and tap **+**.

For the **OpenAI** type:

| Field | Value |
| --- | --- |
| Name | `OpenCheese` (any name) |
| API Key | your OpenCheese API key |
| API Base Url | `https://api.opencheese.dev/v1` |
| API Path | `/chat/completions` (the default) |
| Response API | off; or on, with the assistant's **Stream Output** on (see below) |

For the **Claude** type:

| Field | Value |
| --- | --- |
| Name | `OpenCheese Claude` (any name) |
| API Key | your OpenCheese API key |
| API Base Url | `https://api.opencheese.dev/v1` |

Both types keep `/v1` in the base URL: RikkaHub appends `/chat/completions`, `/responses`,
`/messages` or `/models` itself. Do not add a trailing slash.

Save, open the **Models** tab and pick models from the list RikkaHub fetches, then use the plug
icon's **Test Connection** to check them.

To see the same list from a computer, and check the key at the same time:

```bash
curl -s https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" | jq -r '.data[].id'
```

## Set the Fast Model

RikkaHub names conversations and suggests replies with its **Fast Model**. On a fresh install it
points at no real model, and RikkaHub shows "Fast model not found. Please select one in
settings." before sending anything. Open **Settings → Default Model and Prompt**, and under
**Fast Model** choose an OpenCheese text model; a cheap or free one is enough. Turn suggestions off if their cost per
turn matters to you.

## Reasoning levels

The reasoning level picked in a chat is sent with the request. Choose one the model lists in
`supported_reasoning_levels` (see [Models](https://opencheese.dev/en/docs/models.md)), or **Auto** for the model's
default. A level the model doesn't offer is refused with a message naming the levels it does.

## Image models

RikkaHub lists image models in the chat picker too, and in a chat they answer with a picture:

- Add the image model with type **Chat** and input modalities **Text + Image**. RikkaHub does
  not know these model IDs and treats them as text-only otherwise, turning every picture you
  send into text, so edits become new pictures.
- On the **Response API**, keep the assistant's **Stream Output** setting on: RikkaHub shows a
  non-streamed image answer as an error.
- Chat Completions mode works with streaming on or off.
- For RikkaHub's image page, add the same model again with type **Image** and an image count
  of 1. Up to 5 reference images are accepted per edit.

A background call such as a title or a suggestion aimed at an image model is refused with a
message naming the Fast Model setting, so it never buys a picture by mistake.

## Usage

Each RikkaHub conversation, with its titles, suggestions and summaries, appears in the
dashboard's **Transactions** as one session. Pictures from the image page are a session each.
