> ## Documentation Index
> Fetch the complete documentation index at: https://docs.declaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Gemini Code Interpreter

> Use Google Gemini (gemini-2.0-flash) to generate Python code from natural language questions, then execute it securely in a Declaw sandbox. Uses the google-genai SDK.

## What You'll Learn

* Sending prompts to the Google Gemini API (`gemini-2.0-flash`) using the `google-genai` SDK
* Using `client.models.generate_content()` — the newer Google AI SDK interface
* Stripping markdown code fences from LLM responses before execution
* Writing generated code into a Declaw sandbox filesystem
* Executing the code securely with `sbx.commands.run()`
* Graceful demo mode when no API key is configured

## Prerequisites

* Declaw instance running and `DECLAW_API_KEY` / `DECLAW_DOMAIN` set
* `GOOGLE_API_KEY` (optional — the example runs in demo mode without it)

```bash theme={null}
pip install declaw python-dotenv google-genai
```

## Code Walkthrough

<Note>This example is available in Python. TypeScript support coming soon.</Note>

### 1. Ask Gemini to generate Python code

The `google-genai` SDK (the newer Google AI SDK, distinct from the older `google-generativeai`) uses a `Client` with `models.generate_content()`:

```python theme={null}
from google import genai
from declaw import Sandbox

client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=(
        "You are a Python code interpreter. When asked a question, "
        "respond ONLY with Python code that computes the answer and "
        "prints it. No markdown, no explanation, just code.\n\n"
        "Question: Count the frequency of each word in "
        "'the quick brown fox jumps over the lazy dog the fox the dog'"
    ),
)
```

<Note>
  Use `google-genai` (not `google-generativeai`). The newer SDK ships as `from google import genai` and uses the `genai.Client()` pattern shown above.
</Note>

### 2. Strip code fences and execute in a sandbox

````python theme={null}
def strip_code_fences(code: str) -> str:
    code = code.strip()
    if code.startswith("```"):
        code = "\n".join(code.split("\n")[1:])
    if code.endswith("```"):
        code = "\n".join(code.split("\n")[:-1])
    return code.strip()

code = strip_code_fences(response.text or "")

sbx = Sandbox.create(template="python", timeout=300)
try:
    sbx.files.write("/tmp/solution.py", code)
    result = sbx.commands.run("python3 /tmp/solution.py", timeout=30)
    print(result.stdout)
    print(result.exit_code)
finally:
    sbx.kill()
````

### 3. Demo mode (no API key needed)

```python theme={null}
code = """\
from collections import Counter

text = "the quick brown fox jumps over the lazy dog the fox the dog"
words = text.split()
counter = Counter(words)

print("Word frequencies:")
for word, count in counter.most_common():
    print(f"  {word}: {count}")
print(f"\\nTotal words: {len(words)}")
print(f"Unique words: {len(counter)}")
"""

sbx = Sandbox.create(template="python", timeout=300)
try:
    sbx.files.write("/tmp/demo.py", code)
    result = sbx.commands.run("python3 /tmp/demo.py", timeout=30)
    print(result.stdout)
finally:
    sbx.kill()
```

## Expected Output

```
============================================================
Gemini Code Interpreter with Declaw Sandbox
============================================================

--- Demo: Running pre-written code in Declaw sandbox ---

Sandbox created: sbx_abc123
  Output:
Word frequencies:
  the: 4
  fox: 2
  dog: 2
  quick: 1
  brown: 1
  jumps: 1
  over: 1
  lazy: 1

Total words: 12
Unique words: 8

Sandbox killed.
```
