| author | |
| committer | |
| log | 2d6a3799978659e349faf8ff4297098ffb782ebb |
| tree | ee3fcb67186ab0b0bb34d1ba3589fcc1ad26952c |
| parent | e15ffb9c0f73425dd9a1965070f01a07c9065761 |
| signature | Signed by PGP key B5690EEEBB952194 |
3 files changed, 16 insertions(+), 9 deletions(-)
apps/web/src/components/ChatView.tsx+3-1| ... | ... | @@ -3331,7 +3331,9 @@ export default function ChatView(props: ChatViewProps) { |
| 3331 | 3331 | ? "Auto balance" |
| 3332 | 3332 | : loadBalancing.pending |
| 3333 | 3333 | ? "Checking machines…" |
| 3334 | : "Auto balance unavailable" | |
| 3334 | : loadBalancing.failed | |
| 3335 | ? "Auto balance unavailable" | |
| 3336 | : "Auto balance" | |
| 3335 | 3337 | : undefined; |
| 3336 | 3338 | |
| 3337 | 3339 | // Handle environment change for draft threads. When the user picks a |
apps/web/src/hooks/useLoadBalancedEnvironment.ts+12-8| ... | ... | @@ -30,21 +30,25 @@ export function useLoadBalancedEnvironment( |
| 30 | 30 | resources: result._tag === "Success" ? result.value : null, |
| 31 | 31 | receivedAt: result._tag === "Success" ? result.timestamp : 0, |
| 32 | 32 | pending: result._tag === "Initial" || result.waiting, |
| 33 | failed: result._tag === "Failure", | |
| 33 | 34 | }; |
| 34 | 35 | }), |
| 35 | 36 | ), |
| 36 | 37 | [environmentIds], |
| 37 | 38 | ); |
| 38 | 39 | const resources = useAtomValue(resourcesAtom); |
| 40 | const pending = resources.some((resource) => resource.pending); | |
| 41 | const environmentId = chooseLoadBalancedEnvironment( | |
| 42 | resources.map((resource) => ({ | |
| 43 | ...resource, | |
| 44 | weight: weights[resource.environmentId] ?? 50, | |
| 45 | })), | |
| 46 | Date.now(), | |
| 47 | ) as EnvironmentId | null; | |
| 39 | 48 | return { |
| 40 | 49 | refresh, |
| 41 | pending: resources.some((resource) => resource.pending), | |
| 42 | environmentId: chooseLoadBalancedEnvironment( | |
| 43 | resources.map((resource) => ({ | |
| 44 | ...resource, | |
| 45 | weight: weights[resource.environmentId] ?? 50, | |
| 46 | })), | |
| 47 | Date.now(), | |
| 48 | ) as EnvironmentId | null, | |
| 50 | pending, | |
| 51 | environmentId, | |
| 52 | failed: !pending && environmentId === null && resources.some((resource) => resource.failed), | |
| 49 | 53 | }; |
| 50 | 54 | } |
packages/client-runtime/src/state/server.ts+1| ... | ... | @@ -1021,6 +1021,7 @@ export function createServerEnvironmentAtoms<R, E>( |
| 1021 | 1021 | }), |
| 1022 | 1022 | hostResources: createEnvironmentQueryAtomFamily(runtime, { |
| 1023 | 1023 | label: "environment-data:server:host-resources", |
| 1024 | idleTtlMs: 0, | |
| 1024 | 1025 | staleTimeMs: 5_000, |
| 1025 | 1026 | execute: (input: EnvironmentRpcInput<typeof WS_METHODS.serverGetHostResources>) => |
| 1026 | 1027 | request(WS_METHODS.serverGetHostResources, input).pipe(Effect.timeout("5 seconds")), |