Google

Gemini 3.1 Pro

Google's thinking model works through hard problems and long documents, including tables and images.

  • Long documents
  • Reasoning
  • Multimodal questions

Made with Gemini 3.1 Pro

Real output from our prompts, unedited.

What changed in solid-state battery production for electric cars in the last twelve months? Give five key developments, each with a source link.

Here are five key developments in solid-state and semi-solid battery production for electric vehicles over the past year:

1. Mercedes-Benz & Factorial Energy Road Testing

At the end of 2024, Mercedes-Benz successfully installed a lithium-metal solid-state battery into a modified EQS test vehicle [14]. Developed in partnership with Factorial Energy, the prototype pack achieved an estimated driving range of 620 miles—a 25% efficiency improvement over standard lithium-ion batteries of the exact same size [14]. Source link: CarBuzz

2. Nio’s Semi-Solid-State Battery Swaps

In 2024, Chinese automaker Nio rolled out 150-kWh semi-solid-state battery packs produced by WeLion [16]. Boasting an impressive energy density of 260 Wh/kg, these packs were initially manufactured as a high-range rental option for Nio owners taking long road trips via the company's battery-swapping stations [16]. Source link: MotorTrend

3. Nissan’s Yokohama Pilot Line

As part of its "Ambition 2030" initiative, Nissan established a pilot production line for solid-state EV batteries at its Yokohama Plant in 2024 [7]. By proving out the manufacturing process early, Nissan is targeting a drastic reduction in battery costs to just $75 per kWh by 2028 [7]. Source link: EV Magazine

4. Chery and Axxiva Prototype Production

In July 2024, Axxiva—a battery manufacturer backed by Chinese auto giant Chery and Gotion High-Tech—began rolling off its first all-solid-state battery prototypes [13]. These initial batteries achieved an energy density of 300 Wh/kg, marking a critical milestone toward Chery’s goal of launching pilot solid-state vehicles by 2026 [13]. Source link: Electrive

5. Honda’s Sakura City Facility

Honda officially accelerated its solid-state efforts in 2024 by launching a dedicated battery prototype production line at its facility in Sakura City, Japan [15]. Aided by partnerships, Honda is investing heavily in this early-stage manufacturing to eventually double the driving range of its commercial EVs before the end of the decade [15]. Source link: Engadget

  1. [7] Top 10: Solid State EV Battery Manufacturers | EV Magazine
  2. [13] Chery announces breakthrough in solid-state battery development - electrive.com
  3. [14] Solid-State Battery Breakthroughs: From Lab to Road-Ready
  4. [15] Honda Has A New Partner For The Advancement Of Solid-State Battery Technology
  5. [16] Solid-State Batteries vs. Semi-Solid Batteries: What’s Actually Coming to EVs?

Write a TypeScript function `debounceAsync` that debounces an async function, cancels stale calls with AbortController and always resolves the latest call. Include a short usage example.

Here is a robust implementation of debounceAsync.

It uses a single shared Promise for rapid sequential calls. This ensures that when the debounce window finally closes and the latest async function completes, all preceding stale calls in that batch resolve with the final, correct data.

The Implementation

typescript
export function debounceAsync<TArgs extends any[], TReturn>(
  fn: (signal: AbortSignal, ...args: TArgs) => Promise<TReturn>,
  wait: number
) {
  let timeoutId: ReturnType<typeof setTimeout>;
  let controller: AbortController | null = null;
  let activePromise: Promise<TReturn> | null = null;
  let resolveActive: ((val: TReturn) => void) | null = null;
  let rejectActive: ((err: any) => void) | null = null;

  return (...args: TArgs): Promise<TReturn> => {
    // 1. Reset the debounce timer
    clearTimeout(timeoutId);

    // 2. Abort any previous in-flight network requests/async tasks
    if (controller) {
      controller.abort();
    }

    controller = new AbortController();
    const signal = controller.signal;

    // 3. Create a shared promise for this batch of calls
    if (!activePromise) {
      activePromise = new Promise<TReturn>((resolve, reject) => {
        resolveActive = resolve;
        rejectActive = reject;
      });
    }

    const currentPromise = activePromise;

    timeoutId = setTimeout(async () => {
      try {
        const result = await fn(signal, ...args);
        // If a new call came in while this was fetching, ignore the result
        if (!signal.aborted) {
          resolveActive?.(result);
          activePromise = null; // Reset for the next batch
        }
      } catch (error) {
        if (!signal.aborted) {
          rejectActive?.(error);
          activePromise = null;
        }
      }
    }, wait);

    return currentPromise;
  };
}

Usage Example

This is especially useful for typeahead search inputs. Stale network requests are aborted via the signal, saving bandwidth, and all keystrokes gracefully resolve to the final search result.

typescript
// 1. Define your async function, accepting the AbortSignal
async function searchUsers(signal: AbortSignal, query: string) {
  const response = await fetch(`/api/users?q=${query}`, { signal });
  if (!response.ok) throw new Error("Network error");
  return response.json();
}

// 2. Create the debounced version
const debouncedSearch = debounceAsync(searchUsers, 300);

// 3. Simulate rapid user typing
async function simulateTyping() {
  // These first two calls will be aborted and share the final Promise
  debouncedSearch("Kwi").then(res => console.log("Call 1:", res));
  debouncedSearch("Kwir").then(res => console.log("Call 2:", res));
  
  // This is the final call that actually executes after 300ms
  const finalResult = await debouncedSearch("Kwirl");
  console.log("Call 3:", finalResult);
  
  // Console output (all three log the same final result):
  // Call 1: [{ name: "Kwirl AI" }]
  // Call 2: [{ name: "Kwirl AI" }]
  // Call 3: [{ name: "Kwirl AI" }]
}

A bag has 4 red, 5 blue and 6 green marbles. You draw three without replacement. What is the probability that all three are different colours? Show your working and give the answer as a fraction.

Here is the step-by-step solution to find the probability of drawing three marbles of different colours.

Total Combinations

First, we calculate the total number of ways to draw 3 marbles from the bag without replacement.

  • Total marbles: 4 (red) + 5 (blue) + 6 (green) = 15 marbles

Using the combinations formula, the number of possible ways to choose 3 marbles out of 15 is: $$ \binom{15}{3} = \frac{15 \times 14 \times 13}{3 \times 2 \times 1} = 455 $$

There are 455 total possible outcomes.

Successful Combinations

Next, we calculate the number of ways to successfully draw exactly one marble of each colour (1 red, 1 blue, and 1 green).

We find the combinations for each colour individually:

  • Ways to choose 1 red marble out of 4: 4
  • Ways to choose 1 blue marble out of 5: 5
  • Ways to choose 1 green marble out of 6: 6

Multiply these together to find the total number of successful combinations: $$ 4 \times 5 \times 6 = 120 $$

There are 120 ways to draw three different colours.

Final Probability

The probability is the number of successful combinations divided by the total possible combinations: $$ \text{Probability} = \frac{120}{455} $$

To simplify the fraction, we divide the numerator and the denominator by their greatest common divisor, which is 5:

  • $120 \div 5 = 24$
  • $455 \div 5 = 91$

Final Answer: The probability that all three marbles are different colours is 24/91.

Specs

Google's thinking model for long documents and hard problems.

Context window
200K tokens
Longest reply
16K tokens
Thinks before answering
Yes
Understands images
Yes
Reads PDFs
Yes
Web search and tools
Yes

Compare with