Skip to content

Commit 29a75dd

Browse files
myxamediyarmkclaude
authored
feat(providers): add Thinking Machines (Inkling) provider (#9731)
* feat(providers): add Thinking Machines (Inkling) provider Adds Thinking Machines as a BYOK model provider for the Agent block, served through Tinker's OpenAI-compatible endpoint. Catalog models are Inkling, Inkling-Small and Inkling 2 Small; a thinkingmachines/tinker:// id samples a user's own Tinker checkpoint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DFfc93a6xj31uddHhaZ7qJ * feat(providers): use Thinking Machines wordmark as provider icon Replaces the placeholder "TM" monogram with the Thinking Machines wordmark on a white background, so it reads in light and dark mode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DFfc93a6xj31uddHhaZ7qJ --------- Co-authored-by: mk <mk@sim.ai> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent fb9163d commit 29a75dd

18 files changed

Lines changed: 332 additions & 1 deletion

File tree

‎apps/docs/content/docs/platform/costs.mdx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ The settings page groups keys into **Models**, **Search & web**, and **Enrichmen
129129
| Nebius | Model calls |
130130
| Ollama Cloud | Model calls |
131131
| Kie | Model calls |
132+
| Thinking Machines | Model calls |
132133
| Fal.ai | Image and video generation |
133134
</Tab>
134135
<Tab>

‎apps/docs/content/docs/workflows/blocks/agent.mdx‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ Select a model beginning with `nebius/` to run an open model through Nebius Toke
4444

4545
Bring your own Nebius Token Factory API key. On Sim Cloud, a workspace admin can add it under **Workspace settings → BYOK → Nebius**. On self-hosted Sim, provide the key in the Agent block's **API Key** field, using a [secret reference](/platform/credentials). Model features such as image input and structured outputs depend on the selected model.
4646

47+
#### Thinking Machines
48+
49+
Select a model beginning with `thinkingmachines/` to run Inkling, Inkling-Small, or Inkling 2 Small through Tinker serverless inference. To sample a checkpoint you trained on Tinker, enter `thinkingmachines/` followed by its `tinker://` path. Custom checkpoints have no catalog pricing.
50+
51+
Bring your own Thinking Machines Tinker API key. On Sim Cloud, a workspace admin can add it under **Workspace settings → BYOK → Thinking Machines**. On self-hosted Sim, provide the key in the Agent block's **API Key** field, using a [secret reference](/platform/credentials). Tinker's serverless inference is in beta: file attachments are not sent, tools run with automatic tool choice only, and structured outputs are requested through the prompt.
52+
4753
#### Jev evaluation models
4854

4955
Select `jev-latest` from TypeSafe in the Agent model selector. Hosted Sim supplies a key and bills model usage through the normal credit system; workspace or organization BYOK keys override the hosted key without model charges. Self-hosted users enter their TypeSafe key in the block. Use `jev-1.13.0` to pin a version or `jev-preview` to follow preview releases. These models use **State** and **Questions** in place of conversational messages. State accepts text or a reference to a JSON object or array. Questions is a JSON object keyed by the answer names you want:

‎apps/sim/app/workspace/[workspaceId]/settings/components/byok/byok.tsx‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import {
4747
ZeroBounceIcon,
4848
} from '@/components/icons'
4949
import { NebiusIcon } from '@/components/icons/nebius'
50+
import { ThinkingMachinesIcon } from '@/components/icons/thinking-machines'
5051
import { canMutateWorkspaceSettingsSection } from '@/components/settings/navigation'
5152
import { type BYOKProviderId, MAX_BYOK_KEYS_PER_PROVIDER } from '@/lib/api/contracts/byok-keys'
5253
import { useDeploymentShape } from '@/lib/core/config/deployment-shape'
@@ -182,6 +183,13 @@ const PROVIDERS: (BYOKManagerProvider & { id: BYOKProviderId })[] = [
182183
description: 'LLM calls',
183184
placeholder: 'Enter your Kie API key',
184185
},
186+
{
187+
id: 'thinkingmachines',
188+
name: 'Thinking Machines',
189+
icon: ThinkingMachinesIcon,
190+
description: 'LLM calls',
191+
placeholder: 'Enter your Thinking Machines Tinker API key',
192+
},
185193
{
186194
id: 'falai',
187195
name: 'Fal.ai',
@@ -383,6 +391,7 @@ const PROVIDER_SECTIONS: BYOKProviderSection[] = [
383391
'nebius',
384392
'ollama-cloud',
385393
'kie',
394+
'thinkingmachines',
386395
'falai',
387396
],
388397
},
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { SVGProps } from 'react'
2+
3+
interface ThinkingMachinesIconProps extends SVGProps<SVGSVGElement> {}
4+
5+
export function ThinkingMachinesIcon(props: ThinkingMachinesIconProps) {
6+
return (
7+
<svg {...props} viewBox='-4 -4 99.7998 42' fill='none' xmlns='http://www.w3.org/2000/svg'>
8+
<rect x='-4' y='-4' width='99.7998' height='42' rx='4' fill='#FFFFFF' />
9+
<path
10+
d='M5.77637 30.1113H5.8125L9.61621 21.5127H11.6064V34H9.63379V25.6514H9.59863L6.46973 32.4121H5.11914L2.00879 25.6514H1.97266V34H0V21.5127H1.97266L5.77637 30.1113ZM24.8838 34H22.7861L21.7197 31.0391H17.0811L16.0146 34H13.917L18.4316 21.5127H20.3867L24.8838 34ZM36.5635 23.4922V25.1338H34.501V24.2236L33.5596 23.2959H29.8262L28.8135 24.2949V31.2168L29.8262 32.2158H33.5596L34.501 31.2881V30.3789H36.5635V32.0195L34.5898 34H28.7598L26.752 31.9844V23.5283L28.7598 21.5127H34.5898L36.5635 23.4922ZM41.3877 26.8818H47.04V21.5127H49.1025V34H47.04V28.666H41.3877V34H39.3262V21.5127H41.3877V26.8818ZM54.6377 34H52.5762V21.5127H54.6377V34ZM65.8467 30.5928H65.8828V21.5127H67.8555V34H65.9717L60.1055 24.9375H60.0703V34H58.0977V21.5127H59.9814L65.8467 30.5928ZM79.915 23.2783H73.3027V26.8467H79.3994V28.5947H73.3027V32.2334H79.915V34H71.2412V21.5127H79.915V23.2783ZM91.6582 23.3496V24.9375H89.6318V23.9746L88.9385 23.2959H85.2412L84.5479 23.9746V26.0439L85.2412 26.7217H89.9688L91.7998 28.5586V32.127L89.9336 34H84.3164L82.4863 32.1621V30.5928H84.5127V31.5381L85.1875 32.2158H89.0625L89.7734 31.5029V29.2012L89.0801 28.5059H84.3525L82.5215 26.6855V23.3496L84.3525 21.5127H89.8271L91.6582 23.3496ZM17.5781 29.3086H21.2402L19.4092 24.0273H19.374L17.5781 29.3086ZM12.7705 1.76562H9.03711V12.4873H6.97559V1.76562H3.24316V0H12.7705V1.76562ZM17.3232 5.36914H22.9756V0H25.0381V12.4873H22.9756V7.15332H17.3232V12.4873H15.2617V0H17.3232V5.36914ZM30.5732 12.4873H28.5117V0H30.5732V12.4873ZM41.7822 9.08008H41.8184V0H43.791V12.4873H41.9072L36.041 3.4248H36.0059V12.4873H34.0322V0H35.917L41.7822 9.08008ZM49.2383 5.36914H51.46L54.5352 0H56.8281L53.2197 6.22559L57.1299 12.4873H54.7832L51.46 7.15332H49.2383V12.4873H47.1758V0H49.2383V5.36914ZM61.585 12.4873H59.5234V0H61.585V12.4873ZM72.7939 9.08008H72.8301V0H74.8027V12.4873H72.9189L67.0527 3.4248H67.0176V12.4873H65.0449V0H66.9287L72.7939 9.08008ZM87.9287 1.98047V3.62109H85.8662V2.71191L84.9248 1.78418H81.085L80.0723 2.7832V9.70508L81.085 10.7041H84.9248L85.9199 9.72266V7.45703H83.2002V5.67285H87.9287V10.4717L85.9199 12.4873H80.0186L78.0107 10.4717V2.01562L80.0186 0H85.9551L87.9287 1.98047Z'
11+
fill='#000000'
12+
/>
13+
</svg>
14+
)
15+
}

‎apps/sim/ee/organization-usage/components/usage-consumers.tsx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import {
4343
ZaiIcon,
4444
} from '@/components/icons'
4545
import { NebiusIcon } from '@/components/icons/nebius'
46+
import { ThinkingMachinesIcon } from '@/components/icons/thinking-machines'
4647
import type {
4748
OrganizationUsageBreakdown,
4849
OrganizationUsageBreakdownRow,
@@ -90,6 +91,7 @@ const PROVIDER_ICONS: Readonly<Record<string, ComponentType<{ className?: string
9091
openai: OpenAIIcon,
9192
openrouter: OpenRouterIcon,
9293
sakana: SakanaIcon,
94+
thinkingmachines: ThinkingMachinesIcon,
9395
together: TogetherIcon,
9496
typesafe: TypeSafeIcon,
9597
vertex: VertexIcon,

‎apps/sim/lib/api-key/byok.ts‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,20 @@ export async function getApiKeyWithBYOK(
345345
throw new Error(`API key is required for Nebius ${model}`)
346346
}
347347

348+
if (provider === 'thinkingmachines') {
349+
const byokResult = await getBYOKKey(workspaceId, 'thinkingmachines', { signal })
350+
if (byokResult) {
351+
logger.info('Using BYOK key for Thinking Machines', {
352+
model,
353+
workspaceId,
354+
scope: byokResult.scope,
355+
})
356+
return byokResult
357+
}
358+
if (userProvidedKey) return { apiKey: userProvidedKey, isBYOK: false }
359+
throw new Error(`API key is required for Thinking Machines ${model}`)
360+
}
361+
348362
if (provider === 'ollama-cloud') {
349363
if (workspaceId) {
350364
const byokResult = await getBYOKKey(workspaceId, 'ollama-cloud', { signal })

‎apps/sim/lib/api/contracts/byok-keys.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const byokProviderIdSchema = z.enum([
1717
'nebius',
1818
'ollama-cloud',
1919
'kie',
20+
'thinkingmachines',
2021
'falai',
2122
'firecrawl',
2223
'exa',

‎apps/sim/providers/attachments.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export type AttachmentProvider =
4747
| 'meta'
4848
| 'zai'
4949
| 'kimi'
50+
| 'thinkingmachines'
5051

5152
export interface PreparedProviderAttachment {
5253
file: UserFile
@@ -161,6 +162,7 @@ const UNSUPPORTED_FILE_PROVIDERS = new Set<AttachmentProvider>([
161162
'nvidia',
162163
'meta',
163164
'zai',
165+
'thinkingmachines',
164166
])
165167

166168
const PROVIDER_SUPPORTED_LABELS: Record<AttachmentProvider, string> = {
@@ -186,6 +188,7 @@ const PROVIDER_SUPPORTED_LABELS: Record<AttachmentProvider, string> = {
186188
meta: 'no file attachments in the current API adapter',
187189
zai: 'no file attachments in the current API adapter',
188190
kimi: 'images through image_url message parts on multimodal models',
191+
thinkingmachines: 'no file attachments in the current API adapter',
189192
}
190193

191194
export function getAttachmentProvider(providerId: ProviderId | string): AttachmentProvider | null {
@@ -211,6 +214,7 @@ export function getAttachmentProvider(providerId: ProviderId | string): Attachme
211214
if (providerId === 'meta') return 'meta'
212215
if (providerId === 'zai') return 'zai'
213216
if (providerId === 'kimi') return 'kimi'
217+
if (providerId === 'thinkingmachines') return 'thinkingmachines'
214218
return null
215219
}
216220

@@ -427,6 +431,7 @@ function isMimeTypeSupportedByProvider(
427431
case 'nvidia':
428432
case 'meta':
429433
case 'zai':
434+
case 'thinkingmachines':
430435
return false
431436
default: {
432437
const _exhaustive: never = provider

‎apps/sim/providers/history-adapters.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export const providerHistoryProtocols: Record<
117117
together: 'chat-completions',
118118
baseten: 'chat-completions',
119119
nebius: 'chat-completions',
120+
thinkingmachines: 'chat-completions',
120121
vllm: 'chat-completions',
121122
litellm: 'chat-completions',
122123
}

‎apps/sim/providers/models.ts‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
ZaiIcon,
3737
} from '@/components/icons'
3838
import { NebiusIcon } from '@/components/icons/nebius'
39+
import { ThinkingMachinesIcon } from '@/components/icons/thinking-machines'
3940
import { LARGE_VALUE_THRESHOLD_BYTES } from '@/lib/execution/payloads/large-value-ref'
4041
import type { ModelPricing, ProviderId } from '@/providers/types'
4142

@@ -441,6 +442,42 @@ export const PROVIDER_DEFINITIONS: Record<string, ProviderDefinition> = {
441442
},
442443
],
443444
},
445+
thinkingmachines: {
446+
id: 'thinkingmachines',
447+
name: 'Thinking Machines',
448+
description: 'Inkling models via Tinker serverless inference',
449+
defaultModel: 'thinkingmachines/inkling',
450+
modelPatterns: [/^thinkingmachines\//],
451+
icon: ThinkingMachinesIcon,
452+
color: '#111111',
453+
capabilities: {
454+
temperature: { min: 0, max: 1 },
455+
toolUsageControl: true,
456+
forcedToolUse: false,
457+
},
458+
models: [
459+
{
460+
id: 'thinkingmachines/inkling',
461+
pricing: { input: 1.0, cachedInput: 0.17, output: 4.05, updatedAt: '2026-11-05' },
462+
capabilities: {},
463+
contextWindow: 262144,
464+
releaseDate: '2026-07-16',
465+
},
466+
{
467+
id: 'thinkingmachines/inkling-2-small',
468+
pricing: { input: 0.3, cachedInput: 0.03, output: 1.0, updatedAt: '2026-11-05' },
469+
capabilities: {},
470+
contextWindow: 262144,
471+
},
472+
{
473+
id: 'thinkingmachines/inkling-small',
474+
pricing: { input: 0.3, cachedInput: 0.06, output: 1.2, updatedAt: '2026-11-05' },
475+
capabilities: {},
476+
contextWindow: 262144,
477+
releaseDate: '2026-07-31',
478+
},
479+
],
480+
},
444481
together: {
445482
id: 'together',
446483
fileAttachment: { maxBytes: 50 * 1024 * 1024, strategy: 'remote-url' },

0 commit comments

Comments
 (0)