Skip to content

Commit 6dfb467

Browse files
authored
v0.8.56: opus 5.5, jev, gpt 6 sol, ui consolidation, usage entry
2 parents 576408d + 666b4d3 commit 6dfb467

166 files changed

Lines changed: 5652 additions & 1107 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/test-build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,13 @@ jobs:
132132
lib/workspaces/organization-workspaces.postgres.test.ts
133133
lib/billing/calculations/usage-reservation.test.ts
134134
135-
- name: Verify access request pagination and impact in PostgreSQL
135+
- name: Verify access request flows, pagination, and impact in PostgreSQL
136136
working-directory: apps/sim
137137
env:
138138
ACCESS_REQUESTS_TEST_DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:5432/sim_access_requests_test
139139
run: |
140140
bun -e 'import postgres from "postgres"; const sql = postgres(process.env.DATABASE_URL); await sql.unsafe("CREATE DATABASE sim_access_requests_test"); await sql.end()'
141-
bunx vitest run ee/access-requests/lib/repository.postgres.test.ts ee/access-requests/lib/impact.postgres.test.ts
141+
bunx vitest run ee/access-requests/lib/repository.postgres.test.ts ee/access-requests/lib/impact.postgres.test.ts ee/access-requests/lib/application/flow.postgres.test.ts
142142
143143
- name: Verify fork previews ignore execution file history in PostgreSQL
144144
working-directory: apps/sim

apps/docs/components/icons.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9936,3 +9936,16 @@ export function PitchBookIcon(props: SVGProps<SVGSVGElement>) {
99369936
</svg>
99379937
)
99389938
}
9939+
9940+
/** TypeSafe’s official mark from https://typesafe.ai. */
9941+
export function TypeSafeIcon(props: SVGProps<SVGSVGElement>) {
9942+
return (
9943+
<svg {...props} viewBox='0 0 21 32' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
9944+
<path
9945+
fillRule='evenodd'
9946+
clipRule='evenodd'
9947+
d='M10.36 0.071C10.55 -0.054 10.707 -0.008 10.757 0.166L15.57 2.792L15.33 3.23L15.748 2.953V8.81L20.542 11.425L20.224 12.008L20.742 11.663V23.613C20.742 23.889 20.556 24.238 20.326 24.391L10.383 31.02V30.402L10.12 30.885L5.323 28.269C5.124 28.365 4.972 28.262 4.972 28.012V22.153L0.398 19.659C0.176 19.797 0 19.697 0 19.428V7.478C0 7.201 0.186 6.853 0.416 6.7L10.36 0.071ZM6.27 27.645L10.49 29.947L19.434 23.985L15.212 21.684L6.27 27.645ZM10.775 12.743V18.218C10.775 18.494 10.589 18.842 10.359 18.995L5.804 22.032V26.957L14.915 20.882V9.983L10.775 12.743ZM15.747 20.827C15.747 20.83 15.746 20.832 15.746 20.835L19.91 23.107V12.219L15.747 9.948V20.827ZM1.34 19.033L5.401 21.249L9.435 18.56L5.373 16.345L1.34 19.033ZM0.832 7.423V18.373L4.972 15.613V10.139C4.972 9.863 5.158 9.515 5.388 9.361L9.944 6.324V1.349L0.832 7.423ZM5.804 15.44L9.943 17.697V12.913L5.804 10.655V15.44ZM6.271 9.771L10.335 11.988C10.343 11.982 10.351 11.975 10.359 11.97L14.374 9.291L10.313 7.077L6.271 9.771ZM10.776 6.189L14.916 8.447V3.573L10.776 1.316V6.189Z'
9948+
/>
9949+
</svg>
9950+
)
9951+
}

apps/docs/content/docs/platform/self-hosting/environment-variables.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import { Callout } from 'fumadocs-ui/components/callout'
4747
| `MISTRAL_API_KEY` | Mistral |
4848
| `XAI_API_KEY_1` | xAI |
4949
| `KIMI_API_KEY_1` | Moonshot Kimi |
50+
| `TYPESAFE_API_KEY_1` / `_2` / `_3` | TypeSafe Jev hosted key rotation |
5051
| `ZAI_API_KEY_1` | Z.ai |
5152
| `TOGETHER_API_KEY` | Together AI |
5253
| `FIREWORKS_API_KEY` | Fireworks AI |

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

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,30 @@ For a custom cloud deployment, enter its provider prefix and model ID: `azure/my
3131

3232
Ollama Cloud, OpenRouter, Fireworks, Together AI, Baseten, Ollama, vLLM, and LiteLLM load their available models from the configured provider. New models appear through that discovery without a Sim catalog release. You can also enter a namespaced ID directly, such as `ollama-cloud/deepseek-v4.1-flash`, `openrouter/provider/model`, or `ollama/my-local-model`. Provider prefixes are case-insensitive; the model ID after the prefix keeps its original casing.
3333

34+
### Jev evaluation models
35+
36+
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:
37+
38+
```json
39+
{
40+
"route": {
41+
"type": "choice",
42+
"instructions": "Which team should handle this request?",
43+
"criteria": { "billing": "Payments and invoices", "support": "Product issues" }
44+
},
45+
"urgency": {
46+
"type": "score",
47+
"instructions": "How urgent is the request?",
48+
"criteria": ["Routine", "Soon", "Immediate"]
49+
},
50+
"resolved": { "type": "noul", "instructions": "Has the request been resolved?" }
51+
}
52+
```
53+
54+
Read results from `<agent.answers>` or expand an answer in the reference picker, such as `<agent.answers.route.choice>`. Each Choice answer includes `choice`, `probabilities`, and `confidence`; each Score answer includes `score`, `legend`, `probabilities`, and `confidence`; each Noul answer includes `noul`, a probability from 0 to 1. `content` contains the same answers as JSON text, and the standard model, token, timing, and cost outputs remain available. Use a Condition block to route on these results.
55+
56+
Jev evaluates the supplied state in one request. Chat messages, files, tools, skills, conversation memory, response-format schemas, and chat model fallbacks are hidden for these models. Saved settings return when you switch back to a chat model. TypeSafe documents a 64,000-token total request limit and a 32,000-token limit for state plus the longest question. See [TypeSafe's model documentation](https://docs.typesafe.ai/models) and [question formats](https://docs.typesafe.ai/api).
57+
3458
### Files
3559

3660
Files for the model to read: images for a vision-capable model, or documents for text. Upload them on the block, or pass a file from an earlier block, such as an upload trigger or an [API](/workflows/blocks/api) response, with a connection tag.
@@ -104,7 +128,7 @@ Some settings live under advanced, or appear only for models that support them:
104128
- **Max output tokens.** Caps the response length. Defaults to the model's full limit.
105129
- **Reasoning effort / Thinking level.** For models with extended reasoning, how much the model thinks before answering. Higher is more thorough but slower and costs more tokens.
106130
- **Prompt caching.** For Anthropic Claude models, reuses the system prompt and tool definitions between runs instead of re-reading them every time. Cached input costs a tenth of the normal rate, but writing the cache costs 1.25x, so leave it off for one-off runs and turn it on when the same agent runs repeatedly. The cache covers a prefix only if it reaches 1,024 tokens (2,048 on Haiku) — below that Anthropic ignores it and nothing changes. Entries expire after five minutes of no use.
107-
- **API key.** Your key for the chosen provider. Hidden on hosted Sim, which supplies one.
131+
- **API key.** Your key for the chosen provider. Hidden when hosted Sim supplies a key for the selected model, including Jev.
108132
- **Fallback models.** An ordered list of up to five models to try when the request to the selected model fails, whether the provider is overloaded, rate-limited, or down. Sim tries the 2nd choice, then the 3rd, and so on, once each, and `<agent.model>` reports the model that answered. On hosted Sim, hosted models use your workspace's BYOK or platform credentials; local and self-hosted installations may still require a key. A model that needs its own key takes it from a workspace environment variable you pick on the row; a model on the same provider as the selected model reuses the block's key. A stored row key stops applying when its key field is hidden. Providers that require family-specific credentials, such as Vertex, can only be fallbacks for a selected model of the same family. The Auto model cannot be a fallback. A fallback runs with the selected model's settings where its provider accepts them: temperature and max output tokens are clamped to the fallback's limits, and when the fallback has a reasoning effort, thinking level, or verbosity setting that the selected model's value does not fit, the row shows that field so you can pick a value for it; leave it empty and the provider's default applies.
109133
- **Retry on fail.** Retries the selected model after a failure, up to a maximum number of tries with a wait between them. When its tries run out, the fallback models are tried in order, once each, with no wait before the first of them. A fallback is never retried. See [Retries and fallbacks](#retries-and-fallbacks) for how recorded tool results are reused and when a tool can execute again.
110134

@@ -134,8 +158,8 @@ Live tool-call chips stream for **OpenAI, Anthropic, Azure Anthropic, Google, Ve
134158

135159
| Provider | Streamed thinking | Models |
136160
|----------|-------------------|--------|
137-
| OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `gpt-6-astra`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5-pro`, `gpt-5.5`, `gpt-5.4-pro`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.3-codex`, `gpt-5.2-pro`, `gpt-5.2`, `gpt-5.1`, `gpt-5-pro`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `o4-mini`, `o3`, `o3-mini`, `o1` |
138-
| Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `claude-fable-5-1`, `claude-fable-5`, `claude-sonnet-5`, `claude-opus-5`, `claude-opus-4-8`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` |
161+
| OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5-pro`, `gpt-5.5`, `gpt-5.4-pro`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.3-codex`, `gpt-5.2-pro`, `gpt-5.2`, `gpt-5.1`, `gpt-5-pro`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `o4-mini`, `o3`, `o3-mini`, `o1` |
162+
| Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `claude-fable-5-1`, `claude-fable-5`, `claude-sonnet-5`, `claude-opus-5-5`, `claude-opus-5`, `claude-opus-4-8`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` |
139163
| Azure OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `azure/gpt-6-astra`, `azure/gpt-5.6-sol`, `azure/gpt-5.6-terra`, `azure/gpt-5.6-luna`, `azure/gpt-5.5`, `azure/gpt-5.4-pro`, `azure/gpt-5.4`, `azure/gpt-5.4-mini`, `azure/gpt-5.4-nano`, `azure/gpt-5.2`, `azure/gpt-5.1`, `azure/gpt-5.1-codex`, `azure/gpt-5`, `azure/gpt-5-mini`, `azure/gpt-5-nano`, `azure/o3`, `azure/o4-mini` |
140164
| Azure Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `azure-anthropic/claude-fable-5-1`, `azure-anthropic/claude-opus-5`, `azure-anthropic/claude-opus-4-8`, `azure-anthropic/claude-opus-4-7`, `azure-anthropic/claude-opus-4-6`, `azure-anthropic/claude-opus-4-5`, `azure-anthropic/claude-sonnet-5`, `azure-anthropic/claude-sonnet-4-6`, `azure-anthropic/claude-sonnet-4-5`, `azure-anthropic/claude-opus-4-1`, `azure-anthropic/claude-haiku-4-5` |
141165
| Google | Summaries only | `gemini-3.8-flash`, `gemini-3.7-flash`, `gemini-3.6-flash`, `gemini-3.5-flash-lite`, `gemini-3.5-flash`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite` |

apps/sim/app/(interfaces)/chat/components/input/input.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ArrowUp, Paperclip, StopFilled, X } from '@sim/emcn/icons'
77
import { createLogger } from '@sim/logger'
88
import { generateId } from '@sim/utils/id'
99
import { CHAT_ACCEPT_ATTRIBUTE } from '@/lib/uploads/utils/validation'
10+
import { PublicChatActionButton } from '@/app/(interfaces)/chat/components/input/public-chat-action-button'
1011

1112
const logger = createLogger('ChatInput')
1213

@@ -221,15 +222,14 @@ export const ChatInput: React.FC<{
221222
<div>
222223
<Tooltip.Root>
223224
<Tooltip.Trigger asChild>
224-
<Button
225+
<PublicChatActionButton
225226
aria-label='Attach files'
226227
variant='quiet'
227228
onClick={() => fileInputRef.current?.click()}
228229
disabled={isStreaming || attachedFiles.length >= 15}
229-
className='size-[28px] rounded-full p-0'
230230
>
231231
<Paperclip className='size-[16px]' />
232-
</Button>
232+
</PublicChatActionButton>
233233
</Tooltip.Trigger>
234234
<Tooltip.Content side='top'>
235235
<p>Attach files</p>
@@ -252,24 +252,22 @@ export const ChatInput: React.FC<{
252252

253253
<div className='flex items-center gap-1.5'>
254254
{isStreaming ? (
255-
<Button
255+
<PublicChatActionButton
256256
variant='primary'
257257
onClick={onStopStreaming}
258-
className='size-[28px] rounded-full p-0'
259258
aria-label='Stop generation'
260259
>
261260
<StopFilled className='block size-[14px] fill-current' />
262-
</Button>
261+
</PublicChatActionButton>
263262
) : (
264-
<Button
263+
<PublicChatActionButton
265264
variant='primary'
266265
onClick={handleSubmit}
267266
disabled={!canSubmit}
268267
aria-label='Send message'
269-
className='size-[28px] rounded-full p-0'
270268
>
271269
<ArrowUp className='block size-[16px]' />
272-
</Button>
270+
</PublicChatActionButton>
273271
)}
274272
</div>
275273
</div>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { type ComponentProps, forwardRef } from 'react'
2+
import { Button } from '@sim/emcn'
3+
4+
interface PublicChatActionButtonProps
5+
extends Omit<
6+
ComponentProps<typeof Button>,
7+
'variant' | 'size' | 'iconSize' | 'iconPadding' | 'className'
8+
> {
9+
variant: 'primary' | 'quiet'
10+
'aria-label': string
11+
}
12+
13+
/** Public chat's circular composer action, retaining its primary and quiet palettes. */
14+
export const PublicChatActionButton = forwardRef<HTMLButtonElement, PublicChatActionButtonProps>(
15+
(props, ref) => <Button {...props} ref={ref} className='size-[28px] rounded-full p-0' />
16+
)
17+
PublicChatActionButton.displayName = 'PublicChatActionButton'

0 commit comments

Comments
 (0)