# Toolkit fixes for Google Drive, Antigravity, Airflow and DuckDB

> Agno's GoogleDriveTools reads text in grouped shapes and line breaks in .pptx files, the YAML helpers, AntigravityTools and AirflowTools use UTF-8 on every locale, and DuckDbTools escapes CSV delimiters.

- Published: 2026-09-23
- Author: Yash Raj Pandey
- Categories: Changelog
- Canonical: https://www.agno.com/articles/toolkit-fixes-for-google-drive-antigravity-airflow-and-duckdb
- Markdown: https://www.agno.com/articles/toolkit-fixes-for-google-drive-antigravity-airflow-and-duckdb.md

Agno's `GoogleDriveTools`, `AntigravityTools`, `AirflowTools` and `DuckDbTools` each got a fix for content they dropped or mangled. The outputs below are real, from the previous release and this one.

### `GoogleDriveTools` reads grouped shapes and line breaks in .pptx files

`GoogleDriveTools.read_file` extracts the text of a `.pptx` file for the model. The extractor read only the top level of each slide, and a group shape has no text of its own, so every text box inside a group went missing. The extractor also built each paragraph by joining its runs. A line break isn't a run, so two lines ran together. `GoogleDriveTools` now walks into groups, including nested groups, and turns each line break into a new line. `aread_file` calls `read_file`, so it gets the same fix. For a slide with a text box, a grouped text box and a paragraph with a line break:

```text
Before: '=== Slide 1 ===\nQ3 review\nOwner: AdaDue: Friday'
Now:    '=== Slide 1 ===\nQ3 review\nRevenue up 12%\nOwner: Ada\nDue: Friday'
```

### YAML helpers, `AntigravityTools` and `AirflowTools` use UTF-8

`read_yaml_file` and `write_yaml_file` in `agno.utils.yaml_io` read and wrote files in the locale's default encoding. On a Windows machine that uses cp1252, a UTF-8 value like `café` loaded as `cafÃ©`, and writing Japanese text with `allow_unicode=True` failed. Both helpers now use UTF-8. With cp1252 as the default encoding:

```text
Before: read  -> {'name': 'cafÃ©'}
        write -> UnicodeEncodeError 'charmap' codec can't encode characters in position 10-14
Now:    read  -> {'name': 'café'}
        write -> greeting: こんにちは
```

`AntigravityTools` and `AntigravityAgent.from_agent_directory` now read `agent.yaml`, `AGENTS.md`, and workspace and skills files as UTF-8. Non-ASCII descriptions and instructions used to reach the API garbled, and UTF-8 workspace files were skipped as "not UTF-8 text". `AirflowTools.save_dag_file` and `AirflowTools.read_dag_file` now write and read DAG files as UTF-8, so a DAG with non-ASCII text stays valid Python source.

Files for these tools now need to be UTF-8 on Windows too. A YAML file, `agent.yaml` or `AGENTS.md` saved as cp1252 with non-ASCII characters raises `UnicodeDecodeError`.

### `DuckDbTools` escapes CSV delimiters

`DuckDbTools.load_local_csv_to_table` and `DuckDbTools.load_s3_csv_to_table` pasted the `delimiter` straight into a SQL string. A single quote is a valid CSV delimiter, and it broke the SQL, so DuckDB created no table. Both methods now escape the delimiter the same way they already escape the path. Loading a CSV that uses `'` as its delimiter:

```text
Before: ... read_csv('.../q.csv', ignore_errors=false, auto_detect=true, delim=''');
        SELECT * FROM people -> Catalog Error: Table with name people does not exist!
Now:    ... read_csv('.../q.csv', ignore_errors=false, auto_detect=true, delim='''');
        SELECT * FROM people -> name,city / Ada,London
```

See the [cookbook](https://github.com/agno-agi/agno/blob/main/cookbook/91_tools/duckdb_tools.py), and learn more about the [Google Drive](https://docs.agno.com/tools/toolkits/others/google-drive), [Antigravity](https://docs.agno.com/tools/toolkits/others/antigravity), [Airflow](https://docs.agno.com/tools/toolkits/others/airflow) and [DuckDB](https://docs.agno.com/tools/toolkits/database/duckdb) toolkits in the documentation.
