Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions frontend/workspace/src/components/settings/Compute.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,9 @@ const Compute: Component = () => {
<div class="settings-page-header">
<div class="settings-page-header__inner">
<h2 class="text-16-medium text-text-strong">Compute</h2>
<p class="text-13-regular text-text-weak">Choose where kernels and research jobs can run safely.</p>
<p class="text-13-regular text-text-weak">
Run close to home or head to the cloud when the work gets bigger.
</p>
</div>
</div>

Expand All @@ -435,7 +437,7 @@ const Compute: Component = () => {
<CredentialServices
category="compute"
title="Cloud credentials"
description="AWS, Google Cloud, Azure, and NVIDIA credentials are encrypted locally and exposed only to the tools that use them."
description="Connect a cloud once. Credentials stay encrypted locally and go only to the tools that need them."
/>

<Section title="Modal" subtitle="Run explicitly approved jobs in isolated Modal sandboxes using your account.">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export const CredentialServices: Component<{
<ProviderLogo id={service.id} label={service.label} connected={service.connected} />
<div class="settings-list-copy">
<strong>{service.label}</strong>
<span>{service.connected ? "Connected" : service.description}</span>
<span>{service.connected ? "Connected and ready" : service.description}</span>
</div>
<div class="settings-list-actions">
<Show when={service.connected}>
Expand Down Expand Up @@ -226,7 +226,7 @@ export const CredentialServices: Component<{
</For>
<div class="credential-form-actions">
<Button type="submit" size="small" variant="primary" disabled={saving() || !ready(service)}>
{saving() ? "Saving…" : "Save"}
{saving() ? "Saving…" : "Save credential"}
</Button>
<Button type="button" size="small" variant="ghost" onClick={() => setEditing(undefined)}>
Cancel
Expand Down Expand Up @@ -266,15 +266,15 @@ export const CredentialServices: Component<{
placeholder="Paste secret"
onInput={setSecret}
/>
<p>The agent receives this as SERVICE_NAME_ENVIRONMENT_FIELD.</p>
<p>OpenScience will make this available as SERVICE_NAME_ENVIRONMENT_FIELD.</p>
<div class="credential-form-actions">
<Button
type="submit"
size="small"
variant="primary"
disabled={saving() || !name().trim() || !secret().trim()}
>
{saving() ? "Saving…" : "Save"}
{saving() ? "Saving…" : "Save credential"}
</Button>
<Button type="button" size="small" variant="ghost" onClick={() => setCustom(false)}>
Cancel
Expand Down
4 changes: 2 additions & 2 deletions frontend/workspace/src/components/settings/Credentials.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ export const Credentials: Component = () => (
<div class="flex h-full flex-col overflow-y-auto no-scrollbar">
<header class="settings-page-header">
<h2>Credentials</h2>
<p>Connect research services that do not belong to Models or Compute.</p>
<p>Bring the rest of your research stack along. Add a service once, and it is ready when your tools need it.</p>
</header>
<div class="settings-page-body">
<CredentialServices
category="integration"
title="Integrations"
description="These encrypted values are available to the tools and agents that need them."
description="A quiet home for GitHub, OpenAlex, Hugging Face, Weights & Biases, and everything in between."
custom
/>
</div>
Expand Down
11 changes: 5 additions & 6 deletions frontend/workspace/src/components/settings/Models.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export default function Models() {
<div class="settings-page-header__inner">
<h2 class="text-16-medium text-text-strong">Models</h2>
<p class="text-13-regular text-text-weak">
Choose the models used for research and which ones appear in the composer.
Pick the models you like working with and keep your everyday choices close at hand.
</p>
</div>
</div>
Expand All @@ -133,7 +133,7 @@ export default function Models() {
Managed inference
</h3>
<p class="text-12-regular text-text-weak">
Route model calls through OpenScience credits, your own keys, or automatic credential detection.
Use OpenScience credits, bring your own key, or let us spot one that is already configured.
</p>
</div>
<ManagedInference onError={setError} />
Expand All @@ -145,8 +145,7 @@ export default function Models() {
ChatGPT / Codex
</h3>
<p class="text-12-regular text-text-weak">
Use supported OpenAI models through your existing ChatGPT plan. OAuth tokens stay in owner-only local
storage.
Already have ChatGPT? Connect it once and use supported OpenAI models here. OAuth tokens stay local.
</p>
</div>
<CodexConnection onError={setError} />
Expand All @@ -158,8 +157,8 @@ export default function Models() {
Provider keys
</h3>
<p class="text-12-regular text-text-weak">
Bring your own model-provider key. Keys stay in an owner-only local auth file, not the system keychain,
and the provider bills you directly.
Prefer your own account? Add a provider key here. It stays in your owner-only local auth file, and the
provider bills you directly.
</p>
</div>
<ProviderKeys onError={setError} />
Expand Down
4 changes: 3 additions & 1 deletion frontend/workspace/src/components/settings/ProviderLogo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,15 +127,17 @@ export const ProviderLogo: Component<{
}> = (props) => {
const label = () => props.label ?? props.id
const small = () => props.size === "small"
const source = () => providerLogoSource(props.id)
return (
<span
class="relative flex shrink-0 items-center justify-center overflow-hidden border border-border-weak-base bg-surface-base text-text-strong"
classList={{ "size-6 rounded-[7px]": small(), "size-8 rounded-[9px]": !small() }}
role="img"
aria-label={`${label()} logo`}
data-provider-logo={props.id}
data-provider-logo-source={source().kind}
>
<Mark source={providerLogoSource(props.id)} label={label()} small={small()} />
<Mark source={source()} label={label()} small={small()} />
<Show when={props.connected}>
<span
aria-hidden="true"
Expand Down