Toolkit fixes for Google Drive, Antigravity, Airflow and DuckDB
September 23, 20261 min read
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:
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:
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:
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,LondonSee the cookbook, and learn more about the Google Drive, Antigravity, Airflow and DuckDB toolkits in the documentation.
Frequently asked questions
GoogleDriveTools.read_file read only the top level of each slide, so it skipped text boxes inside a group, and it joined the runs of a paragraph, which dropped line breaks. The fix makes GoogleDriveTools read text inside groups, nested ones included, and keep each line break as a new line.
read_yaml_file and write_yaml_file used the locale's default encoding, which is cp1252 on many Windows machines. Both helpers now read and write UTF-8, and so do AntigravityTools, AntigravityAgent.from_agent_directory and AirflowTools.
Yes. DuckDbTools.load_local_csv_to_table and load_s3_csv_to_table now escape the delimiter inside the SQL they build. A single quote used to produce invalid SQL, and DuckDB created no table.




