# Gooey.AI Docs

Low-code AI orchestration platform to empower people everywhere.

Welcome to our docs center. Here you'll find guides, tips, and how-tos to get the most out of Gooey.AI and the amazing collection of AI Workflows from our community.&#x20;

## What does Gooey.AI offer?

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h4>Create</h4></td><td>Create no-code multi-lingual and measurable AI Agent </td><td><a href="/pages/TNFdldkHahdWtRF2UuOe">/pages/TNFdldkHahdWtRF2UuOe</a></td><td><a href="/files/2EBayiFaBdVYRVl6xDcn">/files/2EBayiFaBdVYRVl6xDcn</a></td></tr><tr><td><h4>Deploy</h4></td><td>Deploy with one-click to WhatsApp, IVR and Web</td><td><a href="/pages/0uwHZrw8JVI43zfOGuEl">/pages/0uwHZrw8JVI43zfOGuEl</a></td><td><a href="/files/WTohDwz53PUobDxejyA9">/files/WTohDwz53PUobDxejyA9</a></td></tr><tr><td><h4>Monitor</h4></td><td>Evaluate and analyze agent performance</td><td><a href="/pages/OHH1DgGSAIvBRrrAwK30">/pages/OHH1DgGSAIvBRrrAwK30</a></td><td><a href="/files/MB0hZtzvAlc05UCkevme">/files/MB0hZtzvAlc05UCkevme</a></td></tr></tbody></table>

### How does Gooey.AI Orchestration work?

{% embed url="<https://www.youtube.com/watch?v=nQM5dp6V70E>" %}

### Help Desk

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-type="content-ref"></th><th data-hidden data-type="files"></th></tr></thead><tbody><tr><td><h4>How to use Workspaces?</h4></td><td><a href="/pages/pn7goPurFDApwgJxUYcu">/pages/pn7goPurFDApwgJxUYcu</a></td><td><a href="/pages/x3FY2a1T2594uMvVjN1p">/pages/x3FY2a1T2594uMvVjN1p</a></td><td></td></tr><tr><td><h4>How to use Version History</h4></td><td><a href="/pages/JxL1lwGJAGLEa9bddsSq">/pages/JxL1lwGJAGLEa9bddsSq</a></td><td><a href="/pages/xnXQHQiPdw9uWvjCYQ2E">/pages/xnXQHQiPdw9uWvjCYQ2E</a></td><td></td></tr><tr><td><h4>Get started with Gooey.AI API</h4></td><td><a href="/pages/xnXQHQiPdw9uWvjCYQ2E">/pages/xnXQHQiPdw9uWvjCYQ2E</a></td><td></td><td></td></tr></tbody></table>


# Changelog

All notable changes to this project will be documented in this file. It keeps track of changes to the GooeyAI repository - [gooey-server](https://github.com/gooeyAI/gooey-server) and other changes to the [Documentation](https://docs.gooey.ai/) and the [Gooey.AI](https://gooey.ai/) website.&#x20;

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## 25-June-2026

Added

* [New /account/memory view to browse saved memory entries](https://github.com/GooeyAI/gooey-server/commit/4b39f90e905ac3df34db9b16b31b0b6a63ba52f6)
* [Filters for the /account/memory view](https://github.com/GooeyAI/gooey-server/commit/4466146a2201330438fa8538382d0ccc2c4d6f1c)
* [Scope and relationship fields added to MemoryEntry model](https://github.com/GooeyAI/gooey-server/commit/4e881b2645a0cf3ad14e45bb56077c56dddea9c7)
* [Language-based filtering for TTS providers and voices](https://github.com/GooeyAI/gooey-server/commit/7749ba73426dad24927438e7be4b20a655f025bb)

Fixed

* [Correct button alignment in list view editor](https://github.com/GooeyAI/gooey-server/commit/c102612532acf45cc79356a35d0871d921b1f3d9)
* [Fix TTS/ASR filter selector key in VideoBots](https://github.com/GooeyAI/gooey-server/commit/3c335279863edd447d7920b5bd5674b5ebeaa872)
* [Guard Google TTS language lookup when credentials are missing](https://github.com/GooeyAI/gooey-server/commit/195ceacca0b15db22fa1fcd60661051a651f19cb)
* [Refresh stale Google TTS voice cache after shape change](https://github.com/GooeyAI/gooey-server/commit/837e7cc1f147b1c42094c2bea62e8cd67001cbc6)
* [Update language filter label for clarity](https://github.com/GooeyAI/gooey-server/commit/349ac37bf65288a3b4f67069669a763468da9899)
* [Fix home saved card — clamp description and cap thumbnail height](https://github.com/GooeyAI/gooey-server/commit/1270fb0d844e024729861c0d8a5b87720b84d4a9)

## 23-June-2026

Fixed

* [Healthcheck fix](https://github.com/GooeyAI/gooey-server/commit/2f17ad52b06c8ac6a2d33b67fb49d5b27d5a885d)
* [Fix Composio meta tools running in an in-process tool-router session](https://github.com/GooeyAI/gooey-server/commit/8ad2e4c1eea320f5d24e8e2e397aee98cf942dd5)

## 22-June-2026

Added

* [New /home page launched for logged-in users](https://github.com/GooeyAI/gooey-server/commit/ebbe88c7c5982871473fe2701b221f74e6dbe900)

## 19-June-2026

Fixed

* [Truncate long workflow card titles in history view](https://github.com/GooeyAI/gooey-server/commit/7af9e62c0aa2a521f74203fa549ea76acc07aed0)
* [Show Home page link in mobile menu](https://github.com/GooeyAI/gooey-server/commit/6479d90c67f5cc2f85c43ae8bd848fc900238c23)
* [Allow workflow tab selector to scroll](https://github.com/GooeyAI/gooey-server/commit/1443ee40e3c4d6df88c19d4ee5a0c699a3d2a50a)
* [Fix text clamping and mobile grid layout for recent workflows](https://github.com/GooeyAI/gooey-server/commit/27e7d3a7bdf1901170441f9f6c07aeae91a5b1ba)

## 18-June-2026

Fixed

* [Correctly save run transaction and price data](https://github.com/GooeyAI/gooey-server/commit/8de9bd55b91fc0240c6d20cb0ae8eedc22f11bd8)
* [Show all workflows in Gooey Builder conversations](https://github.com/GooeyAI/gooey-server/commit/7b7d76d86d2c2b72aadbda2616d4d278fa8d759e)
* [Persist run price correctly in SavedRun and clean up bulk progress UI](https://github.com/GooeyAI/gooey-server/commit/80674ddc881936d3d5a7419020366ccf46bcf66b)
* [Map cancelled bulk runs to stopped state after completion](https://github.com/GooeyAI/gooey-server/commit/76add6c1614974d51effc6d404b7916e57803052)
* [Report correct starting row number in bulk progress display](https://github.com/GooeyAI/gooey-server/commit/4a422221e720967da6afcf8e0d339534d976e08a)

## 16-June-2026

Added

* [Support for local file storage](https://github.com/GooeyAI/gooey-server/commit/83f29e42ddde12da30f4650de338f975ca026948)

Fixed

* [Fix local file uploads from the web widget](https://github.com/GooeyAI/gooey-server/commit/bb79fbbef9295d93da0406e6c0f254fdea31c2fe)

## 13-June-2026

Added

* [Track call site with a new surface field on SavedRun; filter history and builder conversations by surface](https://github.com/GooeyAI/gooey-server/commit/4cd6c24dccd6a7330a725e710a6e7ccc45f5a28a)

Fixed

* [Scope OpenAI TTS voice options to the selected model (adds Marin & Cedar voices)](https://github.com/GooeyAI/gooey-server/commit/90ae57966d154d825fde7adc9544cae7cad86ff1)
* [Migrate OpenAI Realtime WebSocket to GA interface](https://github.com/GooeyAI/gooey-server/commit/d61ce0f8287ca411fb575515adbd69f02fb5f500)
* [Remove temperature from OpenAI Realtime audio path](https://github.com/GooeyAI/gooey-server/commit/1a1e0d7a90752c5f594cf5929d36851989630a33)

## 10-June-2026

Added

* [Bulk runner progress display](https://github.com/GooeyAI/gooey-server/commit/07db9669b27e99f6b2b76688222704fdb121d570)
* [Reordered bulk run complete stats and added per-workflow elapsed timer](https://github.com/GooeyAI/gooey-server/commit/9ef0e40d002ab2181d341da24fe33af8ebcbc940)
* [Font Awesome icon and color support for Tags on the home page](https://github.com/GooeyAI/gooey-server/commit/18fd207deb027c9e0e92bd63694be212404371a9)
* [Font Awesome icon and color support for WorkflowMetadata; wired to home page icons](https://github.com/GooeyAI/gooey-server/commit/4bf9778904b71f38af98986b64fa1d38d4bbaf1f)
* [Link CMS workflow tabs to WorkflowMetadata](https://github.com/GooeyAI/gooey-server/commit/d09bee9038bbc558c554f25d8b4412b85ebd418e)

## 07-June-2026

Fixed

* [Improve Composio error handling](https://github.com/GooeyAI/gooey-server/commit/a83fcaf9d07bfbb0d320fa5d1ea2cb7556304a1d)

## 05-June-2026

Fixed

* [Hide Gooey Builder runs from non-admin users](https://github.com/GooeyAI/gooey-server/commit/20817d665e8dfec6333648ac0ce5e0b13f617fbc)
* [Restore real-time updates from both workflow and builder channels](https://github.com/GooeyAI/gooey-server/commit/42215fd02177a13e49aaace9889a00ed2d7d1697)
* [Fix document JSON parsing](https://github.com/GooeyAI/gooey-server/commit/40a2fefc7493a10c29d9c81c897329d6d482b403)
* [Restore error metadata so custom error widgets render correctly](https://github.com/GooeyAI/gooey-server/commit/4a5b10352d272b0e98db256851aa5f39ccf18023)

## 02-June-2026

Added

* [Close dialogs by pressing the Esc key](https://github.com/GooeyAI/gooey-server/commit/989ef6b0b107fd738cdacf526cef8654dc2a1b7f)

## 29-May-2026

Fixed

* [Prevent stale Bulk Eval columns from producing phantom evaluation results](https://github.com/GooeyAI/gooey-server/commit/f174d8eb81be2f963c361f918db99ff95b77c215)
* [Align workflow URL action buttons correctly](https://github.com/GooeyAI/gooey-server/commit/9b2e287131f85dec763a8c437ea33d409aa7d0fb)

## 28-May-2026

Fixed

* [Improve error handling in workflows](https://github.com/GooeyAI/gooey-server/commit/c76941232916862a78b38a7598311d32a08131fc)

## 26-May-2026

Fixed

* [Show API runs only under History → "All", not under "Just me"](https://github.com/GooeyAI/gooey-server/commit/e065b170f0c67dbffa73eacfd24f83be76727b3e)

## 19-May-2026

Added

* [Support for Fal billable units and improved pricing handling](https://github.com/GooeyAI/gooey-server/commit/db0c37d5937cf1870194e9584295c4654cfe1e96)

Fixed

* [Ensure pricing is correctly saved after model changes](https://github.com/GooeyAI/gooey-server/commit/51497e3978242d9a2747aaa720cfc60c008ced3d)

## 15-May-2026

Added

* [Pagination on the workflow search page](https://github.com/GooeyAI/gooey-server/commit/5e455911c41600e7857faedf58046995008cfd4c)
* [A7, A30, R7, R30 retention columns in messages CSV export](https://github.com/GooeyAI/gooey-server/commit/17bdbabc71a0ba71e19023ec1c2b092380b63db0)

Fixed

* [Resolve infinite redirect loop on invalid pagination cursor](https://github.com/GooeyAI/gooey-server/commit/db3bd49883547eb362e3ab9726823d32d546a6e9)
* [Redirect to first page when pagination URL is malformed](https://github.com/GooeyAI/gooey-server/commit/ac8bdcd163d0d0b1b462f2f9f6f62fd6293a06bf)
* [Handle invalid URL parameters for pagination gracefully](https://github.com/GooeyAI/gooey-server/commit/96e906ff3d08eb0b2ebb804521468d316b006f62)
* [Prioritise the user's own workflows in the featured list](https://github.com/GooeyAI/gooey-server/commit/a73427fa30885b94b1352bf283ca0dfe280c83bc)
* [Show detailed feedback toggle in admin panel](https://github.com/GooeyAI/gooey-server/commit/5937ad8562282d2032c6da6dd9eaa5a9ef6eb0a2)
* [Allow the detailed feedback toggle to be changed independently](https://github.com/GooeyAI/gooey-server/commit/f2cb98e3a177f1e61623ae9fa245e162f25a9496)
* [Make the "Let's Talk" link work on Enterprise pages](https://github.com/GooeyAI/gooey-server/commit/1bd676c6dc60f8fc760dcda7f46050a7ed1a2de6)

## 12-May-2026

**Fixed**

* [Retry on 504 timeout errors from Intron ASR](https://github.com/GooeyAI/gooey-server/commit/b13933dba65a205284b0d50e06cc5025c667ada1)

## 8-May-2026

**Fixed**

* [use call transfer tool for voice bots](https://github.com/GooeyAI/gooey-server/commit/ded22b70ec23161945ed1aa48b90303150419503)
* [avoid TypeError on ShortenedURL admin Add/Duplicate page](https://github.com/GooeyAI/gooey-server/commit/c43b5d1a85ed2bdb2205037f6a09467bd5647cb6)

## 7-May-2026

**Fixed**

* [IndexError: list index out of range](https://github.com/GooeyAI/gooey-server/commit/b7b76b26efada3f4e7c677222c578bebdc9bde13)
* [integrity error for yt-dlp metadata with unknown file size](https://github.com/GooeyAI/gooey-server/commit/2c7f3e84b27518676728d7af98598bae6682ee5d)
* [raw\_tts\_text cleanup for thinking traces](https://github.com/GooeyAI/gooey-server/commit/5afbd2415a5a26ee33a9b9c0a2ed76653c8aa060)

**Added**

* [Release Bot Builder for All](https://github.com/GooeyAI/gooey-server/commit/f6a4152c42da8f08119731158d07e68c659c8659)

## 5-May-2026

**Fixed**

* [keep file upload ON by default for new web integration](https://github.com/GooeyAI/gooey-server/commit/317c71d448aa135fd6ca68d14d3a03b4a02ff2ef)

## 4-May-2026

**Fixed**

* [set LiveKit Gemini Vertex requests to global region](https://github.com/GooeyAI/gooey-server/commit/5834d5dfc590f062725af893eeb5c8b37d0c3f05)

## 1-May-2026

**Added**

* [when filtering by workspace default sort should be last\_updated](https://github.com/GooeyAI/gooey-server/commit/130100bca2d70581614abbb94ddee0b99e5387df)

**Fixed**

* [handle openai swallowing task cancellation](https://github.com/GooeyAI/gooey-server/commit/c8b1611ab1dda5584ffd9b8344c4b96e728b95f1)

## 30-April-2026

**Added**

* [Stop button to cancel in-progress runs](https://github.com/GooeyAI/gooey-server/commit/7395eda4cf76b59cce735ba945d6435c8c7d1037)
* [Immediately revoke background task when a run is stopped](https://github.com/GooeyAI/gooey-server/commit/998aaa1c38410e855fb9b59c1dfedf1546ee1719)

**Fixed**

* [Show globe icon on share button for public workflows](https://github.com/GooeyAI/gooey-server/commit/dacc414863371276c55f16073f04be97ef81e3ed)
* [Show sharing level in workflow search results](https://github.com/GooeyAI/gooey-server/commit/31fdd0f54df08d3fe4ae0369a566e6e74002dcbf)

## 29-April-2026

**Fixed**

* [Prevent LiveKit DTMF and bot session overlap in voice deployments](https://github.com/GooeyAI/gooey-server/commit/4d631079d16ed3b39380261f12cd0efb8f61bf18)
* [Resolve conflicting CSS styles](https://github.com/GooeyAI/gooey-server/commit/3ac2c5e65293efff2786d2e22679308af23b0c39)

## 28-April-2026

**Added**

* [Dynamic error messages when a run fails due to insufficient credits](https://github.com/GooeyAI/gooey-server/commit/8a751dbd3a82621339c28b79bb6d492ac8ed00b6)

**Fixed**

* [Preserve playable video instead of showing thumbnails in full output](https://github.com/GooeyAI/gooey-server/commit/78f26503baca9acfce45e8f5d2ed22233efa1d7d)
* [Re-upload safety and metadata refresh for file blobs](https://github.com/GooeyAI/gooey-server/commit/80bad08926acf25fd3726652313dd436c52beacd)
* [Update contact URL from help.gooey.ai to gooey.ai](https://github.com/GooeyAI/gooey-server/commit/34300a8be8416536d3cd38d7fa5655534a323219)
* [Correct InsufficientCredits error price reporting](https://github.com/GooeyAI/gooey-server/commit/fb514cfb87b82897ef8f190277baef771ba9c1ce)
* [Fix LiveKit import and duplicate delete() call](https://github.com/GooeyAI/gooey-server/commit/02b443874980cfd32258547273fcbca5acea080b)

## 27-April-2026

**Added**

* [Gemini Live 3.1 support in LiveKit Voice deployments](https://github.com/GooeyAI/gooey-server/commit/f262feed11fad4c3c2dec84a875e528e3a6768fe)

**Fixed**

* [Handle Gemini 3.1 initial greeting correctly with session.say](https://github.com/GooeyAI/gooey-server/commit/31e9167b27a31a7307cd44c419ddda13ddbd13cd)
* [Add prompt validation in Bulk Eval to ensure user input is provided](https://github.com/GooeyAI/gooey-server/commit/9e15ad075f718e894dbc09971cf767a8725eb394)

## 23-April-2026

**Added**

* [Deploy Workflow as an LLM Tool, with WhatsApp country code selector](https://github.com/GooeyAI/gooey-server/commit/1f21165f4288ded57bce01f53613f8f7a3b13a98)

**Fixed**

* [Deployment no longer duplicates the published run before validating Telegram bot token](https://github.com/GooeyAI/gooey-server/commit/7d1ecb814f2014354d57afb709124e4d6c2b553b)
* [Fix "last saved version" link in the integrations tab](https://github.com/GooeyAI/gooey-server/commit/7d1ecb814f2014354d57afb709124e4d6c2b553b)

## 22-April-2026

**Added**

* [GPT Image 2 model support](https://github.com/GooeyAI/gooey-server/commit/0f439a4e0e3e1d4ddaab0c061afd1d71b3b09773)

## 21-April-2026

**Added**

* [Code editor for Bulk Eval prompts, graph captions, and "lower is better" grading option](https://github.com/GooeyAI/gooey-server/commit/bafeb119b2124567726af992b5e54d884358e54f)

## 20-April-2026

**Added**

* [Dynamic LLM tool search via dynamicLLMToolLoader](https://github.com/GooeyAI/gooey-server/commit/be2185ee7881ec205879a9a1a3b899156e2aa7d1)

**Fixed**

* [Video and audio model enum schema generator](https://github.com/GooeyAI/gooey-server/commit/c982d7364eb4154ab3f4a13a51703813b9e3547e)

## 16-April-2026

**Fixed**

* [Properly center "Processing…" text on the processing page](https://github.com/GooeyAI/gooey-server/commit/c1ed099625857b22a4df46ecee8c4be7ea29babf)
* [Current plan card rendering on mobile view](https://github.com/GooeyAI/gooey-server/commit/a66e824a26696a91fc1ea4499a89969d75528c3e)
* [Downgrade Pro plan correctly and show downgrade info for tier](https://github.com/GooeyAI/gooey-server/commit/2f6ca78f04de57b60a860083e44940caa41c2634)
* [Clear all pending Stripe subscription changes before cancellation](https://github.com/GooeyAI/gooey-server/commit/267181c09d9ee383fa91d98469f4dd175a1b1368)
* [Don't send low balance email for Team workspaces](https://github.com/GooeyAI/gooey-server/commit/8113f7682bdef947be0e775a7cd5c28b3d581eea)
* [Default seat count to next highest option when not in plan options](https://github.com/GooeyAI/gooey-server/commit/d21a74d61f089c461b3a7d68b5ad67c51f85da11)
* [PayPal users can now see seat selection](https://github.com/GooeyAI/gooey-server/commit/c20aacd2c00776224fef6758d192ceceba16b082)
* [Clear pending Stripe changes before upgrade or downgrade](https://github.com/GooeyAI/gooey-server/commit/f19b6633179bff44dfe5045f37f473a9fa3e8ab7)

## 14-April-2026

**Added**

* ["Last login" column in the workspace members view](https://github.com/GooeyAI/gooey-server/commit/08ac231bb13599446cc5456883aca3a89f25f46b)

**Fixed**

* [Invite accept logic now correctly creates admin seats](https://github.com/GooeyAI/gooey-server/commit/cdcfedfa55dfadd3de3343f32cd34a0bde2b001e)
* [Payment method detach now called before redirect](https://github.com/GooeyAI/gooey-server/commit/017fade77922a582c2e0acde4ebbcc418eb208c5)

## 10-April-2026

**Fixed**

* [Files uploaded via API are now correctly marked as user-uploaded](https://github.com/GooeyAI/gooey-server/commit/23c80ec1b599f9e7a4485ccc2941e504d29a32d4)

## 07-April-2026

**Fixed**

* [Show "Upgrade to invite members" only to admins on a free team](https://github.com/GooeyAI/gooey-server/commit/378337ec395cf666c5cdebfb0dfd92a310c3fcd0)
* [Schedule plan change correctly for all downgrades](https://github.com/GooeyAI/gooey-server/commit/1c26d79fca3e7649214fe12805996821906a87b4)
* [Rounding error in Pro plan pricing](https://github.com/GooeyAI/gooey-server/commit/f23dabe79d8c40f385f69b7cfe32a23b3fe3b4c2)

## 05-April-2026

**Fixed**

* [Stale workspace no longer passed to auto-assign team members](https://github.com/GooeyAI/gooey-server/commit/d283a505faba533937ffa85e702ba75a1e85be47)

## 02-April-2026

**Fixed**

* [Balance correctly set to zero when cancelling a subscription](https://github.com/GooeyAI/gooey-server/commit/2cc6c681bb228d2827d6406c6bf1592adb6cd907)
* [Redirect to Stripe correctly after creating a workspace](https://github.com/GooeyAI/gooey-server/commit/55639cc6bee5c98d41fd4d6181b9a4ed495267f5)

## 01-April-2026

**Added**

* [Show "Upgrade to invite members" prompt on free workspace Members tab](https://github.com/GooeyAI/gooey-server/commit/f16a4119a4bb4cbef5940a6edb56379896c1d599)
* [Link to team plans from the Create Workspace popup](https://github.com/GooeyAI/gooey-server/commit/00b61b68d2969905b3754b97dad60876cf6eb813)

**Fixed**

* [Seats are now unassigned when members are soft-deleted](https://github.com/GooeyAI/gooey-server/commit/acbaf35c941ad84529b41bfee3f5cf1253333964)
* [Invite option now only shown in workflow-share dialog for paid workspaces](https://github.com/GooeyAI/gooey-server/commit/a497dfc241162ca8a7ed1395441a827182c4c927)
* [Prevent non-team/enterprise workspaces from sending invites](https://github.com/GooeyAI/gooey-server/commit/3d5712152cacfcd3e5adce634d3cb8be5c6307e0)

## 30-March-2026

**Added**

* [Message structure transformation for Fireworks chat](https://github.com/GooeyAI/gooey-server/commit/09b357657bb0f92b6f92f57b82208fdd4b308ca8)
* [Pre-create file upload entries before background task runs to prevent data loss](https://github.com/GooeyAI/gooey-server/commit/e602bfcc4b031c35c969224b0fb330bc2b8b31b8)

**Fixed**

* [Telegram blocking behaviour with no timeout; added Telegram markdown renderer](https://github.com/GooeyAI/gooey-server/commit/033d2dfbda7a7387af6d2e1e5fbc3e559b1a1972)
* [`final_search_query` response\_format\_type to support `json_object`](https://github.com/GooeyAI/gooey-server/commit/e18015df297b4cf0f03237986625aa7cf160b3dd)

## 28-March-2026

**Changed**

* [LLM and video model sorting by priority desc, then reverse alphabetically](https://github.com/GooeyAI/gooey-server/commit/bea4c785e0e9c5a06468649da4ae6af679550591)
* [Creator priority in frontend model ordering](https://github.com/GooeyAI/gooey-server/commit/7a5627f0315afac227be3b940c68214cb1659f84)

## 27-March-2026

**Fixed**

* [Duplicate source permissions enforcement](https://github.com/GooeyAI/gooey-server/commit/15611068d529f8519c067cbef44eec7f4154b49e)
* [ConnectChoice image URLs in VideoBots](https://github.com/GooeyAI/gooey-server/commit/7c4d38e0a3a572c4d14fc4347597bb51be0a3796)

## 26-March-2026

**Added**

* [AI model creators with creator icons in model selectors](https://github.com/GooeyAI/gooey-server/commit/cd93655e018e338f69f1a804e61949ea169b0e03)
* [Private-chat streaming via `sendMessageDraft`](https://github.com/GooeyAI/gooey-server/commit/1b5048b444dec303e3c3de283b53ca028c1bf1ab)

## 25-March-2026

**Added**

* [Intron ASR integration](https://github.com/GooeyAI/gooey-server/commit/622cde9cbe6421179fd8c74ada11e700921cd1dd)
* [Video model priority ordering](https://github.com/GooeyAI/gooey-server/commit/92950f0319800d0533f035b90c279b50125d373d)
* [Auto-register `/new` command during Telegram bot setup](https://github.com/GooeyAI/gooey-server/commit/1984647f2bb5cbd2bf4526606fe62bbfff4e0190)

**Fixed**

* [Bulk eval first-group flush](https://github.com/GooeyAI/gooey-server/commit/a0744348993955ed47c0f5545ed970852c12c797)

## 24-March-2026

**Added**

* [Inline widget bootstrap; hydrate builder sessions from saved-run conversation data](https://github.com/GooeyAI/gooey-server/commit/1153687372606788e1838b464bbba8a74b872fe6)

**Fixed**

* [Faster query for getting child builder run from parent](https://github.com/GooeyAI/gooey-server/commit/b95581f0fbad90247ef3788c2a4bdb51da74384d)

## 20-March-2026

**Added**

* [Checkbox for `showToolCalls` in web widget integration](https://github.com/GooeyAI/gooey-server/commit/a6a8329e4eb756b377f82569fcc8a3da3b51b8aa)

**Fixed**

* [Store `parent_builder_saved_run` as FK; update Gooey Builder messages on navigation](https://github.com/GooeyAI/gooey-server/commit/6f1d4b88a59511b89f41a0376a0caafaf2037546)
* [Max-width on global `img` tag to prevent overflow in recipe descriptions](https://github.com/GooeyAI/gooey-server/commit/29e877389f53f03dde1d201fae1d0c892784a2f3)

## 17-March-2026

**Added**

* [Faster streaming on Telegram](https://github.com/GooeyAI/gooey-server/commit/509218a2aec815468f74eb976fdf024a2ccedaf4)
* [Paid-only audio/video models](https://github.com/GooeyAI/gooey-server/commit/b5dd84c2c2f7a318299fb1aa028b0aefe02f4467)

**Fixed**

* [Telegram help link updated to Gooey docs](https://github.com/GooeyAI/gooey-server/commit/a2b10e917ab193937c634546a17651631e3f47af)
* [Chat completion message conversion for Responses API](https://github.com/GooeyAI/gooey-server/commit/34e69aba67ac1651d49c929f3d28af64956cf65b)

## 12-March-2026

**Added**

* [Telegram bot deployment](https://github.com/GooeyAI/gooey-server/commit/b35e299520ea0386a57e2591a033485c2786af11)

## 11-March-2026

**Added**

* [Gooey Builder: allow pressing buttons without creating a new run](https://github.com/GooeyAI/gooey-server/commit/a0b49204b5e716f39e5169829587220f6d5d4011)

## 10-March-2026

**Added**

* [Country code selection for shared phone numbers in Voice Deployment](https://github.com/GooeyAI/gooey-server/commit/6233b06dcd8fb74b97aa486db3be15ef0d7f2c7f)

**Fixed**

* [Show tool calls only on `/copilot` page by default](https://github.com/GooeyAI/gooey-server/commit/e770175d0491c4001a06b5b9aa8d15ffb52cd13a)

## 06-March-2026

**Added**

* [Stream `final_prompt` chunks in bots API to render tool calls in web widget](https://github.com/GooeyAI/gooey-server/commit/9f76ee664a61869aa41f9b773c93c85fd66f023f)

**Fixed**

* [Auto-remove unused template variables](https://github.com/GooeyAI/gooey-server/commit/fe6286d25cbd783c36b7741c4c7a6eda7b7fd669)

## 04-March-2026

**Added**

* [Privacy Policy section and Code of Conduct to README](https://github.com/GooeyAI/gooey-server/commit/d918e9e5ff04853b87f99f65008f33a64eda8c73)
* [License updated to Apache 2.0, copyright updated to 2026](https://github.com/GooeyAI/gooey-server/commit/d618176c87cee6c208e66779c4b669a37429b29d)

## 01-March-2026

**Added**

* [Voxtral ASR support](https://github.com/GooeyAI/gooey-server/commit/ad46112d1dc8301376d9a69c421a775c8f4e32d3)
* [Latest Mistral embed, OCR, and LLM models](https://github.com/GooeyAI/gooey-server/commit/f3ed03b945b342688f4f68abfe905ac44a57fd6b)

**Fixed**

* [Mistral references chunks handling](https://github.com/GooeyAI/gooey-server/commit/1f50955aae934a129972254daecb25790bad27e4)
* [Google Sheet extraction with document model](https://github.com/GooeyAI/gooey-server/commit/5f020f3ed01b7ad9dded27e3928dd1470abdcfa1)

## 27-February-2026

**Fixed**

* [Guard `query_vespa` against empty/invisible search queries — prevent Vespa 400 "NullItem" errors](https://github.com/GooeyAI/gooey-server/commit/7422aef292c64aef04c7c105181977b55ed859de)
* [Handle `None` keyword\_query in `query_vespa`](https://github.com/GooeyAI/gooey-server/commit/586abcf4200e7f0436360307d32d1fd2d0eb7f9d)

## 25-February-2026

**Added**

* [Batch memory updates from Python/JS functions](https://github.com/GooeyAI/gooey-server/commit/4e33b7a2ba8d51ddf6ac2a70c5a57c42dedc22f1)

## 21-February-2026

**Fixed**

* [Array columns handling in evals](https://github.com/GooeyAI/gooey-server/commit/7135cb66090ea658be2c88d6e96de35bf75a3f56)

## 20-February-2026

**Fixed**

* [Bot-builder videogen inputs schema](https://github.com/GooeyAI/gooey-server/commit/71f2f5a3b0d9af32714d508691b035810fdf4291)

## 18-February-2026

**Fixed**

* [Padding issues; render audio input/output in Copilot; move history filter widget out of base.py](https://github.com/GooeyAI/gooey-server/commit/5f699b2dea7829158ad37c204c2f707594a62e7b)
* [History filter not shown for non-logged-in users](https://github.com/GooeyAI/gooey-server/commit/bf602e7b24d14156b13d621c696f1edc5150ec8d)

## 14-February-2026

**Fixed**

* [Composio "Connect & Grant Access" button redirect](https://github.com/GooeyAI/gooey-server/commit/8ffd1db24ca0bd33a75e399301647568e68ad89e)

## 12-February-2026

**Added**

* [Per-person history on history page](https://github.com/GooeyAI/gooey-server/commit/f70af54dd7b74601d380f1aa1beeff48d797336f)

**Fixed**

* [Preserve whitespace when streaming text](https://github.com/GooeyAI/gooey-server/commit/201b65feead809ebc4a81f1a9b5623e419bb25d0)
* [Video history UI and model name display](https://github.com/GooeyAI/gooey-server/commit/469af185ce8424b787bad739482052dd904d0fcc)
* ["Add variable" button incorrectly creating a new function](https://github.com/GooeyAI/gooey-server/commit/6fd9bafaa68b172a617ef376f2ca8b08b8da227c)

## 04-February-2026

**Fixed**

* [DTMF timeout and disconnects in LiveKit agent loop](https://github.com/GooeyAI/gooey-server/commit/b93fde305fdaa33892a822d7095a5a1cb79e7a23)
* [Support for non-Twilio numbers in LiveKit](https://github.com/GooeyAI/gooey-server/commit/dc27039baa3a6b125ada053fdd170310564cd702)
* [Empty photo URL in branding](https://github.com/GooeyAI/gooey-server/commit/889b182d3832a702aaffcf2df27bb31304f1596a)

## 03-February-2026

**Added**

* [Authentication and credit notification email templates; `error_params` field in SavedRun model](https://github.com/GooeyAI/gooey-server/commit/c01015ddf7da3faf1c0306afa90a13aa8c34d939)

**Fixed**

* [Updated credit costs for image generation models](https://github.com/GooeyAI/gooey-server/commit/8e32439b227c8f518a2220c09c8915e9faf406a9)
* [Copilot web widget branding](https://github.com/GooeyAI/gooey-server/commit/bdb293ed20c7161edfc331ea114233d0fe27df0c)
* [Null variables handling in API; null version retrieval in saved workflow](https://github.com/GooeyAI/gooey-server/commit/a0c3241a5aca56e3b072b2687d87318dd1b6f61f)

## 30-January-2026

**Added**

* [Private Google Drive file access via Composio auth](https://github.com/GooeyAI/gooey-server/commit/cc5986580cf160d8a970a8cc98dca6253138814c)
* [Support for multiple Google Drive accounts via Composio](https://github.com/GooeyAI/gooey-server/commit/1e4c5623e8f6fadfcfd52b72a83dd8b468cb8cd9)

## 26-January-2026

**Added**

* [SSO login support](https://github.com/GooeyAI/gooey-server/commit/44372a07e86af78762b713e64d7d3056f0d886a6)
* [Draft run created every time Gooey Builder updates state](https://github.com/GooeyAI/gooey-server/commit/4d63ca6c6cece5be50775f6e95ed931746b10867)

## 20-January-2026

**Added**

* [Render video URLs from markdown in WhatsApp](https://github.com/GooeyAI/gooey-server/commit/704970a3c07ac57f63719e7d73a05ae07b4151f1)
* [Thinking summary display in Copilot; stream thinking messages](https://github.com/GooeyAI/gooey-server/commit/6ff3114b0761c733edc99a58254b30b1d09b7526)

## 16-January-2026

**Added**

* [Thinking summary in Copilot](https://github.com/GooeyAI/gooey-server/commit/2bb01a9da759d5aaac4443beeaf34a9e29411ea0)

## 15-January-2026

**Added**

* [LiveKit call recording and transcript](https://github.com/GooeyAI/gooey-server/commit/1488b1ec4e0f129669854f9f295f33d173a08deb)

## 14-January-2026

**Added**

* [Support for OpenAI Responses API](https://github.com/GooeyAI/gooey-server/commit/b4c4e7d6d65a21c506acc4452e387b52667a3b53)

## 12-January-2026

**Added**

* [Custom OpenAPI-based model support in LiveKit](https://github.com/GooeyAI/gooey-server/commit/9b5c3d7996f4787777b9fd586690c8c458eff8d3)

## 02-January-2026

**Fixed**

* [Bot builder photo URL picked from branding](https://github.com/GooeyAI/gooey-server/commit/5fae37c043c4d2bcdf2dc1a6830bb8e99d145b7e)

***

## 19-December-2025

**Fixed**

* [Formatting issue in Gooey Builder](https://github.com/GooeyAI/gooey-server/commit/4a1af2b4b7487a135b25855c6ea85aaf32d3f010)

## 18-December-2025

**Fixed**

* [Progress bar z-index order](https://github.com/GooeyAI/gooey-server/commit/83d48acaf4094defef561d97450afa8fd2d4665a)

## 28-November-2025

Changed

* [Videogen schema: add support for non-string enums](https://github.com/GooeyAI/gooey-server/commit/6282d675d551c6393be0b0eb7c90fd1e4777214b)

## 26-November-2025

Changed

* [Use audio input capability for Gemini LLMs](https://github.com/GooeyAI/gooey-server/commit/7a610f536b25771f1d42c6987db59c26546bfe46)

Fixed

* [Only render updated\_at/generated timestamp once](https://github.com/GooeyAI/gooey-server/commit/a683bba6e945c2831bcb4a2881a03fb142c13c5e)

## 25-November-2025

Changed

* [Move MMS TTS & Omnilingual models](https://github.com/GooeyAI/gooey-server/commit/b6936ff51eb0ddfcd5b8437d179e624a552f9b77)

## 21-November-2025

Added

* [Meta Omnilingual ASR model](https://github.com/GooeyAI/gooey-server/commit/ebc19e8b827600d4fb1cb0a2c62b29c8dcbd12b9)

## 19-November-2025

Added

* [Support for GPT-5.1](https://github.com/GooeyAI/gooey-server/commit/79aa874ae1d32308756b8c90bac9298149d401ad)
* [Support for Gemini 3 Pro preview](https://github.com/GooeyAI/gooey-server/commit/135c6bc6447b993ec1b959ca9d56ae2ef8919a22)

## 18-November-2025

Fixed

* [Make modal import lazy](https://github.com/GooeyAI/gooey-server/commit/e4c9a472253833a22105c5e50b64edfb9039bc1a)

## 29-September-2025

*Fixed*

* [cleaner filter for removing image-url content chunks](https://github.com/GooeyAI/gooey-server/commit/e4339f693f6ae233370a62f408019953225e0246)

## 25-September-2025

*Fixed*

* [remove rank from order\_by when search is empty](https://github.com/GooeyAI/gooey-server/commit/9b808f0debd425ab1fc037fc8579002a37282c12)

## 24-September-2025

*Added*

* [render pricing notes and example preview on video gen](https://github.com/GooeyAI/gooey-server/commit/45ef6e6bcc1a1d0965c2ad8b0bb6f158ee54f69d)

## 18-September-2025

*Fixed*

* [image input creates invalid API request for apertus model](https://github.com/GooeyAI/gooey-server/commit/d672282380c5b2995ddddb113e10cfe6a41b3024)

## 16-September-2025

*Added*

* [implement LiveKit voice agent with Twilio integration](https://github.com/GooeyAI/gooey-server/commit/43dcc31430920628941e669d84d733c82071746e)

## 15-September-2025

*Added*

* [add support for Nano Banana](https://github.com/GooeyAI/gooey-server/commit/e10c19e3526c8ae3569c7634155718b57ded1612)
* [add explore link in header](https://github.com/GooeyAI/gooey-server/commit/bd158e66da29c177029a7b16bb73e02054055534)

## 11-September-2025

*Added*

* [add support for SwissAI Apertus LLM](https://github.com/GooeyAI/gooey-server/commit/607f57c15526a4d5ca329ec167af7216dab5dd78)

## 25-August-2025

**Added**

* [version stats](https://github.com/GooeyAI/gooey-server/commit/ae6ad719aa8580ff3654502612e677957011f365)

## 22-August-2025

**Added**

* [implement reasoning\_effort for openai, claude and gemini](https://github.com/GooeyAI/gooey-server/commit/db8e9fc259e35cfd8d922635f4db0d043a786c97)

## 21-August-2025

**Added**

* [add mbaza asr model](https://github.com/GooeyAI/gooey-server/commit/b3f664741127a40a642e796b683733a742b6019a)

## 20-August-2025

**Added**

* [combined analysis plot with correct data & timezone selector](https://github.com/GooeyAI/gooey-server/commit/83517ff46f6522f1472165e2e936625e59e8ef33)

## 18-August-2025

**Added**

* [add gemini 2.5 flash lite](https://github.com/GooeyAI/gooey-server/commit/d0a8b00225c38a5286c8ee5679345b13cea59d37)

## 14-August-2025

**Added**

* [bulk runs on copilot](https://github.com/GooeyAI/gooey-server/commit/d89fb3ae4f4610573fd19ede64a6e9f056e2f076)

## 13-August-2025

**Added**

* [Aspect ratio icons and functionality to DeforumSDPage](https://github.com/GooeyAI/gooey-server/commit/0b3d58d38375408825df417b9d6b77052c3c55d6)
* [Support for reasoning\_effort for OpenAI and Gemini thinking models](https://github.com/GooeyAI/gooey-server/commit/df6c25efc905e6f9321b79baba00556dd815ff5b)

## 12-August-2025

**Added**

* [Show "Open Workspace" on public team page for non-admins](https://github.com/GooeyAI/gooey-server/commit/e66d9a26188547bf459851cdb77c4ae27be07d4c)

## 09-August-2025

**Added**

* [Added GPT-5 Models](https://github.com/GooeyAI/gooey-server/commit/55d181c6cb996b99e6a21e31b5bcab841cfe709d)

## 22-July-2025

**Added**

* [Added Flux.1 Kontext \[pro\]](https://github.com/GooeyAI/gooey-server/pull/736)

## 08-May-2025

**Added**

* [Added o3, o4-mini, 4.1, 4.1-mini, and 4.1-nano](https://github.com/GooeyAI/gooey-server/pull/646)
* [Added gpt 2.5 flash preview model](https://github.com/GooeyAI/gooey-server/pull/655)
* ["Help guide" button in workflow header](https://github.com/GooeyAI/gooey-server/pull/657)

**Changed**

* [Clearer wording on share dialog](https://github.com/GooeyAI/gooey-server/pull/652)
* [Changed placement for visibility on the workflow list](https://github.com/GooeyAI/gooey-server/pull/652)
* [Changed workflow list to show workspaces name in front of user pill](https://github.com/GooeyAI/gooey-server/pull/656)

**Fixed**

* [Bugfix for Gemini 2.5 pro preview: lower bound for max tokens to accommodate thinking tokens](https://github.com/GooeyAI/gooey-server/pull/653)

## 18-Nov-2024

**Fixed**

*UX:*

* Removed the signout button from the profiles page (now we have the profile dropdown) - ([commit](<https://github.com/GooeyAI/gooey-server/commit/2404a1e97eb54e8669024896f661033c2c4ce7f8 >))
* Use an icon with more click-space for more options in the menu
* Fixed bug where the share button disappears from a saved run - ([commit](< https://github.com/GooeyAI/gooey-server/commit/e0a9119b0ccab0ef68d63c11e53af4d1cc4f2786 >))
* Support change notes for saved runs&#x20;
* Better button placement in version history&#x20;

**Added**

*Workspaces \[beta]:*&#x20;

* Breadcrumbs in workspace>author style ([commit](https://github.com/GooeyAI/gooey-server/commit/0d93d32720033f9f8a07f417904e803824d1feaa))&#x20;
* Better invitation email text ([commit](https://github.com/GooeyAI/gooey-server/commit/2c94b7c321aaabddf3ebb4a131dc2853eccefb32))&#x20;
* Better text labels for account pages ([commit](https://github.com/GooeyAI/gooey-server/commit/40c02993e8289880643293da8b16964109083aa1))
* Show workspace selector in "Save" dialog ([commit](<https://github.com/GooeyAI/gooey-server/commit/557184bd6e1fce0d7e3583e6fd9bfe8bdce75e55 >))
* Added URL fragments to the reference links for improved redirection to specific sections on cited webpages [#502](https://github.com/GooeyAI/gooey-server/pull/502)

## 11-Oct-2024

**Fixed**

* Render correct run cost estimate when something on the page changes [#475](https://github.com/GooeyAI/gooey-server/pull/475)

**Added**

* Ability to select LLM on /eval [#472](https://github.com/GooeyAI/gooey-server/pull/472)
* UX improvements to "save as new" / "save" for anon & logged in users ([#453](https://github.com/GooeyAI/gooey-server/pull/453), [#481](https://github.com/GooeyAI/gooey-server/pull/481))
* New "share" dialog for published runs [#453](https://github.com/GooeyAI/gooey-server/pull/453)

## 17-Sep-2024

#### Added

* Beta release of Python SDK - <https://github.com/gooeyai/python-sdk> and <https://pypi.org/project/gooeyai/>
* Improve OpenAPI spec to use the standard security scheme definition for Bearer

#### Fixed:

* Bug fix for SERP search location when set to st

## 11-Sep-2024

#### Added

* Updated web widget chat with a [sidebar to contain conversation history](https://github.com/GooeyAI/gooey-web-widget/commit/0dccc94c36a276fd49c91aa247fdfb2e073b0daa)
* [All error codes are available in the documentation](https://docs.gooey.ai/api-reference/error-codes)

## 03-Sep-2024

#### Added

* [Updated GPT-4o to `gpt-4o-2024-08-06` with support for **16,384 output tokens**](https://github.com/GooeyAI/gooey-server/commit/8274b3d4513ce4fcc63a125f386fd582d24b029c)
* Added support for [Gemini 1.5 Flash](https://deepmind.google/technologies/gemini/flash/) and [ChatGPT-4o models](https://platform.openai.com/docs/models/gpt-4o)
* Support for JSON mode on Gemini 1.5 Pro, Gemini 1.5 Flash, and Claude
  * Try here:  [LLM JSON Output](https://gooey.ai/compare-large-language-models/lesson-plan-json-mode-bfmfw2xqksd7/)

## 28-Aug-2024

#### Added

* [Allow auto-recharge for users without a paid subscription](https://github.com/GooeyAI/gooey-server/commit/bb334bc7314577c6fb13d0c0d6a12e15343ac39a)
* Allow saving payment method after a top-up for easier payments in the future
* Updated meta descriptions for: <https://gooey.ai/llm> and <https://gooey.ai/copilot&#x20>;
* [Rate limits page](https://docs.gooey.ai/api-reference/rate-limits)

#### Fixed&#x20;

* [Regression on top-up payments with PayPal](https://github.com/GooeyAI/gooey-server/commit/200d559250b43cebbd02f8c19e9438b64306923f)

## 20-Aug-2024

#### Added

* [**LLM**](https://gooey.ai/compare-large-language-models): Updated [Sarvam](https://www.sarvam.ai/), GPT-4o Mini, [SEA-LION-v2](https://aisingapore.org/aiproducts/sea-lion/). Head over to our Compare LLM Generator to see it in action, [SEA-LION v2](https://gooey.ai/compare-large-language-models/compare-llms-sea-lion-vs-sota-h6anugije1jf/) and [Sarvam](https://gooey.ai/compare-large-language-models/compare-smol-models-ffutnq5io8g4/) available here!
* [**Functions**](https://gooey.ai/functions): Revamped functions editor with an in-built linter.
* [**AI Standards**](https://gooey.ai/standards): Our proposal to the Library of Congress and Rockefeller Foundation on how shared AI workflows can catalyze innovation everywhere.
* [**Impact**](https://gooey.ai/impact): Understand how you can use GenAI for your Impact Organization.

## 14-Aug-2024

#### Added

* **Speech Recognition and Translation**: We have upgraded Seamless M4T to v2. This provides improved ASR for nearly 100 languages. Try it here: <https://gooey.ai/speech/seamless-m4t-v2-hindi-english-g8883e8675gk/>
* **Copilot:** Enabled "Auto-play responses" in **Copilot** Web Widget Integrations. You can control whether audio/video responses should be auto-played or not. This feature is enabled by default.<br>

  <figure><img src="/files/JALlL0bAAPCbCTEiUiAu" alt=""><figcaption></figcaption></figure>

## 8-Aug-2024

#### Added

* **Lipsync**: We have deployed some improvements around the SadTalker lipsync model

  * more understandable error messages,
  * support for a wider range of image/video resolutions,
  * the ability to not crash on long videos,
  * better support for video inputs overall.

  Here is an example of the improved performance on video input:

*OLD OUTPUT*

{% embed url="<https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/eef688c8-1dfb-11ef-af8a-02420a000128/gooey.ai%20lipsync.mp4>" %}

*NEW OUTPUT*

{% embed url="<https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/1db03ed8-4ecc-11ef-b5a4-02420a000192/gooey.ai%20lipsync.mp4>" %}

#### Fixed

* **Lipsync**: bug fixes for short input audio and reference inputs

## 24-Jul-2024

#### Fixed

* Fixed the regression with our eleven labs custom voices support. You should now be able to use your custom 11labs voices using your API key on <https://gooey.ai/compare-text-to-speech-engines> , <https://gooey.ai/copilot/> and <https://gooey.ai/lipsync-maker/>


# Build an AI Agent

Build your no-code AI agent in minutes!

## What is an AI Agent?

An AI Agent is a conversational agent that harnesses the abilities of modern AI models to summarize, make decisions and perform step-by-step analysis. With Gooey, it can be enhanced with custom knowledge documents, photo and document recognition, internet look-ups, speech recognition, integrations with WhatsApp, Facebook or your API to create incredible versatile tools.&#x20;

## Why do we need AI Agent?

In practice, AI agents are generally useful at three broad functions: Increasing productivity (e.g. saving time), unlocking knowledge and helping users conversationally accomplish a task (e.g. TurboTax for Anything).&#x20;

Our approach with Gooey.AI is that we learn best when we can see work of others and hence, please check out <https://gooey.ai/copilot/examples>.&#x20;

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4>Agriculture: Farmer.CHAT</h4></td><td><a href="https://gooey.ai/copilot/agriculture-farmerchat-nuwsqmzp/">https://gooey.ai/copilot/agriculture-farmerchat-nuwsqmzp/</a></td><td><a href="/files/jUoXf75CZh0uopLIzshf">/files/jUoXf75CZh0uopLIzshf</a></td></tr><tr><td><h4>Trades: HVAC Master Technician</h4></td><td><a href="https://gooey.ai/copilot/trades-hvac-master-technician-copilot-9i8kc35md1z4/">https://gooey.ai/copilot/trades-hvac-master-technician-copilot-9i8kc35md1z4/</a></td><td><a href="/files/Ha8rgRqos8lbZi8QQdpE">/files/Ha8rgRqos8lbZi8QQdpE</a></td></tr><tr><td><h4>Health: Nurse advisor for Nigeria</h4></td><td><a href="https://gooey.ai/copilot/health-nurse-advisor-for-nigeria-kjnzozozbcmp/">https://gooey.ai/copilot/health-nurse-advisor-for-nigeria-kjnzozozbcmp/</a></td><td><a href="/files/Hm3rNUwNg8Fr2FYQLBgN">/files/Hm3rNUwNg8Fr2FYQLBgN</a></td></tr><tr><td><h4>Barebones GPT-4o + (Google Search) Agent    </h4></td><td><a href="https://gooey.ai/copilot/barebones-gpt-4o-google-search-v1xm6uhp/">https://gooey.ai/copilot/barebones-gpt-4o-google-search-v1xm6uhp/</a></td><td><a href="/files/d6KQrv4kyOMjR6GR7PBB">/files/d6KQrv4kyOMjR6GR7PBB</a></td></tr></tbody></table>

## What we offer

[Gooey.AI's Copilot](https://gooey.ai/copilot) is the most advanced AI agent builder in the industry because we make all of the latest AI models available to you in no-code, team workspace and allow you to quickly deploy and measure what’s actually useful so you can reach product-market fit faster.&#x20;

We offer:

* **One-click Integrations** to the most common everyday communication &#x20;
  * [Whatsapp](https://docs.gooey.ai/guides/how-to-deploy-an-ai-copilot/deploy-on-whatsapp) - including support for multi-lingual, voice notes, photos, buttons, location sharing, RAG citations + function calling.
  * [Custom one-click web widget](https://docs.gooey.ai/guides/how-to-deploy-an-ai-copilot/deploy-to-web) - deploy in seconds to the web or inside your site or app.
  * [Facebook](https://docs.gooey.ai/guides/how-to-deploy-an-ai-copilot/deploy-to-facebook)
  * [Slack](https://docs.gooey.ai/guides/how-to-deploy-an-ai-copilot/deploy-to-slack)&#x20;
  * [Telegram](/ai-agent/how-to-deploy-an-ai-copilot/deploy-to-telegram)
  * [SMS + IVR for non-smartphone AI agents (Enterprise only)](/ai-agent/how-to-deploy-an-ai-copilot/deploy-to-voice)
  * Publish your agent as API
* **LLM Agnostic:**
  * Selection of multiple[ Large Language Models](https://gooey.ai/llm) (OpenAI GPT5.4, o1, o3 reasoning models, DeepSeek, Mistral, Meta's LLaMa 4, Gemini 3.5, Claude Opus 4.7, Kimi 2.6, Qwen 3.6 Plus and smaller local fine-tuned models like Sarvam 2B, SEA-Lion, and AfroLLAMA.)
* **Language and regional accent support:**
  * [Speech Recognition & Translation](https://gooey.ai/speech) to understand incoming audio messages, powered by the latest models from Azure, Google, Meta, OpenAI, Omnilingual, Intron and Bhashini.&#x20;
  * [Language translations (including Google Translate, Bhashini, Seamless)](https://blog.gooey.ai/global-language-understanding-for-ais)
  * Text-to-speech for the widest range of global accents and cloned voices from Google, OpenAI, Azure, and ElevenLabs (so the agent can send back audio responses)
* **Function calling:**
  * Function calling enables tool support and agentic decision-making, meaning the  AI model can decide whether and when the function must be executed and/or if code should be written to fulfill a request.
  * Function calling for OpenAI, Mistral and LLaMa models allows your agent[ to securely read and write to your company data](https://gooey.ai/copilot/nurse-julie-health-voice-conversations-to-patient-records-cqd11cspkz4o/), perform [google searches and even write and execute code in real-time](https://gooey.ai/copilot/base-copilot-w-search-rag-code-execution-v1xm6uhp/).
  * Every function call are themselves workflows of Javascript code, meaning you can collaborate on them like any other Gooey Workflow.&#x20;
  * Function calling is supported by Azure back secret support so you can safely call private APIs (and no one outside your team - including Gooey staff - will have access to your secret API keys)
* **Audio and Video Generation:**&#x20;
  * This empowers more users to engage with the app with voice and video notes - no typing required!
  * Lipsync’d video generation with [LipSync with Text-to-Speech](https://gooey.ai/lipsynctts). Agents with avatars can create higher engagement and trust. &#x20;
* **Document and Vision Intelligence:**
  * Our agents (and their deployments with WhatsApp, the web, Slack, etc) natively support audio, images and documents as inputs, allowing scenarios such as using a nameplate to recognize a part number, recognizing plant ailments from photos and extracting data from ID documents to [aid out filling out forms](https://gooey.ai/copilot/?example_id=n13jrsob).&#x20;
* **Retrieval Augmented Generation + vectorDB:**
  * [Retrieval Augmented Generation](https://docs.gooey.ai/guides/copilot#what-is-retrieval-augmented-generation) (with a Google doc, PDF, or Excel and even Weblinks) + advanced features including:
    * Dense Embeddings
    * Keyword Search Extraction - useful for highly technical knowledge bases with lots of jargon
    * Conversation summarization - to create better vector DB queries
* [**Synthetic Data Extraction**](https://docs.gooey.ai/guides/copilot/prepare-synthetic-data) **(with page-level citations)**
  * Often the knowledge base material of a agent is less than ideal. PDFs are often blurry, complex, and filled with irregular charts and tables. Videos contain useful insights but long rambling transcripts.&#x20;
  * Our synthetic data tools give you an easy-to-use but customizable pipeline to prepare PDFs, audio, videos, PPTs, etc for inclusion into agents. We support all the best OCR and AI vision tools to understand PPTs and PDFs and then give you power of LLM prompts to create structured data from highly unstructed sources. &#x20;
  * For example, you can transform both PDFs and videos into editable Google sheets, with all the text/transcript extracted and translated, with an automatic FAQ for each page, with citations given to the particular page number. We’ve found this dramatically improves search results.
* **Analysis tools:**
  * Built-in feedback buttons&#x20;
  * Detailed Agent Dashboard Insights
  * [Configurable Conversation Analysis](https://docs.gooey.ai/guides/copilot/conversation-analysis)
  * Integrate with your own analysis tools: Push agent data to external sources in real-time (via POST functions) or on a schedule.&#x20;
* [**Bulk Evaluation**](https://docs.gooey.ai/guides/understanding-bulk-runner-and-evaluation)**:** specify a set of test questions and golden answers, and then the tool automatically compares and scores competing versions of your agent.

## How it works?

Gooey.AI's Agent uses the latest orchestration capabilities for Large Language Models. The general ability of LLMs is to summarize, analyze, and make decisions but it is NOT trained on your enterprise data. To overcome this, we are moving with an innovative and simple solution called <mark style="background-color:purple;">**Retrieval Augmented Generation**</mark>.&#x20;

#### What is Retrieval Augmented Generation?

Retrieval Augmented Generation (RAG) allows users to search indexed Domain Specific Information to ensure that LLMs provide the most accurate and up-to-date information about your enterprise needs.

Your data is prepared and indexed and when the user queries the AI Agent searches and filters your data to the most relevant snippets. With the snippets and the system prompt, the LLM analyzes and summarizes an appropriate response to the user query.  This flow of information ensures that the AI Agent:

1. Remains accurate and up-to-date&#x20;
2. It avoids hallucinating for a response
3. It does not respond to queries beyond the scope of your **Knowledge Base** (unless you want it to). &#x20;
4. Mitigates risk to the organization
5. Builds users' trust by providing relevant information

#### How does RAG LLM work?

<figure><img src="/files/pOtjTs2sDrPi8cff85H2" alt=""><figcaption></figcaption></figure>

### REAL-WORLD OVERVIEW OF AGENT VIA FARMER.CHAT

<figure><img src="/files/qBNk5CqmjsFIighWKIXB" alt=""><figcaption></figcaption></figure>

## How to build your agent:

Gooey.AI offers a simple no-code UI to build RAG-based agents in seconds. The interface is fairly intuitive and we encourage to you play with [our examples](https://gooey.ai/copilot/examples) and simply modify them.

If you would still like a step-by-step guide, please read through the sub-sections of this guide.&#x20;

This is the basic setup:

1. Relevant documents from your organization
2. A prompt script for the AI agent to follow
3. Hit Submit!&#x20;

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Try Farmer.CHAT</td><td>An AI assistant to help farmers and farmer agents.</td><td></td><td><a href="https://gooey.ai/copilot/">https://gooey.ai/copilot/</a></td></tr><tr><td>Try Bank.CHAT</td><td>An example AI assistant to improve bank literacy.</td><td></td><td><a href="https://gooey.ai/copilot/?example_id=stpdnoyd">https://gooey.ai/copilot/?example_id=stpdnoyd</a></td></tr><tr><td>Copilot Guide Step 1: BEFORE you build a Agent</td><td></td><td></td><td><a href="/pages/pK0TpjSYtx6vgOQ5znjy">/pages/pK0TpjSYtx6vgOQ5znjy</a></td></tr></tbody></table>


# What to do BEFORE You Build an AI Agent

Before you dive right in, here's a few things to think about

**Identify your use case and value hypothesis**. Where do you believe an AI agent may be useful? To which customers or people?&#x20;

**How will you measure the agent's value?** Usually, that is:&#x20;

1. \# of messages sent
2. D1, D3, D7, D30 Retention of users
3. Positive vs negative feedback from users
4. % of questions asked by the user that were answered by the agent

**Curate the knowledge base dataset** e.g. documents, videos, PDFs, websites, and soon real-time data sources.&#x20;

**Create "Golden" Questions and Answers**

Let’s assume a human expert understood all of the documents in the above knowledge base dataset and then one of your users asked the human expert a question; what ideal answer would you expect the human expert to provide? This is the *Golden Answer.*

1. Collect 10 questions and the ideal **Golden Answer** for each
2. The question should be captured in whatever form we believe the user is likely to ask it - e.g. in Bhojpuri as a WhatsApp audio note, mixed-Hinglish text, English text, and/or Tamil text.
3. If non-English, provide the English text translation of the question
4. The ideal “golden” answer in English text
5. Collect the above as rows in the Excel or Google sheet.


# AI Prompting: Best practices

Optimise and create the best prompt for your AI Copilot

### High-level system prompt

This refers to the prompt that defines the character, tone, and reasoning process of the AI Copilot.&#x20;

Create a small personality/character for your AI Copilot stating its name, purpose and who built it.&#x20;

*<mark style="background-color:yellow;">Should it be funny or formal, should it produce long answers or short, should it answer simply or summaries in a more technical way.</mark>*

Here is an example prompt:

> “You are <mark style="background-color:yellow;">Product.CHAT</mark> - an intelligent AI assistant built by Gooey.AI and <mark style="background-color:yellow;">acme.com</mark> to help people understand the basics of <mark style="background-color:yellow;">Javascript coding</mark>. Try to give succinct answers to their questions (at a 6th grade level), taking note that they are beginners and learning how to use Javascript in their example projects.”

{% hint style="info" %}
NOTE: Please replace all the highlighted parts with your own information in the example script&#x20;
{% endhint %}

<figure><img src="/files/7b3QQGq27BCUOET4fYQJ" alt=""><figcaption></figcaption></figure>

### Create the Task Instructions&#x20;

Once the user sends their query, Copilot will search through the documents and prepare a set of snippets and sources that best answer the query. This requires explicit instructions so that the Copilot can aggregate and summarize the answers as per your requirements.

<figure><img src="/files/5Rnng38fdyXfF3mzMIWN" alt=""><figcaption></figcaption></figure>

Here is an example set of Task Instructions:&#x20;

> \[Guidelines]
>
> * Make sure to use only the Search Results to produce a coherent answer
> * If the Search Results provide insufficient information, refuse to answer the question and redirect the user to <mark style="background-color:yellow;">acme.com/tutorials</mark> for more help.
> * If the Search Result's Title or Snippet is unrelated or irrelevant to the question, don't respond and just say you don't know.
> * Never give advice to search the Internet.
> * Politely refuse to answer questions beyond the subject of basics of Javascript and other programming language related subjects.
> * Always use appropriate emojis to emphasize your point.
> * Cite the Search Results using \[${number}] notation in your answer.

{% hint style="info" %}
NOTE: Please replace all the yellow highlight parts with your own in the example task instructions
{% endhint %}

#### Add the Task Instructions

{% embed url="<https://youtu.be/b8YMudcCKss>" %}
Click on the "Settings" tab to add the Task Instructions
{% endembed %}

### Hit Submit!&#x20;

At this point, your Agent is ready for testing. However, you might need to do some tweaks to get it production-ready!&#x20;

***

## Advanced Prompting Strategies

### Using Jinja Templating

#### Variables

When deploying an AI Agent, your API calls will typically consist of two types of content:

* **Fixed content** Static instructions or context that remain constant across multiple interactions
* **Variable content:** Dynamic elements that change with each request or conversation, such as:
  * User inputs
  * Retrieved content for Retrieval-Augmented Generation (RAG)
  * Conversation context such as user account history
  * System-generated data such as tool use results fed in from other independent calls to Claude

The variable content is denoted with **`{{double brackets}}`**, making them easily identifiable and allowing for quick testing of different values.

<figure><img src="/files/llx6smPSeg9CofffBvgR" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Hg0CNTpF9TVTJK62HD5m" alt=""><figcaption></figcaption></figure>

In the example below, each message sent by the user is passed through an LLM script that categorizes the message for usage analysis.&#x20;

{% code title="AI Prompt" %}

```
{{messages}}

###

Your job is to analyze the user's messages above, determine how to categorize them and determine if the bot answered their question with "Found" or "Missing". Your response should contain exactly one JSON object.

Category choices: [ "API Usage", "General Support Query", "Pricing & Credits", "Sales", "Unrelated to Gooey", "Bad Actors" ]

If the message doesn't fit these categories, create a one-word name.

Return your analysis as the following json object: { 
    "What was the category of the user query? v2": "<category>"
}

If the message doesn't fit into any of the categories, return an empty object (`{}`)
```

{% endcode %}

{% code title="API Response Example" %}

```json
{
  "What was the category of the user query? v2": "API Usage"
  }
```

{% endcode %}

{% embed url="<https://gooey.ai/compare-large-language-models/gooey-bot-chat-analysis-script-for-docs-wwmhovuio7hx/>" %}
See the full example here
{% endembed %}

#### Conditional statements

It is a common use-case that the same Agent example might be deployed on various platforms like SLACK, WHATSAPP, WEB and so on. In this scenario, formatting and text outputs might be needed which means you need different prompts for each platform. With Jinja Templating this issue is solved. You can use the prompt example below and tweak it as needed:

{% code title="if statement in prompts" %}

```
{% if platform in [ "WHATSAPP", "SLACK" ] %}
Remember, you are a {{ platform }} agent, so do not use HTML, latex or any other markup language, instead use only the following formatting styles: 
italic: single underscore
bold: single asterix. Do not use 2 asterix as per markdown, instead use {{ platform }} guidelines and use 1 asterix only
strikethrough: single tilde
code: single backtick
code block: 3 backticks
quoted text: place an angle bracket and space before the text
headings: just use bold style with 1 asterix.

{% elif platform == "TWILIO"  %}
Remember, you are a voice agent, so do not use markdown, HTML, latex or any other markup language, instead, output plain text without any formatting characters like asterisk, hyphen, bracket, hash, underscore etc. 
{% endif %}
```

{% endcode %}

{% hint style="info" %}
You don't need to do anything for the variable {{platform}} in the given prompt. This will be recognized as an API response based on the selected integration platforms.&#x20;
{% endhint %}

### Few-shot example prompt

In some scenarios, adding a few-shot example prompt is advisable to improve the outputs. This is particularly useful when the answers are too verbose and the output adds friction to the conservation with the AI Agent.

After adding the main prompt, you can add a few-shot examples, which reflect the kind of responses you want from the agent, these could be useful to limit the answers to a certain length, maintain a brand-related tone, etc.&#x20;

{% code title="few-shot example" %}

```
--- insert your project-relevant prompt above this line --- 
User: Give an accurate summary in ~100 words only to my questions. 
Assistant: Surely
User: Do you have a lipsync tool?
Assistant: Yes, Gooey.AI does have a Lipsync tool. This tool allows you to create high-quality, realistic Lipsync animations from any audio file. Here is the link to the tool: https://gooey.ai/Lipsync/ and here is the guide: https://gooey.ai/docs. Can I help with you with anything else?
User: How can i book a demo?
Assitant: To book a demo with Gooey.AI, you can visit: https://www.help.gooey.ai/contact#book-demo
```

{% endcode %}

{% embed url="<https://gooey.ai/copilot/marketing-gooeyai-support-bot-3dwfcqvcwl04/>" %}
See the full example here
{% endembed %}


# Curate your Knowledge Base Documents

Learn how to prepare your documents to make the best agent for your use case

### Open gooey.ai agent UI:

{% embed url="<https://gooey.ai/copilot/>" %}

### Create your Knowledge Base Documents&#x20;

You can create your knowledge base documents from text, video, or audio.

### Collect all your relevant documents and videos&#x20;

You can add documents in the following formats:&#x20;

* Word Docs, PDFs (up to 200 pages)&#x20;
* PPTs or Google Slides
* Google documents or sheets as shareable links&#x20;
* Youtube/tutorial video transcripts as PDF or Google documents (you can use our [Synthetic Data Extract Workflow](https://gooey.ai/doc-extract) for this). Learn more here: [How to prepare your synthetic data](/ai-agent/copilot/prepare-synthetic-data)

### Upload the documents

Upload the documents to the agent workflow in the "Documents" section. You can choose to upload them as files, or you can create shared Google Drive links.&#x20;

<figure><img src="/files/yLXVchERUyb57xb0X7dR" alt=""><figcaption><p>You can upload files individually via your desktop, Google Drive, web links</p></figcaption></figure>

<figure><img src="/files/Baz9U2tIJeTRMqJQDj8L" alt=""><figcaption><p>You can upload all the files links in Bulk</p></figcaption></figure>

{% hint style="info" %}
PRO TIP: If you use Google Docs or Sheets, whenever you update your organization data or knowledge base, the bot will auto-update that information.&#x20;
{% endhint %}

###


# Advanced Settings

Customise your Agent settings to fit your business use case

### Settings

We offer a wide range of settings to customize the AI Agent.&#x20;

### Document Search Settings

When a user asks a question, the first task is to search all the relevant documentation. There are several instructions that can be added at this stage that ensure search results are accurate and serve the Language Model with the right snippets to summarize. A basic set of "Guidelines" are already populated, you can change out your website link and other information as needed. &#x20;

<div align="center"><figure><img src="/files/xGqZBagwMX9lqUtrJoQb" alt=""><figcaption></figcaption></figure></div>

> \[Guidelines]
>
> * Please ask the user once for their location, gender, crop(s) they grow to improve your answer to their questions.
> * Make sure to use only the Search Results to produce a coherent answer
> * If the Search Results provide insufficient information, refuse to answer the question and redirect the user to <https://www.digitalgreen.org/videos> for more help.
> * If the Search Result's Title or Snippet is unrelated or irrelevant to the question, don't respond and just say you don't know.
> * Never give advice to search the Internet.
> * Politely refuse to answer questions beyond the subject of farming in India.
> * Always use appropriate emojis to emphasize your point.
> * Cite the Search Results using \[${number}] notation in your answer.

### Citation style

Based on where the agent is hosted and your need, several citation styles have been provided.&#x20;

<figure><img src="/files/BvYkTDnm5rxqwaIL39Us" alt=""><figcaption></figcaption></figure>

### Document Embeddings  Weightage - Dense to Sparse

Usually, we default the weightage setting to 0.5. If you have a agent that needs to answer with details and with several steps, you can increase the weightage to towards 1. If your agent must extract hyper-specific keywords or data from tables, we recommend tending the weightage to 0.&#x20;

<figure><img src="/files/xdEGcRS1VGFgWIFYFm1T" alt=""><figcaption></figcaption></figure>

### Summarization and Keyword Extraction

#### Summarization

For many AI agents, it will be important to have a context of the conversation history so it can give contextual details and maintain consistency in the answers. In the summarization instructions, we have added a default instruction. You can change this as per your requirement.&#x20;

<figure><img src="/files/FKeWMCr6r62BcX8dy7ZQ" alt="" width="563"><figcaption></figcaption></figure>

#### Keyword Extraction

If your AI Agent has a lot of tabular data, specific model numbers, addresses, phone numbers, and entity names. You add a prompt instruction for keyword extraction as well. See example below:

> {{ final\_search\_query }} Extract rare terms like part numbers from the message. If you can't find rare terms, return an empty string. Don't use quotes in your response, instead write the output as a list of tab separated keywords.

{% hint style="info" %}
If your AI Agent does not require conversation history context or keyword searches, you can keep the sections empty. This will decrease the overall prompt size and improve latency.
{% endhint %}

### Knowledge Base Speech Recognition&#x20;

Choose the relevant language for your Knowledge Base Documents (your prepared documents)

<figure><img src="/files/XW3n0BRXXFUCDaqAKdFK" alt="" width="375"><figcaption></figcaption></figure>

### Language Model Settings

Gooey hosted a range of Language Models that are open source and paid. Please choose the one that suits your needs the most.

<figure><img src="/files/AYEzCCoxJ4dgSUwhu29b" alt="" width="563"><figcaption></figcaption></figure>

### Capabilities

Once your core prompt and knowledge base is ready, you can add capabilities like:&#x20;

* **Speech Recognition and Translation** - useful for end users who can't type or read well
* **Text to Speech & Lipsync** - can be used to "read aloud" the Agent's answer, and also add an AI Avatar for your Agent
* **Photo & Document Intelligence** - use this if you have technical documents that need OCR
* **Developer Tools and Function** - use this for added functionalities like access to servers, external APIs, performing JS logic, and more. [Read more about it here](https://blog.gooey.ai/fun-fun-functions).

<figure><img src="/files/u2ExDetbTc57MBW6MZm0" alt=""><figcaption></figcaption></figure>

### Fine Tuned Language Understanding with Custom Glossaries

Once a user language is selected, two glossaries can be provided.&#x20;

1\) The input glossary which the LLM will use to translate/understand the incoming user messages and 2) The output glossary which the LLM will use to translate its responses back to the user language. These can be CSV, TSV, excel, or Google Sheets files either uploaded manually or via URL (the latter will automatically update when translating if the URL content has changed):

&#x20;

<figure><img src="/files/9w9PG4OY0ZfdQZHIKjc5" alt="" width="375"><figcaption></figcaption></figure>

The glossary files follow the format specified by the Google Translate API's Equivalent Term Sets (<https://cloud.google.com/translate/docs/advanced/glossary#equivalent_term_sets_csv>). First row should be [ISO-639](https://wikipedia.org/wiki/ISO_639) or [BCP-47](https://tools.ietf.org/html/bcp47) language codes. Two extra columns are allowed: “pos” to specify part of speech and “description” (these columns are currently ignored by the Google Translate API but may be used in the future):<br>

<figure><img src="https://lh7-us.googleusercontent.com/YQC5keBX8eKEOsZXmKrvKN-lI8y8ZUh4KCBHGC2N8rqxcfhrlnc0WzmWrNX3y_kgKn2AcRKYdfWgPrAgvBDJPdKhb9TqrxMm4oNGfDcgsDi1YRmUXxxj9cSNW26C2I3w36A_or_g-b-ZcqLc2aldGEo" alt=""><figcaption></figcaption></figure>

Each subsequent row is then one glossary term in multiple languages. Read more [here](https://cloud.google.com/translate/docs/advanced/glossary#translate_v3_translate_text_with_glossary-drest).

**What does this mean**: When translation is done, terms will first be looked up in the relevant glossary in the column of the input language, and if they exist, they will be translated to the corresponding value in the same row of the output language column. If they don't exist, the default (Google Translate) translation will be used.

**Important**: Since the input glossary looks up terms in the \<User Language> column, this column should uniquely map to English terms (i.e. the same user language term should not appear on different rows with different English terms since then it is undefined which English term to use to translate that user language term). Similarly, the output glossary should have its English terms map uniquely to the \<User Language> terms. In the case of multiple non-English languages, these are the potential \<User Language>s so they should satisfy the unique constraints on each glossary for predictable results.

**Note**: The reason we allow multiple languages (and not just English and the User Language specified in the web ui settings) is because the agent deployments allow switching the user language on the fly for different users, different whatsapp numbers, slack channels, etc. so the overall Agent example/run needs to allow multiple languages.

**Why/when to use**: Glossaries are good for company and product names (e.g. Gooey.AI) and domain specific terminology that Google Translate does not know. They can also be used to clarify use case specific translation preferences, e.g. enforce formal translations such as using "mother" over "mom" even when the translation source is less formal or clarifying that ambiguous words like "chili" should always refer to the plant (not the powder, dish, etc.) for the specific use case (say an AI agent for farmers). Glossaries can effectively solve these discrepancies and ambiguities across language differences.

**Why/when not to use**: If the desired grammar of the translations, the overall tone, or sentence structure is significantly different for the domain specific purpose vs general use, then a custom trained model might be easier than trying to patch Google Translate defaults one term at a time. Glossaries cannot capture more complex translation logic at the phrase or paragraph level. They are made for individual terms.


# Prepare Synthetic Data

Learn how to add AI synthesized data to improve your AI Agent results

### Why do you need synthetic data for AI Agent?

Often AI Agents must respond succinctly and answer in FAQ style. &#x20;

When using direct transcriptions from video tutorials and recordings for your [Knowledge Base Documents](/ai-agent/copilot/curate-your-knowledge-base-documents), you will need some synthetic data to ensure the user's query is recognized and answered correctly. Video or audio tutorials, can often be very long sentences and have a casual tone of conversation. This can hinder the AI Agent's search and summary ability. For this, we recommend using our Synthetic Document Extractor workflow.&#x20;

### Features of Synthetic Document Extractor&#x20;

1. Extract information from videos for various purposes
2. Collect lists of YouTube videos or PDFs for data crunching.
3. Update Google Sheets as workflow progresses.

#### LINK TO WORKFLOW: <https://gooey.ai/doc-extract>

### Step 1: Create a New Google Sheet

Create a new, empty Google sheet to store your extracted data. Set the access permissions to "Anyone with link can edit."

### Step 2: Enter Raw Data links

What will work:

* Hosted video and audio links
* Youtube links
* PDFs (OCR and Tabulated Data will work)

{% hint style="info" %}
PRO TIP: If you copy the link to the Google Folder with your docs/pdf. You should immediately see all the files in the folder
{% endhint %}

### Step 3: Add instructions&#x20;

Open the settings tabs and add the relevant instructions for the synthetic data conversion. Example below:

> You are a Javascript tutor. Read the video training transcripts and create a properly outputted data with the sections with the following headings: Provide a short and succinct title, with an additional delimiter at the title's end - Description: provide an short summary of the video as a description Facts: succinct and accurately list all the facts from the transcription that will be useful to the students; don't self reference the video. FAQs: think about the questions that students would ask for this Javascript course based on the transcripts. Remember the notes below:
>
> * make a comprehensive set of questions and answers based on the transcript
> * avoid repetitions
> * avoid self referencing the course
> * don't make up questions and answers beyond contents of the transcript

### Step 4: Select a Model

Choose a Language model for the synthetic data extraction among the available options.

### Step 5: Select ASR Model

Choose the relevant ASR Model that will work best for your speech recognition.&#x20;

### Step 6: Hit SUBMIT

Hit "Submit." The tool will prepare the sheet and update it in real-time. It will then auto-populate all the needed information along with a transcription.

### Harnessing Additional Functions

Synthetic Data Extractor Workflow allows you to upload all videos from your YouTube playlist through one playlist link, which gives an entire transcription output. Likewise, you can manually choose a list of videos for specific transcription tasks.&#x20;

{% hint style="info" %}
Note: Adding new data on the same sheet may overwrite the saved information.
{% endhint %}

{% hint style="info" %}
The tool works best for content that is less than 30-40 minutes due to word limit restrictions on Google Sheets.
{% endhint %}

#### Transcription Bonus: Extract Data from PDFs

This tool also supports the extraction of data from PDFs. Simply paste the link of the accessible PDF in the input and hit "Submit." Like videos, it will extract important data from your document while also updating a Google sheet in real-time.&#x20;

Tutorial available here:

{% embed url="<https://www.youtube.com/watch?v=p7ZLb-loR_4>" %}


# Building a Multi-Modal AI Agent

A Step-by-Step Guide to Creating Your Own Multi-modal, Multi-Lingual AI Agent

{% embed url="<https://youtu.be/ZKjNGxKTMd0>" %}

### Introduction

In this tutorial, we're going to create a Multi Modal and Multi Lingual AI Agent that can be extremely helpful for religious studies or as a study guide for any textbook. We'll be focusing on building a agent, specifically a BibleBot, that can interact with users on platforms like WhatsApp or Facebook. This agent will be capable of analyzing pictures of Bible pages and engaging in meaningful conversations about the content.

{% hint style="info" %}
We support incoming and outgoing languages from Whisper v3 + v2, Google Chirp, Meta Seamless and Azure
{% endhint %}

### TRY THE BIBLE BOT HERE:

{% embed url="<https://gooey.ai/bots/?example_id=iiyv5ch7>" %}

### Step 1: Setting Up the Agent's Identity

#### Accessing the Workflow

\- Navigate to the Gooey homepage.

\- Click on "Explore" to view the available workflows.

#### Customizing the Agent

\- Select the agent workflow.

\- Rename it to "BibleBot."

\- Edit the initial prompt to introduce BibleBot to users. For example:

> <mark style="background-color:yellow;">Hello! Welcome to BibleBot. I'm an AI designed to help you better understand the Bible. You can send me a text or a voice note with any Bible-related question, and I'll give you a great answer. I'm constantly trying to improve, so please give your feedback by tapping the up-down buttons.</mark>

### Step 2: Uploading the Bible PDF

\- Download a PDF version of the Bible, such as the Holy King James version.

\- Go to the "Downloads" folder and upload the PDF to the agent. The file size might be around 10 megabytes.

### Step 3: Enabling Image Recognition

\- To allow users to take pictures of the Bible, set up the agent with photo intelligence capabilities.

\- Avoid using GPT Vision for OCR as it may not be very effective.

\- Opt for GPT-4 Turbo for faster processing.

\- In the “Photo Intelligence” dropdown configure the agent to extract text from images and provide responses&#x20;

<figure><img src="/files/F6OQE8983NQM4j2VvtWq" alt="" width="375"><figcaption><p>Here we have uploaded a passage from the Bible, with a specific question. The bot uses OCR and GPT4-Vision and provides an answer to the question. </p></figcaption></figure>

### Step 4: Configuring Voice Responses

\- Enable the agent to read back answers to the user.

\- Use a service like Google Voice for text-to-speech functionality.&#x20;

### Step 5: Submitting and Processing

\- After setting up the agent, hit "Submit" to start the embedding process.

\- The agent will process the uploaded Bible PDF, which may take some time depending on the size of the document.

\- The processed text is stored in a cache for quick access in future interactions.

### Step 6: Crafting the Bot's Guidelines

#### Initial Prompt

\- Define what the agent is and how users should interact with it.

\- Provide clear instructions for when a user greets the agent.

#### Response Guidelines

\- Establish rules for how the agent should search for answers within the Bible text.

\- Decide how the agent should handle questions when sufficient information is not available in the Bible:

to refuse either  - Choose to either refuse to answer or attempt to provide a relevant response.

\- Set limitations on the topics the agent can discuss, focusing on the Bible and Christianity.

\- Optionally, include the use of appropriate emojis for a more engaging experience.

### Conclusion

Once you've completed these steps, your BibleBot will be ready for a demo. This AI agent serves as a powerful tool for engaging with religious texts and can be adapted for other educational purposes. Remember to test the agent thoroughly and make adjustments based on user feedback to ensure the best possible experience.

<br>


# Automate Data Export

Adding a cron job to your Agent

### Step 1

Head to the Deploy Tab of your AI Agent, click on “View Analytics”

![](/files/ZDhGuO8ypqHfaa2x6y8F)

### Step 2

Once the Dashboard loads, head to the very bottom of the page and open the “Export Settings” tab.

<figure><img src="/files/yMF4nbYTWZNpX2n5N58R" alt=""><figcaption></figcaption></figure>

### Step 3

You can add a code snippet through “Functions”, which can export the data to any external DB.

![](/files/XtNqg1VsFzPbmrRyE42M)

### Step 4

Click the relevant Function from the drop-down and hit “Save”

![](/files/2oj4Ehlgwfoc8lLiOA8E)

![](/files/aOTCcSW2E1wIAt7b6kpo)

{% hint style="info" %}
NOTE: The export will only work in the messages tab. The “Messages” section is in the “Details” section as per the screenshot below.
{% endhint %}

![](/files/VZH2xhIHnVHmuokXUfz8)

{% hint style="success" %}
TIP: You can also trigger a run, whenever you need with the "Run Now" button
{% endhint %}

<figure><img src="/files/XKB7ljPqYqKVgAElr0T8" alt=""><figcaption></figcaption></figure>


# Deploy an AI Agent

Gooey.AI offers one-click integration to several platforms for the Gooey.AI Agent:

<table data-column-title-hidden data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h4>Deploy to Web</h4></td><td><a href="/pages/uOCvwTwDviVxVY2j9WVr">/pages/uOCvwTwDviVxVY2j9WVr</a></td><td><a href="/files/JkdV05TQxNGPS8rIya1D">/files/JkdV05TQxNGPS8rIya1D</a></td></tr><tr><td><h4>Deploy to WhatApp</h4></td><td><a href="/pages/WPN48SL8ppa2S4hoZ8lp">/pages/WPN48SL8ppa2S4hoZ8lp</a></td><td><a href="/files/0itM26q0FScSM0F62wHK">/files/0itM26q0FScSM0F62wHK</a></td></tr><tr><td><h4>Deploy to Telegram</h4></td><td><a href="/pages/624fb978b9502c33757da32449a703eb665db6cc">/pages/624fb978b9502c33757da32449a703eb665db6cc</a></td><td><a href="/files/KOHtluzY8ymkR3jcqq9s">/files/KOHtluzY8ymkR3jcqq9s</a></td></tr><tr><td><h4>Deploy to Voice</h4></td><td><a href="/pages/nobkdjFa8820GCbYOPnD">/pages/nobkdjFa8820GCbYOPnD</a></td><td><a href="/files/Ye6ZzMynvwD62ppcLcw1">/files/Ye6ZzMynvwD62ppcLcw1</a></td></tr><tr><td><h4>Deploy to Slack</h4></td><td><a href="/pages/5CTF2i9cPXqZoj9WNjxW">/pages/5CTF2i9cPXqZoj9WNjxW</a></td><td><a href="/files/qxYXARdWk1NEtcw4c42W">/files/qxYXARdWk1NEtcw4c42W</a></td></tr></tbody></table>


# Deploy to Web

One-click integration for your AI Agent

{% embed url="<https://youtu.be/7WQveSxqK6k>" %}

## How to deploy on WEB

#### SET UP DEPLOYMENT CONFIG <a href="#wl0pcjbv3uj2" id="wl0pcjbv3uj2"></a>

1. Click on the Deployments tab
2. Use the “Gooey.AI” button

![](/files/UIk6mVPNIxDOCJWlaMzv)

1. This will open the Web widget configuration page. You can add the following details:
   1. Name of the AI agent
   2. Description - this will be the introduction of the agent
   3. By line and website link
   4. Conversation Starters - add some introductory questions for the users

<figure><img src="/files/GgvDNywgylOgBPDgz8hJ" alt=""><figcaption></figcaption></figure>

1. Hit Update
2. Test your agent here:
   1. Click on the “Message the Agent” button and test the agent.

#### EMBED TO WEBSITE <a href="#l71lp1y6w8k7" id="l71lp1y6w8k7"></a>

<figure><img src="/files/KFuqU29mex3lO81NwU4T" alt=""><figcaption></figcaption></figure>

Once you are happy with the performance of the tests, you can Embed the agent in your production website with just two lines of code.

**Select Embed Settings**

![](/files/gTeJBYlhs4juJyKFPEmV)

Use the “Embed Settings” to choose between “inline”, “pop-up” or “fullscreen” modes for your chat bot.

<figure><img src="/files/mpvkniB6Z1XJau5ruy2V" alt=""><figcaption><p>Demo of pop-up AI Copilot</p></figcaption></figure>

<figure><img src="/files/UGq5lLTjNMKGa5Mjs6ps" alt=""><figcaption><p>Demo of inline AI Copilot</p></figcaption></figure>

<figure><img src="/files/9NXgDsAkxXvvKcctltba" alt=""><figcaption><p> Demo of fullscreen AI Copilot</p></figcaption></figure>

**Add the code to the website**

Copy the Embed code from the “Copy Embed Code” button and paste it into your website \`\`\`\<body\`\`\` tag.

![](/files/EMYATbv0oLmaiGBmcU0P)

**EXAMPLE SNIPPET**

{% code overflow="wrap" %}

```html
<div id="gooey-embed"></div>
<script async defer onload="GooeyEmbed.mount()" src="https://gooey.ai/chat/the-gooeyai-bot-xxx/lib.js/"></script>
```

{% endcode %}

\`\`\`

Your AI AGENT is ready for the world! 😀

**Contact us at <support@gooey.ai> if you would like to connect your agent to a WhatsApp from Gooey.**


# Deploy to Telegram

One-click integration for your AI Agent

## Deploy a Telegram bot&#x20;

### **Step 1:** Click on the ‘Deploy’ tab

![](/files/a42671ea267d25b4cbe273044c81128743dac00c)

### **Step 2:** Select ‘Add Deployment’.

![](/files/62830ce4b72353cf729b22db854d056cefb74c04)

### **Step 3:** Select ‘Connect to Telegram’.

![](/files/12dde7e2712341c975b9cc2e6040824ee812924f)

### **Step 4:** Follow steps as instructed in the pop-up.

* Click on ‘Open BotFather’ and it will take you to its Telegram chat.

<figure><img src="/files/4b83fa4a1df579035e5324db72e73e04e4fec938" alt=""><figcaption></figcaption></figure>

### **Step 5:** Follow the instructions on Telegram.

* Click ‘Start’ at the bottom of the chat.
* Type or select ‘/newbot’, then complete naming your bot. You will receive your token.
* Copy the token and go back to the ‘Deploy to Telegram’ page.

![](/files/76753daac53bfd8cbd0955920381af640d07385d) ![](/files/e5045aa1e28223261bd45e2731687759f7fe4e65)

### **Step 6:** Paste the token in the text box and click ‘Connect’.

<figure><img src="/files/8dab9cede645c7b944294893065650de58d19fb1" alt=""><figcaption></figcaption></figure>

### **Step 7:** Test your Telegram Bot&#x20;

* ‘Message *your bot name’.* This will take you to the bot’s Telegram chatroom.

<figure><img src="/files/12262bd3b3fe19cb570fc7db0c5ee912eda26201" alt=""><figcaption></figcaption></figure>

* Click ‘Start’ at the bottom of the chat. Ask it a few questions.

![](/files/8ac4d23955a6407d51990d79c3c16200bbd94ebf) ![](/files/7399db3be129a03aece48083a3f14e5a5447f44d)

## Add a Telegram button your Saved RunStep 1: Head to Copilot Deploy tab

<figure><img src="/files/f9X4gRSNQLfhqYLrM3Vg" alt=""><figcaption></figcaption></figure>

### Step 2: Click on the dropdown under ‘Configure your Copilot’&#x20;

* Find your deployment in the dropdown under ‘Configure your Copilot’&#x20;
* Select your bot with the Telegram logo to its left.

<figure><img src="/files/JsNWEgG8yhSvNLhvFtY1" alt=""><figcaption></figcaption></figure>

### **Step 3:** Click the ‘Show Telegram Button’.

* Scroll down and toggle the "Show Telegram Button".&#x20;

![](/files/08719f59608a1d513826aa2376840508471af589)

### **Step 4:** Generate a QR code

* Click on ‘Generate’ to generate a QR code link to your Telegram bot (or upload your own), and hit ‘Save Settings’.

<figure><img src="/files/8bf52061e478821298ed8e0df01029d8bc01213d" alt=""><figcaption></figcaption></figure>

### **Step 5:** It’s time to test the bot!&#x20;

* If you head back to your "Run" or "Saved" Copilot you'll see a new "Telegram" button the top
* Click on the Telegram icon and use your QR code to start chatting up and testing your bot.

![](/files/f25c6bd57736bc81abf4a14de7964d96ce3c8e92)

<figure><img src="/files/0XNZZ7KAYfyC1bDRnIM8" alt=""><figcaption></figcaption></figure>


# Deploy to Voice

Deploy a Voice AI Agent

### **Step 1:** Click on the ‘Deploy’ tab

![](/files/a42671ea267d25b4cbe273044c81128743dac00c)

### **Step 2:** Select ‘Add Deployment’.

![](/files/62830ce4b72353cf729b22db854d056cefb74c04)

### **Step 3:** Select ‘Voice & SMS’.

![](/files/9LaMMXezfllSe1AJz9OI)

### **Step 4:** Test your Voice Agent

* Click on "Copy Phone Number" or "Start Voice Call" to test your Voice AI Agent

<figure><img src="/files/nq9Rv83suRubEX55V9vW" alt=""><figcaption></figcaption></figure>

### ![](/files/Qyu0LVM76uFh8Tu48YRZ)

### **Step 5:** Additional Settings

You can additional settings to enhance the expernece of the Voice Agent&#x20;

* **Initial Text**: A welcome message in a TTS voice can be played at the start of the call
* **Initial Audio**: A welcome message as a pre-recorded audio can be played at the start of the call
* **Waiting Audio:** A pre-recorded audio can be played when the user is waiting for a response
* **Waiting Text**: An SMS can be sent to the user when they are waiting for response
* **Use Missed Call**: Create a call back service for your users
* **Fresh Conversation History for Each Call**: If switched on Voice Agent will have no context of previous conversation history with the user

<figure><img src="/files/diULUTkFXLqMigDJUQyJ" alt=""><figcaption></figcaption></figure>

<div data-full-width="true"><figure><img src="/files/bfpupvMs39HVSnCBOTsq" alt=""><figcaption></figcaption></figure></div>

## Add a Voice Agent button your Saved Run

## Step 1: Head to Copilot Deploy tab

<figure><img src="/files/f9X4gRSNQLfhqYLrM3Vg" alt=""><figcaption></figcaption></figure>

### Step 2: Click on the dropdown under ‘Configure your Copilot’&#x20;

* Find your deployment in the dropdown under ‘Configure your Copilot’&#x20;
* Select your bot with the Voice logo to its left.

<figure><img src="/files/wl20Dy60PYVndlcwzz0g" alt=""><figcaption></figcaption></figure>

### **Step 3:** Click the ‘Show Voice Button’.

* Scroll down and toggle the "Show Voice Button".&#x20;

![](/files/DOOPN1hEdLmACUTrLBtX)

### **Step 4:** Generate a QR code

* Click on ‘Generate’ to generate a QR code link to your Voice AI Agent (or upload your own), and hit ‘Save Settings’.

<figure><img src="/files/jIkpk1GYaz5PEakt8ASp" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Q8pqm2Kq2vtfKpKtaPN3" alt=""><figcaption></figcaption></figure>

### **Step 5:** It’s time to test the bot!&#x20;

* If you head back to your "Run" or "Saved" Copilot you'll see a new "Voice" button the top
* Click on the Voice/SMS icon and use your QR code to start chatting up and testing your bot.

![](/files/DzV6d7jo4rVP1gEapiBV)


# Deploy to WhatsApp

One-click integration for your AI Agent

## **How to deploy on WhatsApp** <a href="#rf6x2djyuia6" id="rf6x2djyuia6"></a>

**Prerequisites**

* Verified Facebook business account
* A new or spare phone number for the WhatsApp agent

#### Deploy

Click on the [Deploy tab](< https://gooey.ai/copilot/integrations/>) in the agent workflow

![](/files/UIk6mVPNIxDOCJWlaMzv)

* Use the “WhatsApp” button
* You’ll be redirected to Facebook Login Page&#x20;

> NOTE: Gooey connects to a Facebook profile, it will not connect to a Facebook Page. If you don't have access to the Facebook profile/account of your organization, we suggest making a special Facebook profile for this.

* Follow the instructions on the Facebook page

### Step 1 - Fill Business Information

<figure><img src="/files/HC4CR4ZoKqkPasgGDrRA" alt=""><figcaption></figcaption></figure>

### Step 2 - Choose your business account (or create a new one)

<figure><img src="/files/Wu8usSG7PSrkl2wPIHsw" alt=""><figcaption></figcaption></figure>

### Step 3 - Add a phone number for your Whatsapp agent&#x20;

<figure><img src="/files/kYHlmm0n2m9MBVqc6lTB" alt=""><figcaption></figcaption></figure>

### Step 4 - Verify the phone number

<figure><img src="/files/oVideqCHYpTh54f6dNad" alt=""><figcaption></figcaption></figure>

### **YOUR AI AGENT IS NOW READY!**&#x20;

**Test**

You can test your agent by heading to the registered number!

**Share**

To share the link with others, share the number like this: <https://wa.me/>\<number>

#### Your AGENT is ready for the world! 😀

### Frequently Asked Questions

**Q: I have got a new number for the WhatsApp deployment but it isn't working. What should I do?**

A: There could be a few reasons why this isn't working, please AVOID these steps:

* You have activated the sim card on a smartphone with WhatsApp messaging app
* You have registered the phone number directly on Facebook
* You have registered the phone number directly on Whatsapp Manager

Please avoid this, you will not be able to integrate Gooey AI Agent on that number until you deactivate all these things.&#x20;

**Q: The deployment worked successfully, but it's not working now. Why is this?**

A: We have commonly found that after successful deployment users/organizations try to use the connected phone number on the WhatsApp client for messages sent by human experts. Once you have integrated the WhatsApp agent with your AI Agent, you can't have additional human-sent messages like other WhatsApp Business Accounts.&#x20;

**Q: The deployment worked successfully, why did the agent stop working after the first day?**

A: If you don't connect a credit card to your Facebook Account for the agent, it will deactivate in 24 hours.  There won't be any additional charge from Facebook but they require a credit card to activate the account. Once you add a card there will be a business verification process.

Get a WhatsApp number from Gooey by upgrading to a business plan at <https://gooey.ai/pricing> or book us for a sales call at <https://gooey.ai/contact> if they have questions.


# Deploy to Slack

How to set up slack

{% @arcade/embed flowId="jD9JFF6UqKOMuccnfhH3" url="<https://app.arcade.software/share/jD9JFF6UqKOMuccnfhH3>" %}

### Adding Gooey.AI Agent to Slack

#### 1. Head to "Deploy"

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2Fb5ca9e2b-fab0-43a6-8947-7d30f1682c97.png\&hotspot=264.8700473105631%3B557.634892086331%3B%238df7e2)

#### 2. Click on the "Slack" deployment

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2FjD9JFF6UqKOMuccnfhH3%2Fimage%2F8bcf9f26-d3be-4ec0-9252-438d3276eaa8.png\&hotspot=536.8923611111112%3B412.44791666666663%3B%238df7e2)

#### 3. Select the channel

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2FjD9JFF6UqKOMuccnfhH3%2Fimage%2Fd4b57573-d97a-4b3a-98c6-8987f59f69ce.png\&hotspot=574.3098958333334%3B770.6293402777778%3B%238df7e2)

![](https://image.mux.com/shKRTrzHPA02DI2nyCjjrWvVrlY0051eirfSDE7X9zotQ/animated.gif?start=12.871066727313787\&end=14.749186733521169\&width=640\&fps=30)

#### 4. Allow permissions

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2FjD9JFF6UqKOMuccnfhH3%2Fimage%2F967bc67a-88d1-4812-91ec-f796eca9f78d.png\&hotspot=656.5842013888889%3B847.1180555555555%3B%238df7e2)

#### 5. Click the button to message the Slack AI Agent

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2FfRRKZNFaeZucNdRHMZJA%2Fimage%2F5e5ff2cf-0c7d-4973-9874-49f319563135.png\&hotspot=507.89062500000006%3B954.4704861111111%3B%238df7e2)

### How to test the Slack AI Agent

#### 1. Message the Agent using "@"

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2FYgR9B4o6ogLXj0Mir10T%2Fimage%2Fe5ef686d-7bb0-4fed-81fb-367df0450c16.png\&hotspot=538.7934027777778%3B929.3315972222223%3B%238df7e2)

#### 2. Message the Agent in the thread

![](https://image.mux.com/8TTDWWXnUIySlCA8hQVbjEZpD5U5InLplCDQ2H802hHI/animated.gif?start=19.142\&end=24.72\&width=640\&fps=30)

#### 3. Share feedback via the buttons

![](https://worker.arcade.software/image-transform?image=https%3A%2F%2Fcdn.arcade.software%2Fextension-uploads%2FYgR9B4o6ogLXj0Mir10T%2Fimage%2Ff3791f73-4a03-49a0-a2d5-908639ed0f81.png\&hotspot=506.2847222222223%3B1253.0598958333335%3B%238df7e2)

{% hint style="info" %}
Once you’ve removed the agent app from your workspace, if you ever want to add it or another AI agent back, you’ll need to click “Add to Workspace” on the deploy page again even though the deploy/channel seems to appear in the deployments list. Follow instructions here: [Adding the Gooey.AI Agent to a Slack Workspace](#adding-gooey.ai-agent-to-slack).
{% endhint %}

## Notes

* The agent currently responds to [Slack Audio](https://slack.com/help/articles/4406235165587-Create-audio-and-video-clips-in-Slack), regular text messages and video messages.
* The agent can respond with text, audio, and/or video if you select those options in the run settings. Check the other [Copilot Guides](/ai-agent/copilot).
* Don’t try to reset your message history at this point. This is handled automatically by the AI agent logic. Resetting manually will result in all feedback being lost.


# Siri Deployment

We have experimental Siri support through IOS shortcuts. This will allow you to chat back and forth with any Slack agent deployment verbally via Siri and import conversations into Slack for details.

### Install Siri Deployment

1. Install the [Siri Shortcut](https://www.icloud.com/shortcuts/2f158bbcf7644c2aaadc4d11c9180272) by clicking the link on an iPhone (Mac and iPad are not tested).&#x20;
2. Activate the Shortcut by clicking on it or by telling Siri “Start agent” verbally.
3. The first time, you’ll need to give the shortcut multiple permissions (select “Always allow” on all these to not be prompted again). You will also need to login to your Slack Workspace which requires knowing its URL. This can be found by opening your Slack Workspace and clicking on its icon in the upper left corner. It should be right under the name (in this example it is “gooeyai.slack.com”):\
   ![](https://lh7-us.googleusercontent.com/gcTbTcKU8vrWS6lGBIdR3e9wMM9ebAdqiFGXYfGl5SqH1kJfCWx1-B6Gx_fsjpjfXauNS4OsaUMMUG4DaYUXca1mUxGZk417vW6VCiybIwWq_Bq9wkkHGTSOjOv16GL4bITQshuWTR0bGhkfa3Ch13g)
4. For convenience, you can now add the shortcut to the home screen, lock screen or (iPhone 15+) assign it to your action button. Activating with Siri directly will always work too.

### Add to Home Screen

1. Open your “Shortcuts” app:\
   ![](https://lh7-us.googleusercontent.com/qeCAvLzxvImIoKTS5cWxoe_W87H-uFM4sE6C8Jq7kMb6dnNzFRYwYg-86l8QuQNaI3gsJgYGO83QrHjHXrM2Em0ME8eYPQy1_1rIEBEeMCtYwJlptMTmLg3uubIhmVgriL0UnwOkGmJRj50ggEzpha8)
2. Identify the agent shortcut (top left orange box in below screenshot):\
   ![](https://lh7-us.googleusercontent.com/nHzvG6AVbD221M0hZ6z_eXvHRcZU3vkLEUW1Qs9ObNllOYul2ovdLTXHOGMH6rkQ0ZQ1m1AqEd4nsVnhhWtBYJvBEuqc43lBT6_xk_B3srl4tO9KMHBME6z_zaO1n9Wq-da0goaha39aSuUxcpBLkpE)
3. Hold down on it to open the context menu:\
   ![](https://lh7-us.googleusercontent.com/98Ua9ke8UVU1ZjhvW-lxPATgdFl1rzNZj_T5u5frsutJMIMkD2beF-rMBSQbfsrp4--Z1ZmdZ26xsgVFOYEIlMO545ZvTu7LqgF-OSHSbcIi2EmAGQevovEjvtAzfJsh0kR6jR_9GWAC5IbStUfF_nQ)
4. Select “Information” (3rd option) from the context menu:\
   ![](https://lh7-us.googleusercontent.com/GqfeQus7OGP2bUUcK5Oe7MQxhWLZSJSjjZjf1rpiCrY4c8nXYvMxKGUZr6OTQI-KfSyXVrlEzmf787GE4AKoGMV7LQK9fzHcq_qPk_WFz_FCw_PJHcXpePLpJ5fcJtVsZaEQKSxjd-DZfuuln17ByOo)
5. Top option will add the shortcut to the home screen.

### Add to Lock Screen

1. Unlock your iPhone and tap and hold on to the lock screen to go into editing mode.\
   ![iPhone lock screen screenshot](https://lh7-us.googleusercontent.com/q8aC34wARfiGaquw3qkwlB5VUDfA4bbkC4ocfGKzDFcQKBgcIHt3n-XRsmcbw756Uqne3GqCCsryZL-E1WTHmVC6VbU5JmSucbtqhJRaiF3tcA7-zQOBbmsNrc-kgR6EzHvXEIw7P-vGKOdRG7g1NdY)
2. Tap the “Customize” button and choose the “Lock Screen” option.\
   ![iPhone lock screen customize option screenshot](https://lh7-us.googleusercontent.com/tPhNZJnHBbnuHcLb8VO79XQ8Pc85KM876XL8HMhWsB_75ibpbzQor9pVDVw1EXeMCU_dCPr-ZKgkBqqa-5t2T4AlXPiH2e_nbhtYsnc4hI8u0T6hJYIV8oRDT4NBuqsjqtl6plOiyGfOpCHLib-lPmY)
3. Tap on “Add Widgets” and scroll down to pick Shortcuts.\
   ![iPhone add widget screen screenshot](https://lh7-us.googleusercontent.com/A1mmcVAk3JbV8sSwROd-4HUmyvp0xatLfAI8X9p6DRYM8aB3VaFa75OMtj3fl-VtiFVWTWJDhn5g0Kws_Lqtaqb-QHA1zvur1ORKmq9tjhjUpirAiKlVBC0DGUMpGONs5pOkyOv8Z1weyt1Zk86oVBU)
4. Tap on the widget to add it to the lock screen. Tap the widget in the widget area to customize it.\
   ![customize widget screenshot](https://lh7-us.googleusercontent.com/uZmzUOS-q3VYlhd3bfxOgy2SvqcgrxX70SYMfu9gM4UPT2j_jbcP3GtZHo9fSpQkdGP259FJtpClE_eG93ye2YS4BKZ22YmYjqqDqZC0dfx8VsIf2aM1actuSAu17M-YcVx74gV1uDFVJgZGSGkxbIk)
5. Select the “Agent” shortcut.\
   ![](https://lh7-us.googleusercontent.com/wYb0BBb9mehQG6uFB2-R4Q0GuvUhMwhGThqErkq5oblI_Mh4aYop-szYDiSBa8CHwm3_mJd7Wga2Az_-LdtHEjAC6HI_AKoL0rGVfJgiaBIcnNUwJnY9pqHIuZTM3sN7ozi0g353D_a3z_NlFzRxbGM)
6. Tap the cross button and then the “Done” button to save changes.\
   ![saving lock screen customization](https://lh7-us.googleusercontent.com/RP7GmDm4KSc5UbyMhztkqCUHw4vGc87yxbeVZenpAnN_UiSGhbA_PvWWj06_RtX4-H7x3Ccid40wd5fNq2BzsuyQoSqBoIa8qGoFmU3H4N37VxKxWrLbg2m5vXfiiN4svADRCfOmDaLeE4vWDLk_qSE)
7. The shortcut will now show up on the lock screen and can be clicked.\
   ![](https://lh7-us.googleusercontent.com/1XiXT8e2ZwHkKtFeXPeWeE6wLvzka1cU6p_QC2Ah2O-pn56lpKiOc8Tnwb8fEuZpPbRuzpUARIsoYSntzBjHAZApLfZFOMXcA9Yj9USS5azwmsIOfzN7G-1nr-JyYp7aQRWslDVr-Yy0Ix8yBoy5nZU)


# Deploy to Facebook

One-click deployment for your AI Agent

### Facebook Page Deployment <a href="#wfomsniy4dd6" id="wfomsniy4dd6"></a>

1. Create a Facebook page for your agent. E.g.: Product.CHAT
2. Click on the Deploy tab
3. Connect your agent to the Facebook page

> NOTE: You may have to refresh the above page once you deploy to add the Facebook page

1. You can test your agent by heading to your Facebook page
2. To share the link with others, use m.me/Product.CHAT.
3. Your AI AGENT is ready for the world! 😀

<figure><img src="/files/iYQwxnHOMtzEgEEHx2XR" alt=""><figcaption></figcaption></figure>

#### Contact us at <support@gooey.ai> if you would like to connect your agent to WhatsApp or other services.&#x20;


# Broadcast Messages (via web or API)

After you've connected your AI agent to Slack or WhatsApp, you can send custom messages to your users to notify them of relevant news, reengage inactive users, and more!

## Using the Web-Based Graphical Interface

Navigate to the [integrations tab](https://gooey.ai/copilot/integrations) on the published run that you've connected. Expand "Configure Settings 🛠️" and scroll to the bottom of the settings. For supported deployment types like Slack and WhatsApp, you should see the following input widget:

<figure><img src="/files/CqEUGF6wm8prB0rOkSoa" alt=""><figcaption><p>The Broadcast Widget. Allows entering text and uploading audio, video, and miscellaneous file attachments. Hit "Send Broadcast" and subsequently click "confirm" to send a message to all your users!</p></figcaption></figure>

Enter your message and upload audio, video, and other documents as desired. Make sure the file type is supported by the relevant platform. WhatsApp currently supports `audio/aac`, `audio/mp4`, `audio/mpeg`, `audio/amr`, and `audio/ogg`. Slack has the best support for `audio/mp4` or `audio/mpeg`. Once you're ready to send the messages, click "Send Broadcast" and you'll be prompted for confirmation. Upon confirmation, the messages will start sending. Depending on how many users you have, it can take a few minutes for all of them to be notified.

{% hint style="info" %}
Note that WhatsApp restricts free-form message sending to users who have contacted you within the last 24 hours to prevent spam. To sidestep this issue, you can have your message templates [approved by WhatsApp](https://www.facebook.com/business/help/2055875911147364). To do this, you must use a custom WhatsApp business deployment on Gooey and not one where we manage the number for you. If you have questions, don't hesitate to contact us via <support@gooey.ai>.
{% endhint %}

## Programmatic Access via API

The API supports a few extra features including only sending the message to some subset of users or adding custom buttons. To get started, click the [API link ](https://api.gooey.ai/docs#operation/video-bots__broadcast)(either here or from the deployment tab shown above) to view the API documentation for message broadcasting.

<figure><img src="/files/agbxhMCMIdRmediC1ODo" alt=""><figcaption><p>API documentation for broadcasting.</p></figcaption></figure>

### Specifying which Deployment to Broadcast through

You'll use some combination of the `example_id` and `run_id` query parameters to specify which of your connected published runs you want to broadcast through. These are the same parameters you'll see in the URL on Gooey.AI when you are [editing your run](https://gooey.ai/copilot) or on the [integrations tab](https://gooey.ai/copilot/integrations). To find your run, find it in your history and click on the title to activate it. Then inspect the URL, e.g. "<https://gooey.ai/copilot/farmerchat-with-vision/?example_id=nuwsqmzp>" -- in this case, we only have the "example\_id" query parameter so "<https://api.gooey.ai/v2/video-bots/broadcast/send/?example\\_id=nuwsqmzp>" would be our API endpoint URL.

### Example Code

Once you have your API endpoint, you are ready to start making requests. Here's some sample code in Python, NodeJS, and via [CURL](https://everything.curl.dev/get):

```python
# $ python3 -m pip install requests
# $ export GOOEY_API_KEY=sk-xxxx

import os
import requests

payload = {"text": "Hi, we've launched a new feature: you can now upload photos of your crops and ask questions about them!"}

response = requests.post(
    "https://gooey.ai/copilot/farmerchat-with-vision/?example_id=nuwsqmzp",
    headers={
        "Authorization": "Bearer " + os.environ["GOOEY_API_KEY"],
    },
    json=payload,
)
assert response.ok, response.content

result = response.json()
print(response.status_code, result)
```

```javascript
// $ npm install node-fetch
// $ export GOOEY_API_KEY=sk-xxxx

import fetch from 'node-fetch';

const payload = {"text": "Hi, we've launched a new feature: you can now upload photos of your crops and ask questions about them!"};

async function gooeyAPI() {
  const response = await fetch("https://gooey.ai/copilot/farmerchat-with-vision/?example_id=nuwsqmzp", {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + process.env["GOOEY_API_KEY"],
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload),
  });

  if (!response.ok) {
    throw new Error(response.status);
  }

  const result = await response.json();
  console.log(response.status, result);
}

gooeyAPI();
```

```bash
# export GOOEY_API_KEY=sk-xxxx

curl 'https://gooey.ai/copilot/farmerchat-with-vision/?example_id=nuwsqmzp' \
  -H "Authorization: Bearer $GOOEY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "text": "Hi, we have launched a new feature: you can now upload photos of your crops and ask questions about them!"
}'
```

### Filtering Users

To only broadcast messages to certain subsets of users, we provide some filter options. These include&#x20;

* "wa\_phone\_number\_\_in": list\[string],
* "slack\_user\_id\_\_in": list\[string],
* "slack\_user\_name\_\_icontains": string,
* "slack\_channel\_is\_personal": boolean

They can be added to the filter object of the payloads in the above example code. For example, to only broadcast to the WhatsApp accounts with phone numbers "1234" and "+1 (420) 666-6969", you could modify the payload to the following:

```python
payload = {
    "text": "Hi, we've launched a new feature: you can now upload photos of your crops and ask questions about them!",
    "filters": {
        "wa_phone_number__in": ["1234", "+1 (420) 666-6969"]
    }
}
```

More details on [Sending Targeted Messages](/ai-agent/how-to-deploy-an-ai-copilot/broadcast-messages-via-web-or-api/sending-targeted-messages-with-the-broadcast-api).&#x20;


# Sending Targeted Messages with the Broadcast API

The Broadcast API can send a message to one user, not only to every user in an integration.

`integration_id` selects the bot integration. `filters` narrows the recipient list inside that integration.

caution If you omit `filters`, the message is sent to all conversations/users for that integration. Always include a phone-number filter for one-user sends.

If the phone number does not match an existing conversation in that integration, the API returns a `404` and does not send the message.

### Example Request

```http
POST https://api.gooey.ai/v2/agent/broadcast/send/
Authorization: Bearer <GOOEY_API_KEY>
Content-Type: application/json
```

```json
{
  "text": "Welcome! I'm your assistant.",
  "integration_id": "your-integration-id",
  "filters": {
    "wa_phone_number__in": ["+91XXXXXXXXXX"]
  }
}
```

Response:

```json
{
  "status": "success",
  "count": 1
}
```

Use E.164 phone format, for example `+919876543210`.

### Sending Files

The same endpoint accepts file URLs through `audio`, `video`, and `documents`.

```json
{
  "text": "Your report is ready.",
  "integration_id": "your-integration-id",
  "documents": ["https://example.com/report.pdf"],
  "filters": {
    "wa_phone_number__in": ["+91XXXXXXXXXX"]
  }
}
```

This is useful when a backend job or Gooey Function generates a PDF, audio file, video, or other downloadable asset. Once the file URL is available, call the Broadcast API and scope the send to the user with `filters`.

### Using a Gooey Function

If an agent needs to trigger the message, create a Gooey Function that calls `/agent/broadcast/send/`. The agent can pass the `integration_id`, target phone number, message text, and optional file URL to the function.

```js
async ({ integration_id, phone_number, text, file_url }) => {
  const phoneNumber = phone_number.replace(/\s/g, "");

  const payload = {
    text,
    integration_id,
    filters: {
      // For Twilio-backed SMS/MMS, use twilio_phone_number__in instead.
      wa_phone_number__in: [phoneNumber]
    }
  };

  if (file_url) {
    payload.documents = [file_url];
  }

  const res = await fetch("https://api.gooey.ai/v2/agent/broadcast/send/", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${process.env.GOOEY_API_KEY}`
    },
    body: JSON.stringify(payload)
  });

  if (!res.ok) {
    throw new Error(await res.text());
  }

  return await res.json();
};
```

For audio or video files, use `audio: file_url` or `video: file_url` instead of `documents`.

Use the filter key that matches your integration type.

### WhatsApp 24-Hour Window

WhatsApp only allows outbound messages within 24 hours of the user's last message to your integration. If a broadcast does not arrive, check whether the recipient has messaged the integration in the last 24 hours. If not, ask them to send a message first, then retry.


# Add buttons to your AI agent

To improve retention for your Agent, we recommend you include buttons. These will encourage users to engage with the Agent and can influence retention and higher likelihood of improving the Theory of Change process.

### Scenarios <a href="#id-783lw3vfyjml" id="id-783lw3vfyjml"></a>

#### TOS Agreement <a href="#id-1kcipsqyzs4q" id="id-1kcipsqyzs4q"></a>

Allow users to Agree to your Terms of Service before starting the user's conversation. The response can be securely stored in your DB.

<figure><img src="/files/yDG09XMtscCGxmjTTEVL" alt=""><figcaption><p>Screenshot of the Copilot Whatsapp with the Constant Button Prompt</p></figcaption></figure>

#### Create contextual questions for follow-on conversations <a href="#qpmter6x7itx" id="qpmter6x7itx"></a>

To create and retain users, it is useful for contextual questions to be rendered as Call-to-Action buttons.

<figure><img src="/files/uyDCccR1DWfqBhLasj6x" alt=""><figcaption><p>Screenshot of the Copilot Whatsapp with the Contextual Buttons Prompt</p></figcaption></figure>

### How to add buttons to agent? <a href="#b1mppy81183e" id="b1mppy81183e"></a>

To add Buttons to Gooey.AI’s agent is extremely simple. They can be added easily in the Instructions prompt of the Agent Builder.

{% embed url="<https://gooey.ai/copilot/mshauri-wa-shamba-en-emoji-buttons-9freijr7aaus/>" %}

### Example 1: TOS Agreement <a href="#xcfla458v753" id="xcfla458v753"></a>

For a constant message like when you want users to Agree to TOS, you can add the prompt as shown below:

{% code overflow="wrap" %}

```
{# Conversation Flow #}
CONVERSATION FLOW
Follow these steps: 
1. Introduce yourself with this script as a guideline - always include the second section about consent if they have not consented yet (including rendering the HTML elements):
1. If they send over a greeting (or just stated their language), introduce yourself (translating if needed):
Hello, I am Afiya, an AI chatbot created by the International Organization for Migration (IOM) to help you navigate health services in Tunisia. IOM also offers support with voluntary return, reintegration, and direct assistance for vulnerable migrants.

Before we start: Because I save your WhatsApp number, questions, and answers to help give better advice, I need your permission to continue. You can read about our terms & conditions here in English https://gooey.ai/iom_tos_en or Français https://gooey.ai/iom_tos_fr 

Please respond with '✅ I Agree' to give permission and start using Afiya.
<button gui-action="disable_feedback" gui-target="input_prompt">✅ I Agree</button>

2. Until the user agrees (e.g. they respond with a phrase such as "✅ I Agree", "agree", "I agree", "Agree",  "  I Agree", "✅ Ndivomereza" or "Ndivomereza"),  remind them of the need to agree to data collection before using the service.
3. Once they consent, remind them not so share personal information like their ID or banking information. Then answer their original query. Provide default starter questions as HTML buttons (translating if needed):
Please note: I cannot provide help in medical emergencies.
<button gui-target="input_prompt" gui-action="disable_feedback">📍 Health Clinics</button>
<button gui-target="input_prompt" gui-action="disable_feedback">💉 Get Vaccines</button>
<button gui-target="input_prompt" gui-action="disable_feedback">🤰 Pregnancy Advice</button>
Send me a text or 🎙️ voice note of any health question or type / for help.

4. Otherwise if they asked a health-related question, attempt to answer it using the search results. 
```

{% endcode %}

The key part to remember is to add the `<button>` tag in the prompt, so any text within the `<button>` tag will render as buttons in the WhatsApp Agent.

{% embed url="<https://gooey.ai/copilot/iom-tunisia-health-chatbot-field-test-4lgrqximds46/>" %}

![Screenshot of the Agent Builder with the constant button](/files/qpnTBCKLWjQz60hYLE7y)

### Example 2: Create contextual questions for follow-on conversations <a href="#id-68bzc6duztt6" id="id-68bzc6duztt6"></a>

Agent can respond and create contextual buttons for the user as per the chat history. This can be achieved through prompt engineering the Agent.

{% code overflow="wrap" %}

```
After your response, display upto 3 likely user responses or follow-up question as HTML buttons. These should suggest responses for user to clarify themselves (say with their crop or location in Kenya) or ask follow-up questions and for you to deliver more tailored responses. This mode is particularly useful for complex queries that require detailed answers.
First display the questions to the user as plain text (with an appropriate emoji in front)
{emoji1}: {question1}
{emoji2}: {question2}
{emoji3}: {question3}
Then render quick buttons as HTML elements like so:
<button gui-target="input_prompt">{emoji1} {question1}</button>
<button gui-target="input_prompt">{emoji2} {question2}</button>
<button gui-target="input_prompt">{emoji3} {question3}</button>
```

{% endcode %}

Here are the steps include:

1. Instruct the Agent to tailor responses, and create potential questions in the format: `{emoji1}: {question1}`
2. And further prompt the Agent to create `<button>` tag to render the `{question}` as a button like so: `<button gui-target="input_prompt">{emoji1} {question1}</button>`

![Screenshot of the Agent Builder with the Contextual Buttons Prompt](/files/WheULJza1rs9nU1WEAQk)


# Monitor an AI Agent

Analysis and Observability

Analytics dashboards help you manage your AI agents by giving you a clear view of how they’re performing. You can check how often users are engaging with the Agent, where errors happen, and how resources are being used—all in one place. This makes it easier for you to spot problems, track progress, and make improvements so your agents work more smoothly and deliver better results.

## Analytics Dashboard

### How do you access the Analytics Dashboard?&#x20;

{% @arcade/embed flowId="Mx8g1ybWlz1PkqSS4Qk5" url="<https://app.arcade.software/share/Mx8g1ybWlz1PkqSS4Qk5>" %}

You can go through all the tabs with line-by-line details about the various user conversations, we are also updating the categories section soon.&#x20;

<figure><img src="/files/mP5cz72vNQDl3yKkucAm" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/JnyjD6CeGNoqBAydm0FQ" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Iz4DmvigLwibgTu2OG1k" alt=""><figcaption></figcaption></figure>

## Analysis Script&#x20;

### How to use LLM to create Analysis script for qualitative data?

{% @arcade/embed flowId="tJFWiKjVOpzFbdV770St" url="<https://app.arcade.software/share/tJFWiKjVOpzFbdV770St>" %}


# Feedback

Learn how to activate, view, analyze, and interpret user feedback on AI Agent interactions using the analytics dashboard.

Feedback buttons are a quick and simple way of getting user inputs directly in the AI Agent. User can rate and provide feedback on every AI Agent.

## Activate feedback buttons in your AI Agent

By default, the feedback buttons are switched off in your AI Agent Deployment. You can scroll down to the "Show Demo Button" section and switch on the Feedback buttons settings.&#x20;

{% @arcade/embed flowId="08CHykcBCUPluWeqcqn1" url="<https://app.arcade.software/share/08CHykcBCUPluWeqcqn1>" %}

### Detailed Feedback

When users give a thumbs down, ask them to explain what was wrong and how it could be improved. Make sure to use our suggested prompt in your agent to make this work well.

{% @arcade/embed flowId="RdrkEOI1HDUOlBdnbAqE" url="<https://app.arcade.software/share/RdrkEOI1HDUOlBdnbAqE>" %}

## Analyze and Interpret user feedback

Head over to our analytics dashboard to track performance data, manage connections, and focus on successful user interactions.

Switch your view to evaluate conversations needing improvement. Examine negative feedback entries for targeted review and analysis. Understand areas where the AI's response may need improvement and make the necessary adjustments.

{% @arcade/embed flowId="C2BBnHBM9k69w2DAC7nr" url="<https://app.arcade.software/share/C2BBnHBM9k69w2DAC7nr>" %}


# Glossary

Terms from the **Messages Table/CSV:**

<figure><img src="/files/diPSNxCcKcAyNnV5K7At" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="122.5703125">Name</th><th>Description</th></tr></thead><tbody><tr><td>Sent</td><td>Timestamp for when the message was sent by the user</td></tr><tr><td>Name</td><td>Refers to the phone number or UUID of the User</td></tr><tr><td>User Message (EN)</td><td>This refers to the User's message. The "EN" stands for English, to indicate the English translation of the message.</td></tr><tr><td>Assistant Message (EN)</td><td>This refers to the Assistant's reply. The "EN" stands for English, to indicate the English translation of the message. </td></tr><tr><td>User Message (Local)</td><td>This refers to the User's message. The "Local" stands for local language used. In case, the user messages are in English, this will appear to the same as "User Message (EN)" column. </td></tr><tr><td>Assistant Message (Local)</td><td>This refers to the Assistant's message. The "Local" stands for local language used. In case, the user messages are in English, this will appear to the same as "User Message (EN)" column. </td></tr><tr><td>Analysis Result</td><td>This is the JSON data based on the Analysis Script that we run.</td></tr><tr><td>Feedback</td><td>This refers specifically to the "👍" and "👎" feedback implemented in the Agent Builder</td></tr><tr><td>Run Time</td><td>This refers to the amount of time it took for the Assistant to respond to the User's query</td></tr><tr><td>Run URL</td><td>The specific Run URL of that query, this can be useful to debug.</td></tr><tr><td>Input Images</td><td>This will show a link or path to any images uploaded by the User.</td></tr><tr><td>Input Audio</td><td>This will show a link or path to any audio messages uploaded by the User.</td></tr><tr><td>User Message ID</td><td>It is the platform-dependent message ID (e.g. WhatsApp Message ID for the message sent by user)</td></tr><tr><td>Conversation ID</td><td>This is the unique ID for each conversation (old messages are in context for new ones). e.g. it is the part between one "reset" to next for a WhatsApp agent</td></tr></tbody></table>


# Frequently Asked Questions about AI Agents

Some answers to common issues when implementing Agent in production

### Q: The AI agent seems to answer the question accurately but the answers are incomplete. What can I do?

A: To avoid this, you need to increase the Output Tokens from the “settings” section of your agent.

> NOTE: If your agent use case requires a lot of memory/history of the previous chats to continue the conversation this can create huge context windows and you might get a quickly scaled up usage and higher billing.

### Q: We are running a voice-based agent, the TTS model reads out the formatting syntax like asterisks, hyphens, etc. This is very troubling to the user. What can we do?

A: You can add a simple prompt instruction: “Don't include markdown” or if you want to be a lot more specific you can write a detailed prompt like this:

```
“Remember, you are a voice agent, so do not use markdown, HTML, latex or any other markup language, instead, output plain text without any formatting characters like asterisk, hyphen, bracket, hash, underscore etc. Keep your responses concise and clear under 100 words.”
```

### Q: The agent is running on Whatsapp for text and Twilio for phone audio, I want to make sure that some prompts are specified only to Twilio, I don’t want to make two agents. What can i do?

A: For example, if you want to make sure that Twilio does not use markdown but you want formatting for your Whatsapp or Web agents. You can add “if statement” to the prompt through our Jinja templating language like this:

```django
{% if platform == "TWILIO" %}
Remember, you are a voice agent, so do not use markdown, HTML, latex or any other markup language, instead, output plain text without any formatting characters like asterisk, hyphen, bracket, hash, underscore etc. Keep your responses concise and clear under 100 words.
{% endif %}
```

> NOTE: This can be added in your basic prompt instructions there are no “special” settings for this.

### Q: I have a WhatsApp/Slack agent, but the text output shows up as markup language. How can I fix this?

A: By incorporating *Jinja* templating in the Prompt, you can adjust the prompt as needed. In the example below we are using WhatsApp and Slack clients running alongside your web client you can try this example in your AI agent:

```django
You are an AI Bot that runs the front-desk of a Dentist's clinic.

{% if platform == [ "WHATSAPP", "SLACK" ] %}
    Remember, you are a {{ platform }} agent, so do not use HTML, latex or any other markup language, instead use only the following formatting styles: 
    italic: single underscore
    bold: single asterix. Do not use 2 asterix as per markdown, instead use {{ platform }} guidelines and use 1 asterix only
    strikethrough: single tilde
    code: single backtick
    code block: 3 backticks
    quoted text: place an angle bracket and space before the text
    headings: just use bold style with 1 asterix.
{% endif %}
```

Here the Jinja templating language uses an `if statement` to provide the prompt with a condition to output the text in a particular way based on the platform the agent is integrated into.

### Q: How many last messages (conversation history) does the agent accept while answering the user's next question?

A: We retain up to 50 conversations in the conversation history.&#x20;

### Q: Can LLM "temperature" be increased beyond 1 if I want more creative responses?

A: We host several AI models, and the LLM "temperature" settings can vary. Here are the temperature settings per model:&#x20;

| AI Model                                                                                                                                                                                        | Temperature Settings |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
| OpenAI                                                                                                                                                                                          | 0.0 to 2.0           |
| [Claude 3.5 Sonnet](https://docs.anthropic.com/en/api/complete)                                                                                                                                 | 0.0 to 1.0           |
| [Gemini 1.5 Pro](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/adjust-parameter-values#:~:text=Each%20model%20has%20its%20own,%2D%201.0%20\(default%3A%200.4%20\))        | 0.0 to 2.0           |
| [Gemini 1.5 Flash](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/adjust-parameter-values#:~:text=Each%20model%20has%20its%20own,%2D%201.0%20\(default%3A%200.4%20\))      | 0.0 to 2.0           |
| [Gemini 1.0 Pro Vision](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/adjust-parameter-values#:~:text=Each%20model%20has%20its%20own,%2D%201.0%20\(default%3A%200.4%20\)) | 0.0 to 1.0           |


# Evaluations

## Why do you need bulk runner and evaluations? <a href="#id-4zynvpxsa8kj" id="id-4zynvpxsa8kj"></a>

When building your Gooey.AI workflows, you will have to tweak the settings often to ensure the responses show parity and are grounded and verifiable.

**There are several components to test:**

* testing prompts
* ensuring the synthetic data retrieval works
* checking the suitability of the language model and its advanced settings
* Latency of generated answers
* evaluation of the final AI Agent to produce the [Golden Answers](#how-to-setup-golden-q-and-as)
* evaluation of the price per run
* regression tests

How can you do this at scale?

**This is where Gooey.AI’s Bulk and Evaluation features shine!**

## Features of Bulk Runner and Evaluation <a href="#eheq9i411cm3" id="eheq9i411cm3"></a>

* Run several models in one click
* Run several iterations of your workflows at scale
* Choose any of the API Response Outputs to populate your test
* Get output in CSV for further data analysis
* Built-in evaluation tool for quick analysis
* Use CSV or Google Sheets as input

## Quickstart

Here are the **quickstart guides** for Bulk Runner and Evaluation:

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td>How to set up Golden Q&#x26;As</td><td><a href="/pages/6bA3J9kSLXyDo1Acm7rg">/pages/6bA3J9kSLXyDo1Acm7rg</a></td><td></td></tr><tr><td>How to set up Bulk Runner?</td><td><a href="/pages/KwqFFqDWoEO7Xl7h0HPX">/pages/KwqFFqDWoEO7Xl7h0HPX</a></td><td><a href="/files/ZnhOhqIHslHaoGuZrt4m">/files/ZnhOhqIHslHaoGuZrt4m</a></td></tr><tr><td>How to set up Evaluation?</td><td><a href="/pages/BdH7u9I0FBUUUe1R2HrK">/pages/BdH7u9I0FBUUUe1R2HrK</a></td><td><a href="/files/Nugs2Wpv6TsMpDqN4A7C">/files/Nugs2Wpv6TsMpDqN4A7C</a></td></tr></tbody></table>

## How Does Bulk Runner Work? <a href="#r7so22ymyyn2" id="r7so22ymyyn2"></a>

### Bulk Run Overview <a href="#id-2v61ngoeupi4" id="id-2v61ngoeupi4"></a>

This diagram details the process of generating AI-driven answers to a set of test questions using a Language Model (LLM) with Retrieval-Augmented Generation (RAG) capabilities.&#x20;

<img src="/files/p9pTgdaxak2QKJoNQ4HB" alt="" width="563">

**1. Test Question Set**

The process begins with a curated set of questions. Examples of such questions include:

\- "What is the lipsync tool's API?"

\- "What is the step-by-step method to make a good animation?"

**2. Bulk Run**

Your “Saved” AI Copilot run processes the entire question set. Each question is individually processed to generate the corresponding answers.

**3. Generated Output Texts**

The generated answers are compiled into an output table. Each question is paired with its respective AI-generated response. For example, the answer to "What is the lipsync tool's API?" provides detailed information regarding the API's functionality and integration methods.

## How Does Evaluation Work? <a href="#id-5anc46np4cur" id="id-5anc46np4cur"></a>

### Comparison and Evaluation Overview <a href="#id-6yuy9sd29g76" id="id-6yuy9sd29g76"></a>

This section details the process for comparing and evaluating generated answers against a set of golden answers to assess their semantic and technical accuracy.

![](/files/UOSrz4s6z9pqHo3cVHX3)

1. **Input: Questions and Golden Answers**
   1. **Test Question Set**: A curated set of questions to be answered, such as:

      \- "What is the lipsync tool's API?"\
      \- "What is the step-by-step method to make a good animation?"
   2. **Golden Answers Set**: Expert-generated answers serve as the benchmark for evaluation.
2. **Bulk Runs**\
   The test question set undergoes multiple bulk runs with differently configured Copilot Runs. Eg, you can have various runs where you have tweaked the prompts, or you wish to test out which LLM would answer your questions the best\
   \
   The test questions are processed to produce a corresponding set of Generated Answers.
3. **Compare and Evaluate**\
   The generated answer sets from each bulk run are compared against the golden answers to evaluate their accuracy.

   \
   **Scoring**: Each generated answer set is scored based on its semantic and technical accuracy relative to the golden answers.

In this example:

* **Generated Answer Set 1**: Scores 0.8, indicating it is 80% close in accuracy.
* **Generated Answer Set 2**: Scores 1.0, indicating perfect alignment with the golden answers.
* **Generated Answer Set 3**: Scores 0.6, indicating 60% accuracy.

The iterative bulk runs and systematic comparison provide a framework for improving AI-driven answer generation.

## When do you use Bulk vs Bulk+Eval vs Eval? <a href="#z8de5cdl1xxq" id="z8de5cdl1xxq"></a>

* [**Bulk workflow only**](https://gooey.ai/bulk/farmerchat-bulk-evaluator-regression-only-ggzy9gld1eae/) - If you want to test your Copilot’s functionality for regression tests, monitoring and observability, and bugs.
* [**Bulk and Eval** ](https://gooey.ai/bulk/farmerchat-bulk-evaluator-gpt-4o-mixtral-claude-vs-gemini-pro-15-b0o8aos3rj8y/)- If you are testing improvements on your prompts, or updating your documents, want to consider A/B testing.
* [**Eval** **workflow only**](https://gooey.ai/eval/copilot-evaluator-artpuhzwvily/)- If you already have test data and want to use “LLM as Judge” to evaluate it

### Common terms <a href="#id-3yvzoyislzdo" id="id-3yvzoyislzdo"></a>

* **Golden Answer**: Most suitable and accurate answers provided by humans with expertise on the subject
* **Semantic Closeness**: Since LLM will not output the same answer every time, the evaluation will check for how semantically close the output of the LLM is to your “Golden Answer”
* **Score and Rank**: For each generated answer the Evaluation workflow will give a “score” between 0 and 1, and rank the best answer.
* **Reasoning**: Evaluation LLM will share a short "reasoning" of how the score was given
* **Chart**: Based on the aggregate score, the Evaluation workflow will create a compare chart that


# How to set up Golden Q\&As

The Golden Q\&A pair helps to test

* Various prompt tweaks to improve the AI Agent's responses
* Compare LLM models
* Compare audio speech, recognition and, text-to-speech models
* Check price and latency
* Monitor regression

With the help of our Bulk and Evaluation Workflows, you can test the AI Agent quickly against a Q\&A set.

{% embed url="<https://www.youtube.com/watch?v=qGfhSDoX034>" %}

#### Create your Golden Q\&A pair <a href="#id-4y2kttei07z1" id="id-4y2kttei07z1"></a>

Prepare your golden QnA set:

1. Create a list of the most frequently asked questions for your AI Agent (we recommend between 25 for optimum observability and regression you can do more if you prefer)
2. Make sure the Excel sheet/Google Sheets table has a “header” section
3. Add all your questions and golden answers in the column below it

<figure><img src="/files/RKqh6pdDdCOMSsgJqVdn" alt=""><figcaption></figcaption></figure>

> **An expert must provide the Golden Answers, these can't be synthetic answers.**

**Common terms**

* **Golden Answer**: Most suitable and accurate answers provided by humans with expertise on the subject
* **Semantic Closeness**: Since LLM will not output the same answer every time, the evaluation will check for how semantically close the output of the LLM is to your “Golden Answer”
* **Score and Rank**: For each generated answer the Evaluation workflow will give a “score” between 0 and 1, and rank the best answer.
* **Reasoning**: Evaluation LLM will share a short "reasoning" of how the score was given
* **Chart**: Based on the aggregate score, the Evaluation workflow will create a comparison chart

### KNOWLEDGE BASE VS GOLDEN Q\&A <a href="#knowledge-base-vs-golden-q-and-a" id="knowledge-base-vs-golden-q-and-a"></a>

| Knowledge Base                                                                                                              | Golden Q\&A                                                                                                                                                                           |
| --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The Knowledge base is this entire set of structured and unstructured data that encompasses your agent’s field of expertise. | Golden Q\&A is a sample set of questions and answers. This is sample set includes questions most likely asked by user with an answer most accurately framed by an expert in your team |
| This includes all your web pages, PDFs, CSVs, Docs, and videos.                                                             | This is always a table with 4-5 columns with “Questions” and “Answers” as separate column headers.                                                                                    |
| Exists in your AI Agent Builder                                                                                             | Is meant to be used in the Bulk Evaluation Workflow (we will learn about it in Session 4)                                                                                             |
| Is used directly in your citations for the AI Agent's answers                                                               | Is only meant for testing your AI Agent’s accuracy                                                                                                                                    |
| Meant for answering external users questions                                                                                | Meant for checking regression, quality, time and cost internally                                                                                                                      |


# How to set up Bulk Runner?

In this example scenario, we are setting up a simple bulk run to check regression for an AI Agent in production.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Check out the example run here: BULK RUNNER (Regression Only)</strong></td><td><a href="https://gooey.ai/bulk/farmerchat-bulk-evaluator-regression-only-ggzy9gld1eae/">https://gooey.ai/bulk/farmerchat-bulk-evaluator-regression-only-ggzy9gld1eae/</a></td></tr><tr><td><strong>Check out the example run here: BULK RUNNER (Bulk and Evaluation)</strong></td><td><a href="https://gooey.ai/bulk/farmerchat-bulk-evaluator-gpt-4o-mixtral-claude-vs-gemini-pro-15-b0o8aos3rj8y/">https://gooey.ai/bulk/farmerchat-bulk-evaluator-gpt-4o-mixtral-claude-vs-gemini-pro-15-b0o8aos3rj8y/</a></td></tr></tbody></table>

{% @arcade/embed flowId="847Wp0A2AlNJenR6EhK4" url="<https://app.arcade.software/share/847Wp0A2AlNJenR6EhK4>" %}

### Step 1: Select Gooey Workflows <a href="#jmvc9vjmbif9" id="jmvc9vjmbif9"></a>

Choose the “SAVED” run from Gooey.AI Workflows that you would like to use.

<img src="/files/YtrITrXRSkA0Kmq7pyTX" alt="" width="563">

### Step 2: Input Data Spreadsheet <a href="#s6plmddmwaiq" id="s6plmddmwaiq"></a>

Prepare your test question set:

1. Create a list of the most frequently asked questions for your AI Agent (we recommend between 25 for optimum observability and regression you can do more if you prefer)
2. Make sure the Excel sheet/Google Sheets table has a “header” section
3. Add all your questions in the column below it

<figure><img src="/files/rldiLwFWeM8Eks8kk3dr" alt="" width="369"><figcaption></figcaption></figure>

1. Paste the link of your Google sheet or upload your data

&#x20;

<figure><img src="/files/jclXUOBTqQw64uBVkJxc" alt="" width="563"><figcaption></figcaption></figure>

The output will look like this:

<figure><img src="/files/1yv4kAL48m0DKmhwvJl7" alt=""><figcaption></figcaption></figure>

### Step 3: Select your input columns <a href="#yayrw51txj9z" id="yayrw51txj9z"></a>

In the current scenario, we want to use the Gooey Agent to answer all the questions in the google sheet. So essentially they are the “input” for the Bulk Workflow.

Select the “questions” column in the “input\_prompt” system variable.

### Step 4: Hit Submit <a href="#pqej8inj371s" id="pqej8inj371s"></a>

As this is a “Bulk only” scenario, you can “delete” the Agent Evaluator option in the section. After that hit the “Submit” button.

&#x20;

<figure><img src="/files/TTdT2yYwAqibsFcwLHmN" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/jbXzzAXueQIFPVTRk6Nu" alt="" width="563"><figcaption></figcaption></figure>

### Output <a href="#id-6n9vkbjh3n11" id="id-6n9vkbjh3n11"></a>

The workflow will create a new CSV, with an added few columns based on the run, including, “Output Text”, “Run URL”, and “Run Time”.

**Your output will be on the right side of the page.**

<figure><img src="/files/Hy4TdDUbdLx8R2XpwonV" alt="" width="563"><figcaption></figcaption></figure>

#### Additional Note <a href="#kfu0hmigziyi" id="kfu0hmigziyi"></a>

If you want more details in the Output section, use the drop down in the “Output Columns". This is useful if you want to keep track of Price, Latency, Error Messages, and other details.

<figure><img src="/files/MQHimnPwmEh5rxi44x4Y" alt=""><figcaption></figcaption></figure>


# How to set up Evaluations?

In this example scenario, we are comparing and evaluating the quality of the answers of various AI Agents that have all the same settings and functionalities except for different LLMs.&#x20;

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Check out the example run here: Evaluation only</strong> </td><td><a href="https://gooey.ai/eval/copilot-evaluator-artpuhzwvily/">https://gooey.ai/eval/copilot-evaluator-artpuhzwvily/</a></td></tr></tbody></table>

### Step 1: Select Gooey Workflows to evaluate <a href="#mj1hmvoaayxg" id="mj1hmvoaayxg"></a>

Choose the “SAVED” run from Gooey.AI Workflows that you would like to use.

<img src="/files/50iHeJ4or1vEdJz9z4f7" alt="" width="563">

### Step 2: Input Data Spreadsheet <a href="#id-4y2kttei07z1" id="id-4y2kttei07z1"></a>

Prepare your golden QnA set:

1. Create a list of the most frequently asked questions for your AI Agent (we recommend between 25 for optimum observability and regression you can do more if you prefer)
2. Make sure the Excel sheet/Google Sheets table has a “header” section
3. Add all your questions and golden answer in the column below it

<figure><img src="/files/YJKfH2xSP07HsmMuwsS5" alt="" width="563"><figcaption></figcaption></figure>

**You must provide the Golden Answers. Golden answers are the most suitable and accurate answers provided by humans with expertise on the subject.**

1. Paste the link of your Google sheet or upload your data&#x20;

<figure><img src="/files/C4yYSuVuEHTk6mtLtd3e" alt="" width="563"><figcaption></figcaption></figure>

### Step 3: Select your input columns <a href="#o6vzivos324o" id="o6vzivos324o"></a>

In the current scenario, we want to use the Gooey Agent to answer all the questions in the Google sheet. So essentially they are the “input” for the Bulk Workflow.

Select the “questions” column in the “Input Prompt” section.

<img src="/files/rNG5v7oOl1H3gyhOLxNZ" alt="" width="563">

### Step 4: Hit Submit <a href="#brcrdr2ggss2" id="brcrdr2ggss2"></a>

As this is a “Bulk and Eval” scenario, you can “select” the Agent Evaluator option in the section. After that hit the “Submit” button.

<img src="/files/PiZdsgt4L8bIHkG0GcUM" alt="" width="563">

*Note: We recommend using the “Agent Evaluator” if you are evaluating Agent Runs.*

### Output <a href="#id-22et24oucovd" id="id-22et24oucovd"></a>

The workflow will create a new CSV, with an added few columns based on the run, including, “Output Text”, “Run URL”, and “Run Time”.

***With the evaluation option, you will also get output for “Rationale”, “Compare Run Score”, etc. You will also get a Compare Chart which will show the aggregate scores.***

**Your output will be on the right side of the page.**

<figure><img src="/files/u1NyEdBUjFTEZDywcTOS" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/IwNXXQULe2mtWQj9sTZI" alt="" width="375"><figcaption></figcaption></figure>

### Best Practices <a href="#oucznt5a94xk" id="oucznt5a94xk"></a>

* Keep it simple - try to use an input spreadsheet with limited columns
* Don’t leave any empty data points in the second row - there is a bug and the column does not read
* Make sure to name your “Saved” workflows with relatable titles so that it is easy to set up the run
* We recommend collecting user messages from your saved agent's “Analytics” section. Head to Your agent link> Deploy tab > View Analytics, scroll to the bottom, and **export** the “Messages” tab CSV. <br>

  <figure><img src="/files/vQvTjlIwurP1w42oIbdR" alt=""><figcaption></figcaption></figure>

#### Note: <a href="#id-8grsusqblfge" id="id-8grsusqblfge"></a>

* Bulk runner will only read the first sheet of your Excel or Google Sheet
* In the case of Google Sheets, you can shift your relevant sheet to be the first and then re-enter the link in the Input section. IT WILL NOT REFRESH ON ITS OWN.


# How to use Bulk Run via API

### Step 1

* Run the TTS models you want to test on the UI.&#x20;
* Copy the links of the test runs&#x20;

<figure><img src="/files/1EYekmjIL9Kg8NMKWLDb" alt=""><figcaption></figcaption></figure>

### Step 2

* Open Gooey.AI bulk&#x20;
* Head to the API tab&#x20;
* Click on the “curl” tab

<figure><img src="/files/RENVaM7VWEnTYyhoEOev" alt=""><figcaption></figcaption></figure>

EXAMPLE:&#x20;

{% embed url="<https://gooey.ai/bulk/compare-swahili-speech-recognition-ehrfs6a0yukt/api/>" %}

### Step 3

* Add your CSV/google sheet in the documents section (see a screenshot of the CSV example below)&#x20;
* Add your run URLs in the run\_urls section.
* Point to the correct column for the input in input\_columns

```sh
curl 'https://api.gooey.ai/v2/bulk-runner?example_id=ehrfs6a0yukt' \
  -H "Authorization: bearer $GOOEY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "documents": [
    "https://docs.google.com/spreadsheets/d/1EsQ_NKhyNikNNO3xLV9GOc6C5LTflu9dJ5CSpHqNUQs/edit?gid=0#gid=0"
  ],
  "run_urls": [
   "https://gooey.ai/compare-text-to-speech-engines/?run_id=todlwvm01l31&uid=fm165fOmucZlpa5YHupPBdcvDR02",
   "https://gooey.ai/compare-text-to-speech-engines/?run_id=j8v9fqrfl26o&uid=fm165fOmucZlpa5YHupPBdcvDR02",
    ],
  "input_columns": {
    "text_prompt": "Column Name"
  },
  "output_columns": {
    "price": "Price",
    "run_url": "Run URL",
    "run_time": "Run Time",
    "output_text": "Output Text",
    "raw_output_text": "Raw Output Text"
  }
}'
```

<figure><img src="/files/PXJweUE5PZtmOEmZJsMG" alt=""><figcaption></figcaption></figure>

### How can I calculate the credits?&#x20;

<figure><img src="/files/88qwi3n9SJG0pzbK76Su" alt=""><figcaption></figcaption></figure>

* Please check the credit per run in the sample run you run for your bulk run.&#x20;
* This should be the average cost per run.
* Since you are running Bulk API, you can also check the credits for every run by adding `"price": "Price"` in the `"output_columns"` section


# Functions

In this guide, we will learn how to create a functions call on Gooey.AI and add it to our Gooey.AI workflows.&#x20;

We'll take the example of our Copilot Analysis Scripts. All copilots have an integrated LLM script to analyze various user data. This could be user location, question category, user sentiment, etc. Once you have the data, you might want to push it to your servers, or database, or combine it with your other services.&#x20;

### Scenario

We will take the "Gooey Chat Bot Analysis Script" in this example. This LLM script analyzes the incoming messages to our [Gooey.AI Support Bot](https://gooey.ai/copilot/the-gooeyai-support-bot-3dwfcqvcwl04/) and categorizes the user's query into buckets like API Usage, Pricing, Sales, etc.&#x20;

We want to push this output to our CRM so we get deeper analytics which helps us respond better to our customers.&#x20;

<figure><img src="/files/xS0J9kaPzNCJWylfojq9" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/UwjJxt05UCeDqNmz7nas" alt=""><figcaption><p>Gooey Support Bot's Analysis script, on the left is the LLM prompt with the incoming message and on the right is the category output</p></figcaption></figure>

{% embed url="<https://gooey.ai/compare-large-language-models/gooey-bot-chat-analysis-script-27lrilywfzmv/>" %}
LINK TO THE LLM ANAYLSIS SCRIPT
{% endembed %}

## How do you add functions to your Gooey workflows?

### **Step 1**

Head over the [Functions workflow](https://gooey.ai/functions/)

### **Step 2**

Create your POST Request with AFTER Function:

Here is a basic fetch call, you can copy or edit this code as per your needs, and paste it in the code editor on the Functions workflow.&#x20;

**Currently, we have added httpbin for our POST request, you can change this for your preferred API. You can find more** [**examples here**](https://gooey.ai/functions/examples)

{% code title="A basic fetch call" lineNumbers="true" %}

```javascript
async (variables) => {
  const res = await fetch("https://httpbin.org/post", {
    method: "POST",
    body: JSON.stringify(variables),
    headers: {
      "Content-Type": "application/json",
    },
  });
  return { response: await res.json() };
};
```

{% endcode %}

<figure><img src="/files/4PrPKm7FxY0jhpPmzE5W" alt=""><figcaption><p>Functions workflow with the code editor to the left</p></figcaption></figure>

### **Step 3**

Add your relevant variables.&#x20;

<figure><img src="/files/nrLPOyVXzJGg3rs7094d" alt="" width="375"><figcaption></figcaption></figure>

### **Step 4**

Hit Submit, if your code is working fine you will get your outputs on the right side. Use the “Save as New” button and update the run name.

<figure><img src="/files/izevIbeYcDwaUndpBNmW" alt=""><figcaption></figcaption></figure>

### **Step 5**

Now head over to the Gooey workflow where you want to add the saved functions.

Head over to the example below:&#x20;

{% embed url="<https://gooey.ai/compare-large-language-models/gooey-bot-chat-analysis-script-27lrilywfzmv/>" %}

<figure><img src="/files/OrSgJ0CJjlZ3nUeh6lqV" alt=""><figcaption></figcaption></figure>

Check the Functions, choose “AFTER” and add your Saved example. And then hit "SUBMIT!&#x20;

<figure><img src="/files/xAx8RBKGCiZXo1yRRu5c" alt=""><figcaption></figcaption></figure>

You can check your Functions output in the Workflow at the end of the page in "Details" section.&#x20;

<figure><img src="/files/NxCGstxeWZEjgbretnSq" alt=""><figcaption></figcaption></figure>

### How do I find all the available functions and how can I contribute? <a href="#id-86mplbjxoi5t" id="id-86mplbjxoi5t"></a>

All the functions are available here:

{% embed url="<https://gooey.ai/functions/examples/>" %}

Choose any of the Examples and Fork them!

<figure><img src="/files/4LdyMZXl4s02EHkimePZ" alt=""><figcaption></figcaption></figure>

### More resources

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4>Read more about GOOEY.AI functions</h4></td><td><a href="/spaces/leYcqBx5FRZcVr3wI4f4/pages/K0cwPcJtt43h3MYCF496">/spaces/leYcqBx5FRZcVr3wI4f4/pages/K0cwPcJtt43h3MYCF496</a></td><td><a href="/files/zx3U4U0sZoYH0XoIqeLv">/files/zx3U4U0sZoYH0XoIqeLv</a></td></tr><tr><td><h4>Connect API to LLM Generator</h4></td><td><a href="https://gooey.ai/compare-large-language-models/functions-make-a-haiku-with-iss-coordinates-k4vuehh6hhvo/">https://gooey.ai/compare-large-language-models/functions-make-a-haiku-with-iss-coordinates-k4vuehh6hhvo/</a></td><td><a href="/files/KGC8UpaiuaRNJPbDDPAg">/files/KGC8UpaiuaRNJPbDDPAg</a></td></tr><tr><td></td><td></td><td></td></tr></tbody></table>


# LLM-enabled Functions

## Where are LLM-enabled Functions useful?

There are many scenarios where we don't need to run the Functions for every Copilot query. For example:

* User wants to calculate data in between the conversation (like an HVAC CFM Calculation)
* LLM needs to do a Google search to respond to the query
* LLM needs to do a look-up weather API and answer the query&#x20;

<figure><img src="/files/OBrPhrdBbaKWnJ6MxKgC" alt="" width="492"><figcaption><p>A flowchart which shows the different flows </p></figcaption></figure>

## How do LLM-enabled Functions work?

When the user sends a query in Natural Language, the LLM determines the following:&#x20;

1. does the query require a function?
2. which part of the text should be passed as an argument in the function?

In the example below, the query is about CFM calculations which are commonly used in HVAC installations.&#x20;

<figure><img src="/files/RY1Bv3zq9tmFUs6o4kkG" alt=""><figcaption></figcaption></figure>

## How to use LLM-enabled Functions?

Using LLM-enabled Functions is exactly the same as "BEFORE" and "AFTER" functions

### **Step 1** <a href="#step-1" id="step-1"></a>

Head over to the [Functions workflow](https://gooey.ai/functions/)

### **Step 2** <a href="#step-2" id="step-2"></a>

Create your PROMPT Function:

* create a basic fetch call for the weather of any location
* create a serper&#x20;

**You can find more** [**examples here**](https://gooey.ai/functions/examples)

#### A basic Weather API call ([link here](https://gooey.ai/functions/current-weather-rxmquy60p1vq/))

```javascript
async ({ lat, long }) => {
  // Use Open-Meteo's public API for fetching weather data
  let url = `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${long}&current_weather=true`;
  let response = await fetch(url);
  let data = await response.json();
  return { weather: data.current_weather };
};
```

#### An API call for serper  - a service for google search ([link here](https://gooey.ai/functions/google-search-without-api-key-tey6zrx2vzvm/))

```javascript
async ({ query }) => {
  var myHeaders = new Headers();
  myHeaders.append("X-API-KEY", "your API key");
  myHeaders.append("Content-Type", "application/json");
  
  var raw = JSON.stringify({
    "q": query
  });
  
  var requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: raw,
    redirect: 'follow'
  };
  
  let ret = await fetch("https://google.serper.dev/search", requestOptions);

  return { search_results: await ret.json() };
};

```

### **Step 3** <a href="#step-3" id="step-3"></a>

Hit Submit, if your code is working fine you will get your outputs on the right side. Use the “Save as New” button and update the run name.

### **Step 4** <a href="#step-5" id="step-5"></a>

Now head over to the Gooey workflow where you want to add the saved functions.

Head over to the example below:

{% embed url="<https://gooey.ai/copilot/farmerchat-with-current-weather-data-qfzn662xf06v/>" %}

Check the Functions option, and choose “PROMPT” from the dropdown and add your Saved example. And then hit "SUBMIT!

<figure><img src="/files/JUXn4MnClcdqCnci8zL4" alt=""><figcaption></figcaption></figure>

*You can check your Functions output in the Workflow at the end of the page in "Details" section.*

<figure><img src="https://docs.gooey.ai/~gitbook/image?url=https%3A%2F%2F662560811-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F5BFP5RUm6rTLXk8wUSTf%252Fuploads%252FenY8Js0Pe22WJWCN5Ook%252FScreenshot%25202024-08-09%2520at%25202.02.41%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D7386368f-50b3-4def-b495-977fcb610b40&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=c63c07c8&#x26;sv=1" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/C8QIrruXH2N7XJEkg6zv" alt=""><figcaption></figcaption></figure>


# How to use SECRETS in Functions?

Our main aim with Functions is to allow users to chain API calls and connect their other services to Gooey.AI's workflows. Several services like Supabase, Firebase and more require their own API keys. Now you can store them in your [API Keys tab](https://gooey.ai/account/api-keys/) in the Accounts Page.&#x20;

### Step 1

Head over to [Gooey.AI Functions](https://gooey.ai/functions)

### **Step 2**

Set up your API call. In this example, we'll create an API call to Open Weather Map, so that it can share real-time weather stats with the user.&#x20;

```javascript
async ({ city_name }) => {
  const API_KEY = process.env.YOUR_API_KEY;
  if (!API_KEY) throw new Error("API key not found in environment variables.");
  const encodedCityName = encodeURIComponent(city_name);
  const response = await fetch(`https://api.openweathermap.org/data/2.5/weather?q=${encodedCityName}&appid=${API_KEY}&units=metric`);
  if (!response.ok) throw new Error(`Error ${response.status}: ${response.statusText}`);
  return { weather_data: await response.json() };
};
```

Here `process.env.YOUR_API_KEY` calls the secret key from your "Secrets".&#x20;

### Step 3

Scroll down to the "Secrets" section in the Functions Workflow. Select the API you need for this function to work successfully. &#x20;

<figure><img src="/files/0KdmFW0S1PTyDhzExlSH" alt=""><figcaption></figcaption></figure>

### Step 4

Hit "Run" and Save the function.&#x20;

{% hint style="info" %}
NOTE:  Before saving the workflow check if your response output is correct.
{% endhint %}

### Step 5

Add the saved Functions workflow in AI Copilot or other Gooey.AI Workflows.&#x20;

<figure><img src="/files/ClBAfcUxSnMl0Snjuvse" alt=""><figcaption></figcaption></figure>

***

Learn more about adding SECRETS to your Workspaces here:

{% embed url="<https://docs.gooey.ai/guides/how-to-use-workspaces/how-to-add-secrets-in-your-workspace>" %}


# How to connect FirebaseDB to Copilot

In this guide, we will learn how to create a Functions call to push medical records to Firebase Realtime Database via a conversational Copilot meant for Community Health Workers. &#x20;

#### Scenario&#x20;

A CHW visits a beneficiary for a monthly checkup, taking notes by hand due to unstable network connectivity that disrupts data entry in the Android app.

#### Proposed Copilot

The CHW sends a voice note via WhatsApp. It transcribes data for approval and updates the medical database hosted on Firebase Realtime Database, avoiding connectivity issues.

<figure><img src="/files/yumZGNRs9ot4SAbhRKOI" alt=""><figcaption></figcaption></figure>

You can try the WhatsApp Workflow here:&#x20;

{% embed url="<https://wa.me/+12064894738?text=Hi>" %}

You can tweak the Workflow here:

{% embed url="<https://gooey.ai/copilot/nurse-julie-health-voice-conversations-to-patient-records-cqd11cspkz4o/>" %}
Nurse Julie Copilot Builder&#x20;
{% endembed %}

## Create the Firebase Function

### Step 1: Create a Firebase project

![](/files/Uoxq4xauaLNhqbTHRKhQ)

![](/files/JBi7R5kQklQ0Fx2qRsqZ)

### Step 2: Create a Realtime DB in Firebase

Once you have created the RTDB, copy the RTDB URL

![](/files/vYo5LsFUXKWWmrMMBfwo)

![](/files/3f0VDtV2NfELZd8qHXoc)

![](/files/AzjUiTwV6jM8u53XDxYI)

### Step 3: Duplicate the Firebase Function

Head to the FirebaseDB example in Gooey.AI (see the link below), duplicate the example by using the “Save as New” button and adding it to your workspace

{% embed url="<https://gooey.ai/functions/firebase-rtdb-post-with-cryptohash-8vs0hcmv8fuz/>" %}

![](/files/YwKca3eNAV6sOfueNnFD)

![](/files/GaITEW0VHjMwSBQUmcz4)

### Step 4: Paste the RTDB URL in Gooey.AI Functions

Paste the RTDB URL from Step 2 and replace it in the \`firebaseURL\` as shown below

![](/files/ex7MYgLMLLaKjgp5nDZ2)

### Step 5: Create a path in Firebase RTDB

Head back to your Firebase Realtime Database and add a name value to the RTDB,  eg `data`

![](/files/eUaObI4Uz4pyJcECnHn4)

### Step 6: Get Firebase API key

![](/files/Ns5UUr08HrnQ7XiIiOZ2)

![](/files/52eif9AevP5ehWzmA1ST)

### Step 7: Add the Firebase API key to Gooey Secrets

Go back to Function you have created in Gooey.AI, scroll down to “Secrets” section. Click on the “Add” button

![](/files/UScZgI8IbLigL9DdUemi)

Add the “name” as FIREBASE\_API\_KEY and the API key which you copied from Firebase in the “value” section, and save the key.

![](/files/1TZ4S4mPJobuRUiwPFSl)

Once its saved, select it from the drop down.

![](/files/3LI3Wu5SLjg0Vg0g6Wwi)

[Know more about adding secrets here](/tools/how-to-use-gooey-functions/how-to-use-secrets-in-functions)

### Step 8: Test function

#### Step 8.1: You can hit “Run” to test if the function is working.&#x20;

If the log shows a “successful” message. Your screen should show this message:

![](/files/1jzN3Vkg8OnrYPIdvLSX)

#### Step 8.2: Please check the firebaseRTDB for data updates. Your data should have uploaded.

<figure><img src="/files/gGePVERGl7GZUnQcXda3" alt=""><figcaption></figcaption></figure>

### Step 9: Save the workflow

Save the changes by clicking “Update”

On saving the function to your workspace, please remember to add a detailed description of what the function does, this will allow the AI Copilot to use the functions in an agentic way

![](/files/MCINtPHNKBD9wpuCQ0Zl)

## Add Firebase Function to Copilot

### Step 1: Add function to Copilot

Duplicate the example by using the “Save as New” button and adding it to your workspace

{% embed url="<https://gooey.ai/copilot/nurse-julie-health-voice-conversations-to-patient-records-cqd11cspkz4o/>" %}

Scroll down to the “Developer Tools and Functions” section in the Copilot, toggle it on and select the Firebase Function that you saved.&#x20;

![](/files/ufO9gS1Da5ohYAY3rFFy)

### Step 2: Add prompt instruction

Your prompt needs to be a bit detailed to make sure that the Functions are working properly. \
You need this:

1. To make sure Copilot knows it needs to call a Function at appropriate time,
2. To ensure that LLM translates natural language conversation to JSON data structure as per your requirement

Your prompt could look something like this:

{% code overflow="wrap" %}

```
You are Nurse Jane - an AI bot to assist community health care workers upload medical records after their family visits to find basic demographics and history.
These are the steps you need to follow:

1. Introduce yourself with this script as a guideline:
"Hello I'm Nurse Julie - your family health care provider, I can provide guidance on creating a health record and integrating care recommendations"

2. Ask for the user to provide, if they miss any data point, please ask them to share that. Don't create any records until all the data is captured:

    Community health worker's name (required)
    Date of case note (required)
    Patient's name (required)
    Date of Birth (required)
    Phone Number (required)
    Family members (required)
    Address (required)
    Date of visit/session (required)
    Purpose of visit/session (required)
    Observations (required)
    Topics discussed (required)

3. Don't create any records until all the data is captured. Then ask if they'd like to create medical record based on this information. Create the record as the following JSON and POST to firebase DB. Please don't run the function until user gives you approval.

{
    data: {
        mobile: string,
        patient_name: string,
        address: string,
        dateOfBirth: string,
        family_member: string,
        pid: number,
        health_workers_name: string,
        case_date: date,
        visit_date: date,
        visit_purpose: string,
        observations: string,
        topics_discussed: string
    }
}

4. If you are asked to retrieve the information of a patient ask for the phone number and use the firebase RTDB Get function to retrieve it

Guidelines:
- Avoid answering questions that don't pertain to health matters
- Respond without emojis, bulleted lists or special symbols (e.g. “*”)
- Respond in the same language as the user. e.g. if they ask a question in Hindi, reply in Hindi.
- Use simple, direct language.
```

{% endcode %}

#### What is the prompt doing?

* In point 2 of the prompt, we have shared all the information the Copilot must collect to create a record.
* In point 3, we provide a FIXED json format for the LLM to output. This ensures that the data pushed to the FirebaseDB is always in the same format, which is important for retrieval
* In point 4, we instruct the Copilot to utilize Functions when the user requests to retrieve or push information.

### Step 3: Test copilot&#x20;

In the chatbox of the Copilot Builder, you can run a test to check whether the Copilot is working.&#x20;

{% embed url="<https://gooey.ai/copilot/?run_id=d8igsxs87l1x&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

If the Function is run, you can see the widget with all the details.&#x20;

<figure><img src="/files/mIwuAYWd4rdYzUqyurSo" alt=""><figcaption></figcaption></figure>

You can also confirm if the data has been created and stored by logging into the Firebase RTDB like [Step 8 from above](#step-8-test-function).

### Step 4: Save the workflow

Save the changes by clicking “Update”.


# Frequently Asked Questions about Functions


# Memory

You can make your \`Functions\` step remember information between runs when it is used inside a Copilot with Memory enabled.

### **Why do we need memory**

\- Your function can read saved memory

\- Your function can update saved memory

\- Changes are saved after the function finishes

### **How it works**

1\. In your Copilot, enable a Gooey Memory tool.

2\. Add a \`Functions\` workflow step/hook to that same bot.

3\. Run the bot as usual.

<mark style="background-color:blue;">**If Memory is enabled on the bot, your function will automatically receive it.**</mark>

Try these examples:

{% embed url="<https://gooey.ai/copilot/functions-readwrite-memory-demo-for-agents-5330zy7cxwty/>" %}

{% embed url="<https://gooey.ai/functions/memory-readwrite-from-functions-98o4jo5ghwpc/>" %}

#### How to use it in JavaScript

Use the global `GOOEY_MEMORY` object.

```javascript
(vars) => {
  GOOEY_MEMORY.user_name = vars.name;
  GOOEY_MEMORY.last_seen_at = new Date().toISOString();
  GOOEY_MEMORY.last_topic = vars.topic;
  return {
    saved: true,
    last_seen_at: GOOEY_MEMORY.last_seen_at
  };
}
```

#### How to use it in Python

Use the global \`GOOEY\_MEMORY\` object.

```python
from datetime import datetime, timezone

def main(name: str, topic: str, **kwargs):
    GOOEY_MEMORY["user_name"] = name
    GOOEY_MEMORY["last_seen_at"] = datetime.now(timezone.utc).isoformat()
    GOOEY_MEMORY["last_topic"] = topic
    
    return {
        "saved": True,
        "last_seen_at": GOOEY_MEMORY["last_seen_at"],
    }

```

#### Deleting a memory value (optional)

**JavaScript:**

```javascript
delete GOOEY_MEMORY.temp_value;
```

**Python:**

```python
GOOEY_MEMORY.pop("temp_value", None)
```

#### Good use cases

\- Save a user’s name

\- Save a preferred language

\- Save the last selected option

\- Save the last topic discussed

\- Save a last-seen timestamp

\- Save simple flags like `onboarding_complete = true`

#### Important notes

\- Memory is only available automatically when the function is run from a copilot with Memory enabled.

\- Changes are saved after the function completes.

\- This memory works best for “latest value” style data (for example, last seen time, preferences, or status flags).

#### Troubleshooting

\- If `GOOEY_MEMORY` seems empty, make sure the Copilot Memory Integration is enabled.

\- If changes are not saved, check whether the function run failed with an error.

<br>


# RAG-based Document Search

Large Language Models are trained on a huge amount of data, yet when you search for your organization or brand, you might find that it usually can’t respond accurately. This means that LLMs might hallucinate (or “make up”) irrelevant or inaccurate information for your business needs.

This is why Retrieval Augmented Generation (RAG) is an excellent solution! RAG will:

1. Index all of your knowledge base in a vectorDB - pdfs, csvs, texts, web pages, images, and more
2. Retrieve all the most relevant information from the vectorDB
3. Use LLM to provide summaries that work for your use case and generate accurate answers

<figure><img src="/files/pOtjTs2sDrPi8cff85H2" alt=""><figcaption></figcaption></figure>

### Where is RAG useful? <a href="#pk2fnertmmfp" id="pk2fnertmmfp"></a>

RAG is useful for:

1. For site-wide searches
2. AI copilots
3. Research and analyses of large datasets
4. Workplace searches
5. Search powered applications
6. Search and summaries for the legal industry

### How to use RAG on Gooey.AI? <a href="#t71waoaanjb8" id="t71waoaanjb8"></a>

#### Step 1: Prepare your knowledge base <a href="#id-7ycp7arvb983" id="id-7ycp7arvb983"></a>

You can upload all your documents and data in the “Documents” section. You can add PDFs, docs, spreadsheets, charts, and texts.

**These can be uploaded from your local drive or online hosted links. We even accept Google Drive links.**

![](/files/cPztrno4fGENHiLBup71)

#### Step 2: Choose your preferred Large Language Model <a href="#jw7i6tz1b2xd" id="jw7i6tz1b2xd"></a>

Head to the “settings” option and choose your preferred LLM!

![](/files/tkS4a4Du2KVMS2OYrHPl)

#### Step 3: Add your query <a href="#cve6n4liro9f" id="cve6n4liro9f"></a>

Scroll to the top of the page, and add your query/question for the RAG.

![](/files/K9xmE6J10HAqef2X8LoA)

#### Step 4: Hit Submit <a href="#ftzxwu9v5kmm" id="ftzxwu9v5kmm"></a>

Hit the Submit button!

### Output <a href="#kd4xn1r795m" id="kd4xn1r795m"></a>

Your output will be on the right side and look like this:

![](/files/4yuFinGSpEHSFFbx0Syr)

You might notice, there is a citation legend in the output. All referenced and cited text snippets from the search query will be shared in the “Sources” section below the output.

![](/files/KdDnvXHYvk4ozekhgMLb)


# AI Lip Sync Generator

AI-powered lip-sync in seconds!

Gooey.AI offers a simple and no-code solution for lipsyncing in any language. Lip sync Animation can be handy in corporate training modules, AD campaigns, retail and hospitality sectors, and other video content sources where you have multilingual content.

### Why Lipsync? <a href="#cu1xpothtpzq" id="cu1xpothtpzq"></a>

Lipsync can:

1. Provide multilingual brand information at speed
2. Reduce production costs for communication and marketing teams
3. Adds a human touch to your content without added production budgets

### Who is Lipsync for? <a href="#etv8n37xo8ms" id="etv8n37xo8ms"></a>

Lipsync is useful across many industries:

1. in retail and hospitality for orientation and information videos
2. In corporate training modules
3. For Advertisement campaigns with brand ambassadors
4. Video content creation

Try it here

{% embed url="<https://gooey.ai/lipsync-maker/?example_id=zjtgl707&run_id=ov8pu5q4&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

### VIDEO TUTORIAL: <a href="#id-7e9v4rbb98rg" id="id-7e9v4rbb98rg"></a>

{% embed url="<https://www.youtube.com/watch?v=RRmwQR-IytI>" %}

### How do you use Lipsync Animation generator in Gooey.AI? <a href="#id-7e9v4rbb98rg" id="id-7e9v4rbb98rg"></a>

#### Step 1 <a href="#id-3akkpf7ao60t" id="id-3akkpf7ao60t"></a>

Prep your avatar video or photograph. Here are some pointers when choosing your image:

1. Make sure the image is high-resolution
2. Ensure it clearly shows all the features of your talking head
3. The image must be cropped up till bust height
4. Use only human faces

![](/files/jbsavON3IdtxBLrUSEc6)

For this example, we have generated an avatar on Gooey.AI’s Image generator tool.

<figure><img src=" https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/c4bd6b86-8070-11ee-94c2-02420a0001ee/gooey.ai%20-%20Create%20a%20beautiful%20black%20and%20white%20il...%20of%20the%20graphic%20novelist%20and%20artist%20Robert%20crumb.png" alt="" width="375"><figcaption></figcaption></figure>

Try the tool here: <https://gooey.ai/compare-ai-image-generators/?run_id=pqikl5mi&uid=fm165fOmucZlpa5YHupPBdcvDR02>

#### Step 2 <a href="#id-5v4axqcj5yym" id="id-5v4axqcj5yym"></a>

Create your text for the lip sync.

Prepare your text for the lipsync, here is an example below:

```
Hi, welcome to Gooey.AI. Where Shared AI Workflows Create Measurable Value.
Discover, customize and deploy low-code AI recipes using the best of private and open source Generative A.I.
Built for developers who code fast and teams that prove ROI. 
```

![](/files/Kf9f1AdLbMraRYmIpcBL)

{% hint style="info" %}
Note: Use shorter pieces of text, to ensure high quality lipsync with low-latency and minimum distortion.
{% endhint %}

**Our workflow allows for multilingual lip-sync. Try our spanish example below:**

{% embed url="<https://gooey.ai/lipsync-maker/?example_id=zjtgl707&run_id=3ns28gi5&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

#### Step 3 <a href="#q7xfnhgt39oc" id="q7xfnhgt39oc"></a>

Hit “Submit” :comet::rocket:

{% embed url="<https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/9f22b116-9d7a-11ee-8eac-02420a0001f9/gooey.ai%20lipsync.mp4#t=0.001>" %}

Try it here:

{% embed url="<https://gooey.ai/lipsync-maker/?example_id=ygblwbc1>" %}

### Advanced Settings <a href="#bek5b9uth2re" id="bek5b9uth2re"></a>

#### Face Padding <a href="#id-7micoj491pkj" id="id-7micoj491pkj"></a>

You can use the “Face Padding” settings to improve the accuracy of the detected face in the image/video. This ensures that the Lip Sync video looks more realistic.

![](/files/xtWWhtfohRwap2HEcvvv)

#### &#x20;<a href="#id-5272lwq3flrn" id="id-5272lwq3flrn"></a>

#### Speech Provider <a href="#a5bhfdq8ob29" id="a5bhfdq8ob29"></a>

Our Lip Sync Animation generator includes several Speech PRovider services. We have detailed each of them below, and speech provider would suit your needs the best.

**Google Cloud Text-to-Speech**

Google offers a range of voices and accents.

How to use the settings:

* You can select the voice from the dropdown.
* To hear the various voice samples you can click on the link that is circled in red.
* Use the “Speaking rate” and “Pitch” settings to ensure that the voice sounds closest to your brand and character’s personality.

Note: If you are looking for consistent, long-form speech across many languages, then Google is an excellent choice. But, the voice will sound a little robotic, and many not work for uses that require expressive and emotional speech synthesis.

![](/files/7IDSYJ2dsCwOKfR81adM)

**ElevenLabs**

ElevenLabs is currently one of the most popular synthetic voice services. They offer fast, accurate speech synthesis, with very realistic human tones.

How to use the settings:

* Choose a voice from the “Voice Name” dropdown box
* Choose a “Voice Model” - we recommend using “Multilingual V2” for more accuracy, more languages covered, more natural sounding voices and more stability
* Stability setting - A lower stability provides a broader emotional range. A value lower than 0.3 can lead to too much instability.
* Similarity Boost setting - Dictates how hard the model should try to replicate the original voice.
* Style Exagerration setting - This setting attempts to amplify the style of the original speaker. It requires more compute power and also increases the latency. We recommend you keep this setting on 0.

***Custom Voice settings***

You can learn more about custom voice settings here

{% embed url="<https://gooey.ai/docs/guides/lipsync-videos-with-custom-voices>" %}

![](/files/8jjqV7njcqyD1F4N7bdN)

![](/files/kxYcsNjtDOD7MnxIEobv)

**UberDuck.AI**

UberDuck offers low-latency text-to-speech generation.&#x20;

![](/files/fG0yicZ7FE262bOlgqyQ)

**Bark (Suno.AI)**

Bark is also a great service with several voice options. You can find all the various voice samples [here](https://suno-ai.notion.site/8b8e8749ed514b0cbf3f699013548683?v=bc67cff786b04b50b3ceb756fd05f68c).

![](/files/PJsv0IZEIGGhRljWwl2h)

#### Speech Provider Samples <a href="#nvegkpa38hjm" id="nvegkpa38hjm"></a>

Here are some samples of the various speech providers.

Google (english) - <https://gooey.ai/compare-text-to-speech-engines/?run_id=n2b8ng36&uid=fm165fOmucZlpa5YHupPBdcvDR02>

ElevenLabs (english) -

<https://gooey.ai/compare-text-to-speech-engines/?run_id=jj3vkot4&uid=fm165fOmucZlpa5YHupPBdcvDR02>

UberDuck.AI (english) -

<https://gooey.ai/compare-text-to-speech-engines/?run_id=mvrb5fco&uid=fm165fOmucZlpa5YHupPBdcvDR02>


# Lip Sync Animation Generator (WITH AUDIO FILES)

AI-powered lip-sync in seconds!

There are use cases for many companies to use Audio files instead of Text-to-Speech. This is especially useful if you:

1. Already have a large content library of high quality voice overs
2. Want a specific voice that AI can't produce currently
3. Have a higher need for a realistic voice for your brand loyalty&#x20;

### Audio files vs AI generated Audio <a href="#cu1xpothtpzq" id="cu1xpothtpzq"></a>

| Audio File with Human Generated Speech                      | AI Generated Speech                                                                                  |
| ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **PROS**                                                    | **PROS**                                                                                             |
| Realistic and accurate voice                                | No production/recording cost                                                                         |
| Brand consistency is high                                   | Faster iteration for brand if changes are needed                                                     |
| **CONS**                                                    | **CONS**                                                                                             |
| High production cost (voice actor, recording and mastering) | Robotic Voice, can be inconsistent                                                                   |
| Slower turn around time                                     | Harder to add intonation. E.g. stressing on certain words or saying things with a particular emotion |

Try it here

{% embed url="<https://gooey.ai/Lipsync/>" %}

### VIDEO TUTORIAL: <a href="#id-7e9v4rbb98rg" id="id-7e9v4rbb98rg"></a>

{% embed url="<https://www.youtube.com/watch?v=EJdtC0USujM>" %}

### How do you use Lipsync Animation generator in Gooey.AI? <a href="#id-7e9v4rbb98rg" id="id-7e9v4rbb98rg"></a>

#### Step 1 <a href="#id-3akkpf7ao60t" id="id-3akkpf7ao60t"></a>

Prep your avatar video or photograph. Here are some pointers when choosing your image:

1. Make sure the media is high-resolution
2. Ensure it clearly shows all the features of your talking head
3. The image must be cropped up till bust height
4. Use only human faces

<figure><img src="/files/7TEhQ7tgGr2JABKABQaM" alt=""><figcaption></figcaption></figure>

For this example, we have used Alfred Hitchcock! :bird:

<figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/8c1b1f02-5f66-11ed-a8a9-02420a0000aa/ezgif-5-4ccc215641.gif" alt="" width="375"><figcaption></figcaption></figure>

#### Step 2 <a href="#id-5v4axqcj5yym" id="id-5v4axqcj5yym"></a>

Upload your audio file. This can be in .wav/.mp3 format.&#x20;

<figure><img src="/files/qCtzUf6WQq1CTm10SlVf" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Note: Use shorter pieces of audio, to ensure high quality lipsync with low-latency and minimum distortion.
{% endhint %}

**Our workflow allows for multilingual lip-sync. Try our hindi example below:**

{% embed url="<https://gooey.ai/Lipsync/?example_id=eu8o3GshpBQ>" %}

#### Step 3 <a href="#q7xfnhgt39oc" id="q7xfnhgt39oc"></a>

Hit “Submit” :comet::rocket:

{% embed url="<https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/d25e4d82-4b73-11ee-9484-02420a0001b2/gooey.ai%20lipsync.mp4>" %}

Try it here:

{% embed url="<https://gooey.ai/Lipsync/>" %}

### Advanced Settings <a href="#bek5b9uth2re" id="bek5b9uth2re"></a>

#### Face Padding <a href="#id-7micoj491pkj" id="id-7micoj491pkj"></a>

You can use the “Face Padding” settings to improve the accuracy of the detected face in the image/video. This ensures that the Lip Sync video looks more realistic.

![](/files/xtWWhtfohRwap2HEcvvv)


# LipSync videos with Custom Voices

Generating lipsync’d videos is amazing and they are even better with a custom voice. Companies like ElevenLabs enable you to create custom voices by uploading voice samples and we are very happy to announce that you can now use your custom [ElevenLabs](https://www.google.com/url?q=https://elevenlabs.io/\&sa=D\&source=editors\&ust=1699647828894323\&usg=AOvVaw2bAzAdEO-4xNhkycFFBZum) voice inside of the Gooey.AI [Lipsync Maker](https://www.google.com/url?q=https://gooey.ai/lipsync-maker/\&sa=D\&source=editors\&ust=1699647828894585\&usg=AOvVaw09k8ytfRSZQzN_aTYdqkZ_) (and [Copilot](https://www.google.com/url?q=https://gooey.ai/copilot\&sa=D\&source=editors\&ust=1699647828894767\&usg=AOvVaw2lj194DVdC8sAuYPSw2Oz5)) Workflows.

### Step 0 - Sign up on Eleven Labs <a href="#h.8y31zti8w32j" id="h.8y31zti8w32j"></a>

Sign up on Eleven Labs: [https://elevenlabs.io/sign-up](https://www.google.com/url?q=https://elevenlabs.io/sign-up\&sa=D\&source=editors\&ust=1699647828895148\&usg=AOvVaw0h5Bqecq34c4s5Qy5hE_tq)

### Step 1 - Add a custom voice in Eleven Labs <a href="#h.wq656m2mr716" id="h.wq656m2mr716"></a>

Go to the Voice Lab section ([https://elevenlabs.io/voice-lab](https://www.google.com/url?q=https://elevenlabs.io/voice-lab\&sa=D\&source=editors\&ust=1699647828895474\&usg=AOvVaw2ducMm00V46WhXMxHHo0hn)) and click on “Add Generative or Cloned Voice”

![](/files/nXwtqorr7k6a5xt8XHAd)

You will be shown multiple options for where to generate the new voice from. As of now, they generated voices and community voices for free users. They offer Instant Voice Cloning and Professional Voice Cloning for their subscribers.

Generated voices are created by adjusting parameters such as gender, age, and accent. This doesn’t take audio samples, and so it might not be exactly like you had imagined.

Community voices are those made publicly available by other users. Eleven Labs does have a good collection of community voices but you might not find exactly what you are looking for.

If you subscribe for their lowest paying tier that costs $5 / month, you can make use of Instant Voice Cloning to extract a voice from audio samples within seconds. We’ll use this to create a clone of Nelson Mandela’s voice, so we can recreate his speeches from text.

For our use case, we converted two of his interview clips – [Nelson Mandela’s special message to INTERPOL 75th General Assembly](https://www.google.com/url?q=https://www.youtube.com/watch?v%3D5W09lWOBDxg\&sa=D\&source=editors\&ust=1699647828896531\&usg=AOvVaw2wSpSVTNXdNCH6tfuhawmt) and [“Nelson Mandela’s message to BFS”](https://www.google.com/url?q=https://www.youtube.com/watch?v%3DI76k1um2hoc\&sa=D\&source=editors\&ust=1699647828896710\&usg=AOvVaw38V3GHLnDQKRQSbDpoDYTP) – to mp3 format, and uploaded them in the Eleven Labs instant voice cloning interface.

![](/files/mmM5MT5oG5nXPaDKOuRX)

We agree to the

Note: there is more to know about the kinds of custom voices and you can visit their [VoiceLab documentation](https://www.google.com/url?q=https://elevenlabs.io/docs/voicelab/overview\&sa=D\&source=editors\&ust=1699647828897213\&usg=AOvVaw18T8Yi9evuUHf1pTsX_1Sd) to know more about it.

### Step 2 - Copy API key from Eleven Labs <a href="#h.dplhyqwq8rt0" id="h.dplhyqwq8rt0"></a>

On the Eleven Labs website, click on the profile icon in the top right corner, and select the Profile option.![](/files/Qn9xNfuAaT3qj5SpZWNC)

This will open up the Profile Settings and show you the API key. Make it visible and copy it to use in Gooey.

![](/files/l1HHtanZbieYz5A93Zej)

Source for these images is the [Eleven Labs documentation](https://www.google.com/url?q=https://elevenlabs.io/docs/api-reference/authentication\&sa=D\&source=editors\&ust=1699647828897969\&usg=AOvVaw0y8f8sDJ4jis-Wo40r1dZO).

### Step 3 - Use it on Gooey’s Lip Sync with Text recipe <a href="#h.yg0ilin2388h" id="h.yg0ilin2388h"></a>

Visit the workflow page for [LipSync with Text](https://www.google.com/url?q=https://gooey.ai/lipsync-maker/\&sa=D\&source=editors\&ust=1699647828898341\&usg=AOvVaw0BKZHky5I4ILHdjHunuizB) and add a video or image you want to extract the face from in “Input Face”. You will need to remove the default uploaded file and upload your own video or image file.

<figure><img src="/files/GnR72L5gUXhzKtVPLcPS" alt=""><figcaption></figcaption></figure>

Open the “Settings” dropdown, and in “Voice Settings”, set the “Speech Provider” to “Eleven Labs”.

&#x20;

<figure><img src="/files/7078lHcBlV5YjBmE7SEI" alt=""><figcaption></figcaption></figure>

Select the checkbox that says “Use custom API key + Voice ID” and enter the copied API key into the field that says “Your Eleven Labs API Key”

<figure><img src="/files/NDt3xp0AqMluanjmxuZw" alt=""><figcaption></figcaption></figure>

This should fetch all the available voices from your account into the “Voice ID” field.

Choose the voice that you want to run in the Voice ID field. In our case it is the voice we added in Eleven Labs with the name “Nelson Mandela”, we select that.

Now we can copy some text from his 1964 speech, [“I am Prepared to Die”](https://www.google.com/url?q=https://en.wikipedia.org/wiki/I_Am_Prepared_to_Die\&sa=D\&source=editors\&ust=1699647828899397\&usg=AOvVaw3EeZ9pFuWTonUyKj22pp0L), and add it into the “Input Text” field.

We hit “Submit” and voila! We get an accurate sounding version of the speech with a newer photo.

<figure><img src="/files/NCuJB4Fwgl7quRz0zSm2" alt=""><figcaption></figcaption></figure>

This is the run URL if you want to tweak and explore more: [https://gooey.ai/lipsync-maker/?run\_id=sbr6yi8i\&uid=MPhrEpmVYkept8yJjsBzJPL0Tuj1](https://www.google.com/url?q=https://gooey.ai/lipsync-maker/?run_id%3Dsbr6yi8i%26uid%3DMPhrEpmVYkept8yJjsBzJPL0Tuj1\&sa=D\&source=editors\&ust=1699647828899919\&usg=AOvVaw2A-_rSFe1Rs1ra4J3eZ1s3)

There are more Eleven Labs options that you can explore in the Gooey dashboard, such as the model to use and the voice settings. You can play around with them on [Gooey](https://www.google.com/url?q=https://gooey.ai/lipsync-maker/\&sa=D\&source=editors\&ust=1699647828900220\&usg=AOvVaw2tJibimDj6RBJKIWVAyphB) and learn more about how to use them effectively from the [Eleven Labs documentation](https://www.google.com/url?q=https://elevenlabs.io/docs/speech-synthesis/voice-settings\&sa=D\&source=editors\&ust=1699647828900392\&usg=AOvVaw22TvmgLNfc85GpUiRKevmc).


# Set up your API for Lipsync with Local Folders

Here is a quickstart guide to setting up your API with local folders. Go through the tabs for node.js or python!

### Step 1 - Start a new Node.js project with `npm init`

{% tabs %}
{% tab title="node.js" %}

#### Install node-fetch and add your API key

1. Start a new node.js project
2. Install node-fetch and add your API key

```bash
$ npm init -y
$ npm install node-fetch
$ export GOOEY_API_KEY=sk-xxxx 
```

{% endtab %}

{% tab title="python" %}

#### Install requests & add the GOOEY\_API\_KEY to your environment variables.

```bash
$ python3 -m pip install requests
$ export GOOEY_API_KEY=sk-xxxx
```

{% endtab %}
{% endtabs %}

### Step 2 - Setup up your local folders with input files

To use [GOOEY.AI lipsync tool](https://gooey.ai/Lipsync/) you need **two types of input files for the project**:

1. **Input face**
   * This is refered to as `input_face` in the API
   * Use the following formats - mp4 / mov / png / jpg
   * Ensure the face has clear human features with eyes, nose, lips. Non-human faces will not work
2. **Input audio**
   * This is referred to as `input_audio`
   * Use the following formats only - wav / mp3

For ease of use make sure the folders are all located in the same project. In this example, we have added the `input_face` and `input_audio` in the folder `lipsync-bulk`.

### Step 3 - Create your `app` file

{% tabs %}
{% tab title="node.js" %}

#### Create your `index.js` file

Copy the example code below to test your API call.

```javascript
// save this in index.js

import fetch, { FormData, fileFrom } from 'node-fetch';

const payload = {};

async function gooeyAPI() {
  const formData = new FormData()
  formData.set('json', JSON.stringify(payload))
  // add the path to your input face
  formData.append('input_face', await fileFrom('lipsync-bulk/image.png'))
  // add the path to your input audio
  formData.append('input_audio', await fileFrom('lipsync-bulk/audio_2024-03-26_11-00-36.ogg.wav'))

  const response = await fetch("https://api.gooey.ai/v2/Lipsync/form/", {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + process.env["GOOEY_API_KEY"],
    },
    body: formData,
  });

  if (!response.ok) {
    throw new Error(response.status);
  }

  const result = await response.json();
  console.log(response.status, result);
}

gooeyAPI();
```

#### Replace with your file paths

In the code above, replace the file paths as per the location of your local file location.

```javascript
//this is the code snippet that needs to be replaced 

formData.append('input_face', await fileFrom('lipsync-bulk/image.png'))
formData.append('input_audio', await fileFrom('lipsync-bulk/audio_2024-03-26_11-00-36.ogg.wav'))
```

{% endtab %}

{% tab title="python" %}

#### Create your `main.py` file

Copy the example code below to test your API call.

```python
// save this in main.py

import os
import requests
import json

files = [
    ("input_face", open("lipsync-bulk/image.png", "rb")),
    ("input_audio", open("lipsync-bulk/audio_2024-03-26_11-00-36.ogg.wav", "rb")),
]
payload = {}

response = requests.post(
    "https://api.gooey.ai/v2/Lipsync/form/?run_id=fecsii61rs6e&uid=fm165fOmucZlpa5YHupPBdcvDR02",
    headers={
        "Authorization": "Bearer " + os.environ["GOOEY_API_KEY"],
    },
    files=files,
    data={"json": json.dumps(payload)},
)
assert response.ok, response.content

result = response.json()
print(response.status_code, result)
```

#### Replace with your file paths

In the code above, replace the file paths as per the location of your local file location.

```python
//this is the code snippet that needs to be replaced 

files = [
    ("input_face", open("lipsync-bulk/image.png", "rb")),
    ("input_audio", open("lipsync-bulk/audio_2024-03-26_11-00-36.ogg.wav", "rb")),
]
```

{% endtab %}
{% endtabs %}

### Step 4 - Run your app

Test if your app is working correctly

{% tabs %}
{% tab title="node.js" %}
Run:

```bash
$ node index.js 
```

If you did everything correctly should get a response like this:

{% code overflow="wrap" %}

```bash
200 {
  id: 'm0rghxk55xfx',
  url: 'https://gooey.ai/Lipsync/?run_id=m0rghxk55xfx&uid=fm165fOmucZlpa5YHupPBdcvDR02',
  created_at: '2024-03-26T06:01:57.449762',
  output: {
    output_video: 'https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/5abbbb76-eb36-11ee-8c54-02420a00014c/gooey.ai%20lipsync.mp4'
  }
}
```

{% endcode %}
{% endtab %}

{% tab title="python" %}
Run:

```bash
$ python main.py
```

If you did everything correctly should get a response like this:

{% code overflow="wrap" %}

```bash
200 {'id': 'enqn22dnppiy', 'url': 'https://gooey.ai/Lipsync/?run_id=enqn22dnppiy&uid=fm165fOmucZlpa5YHupPBdcvDR02', 'created_at': '2024-03-26T06:39:44.768886', 'output': {'output_video': 'https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/a227237e-eb3b-11ee-a294-02420a000146/gooey.ai%20lipsync.mp4'}}
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Tips to create great HD lipsync output

### Step 1: Make sure you use a high-quality still image.

* Recommended resolution: 1024 x 1024
* The image should be forward-looking
* The face should be clearly visible

![](/files/TaE6nwb3cuRqAJRNZuwe)

### Step 2: Add the input audio file

* Recommended setting: please use .wav format

![](/files/NC8Pj5mc0uZrMKBeP4gE)

### Step 3: Select the HD setting

Choose the model “OpenTalker/SadTalker” model<br>

<figure><img src="/files/i0VM4BdNPGeYm74FCRJg" alt=""><figcaption></figcaption></figure>

### Step 4: Choose the right settings

* Check the “Still” check box in the settings
* Select “Resize” in the Preprocess Drop down box

![](/files/B8qnaxAgXcHLRLPhzvcp)

### Step 5: Hit “Submit”

Example output

{% embed url="<https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/1179948c-2818-11ef-b98d-02420a000174/gooey.ai%20lipsync.mp4#t=0.001>" %}

### TRY IT HERE!

{% embed url="<https://gooey.ai/Lipsync/>" %}

## Best Practices for Choosing Images

Have a look at some good practices for Lipsync images&#x20;

<figure><img src="/files/RB38bSWCGTMNzsXE0v2w" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/BlCNMnEglbnEpltnxaAM" alt=""><figcaption></figcaption></figure>


# Frequently Asked Questions about Lipsync

Some answers to common issues when implementing Lipsync in production

### Q: Can we process a full video while only applying lip sync to specific segments? We're trying to personalize welcome messages, changing one word {name} to the user's name. For example: "Hey {name}, thanks for signing up for our service." We only need the user's name to be lip-synced.

A: We don’t offer this yet, but you can make API calls with only the {name} and stitch it with a fixed video that says "..thanks for signing up for our service.".&#x20;

Here is a Gooogle Colab sample to set this up with our API:&#x20;

{% embed url="<https://colab.research.google.com/drive/1qnqVW7H2fiuV3RVMNPtVeaVkBhb7c898?usp=sharing>" %}

### Q: I'm getting a message on lipsync projects about "truncated to 250 frames". What does this mean?

<figure><img src="/files/aw9TQnE2H1QjPOezTFSD" alt=""><figcaption></figcaption></figure>

A: 250 frames cut-off applies to the input video you have added to the Lipsync workflow - if your video is 24 fps the output will be \~10s, at 60 fps it'll be \~4s and so on. If you use an image for the lipsync input instead of a video, the default if 25fps so thats \~10s again. There is no cut-off once [upgrade](https://gooey.ai/account/billing/) to a paid subscription!

### Q: How to clear LipSync history

A: If you are using Gooey.AI API we support this via a simple “keep” or “delete” as an API/SDK request parameter:&#x20;

```
"settings": {
"retention_policy": "delete"
}
```

If you are using the Gooey.AI web app, please fill out this form and we will action your request in 5-7 business days. <https://forms.gle/zgMVzQ4iiaAeRcpG8>&#x20;

### Q: What are the rate limits for creating lipsync videos?

A: You can find out more about rate limits on our pricing page based on the plan you are on: <https://gooey.ai/pricing>

### Q: What limitations are there on the volume of lipsync videos I can create?

A: If you are using Lipsync with your audio inputs, you can control the audio gain before uploading the audio. If you are using Lipsync with our TTS tools, you may have to edit this in post-production.&#x20;

\ <br>


# Speech Recoginition

A simple guide on how to use Automatic Speech Recognition

We find speech recognition and translations important when we create AI workflows for frontline workers, traders, and impact organizations.&#x20;

In AI copilot scenarios, we found that users prefer to send queries by voice rather than text. This could mean:&#x20;

* voice notes to Whatsapp and web copilots
* Voice-based IVR in low internet coverage areas

So as part of our [AI Workflow Standards](https://blog.gooey.ai/workflow-standards), we now host over 15 ASR models, that can be chained into the AI Copilot workflows.&#x20;

Here is a simple guide to use the ASR Workflow

### Step 1: Add your audio samples

* Head to the Gooey.AI Speech Recognition and Translation Workflow: <https://gooey.ai/speech/>
* Click on the "Clear all" Button and upload your audio file via a local folder or a link&#x20;

{% hint style="info" %}
If you are using a link you can use: &#x20;

* a hosted media link&#x20;
* a google drive link of the audio file&#x20;
* youtube video link
  {% endhint %}

<div><figure><img src="/files/5sEoqfhOYLSLBGC84kFC" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="/files/cpXSq73HGhbTPwrxvjkQ" alt="" width="375"><figcaption></figcaption></figure></div>

### Step 2: Select the Speech to Text provider&#x20;

* Select the language in "Speech-to-Text Provider" from the dropdown provided.

{% hint style="info" %}
Use the "Filter by Language"  dropdown, if you are unsure which models will work with your source language
{% endhint %}

<figure><img src="/files/1YX9HOHwsuod19dSr3eJ" alt=""><figcaption></figcaption></figure>

### Step 3: Select your translation model

* Click on the "Translate" checkbox
* Select the translation model of your choice

### Step 4: Click "Run"

* Click on the "Run" button&#x20;

### Frequently Asked Questions <a href="#frequently-asked-questions" id="frequently-asked-questions"></a>

**Q: How do I test the ASR models that can transcribe Swahili?**

A: Use the "Filter by Language" dropdown, if you are unsure which models will work with your source language.

**Q: In the translate section I can see "Google Translate" and "GhanaNLP", which model should I use?**

A: If you are translating an African Language you can test if GhanaNLP is a better choice. GhanaNLP Machine Translation supports: Twi, Ewe, Ga, Fanti, Yoruba, Dagbani, Kikuyu, Fra fra, Luo (Kenya, Tanzania), Meru, Kusaal

**Q: I have tested a few models, but I want to evaluate a larger dataset without using the API, is that possible?**

A: Yes! It is very easy to set up large-scale ASR evaluations in Gooey! Here is the guide for:&#x20;

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>How to create language evaluation for ASR?</strong></td><td><a href="/pages/Dv4ARYu6p13xP3yixDMg">/pages/Dv4ARYu6p13xP3yixDMg</a></td></tr></tbody></table>

**Q: What is the "Prompt" section when I choose GPT4o-Audio?**

A: GPT4o-Audio is an LLM-based transcription model, the prompt section will allow you to output the transcribed audio in more specific ways. For example, if you input a Hindi audio sample, you can say "Translate the Hindi recording as accurately as possible". This will use the LLM directly to translate the audio. You could also use it in other innovative ways like "Summarize the Hindi recording to English in bullet points" which could give you the salient points of the recording directly. Like the example here:&#x20;

{% embed url="<https://gooey.ai/speech/?run_id=1rnoo9r71o3q&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}


# Create language evaluation for Speech Recognition

Set up a simple workflow to compare ASR models and evaluate the right choice for your product

### Why do you need a Bulk and Evaluation Workflow?

When testing ASR models, your main goal is to scope out which model is best suited for your project needs.&#x20;

There are several components to test:&#x20;

* understanding model proficiency in global languages and local accents
* assessing the accuracy of translations
* checking for low Word Error Rate
* latency
* price

### Features of Bulk Runner and Evaluation Workflow

1. Run several models in one click
2. Choose any of the API Response Outputs to populate your test
3. Built-in evaluation tool for quick analysis
4. Use csv or Google Sheets as input
5. Get output in CSV for further data analysis

#### Also see:

<table data-view="cards" data-full-width="true"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td>🏎️ Global Language Understanding for AIs</td><td><a href="/spaces/leYcqBx5FRZcVr3wI4f4/pages/8vQ4X53jLf8YCHenLNBL">/spaces/leYcqBx5FRZcVr3wI4f4/pages/8vQ4X53jLf8YCHenLNBL</a></td><td><a href="/files/Y1aXPnfq5qf4v358Wey2">/files/Y1aXPnfq5qf4v358Wey2</a></td></tr><tr><td>🗣️ Check out our Hindi ASR Evaluation</td><td><a href="https://gooey.ai/bulk/compare-hindi-speech-recognition-hkgs8120p11t/">https://gooey.ai/bulk/compare-hindi-speech-recognition-hkgs8120p11t/</a></td><td><a href="/files/D66mudzwHK30sMZtxW3H">/files/D66mudzwHK30sMZtxW3H</a></td></tr></tbody></table>

## Getting Started

### Step 0 - Prepare your data

1. Collect all your audio voice samples into a Google Drive folder (make sure they are in .wav or .mp3 format)
2. In a new Google spreadsheet or CSV file copy the links of all your audio files&#x20;
3. Add the human-created transcription for each sample
4. Add the English translation for each sample

<figure><img src="/files/fT9sZMu407pQDxin5KgR" alt=""><figcaption></figcaption></figure>

### Step 1 - Select the ASR Models

Head to our bulk and eval workflow.&#x20;

[LINK TO HINDI ASR EVALUATION EXAMPLE](https://gooey.ai/bulk/compare-hindi-speech-recognition-hkgs8120p11t/)

In the example, we have already pre-filled the various models that can be tested. You can choose the ones you want to run by selecting it in the dropdown.

<figure><img src="/files/ea7g4x0TcPXw94toVqSk" alt=""><figcaption><p>Select the models you want to evaluate your audio samples on</p></figcaption></figure>

### Step 2 - Add your CSV/Google Sheets

Upload your CSV/Google Sheet from [Step 0](#step-0-prepare-your-data). In this example, we have used a Google Sheet of 10 Audio Samples with transcripts and translations. A preview of your sheet will appear once it is correctly uploaded.&#x20;

<figure><img src="/files/1HoYrZnoONzLnsyWY1S6" alt=""><figcaption></figcaption></figure>

### Step 3 - Select the input column

Select the column in the input from the dropdown box. The outputs will appear as various columns. In this example, it will be the "audios" column

<figure><img src="/files/vMn59l9M0Beaf5GRYrGf" alt=""><figcaption></figcaption></figure>

### Step 4 - Select the pre-built evaluator

In the "Evaluation Workflows" section select the "Speech Recognition Model Evaluator".

<figure><img src="/files/lUYWlDceB4gSVn3knU2k" alt=""><figcaption></figcaption></figure>

### Step 5 - Hit Submit

Once you hit submit, the selected ASR model workflows (see [Step 1](#step-1-select-the-asr-models)) will run for each audio file in the sheet (see [Step 2](#step-2-add-your-csv-google-sheets)). An output CSV will be generated on the right-hand side of the page.&#x20;

<figure><img src="/files/Cev2DwI6MekGJ6Bo6iGl" alt=""><figcaption><p>The outputs will appear in a table format on the right of the page, the output will appear in new columns after your originally populated columns</p></figcaption></figure>

After the runs are complete, the selected Evaluator (see [Step 4](#step-4-select-the-pre-built-evaluator)), will compare the ASR model outputs to the human-generated translations. It will assess and rate how accurately each model has translated the audio sample.&#x20;

A bar graph with the performance will appear once the entire evaluation is complete.

<figure><img src="/files/wdVaIKvs5dkI8NqeJRBv" alt=""><figcaption><p>After the evaluation is complete, table and a bar graph will show the evalution scores</p></figcaption></figure>

## FAQs

#### Q: How should I prepare the transcription and translation data?

A: Arrange the audio sample link in the first column, for each audio link add transcriptions and translations in the respective row.&#x20;

<figure><img src="/files/ET69LlAqNT0hD5MszcD5" alt=""><figcaption><p>Screenshot of audio sample links with trasncriptions and english translation</p></figcaption></figure>

#### Q: What is the ideal length of the recording?

A: Any recording less than 40 minutes will work successfully, if you are a copilot creator we would recommend limiting the audio sample to 2-3 minutes.&#x20;

#### Q: What audio format should we use?

A: Gooey's ASR workflow will accept .wav and .mp3 audio formats.

#### Q: How many files can I test?&#x20;

A: Our partners have tested up to 1000 audio files in one run!&#x20;

#### Q: How can we increase the quality of the test?

A: Make sure your transcriptions and translations are as accurate as possible.&#x20;


# Compare AI Translations

Along with ASR (Automatic Speech Recognition) and LLM Copilot usage, many Gooey.AI customers have been using translation models for their user base.

Compare AI translation models allow you to add customized AI translation to your Gooey.AI workflow.

**We currently host Google Translate, GhanaNLP.**

### Why host so many translation models? <a href="#id-4vok3el2bz95" id="id-4vok3el2bz95"></a>

**For many of our customers serving non-English speaking users is vital to their business process.**

> Low-resource languages are not uniform. Local dialects abound. Unfortunately, capturing this diversity of language is hard for tech companies attempting to make speech recognition and translation models. This paucity of high-quality diverse training sets then leads to poor performance of AI models. This poor performance then implies that incredible tools like GPT4 and Gemini - which are primarily trained on English - don’t work particularly well for speakers of low-resource languages.
>
> **Read more about Global Language Understanding for AIs in our** [**blog post here**](https://blog.gooey.ai/global-language-understanding-for-ais)**.**

### How will it help you? <a href="#id-4082wzkwh7si" id="id-4082wzkwh7si"></a>

Compare AI translation can help you:

1. understand which model provides the best translation for your use case,
2. compare latency and accuracy
3. compare cost
4. And finally, test for production with our Eval tool!

### How to use Compare AI Translations in Gooey.AI? <a href="#uweaa2nwoco5" id="uweaa2nwoco5"></a>

#### Step 1 <a href="#v4fm3gb7xxwh" id="v4fm3gb7xxwh"></a>

1. Head over to our [Compare AI Translations tool](https://gooey.ai/compare-ai-translation/)
2. Prepare your language samples and add it to the “Source Texts” section![](/files/AxXrRCBbL6viZl6GfOYq)

#### Step 2 <a href="#id-1i8d9p1qrs3" id="id-1i8d9p1qrs3"></a>

Select the translation model and the source and target translation languages you want to use

*SELECT THE TRANSLATION MODEL*

Currently, we host [Google Translate](https://cloud.google.com/translate) and [Ghana NLP Translate](https://ghananlp.org/)

![](/files/2yUz7ujfml4y0J4y0EyD)

![](/files/PUg1RrcsQjFFS19UFnfW)

#### Step 3 <a href="#imuo0mmk8wcg" id="imuo0mmk8wcg"></a>

Hit Submit!

#### Advanced Settings <a href="#k38uykpqccrf" id="k38uykpqccrf"></a>

Translation models are built for general use, so pronouns like brand names, technical terms, specific terms for your use case should not be mistranslated! In the “Translation Glossary” you can add a simple excel/google sheet to ensure that your important terms are not mistranslated.

![](/files/YQAYj7YYDP523THGmML4)

Learn more about how to use Translation Glossary here

A sample glossary is provided here

![](/files/gcxnzYaZvhIhctEk1Rz9)

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>How to use Translation Glossary</td><td><a href="/pages/C6wP05RYDNJNaWsSbN99">/pages/C6wP05RYDNJNaWsSbN99</a></td></tr><tr><td>Sample Glossary  </td><td><a href="https://docs.google.com/spreadsheets/d/1IRHKcOC86oZXwMB0hR7eej7YVg5kUHpriZymwYQcQX4/edit?gid=0#gid=0">https://docs.google.com/spreadsheets/d/1IRHKcOC86oZXwMB0hR7eej7YVg5kUHpriZymwYQcQX4/edit?gid=0#gid=0</a></td></tr><tr><td></td><td></td></tr></tbody></table>


# Google Translate Glossary

These sheets contain the glossary information for Google Translate translations on gooey.ai. Please be careful when updating the sheets since it is possible to break translations with incorrect syntax. It is best to copy and paste complete changes into Glossary.sheets (i.e. one row/column at a time). See an example glossary [here](https://docs.google.com/spreadsheets/d/1IRHKcOC86oZXwMB0hR7eej7YVg5kUHpriZymwYQcQX4/edit#gid=0).

### Glossary.sheet <a href="#ggm07dbcp5ot" id="ggm07dbcp5ot"></a>

This sheet contains the glossary terms. The first row should be [ISO-639](https://wikipedia.org/wiki/ISO_639) or [BCP-47](https://tools.ietf.org/html/bcp47) language codes. Two extra columns are allowed: “pos” to specify part of speech and “description” (these columns are currently ignored by the Google Translate API but may be used in the future):

<figure><img src="/files/uWHFUnaQDYOgSiYq1T0y" alt=""><figcaption></figcaption></figure>

Each subsequent row is then one glossary term in multiple languages. Read more [here](https://cloud.google.com/translate/docs/advanced/glossary#translate_v3_translate_text_with_glossary-drest). Changes made to this file are automatically uploaded to a Google Cloud Bucket to be used as a translation Glossary in gooey-server Google Translate requests.

**Notes**:

* By default, each glossary term is not case-sensitive. This parameter can be changed in the gooey-server code.
* Glossary entries for stopwords are[ignored by the Google Translate API](https://cloud.google.com/translate/docs/advanced/stopwords)


# Image


# AI Image Generator

How to create amazing visuals with AI

### **Step 1: Create an idea or visualization in your mind.**

`I want an image of an astronaut in a space suit walking on the streets of Mumbai.`

### **Step 2: Think about your descriptors and break them down as follows:**

* What is the Medium of this image?\
  eg. It is a painting, a sculpture, an old photograph, a portrait, a 3D render, etc.
* What/Who are the Subject(s) or Main Object(s) in the image?\
  eg. A human, an animal, an identity like gender, race, or occupation like a dancer, astronaut, etc.
* What is the Style?\
  eg. Is it Analogue photography, watercolor, line drawing, digital painting etc.
* What are the Details?\
  eg. facial features or expressions, the space, landscape, lighting or colors etc.

### **Step 3: Construct your prompt:**

`An analogue film still of an astronaut in a space suit walking on the busy streets of Mumbai, golden light on the astronaut, 4k`<br>

{% embed url="<https://gooey.ai/compare-ai-image-generators/untitled-s9nmzy34/>" %}

You can keep editing your prompt until you have your desired output. Consider AI generators as a collaborative tool.

### Examples

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>REALISTIC ASTRONAUT</td><td><a href="/files/rxruiw8ZRp9u0ymKpNm2">/files/rxruiw8ZRp9u0ymKpNm2</a></td><td><a href="https://gooey.ai/compare-ai-image-generators/compare-astronauts-heyrg9fo/">https://gooey.ai/compare-ai-image-generators/compare-astronauts-heyrg9fo/</a></td></tr><tr><td>POP ART STYLE ILLUSTRATION</td><td><a href="/files/FKDMXDgxSjlMD8HtdpkW">/files/FKDMXDgxSjlMD8HtdpkW</a></td><td><a href="https://gooey.ai/compare-ai-image-generators/the-popart-style-prompt-of-gooeyai-di9ku09w/">https://gooey.ai/compare-ai-image-generators/the-popart-style-prompt-of-gooeyai-di9ku09w/</a></td></tr><tr><td>VECTOR STYLE LOGO DESIGNS</td><td><a href="/files/MNCNqNBNZpi9V6sGWzRj">/files/MNCNqNBNZpi9V6sGWzRj</a></td><td><a href="https://gooey.ai/compare-ai-image-generators/vector-logo-86qrxf9y1rc5/">https://gooey.ai/compare-ai-image-generators/vector-logo-86qrxf9y1rc5/</a></td></tr></tbody></table>

#### ADVANCED GUIDE

{% embed url="<https://docs.google.com/presentation/d/1RaoMP0l7FnBZovDAR42zVmrUND9W5DW6eWet-pi6kiE/edit#slide=id.p>" %}


# API Tips for AI Image Generator

## BASICS FOR ALL MODELS

### PROMPT (REQUIRED)

A text description of the desired image(s). The maximum length is 4000 characters for dall-e-3.

```
“text_prompt”: "string", 
```

### SELECTED MODELS <a href="#dall-e-3-api" id="dall-e-3-api"></a>

Since our AI Image Generator tool allows you to compare images, you can chose more than 1 model in a single API call.&#x20;

Here is an example of how to use multiple models.&#x20;

{% code overflow="wrap" %}

```
"selected_models": ["dream_shaper","protogen_5_3"]
```

{% endcode %}

**This is the entire list of models we currently host and their API names:**

| Model Name                              | API Name            |
| --------------------------------------- | ------------------- |
| DreamShaper (Lykon)                     | "dream\_shaper"     |
| Dreamlike Photoreal 2.0 (dreamlike.art) | "dreamlike\_2"      |
| Stable Diffusion V2.1 (stability AI)    | "sd\_2"             |
| Stable Diffusion V1.5 (stability AI)    | "sd\_1\_5"          |
| DALL·E 2 (OpenAI)                       | "dall\_e"           |
| DALL·E 3 (OpenAI)                       | "dall\_e\_3"        |
| Open Journey v2 beta (PromptHero) 🐢    | "openjourney\_2"    |
| Open Journey (PromptHero) 🐢            | "openjourney"       |
| Analog Diffusion (wavymulder) 🐢        | "analog\_diffusion" |
| Protogen v5.3 (darkstorm2150) 🐢        | "protogen\_5\_3"    |

<mark style="background-color:orange;">🐢 The turtle emoji indicates that these models run slower</mark>

## Dall-E 3 API Parameters <a href="#dall-e-3-api" id="dall-e-3-api"></a>

Here are the required parameters to get Dall-E 3 images via the Gooey.AI API

### STYLE (REQUIRED)

style (‘natural’ or ‘vivid’): The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real-looking images. Defaults to ‘vivid’.

```
"dall_e_3_style": "natural",
or
"dall_e_3_style": "vivid",
```

### QUALITY (REQUIRED)

quality (‘standard’ or ‘hd’): The quality of the image that will be generated. ‘hd’ creates images with finer details and greater consistency across the image. Defaults to ‘standard’.

```
"dall_e_3_quality": "hd",
or
"dall_e_3_quality": "standard",
```

### EXAMPLES

Here is an example prompt that gave different results with different Style and Quality settings for Dall-E 3

{% code overflow="wrap" fullWidth="false" %}

```
Innovate a movie poster for a film of a genre of your choosing, such as sci-fi, and give it a title, like ‘Space World’.
```

{% endcode %}

**STANDARD AND VIVID**\
Try it here:&#x20;

{% embed url="<https://gooey.ai/compare-ai-image-generators/?run_id=hi3aooqd&uid=fm165fOmucZlpa5YHupPBdcvDR02>" fullWidth="false" %}

<div align="center"><figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/4d720f10-ba85-11ee-bfee-02420a000132/gooey.ai%20-%20Innovate%20a%20movie%20poster%20for%20a%20film%20of...%20as%20sci-fi%20and%20give%20it%20a%20title%20like%20Space%20World..png" alt="" width="375"><figcaption></figcaption></figure></div>

**STANDARD AND NATURAL**

Try it here:&#x20;

{% embed url="<https://gooey.ai/compare-ai-image-generators/?run_id=c023z26i&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

<figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/7fb9bdc8-ba86-11ee-af7d-02420a00012e/gooey.ai%20-%20Innovate%20a%20movie%20poster%20for%20a%20film%20of...%20as%20sci-fi%20and%20give%20it%20a%20title%20like%20Space%20World..png" alt="" width="375"><figcaption></figcaption></figure>

**HD and VIVID**

Try it here:&#x20;

{% embed url="<https://gooey.ai/compare-ai-image-generators/?run_id=yf8heqzk&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

<figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/a91d1368-ba9a-11ee-9180-02420a000197/gooey.ai%20-%20Innovate%20a%20movie%20poster%20for%20a%20film%20of...%20as%20sci-fi%20and%20give%20it%20a%20title%20like%20Space%20World..png" alt="" width="375"><figcaption></figcaption></figure>

**HD and NATURAL**

{% embed url="<https://gooey.ai/compare-ai-image-generators/?run_id=4w3yalvi&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

<figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/235622d2-ba9b-11ee-806a-02420a0001a4/gooey.ai%20-%20Innovate%20a%20movie%20poster%20for%20a%20film%20of...%20as%20sci-fi%20and%20give%20it%20a%20title%20like%20Space%20World..png" alt="" width="375"><figcaption></figcaption></figure>

#### KNOW MORE

If you want to know more about DALL-E 3 prompting and settings - have a look at this cookbook!&#x20;

<https://cookbook.openai.com/articles/what_is_new_with_dalle_3>


# AI Photo Editor

Create amazing and vivid effects and styles on your images

### What can Gooey's Photo Editor do:

* It can add amazing styles and effects to your base image
* Use the base image as a reference to create images&#x20;
* Help you imagine many ideas on your simple sketch or older image

### What it can't do:

* Remove your background. Try this AI Workflow instead:&#x20;

{% embed url="<https://docs.gooey.ai/guides/ai-photo-editor/flux.1-kontext-pro>" %}

* Change or correct just a tiny bit in the image
* Remove your ex!!&#x20;

&#x20;***This tool is great for artist to create iterations on top of their sketches!***&#x20;

### Step 1 : Choose your image

Choose an image that you want to improve or change See the example below:

<figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/6d8713c8-6738-11ed-a5bc-8e93953183ba/PHOTO-2022-11-16-18-34-45.jpg" alt=""><figcaption></figcaption></figure>

### Step 2: Upload

Upload the image to the Edit an Image with AI tool.&#x20;

<figure><img src="/files/lRxfE0noPTqzvF4Yab89" alt=""><figcaption></figcaption></figure>

### Step 3: Add a prompt&#x20;

Think of the style and look that you want for your picture and add it to the prompt section:

<figure><img src="/files/8BvYNmvnfxK1KhThZPoX" alt=""><figcaption></figcaption></figure>

You can use the prompt below:

```
an art deco house near a beach, beautiful sunset, A beautiful anime drawing full of joy, with colorful background, studio ghibli, ponyo, anime, excited, anime, saturated colors
```

### Step 4: Hit Submit

Hit submit and watch your image change magically!&#x20;

<figure><img src="https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/df4925ba-b6af-11ee-953b-02420a00013c/gooey.ai%20-%20an%20art%20deco%20house%20near%20a%20beach%20beauti...ibli%20ponyo%20anime%20excited%20anime%20saturated%20colorsn.png" alt=""><figcaption></figcaption></figure>

TRY IT HERE:

{% embed url="<https://gooey.ai/ai-photo-editor/?run_id=lwdm2491&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}

### ADVANCED SETTINGS

#### Models

Choose the model you would like to use. We recommend use the default "DreamShaper" model for crisp and detailed images.&#x20;

{% hint style="info" %}
More about the various models is available [here](https://docs.google.com/presentation/d/1RaoMP0l7FnBZovDAR42zVmrUND9W5DW6eWet-pi6kiE/edit#slide=id.p)
{% endhint %}

#### Control Net

Control Net adds an additional layer of control over the image that is uploaded for AI editing. You can chose multiple controlnet based on the look you need.&#x20;

<figure><img src="/files/wA1oypCgmIEcRGploQjD" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/pqJ7MWMprxpBOGP2W1dL" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/KVsrO9qeBpgRcsV2nid8" alt=""><figcaption></figcaption></figure>

#### Additional References

<https://github.com/lllyasviel/ControlNet>


# Build your avatar with AI

Use Stable Diffusion with your own image and make a unique avatar!

Transform profile pictures into amazing avatars with Gooey.AI.

### Step 1 : Choose your image

Choose a profile picture of yourself. Make sure it's good quality and the facial features are visible. See the example below:

![](https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/f68feb16-5925-11ed-83cc-02420a0000c8/Image3.jpg)

### Step 2: Upload

Upload the image to the Edit an Image with AI tool.&#x20;

<figure><img src="/files/lRxfE0noPTqzvF4Yab89" alt=""><figcaption></figcaption></figure>

### Step 3: Add a prompt&#x20;

Think of the style and look that you want for your picture and add it to the prompt section:

<figure><img src="/files/8BvYNmvnfxK1KhThZPoX" alt=""><figcaption></figcaption></figure>

You can use the prompt below:

```
A beautiful anime drawing of a smiling character full of joy, with colorful background, studio ghibli, ponyo, anime, excited, anime, saturated colors
```

### Step 4: Hit Submit

Hit submit and watch your image change magically!&#x20;

![](https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/2a9500aa-74f9-11ee-8902-02420a000165/gooey.ai%20-%20A%20beautiful%20anime%20drawing%20of%20a%20smilin...ibli%20ponyo%20anime%20excited%20anime%20saturated%20colorsn.png)

TRY IT HERE:

{% embed url="<https://gooey.ai/ai-photo-editor/>" %}

### Look like a van gogh painting!

<figure><img src="/files/ThQ3SGBZvpY14ehR0Myy" alt=""><figcaption></figcaption></figure>

TRY IT HERE:

{% embed url="<https://gooey.ai/ai-photo-editor/?run_id=usplamqh&uid=fm165fOmucZlpa5YHupPBdcvDR02>" %}


# FLUX.1 Kontext \[pro]

How to use FLUX.1 Kontext \[pro]

### Introduction <a href="#pauqgggy8of" id="pauqgggy8of"></a>

FLUX.1 Kontext makes editing images easy! Use plain text prompting to specify what you want to change, and the model will follow. The model can understand the context of the image, making it easier to edit it without having to describe in detail what you want to do.

### Added Flux1 Kontext \[pro] <a href="#lptchsfjgecd" id="lptchsfjgecd"></a>

We updated Flux1 Kontext \[pro] in our “Edit an Image” Workflow. You can use text prompts to edit any image you have.<br>

### Prompting Tips <a href="#vurrmit58lzp" id="vurrmit58lzp"></a>

### Basic Modifications <a href="#id-4bowetxxb94h" id="id-4bowetxxb94h"></a>

* Do: Be simple and direct
* Don’t: Complicate your prompt

{% embed url="<https://gooey.ai/ai-photo-editor/flux1-kontext-pro-edit-your-image-31816jgvdx30/>" %}

![](/files/W6eafNdrJZ9Gsvc7G6pL)

### Changing Text <a href="#pc054032nahb" id="pc054032nahb"></a>

* Do: Use the word “replace” or “change” to set the context for the model
* Do: Use “Double Quotes” for the text you want to change
* Do: Write phrases like “Maintain style” or “Preserve style.”
* Don’t: Write prompts that will change the context too much

{% embed url="<https://gooey.ai/ai-photo-editor/flux1-kontext-pro-edit-text-in-an-image-with-ai-nnrcl6mpf16o/>" %}

![](/files/W8UMw2yYyu0nVN2yMtK4)

### Editing an Image <a href="#id-6c7tzok0ds37" id="id-6c7tzok0ds37"></a>

* Do: Mention the character, gender or animal species to retain the context, like “A beautiful anime drawing of **my pet dog**…”

{% embed url="<https://gooey.ai/ai-photo-editor/cartoonify-your-dog-with-flux1-kontext-pro-ceano85e/>" %}

![](/files/eebXNbV6TF4SxtW7HZth)

### Changing character context <a href="#lkeuj5u4dee" id="lkeuj5u4dee"></a>

* Do: Use “replace”
* Do: Specify gender “the man”

{% embed url="<https://gooey.ai/ai-photo-editor/flux1-kontext-pro-replace-a-background-qww9bl8o3hqz/>" %}

![](/files/nc2vU0HFbOcss3pSyXO5)

### Style Transfer <a href="#algoeviwy3xo" id="algoeviwy3xo"></a>

* Do: Be direct and write “Use this style, a vintage computer”
* Don’t: Add too many details like “80s Apple II computer with table and wires” it will change the image too much

{% embed url="<https://gooey.ai/ai-photo-editor/flux1-kontext-pro-style-transfer-uq3xglvr53lv/>" %}

![](/files/dQxpSme04VuzO30yAqUR)


# Image Model Trainer

Make your custom image models with Gooey.AI

## What is fine-tuning? <a href="#skgmtnp5407b" id="skgmtnp5407b"></a>

Fine-tuning teaches the AI Image Generation model to recognize and generate new concepts. This is done by training/showing it a small set of example images. This allows you to customize the model's output for specific styles, characters, or objects.

## Why is fine-tuning important? <a href="#aeigod50q0l9" id="aeigod50q0l9"></a>

As a creative practitioner, you might find that AI images all have a similar look/aesthetic - they lack originality, and feel flat. Fine-tuning can be a great way to bring your own style or concepts to AI Image generation, without struggling with a lot of prompt engineering.

Here, the artist Archana Prasad, who also goes by ***arcnoid***, shared her original sketches in black ink. Notice that the style of the drawings is specific, with long faces and noses, and the textures and colors are very sparse. The use of human figures is also created in a highly abstracted and minimalist style. We used 12-15 of her images and created a fine-tuned model called `arcn0id`.

![](/files/3X3AJTDGWxyCSA5irZ5q)

Here you can see the difference between the image generated with Flux.1 (with no fine-tuning) and the one on the right, which is fine-tuned with `arcn0id` style.

![](/files/2liHBU1r9DtI08kHgrS3)

See this example, where we used Mughal miniature paintings (sourced from Creative Commons) to generate our AI images in the style of Mughal Miniature Paintings.

![](/files/thSAfwovkPkwsd9wjKgJ)

![](/files/afIoCuDBY8BQbFS9dWPE)

## How to fine-tune Flux.1 on Gooey.AI? <a href="#eg7b0h8f23v4" id="eg7b0h8f23v4"></a>

Training an image model on Gooey.AI workflows is very easy. We use LoRA Image Training, which stands for Low-Rank Adaptation, a mathematical technique to reduce the number of parameters that are trained.&#x20;

* **Smaller datasets:** You only need 6-10 images to train a good model.&#x20;
* **Faster training**: Training a new concept with LoRA takes just a few minutes.
* **Smaller outputs**: Trained LoRA outputs are small, easy to reuse, and share.
* **Combine concepts**: You can combine several models to create unique outputs.&#x20;

You can start here:&#x20;

{% embed url="<https://gooey.ai/model-trainer/>" %}

### Select your training model <a href="#n3i5z011hxu1" id="n3i5z011hxu1"></a>

Select the training model you want to use.

Currently, we host:<br>

* **Flux Lora Fast**: Train styles, people, and other subjects - very fast!
* **Flux Lora Portrait**: optimized for portrait generation, with bright highlights, excellent prompt following, and highly detailed results.

![](/files/6WXy0rehi7x5HoqNXL5U)

For this demo, we have selected “Flux Lora Fast”

### Prepare your data <a href="#w3pkmwm1v4c9" id="w3pkmwm1v4c9"></a>

To start fine-tuning, you'll need a carefully selected collection of images. These images should represent your concept, or style, and these will “train” the model to create similar images.

These images should be diverse enough to cover different aspects of the concept. For example, if you're fine-tuning on a specific character, include images in various settings, poses, and lighting. Or if you are fine-tuning an artistic style, make sure you have diverse set of images in that style.

To fine-tune your model, you need:

* 12-20 images for best results
* Use large images if possible
* Use JPEG or PNG formats

Upload the images to the “Input Images” section.

![](/files/5RpCjPlyQM9dKf82SEWJ)

Here we are training a model for the artist Archana Prasad. These images have been shared with her permission.

### Select a model type <a href="#r9m6yixomvqf" id="r9m6yixomvqf"></a>

With Flux Lora Fast, you need to select the type of model you are training. There are two options:

1. **Style**: this refers to an artistic style (like Van Gogh style), or a general aesthetic style (like 90s analog film)
2. **Concept**: this refers to an object, character, or clothing

![](/files/RmbOIQeYinaxwaFWR8gC)

### Choose a trigger word <a href="#o40jryiu3b3n" id="o40jryiu3b3n"></a>

The trigger word refers to the object, style, or concept you are training on. Pick a word that isn’t a “real word”; most commonly used is TOK.

You can also use numerals or symbols, for example, instead of “mughal”, you could use mugh4l. The trigger word you specify will be associated with all images during training. Then, when you run your fine-tuned model, you can include the trigger word in prompts to activate your concept.

![](/files/NEMz93FSi9bBfNoo6wcX)

### Advanced settings <a href="#wcd9jgw684sn" id="wcd9jgw684sn"></a>

* **Learning Rate:** This is the rate at which the machine “learns” about the training. We recommend not to change this unless you’ve worked with machine training before
* **Steps:** This is the number of times the machine “learns” and “trains” itself on the provided images. We recommend you try between 1000-1500. Please note: the higher the steps, the more credits you will use.

#### ![](/files/XyhAk9Amue9erjd3xUyV) <a href="#id-4pcj6o5jnbx" id="id-4pcj6o5jnbx"></a>

### Run the training <a href="#id-16gm0r4bmtj6" id="id-16gm0r4bmtj6"></a>

* Click on "Run" button
* Once the training is ready, you will get a few options:
  * **Generate Image**: This will take you to a new tab with Gooey’s image generation workflow. Your model will be preloaded there, and you can start prompting to see if your new style is working.
  * **Copy Model URL**: This will allow you to copy the Model’s URL to use in our Image Generation workflow or other AI image generation tools like Fal.AI.
  * **Download Model**: This will download the model locally, and is useful for locally run workflows like ComfyUI.

![](/files/cRyzOMjN08yIBWYYe17N)

## Good Practices for LoRA Image Training <a href="#d5nxvz1bqfk7" id="d5nxvz1bqfk7"></a>

* Prepare your dataset with care
* Caption your images with good descriptive details
* Make sure the images you are using are ethically sourced,
  * If you are using an artist's work, please get their permission
  * If you are using images from the internet, please check the copyrights
  * Try to use images that are in Creative Commons or open domains.
* Training models can be expensive, so please check all your settings and data before you run the model

## How to get a consistent character?

{% embed url="<https://youtu.be/Rh7GFevnVYg>" %}


# AI QR Code Generator

AI QR codes have taken the world by storm, build your own in seconds.

## How to Create AI Art QR Code

If you've been captivated by the trending QR code art online, you're in the right place to create your own.

In this tutorial, we will learn how to transform your ordinary QR codes into visually appealing pieces using our latest tool that leverages the power of stable diffusion. Follow these simple steps to get started.

### Why Qr Codes:

\- QR codes increase customer engagement by providing an easy and quick way for customers to leave reviews on Google.

\- Positive reviews on Google can improve a store's ranking in both Google Maps and Google Search.

\- Having customers review while at the business location, especially via their phones, is ideal.

### Why AI Art Qr Codes:

\- Attractive, art-based QR codes can spark curiosity and motivate more scans.

\- Beautiful QR codes enhance user experience, further incentivizing customers to scan and review.

\- The latest QR maker creates reliable QR codes that are aesthetically pleasing and incorporate AI-generated visuals.

\- Premium analytics are available to track the performance of these QR codes.

<mark style="background-color:yellow;">**Don’t miss our case study for Heineken:**</mark>

{% embed url="<https://gooey.ai/blog/heineken-tiger-qr-code-case-study>" %}

### Step 1: Choose Your Stable Diffusion Prompt

Start by providing a prompt for the AI Art process. This will influence the artistic style of your QR code. For example, change the default prompt from "busy street of Mumbai" to "on the surface of Mars" for a space-themed QR code.

![](/files/UrZVGcefz8Rn19azElB4)

CHECK OUT OUR PROMPT GUIDE HERE:

{% embed url="<https://docs.google.com/presentation/d/1RaoMP0l7FnBZovDAR42zVmrUND9W5DW6eWet-pi6kiE/edit#slide=id.p>" %}

### Step 2: Enter Your URL

Begin by entering the URL you want to convert into a QR code. This can be:

1. URL or Text
2. Contact Card details
3. A file
4. Existing QR Code

![](/files/s95tw73Et4rmsWwexKt0)

{% hint style="info" %}
Gooey will shorten your URL to a Gooey.AI-specific link. This ensures the QR code is neat and functional.
{% endhint %}

### Step 3: Hit Submit

![](https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/ec13ff16-23d1-11ee-b302-02420a00015b/gooey.ai%20-%20An%20analogue%20film%20still%20of%20an%20astronau...eets%20of%20Mumbai%20golden%20light%20on%20the%20astronaut%204kn.png)

Try it here:

{% embed url="<https://gooey.ai/qr-code/>" %}

Our system will then generate a QR image, which is cleaned up and processed using Controlnet and Stable Diffusion to create unique outputs. You can use your phone to scan and test the readability of these QR codes.

### Advanced Settings

<figure><img src="/files/AB5dIBBzZKliR8Bt5U1R" alt="" width="563"><figcaption></figcaption></figure>

For those who want to fine-tune their QR code's appearance, advanced settings are available:

\- **Model Selection:** Choose from different models like Dream Shaper, Analog Diffusion, or Protogen.

\- **Control Net Settings**: Adjust tiling and brightness to your preference.

\- **Conditional Scales**: Set the balance between the QR code and the image using a scale from 0 to 2. A setting of 0.3 to 0.5 is recommended for a balanced blend.

#### Adjusting the **Conditional Scales**

To illustrate the effect of the visibility balance setting:

\- A setting close to 0 will emphasize the stable diffusion image over the QR code.

\- A setting close to 2 will prioritize the QR code's visibility over the image.

Experiment with this setting to achieve your desired balance between the QR code and the background image.

#### Custom Formats and Placement

Our tool also allows for customization of the QR code's shape and placement within the image. You can choose from different formats like square or smartphone, and decide where to position the QR code.

#### Additional Features

<figure><img src="/files/VwVtYsNpXRO7GA0XwbsE" alt=""><figcaption></figcaption></figure>

\- **Negative Prompts:** Specify what elements you do not want to appear in your image.

\- **Output Options:** Select the number of outputs and their quality.

\- **Artistic Pressure:** Adjust the level of artistic influence on the QR code.

### Enjoy crafting your custom AI Art QR codes!


# API tips on AI Art QR Code

Go through our Developer Alex's pro tips for using the AI Art QR Code API

## Question: I'm running the API but how do I add my own QR image?

### STEP 1:

You can click the first link on [gooey.ai/qr-code/api](https://gooey.ai/qr-code/api/) to see the [complete api documentation](https://api.gooey.ai/docs#operation/art-qr-code) with field names, response and request formats, etc.\
\
In this case what you are looking for is the <mark style="background-color:yellow;">qr\_code\_input\_image</mark> field which takes a file url corresponding to an existing qr code as a string:

<figure><img src="https://mail.google.com/mail/u/0?ui=2&#x26;ik=ff1edfb7df&#x26;attid=0.2&#x26;permmsgid=msg-f:1787054884674434599&#x26;th=18cce4f30b257627&#x26;view=fimg&#x26;fur=ip&#x26;sz=s0-l75-ft&#x26;attbid=ANGjdJ8KluvHmr76SUskx4CG5hV3XCPRghfuak4mDwSAIgNBiirjD6y-84Sm6VauEzajnbyPkT8sndDKO4NkOMPJzqiiqOYdr6kUlRDOCQgExVubsSnfAx2Bq520vNU&#x26;disp=emb&#x26;realattid=ii_lqsiyria3" alt=""><figcaption></figcaption></figure>

### STEP 2:

The easiest way to figure out how to format a specific request is to run it in the UI (e.g. upload an existing wifi QR code like this <https://gooey.ai/qr-code/?run_id=v6lsozk6&uid=2pZJQouaP2Okm18cbEhIpOQpqCg1>) hit submit and then go to the api tab. If you select "show all fields" and "python", it should give you the full api code to replicate the web ui run you are looking for:<br>

<figure><img src="https://mail.google.com/mail/u/0?ui=2&#x26;ik=ff1edfb7df&#x26;attid=0.1&#x26;permmsgid=msg-f:1787054884674434599&#x26;th=18cce4f30b257627&#x26;view=fimg&#x26;fur=ip&#x26;sz=s0-l75-ft&#x26;attbid=ANGjdJ9jRpbFKT3nj2nVYkG6T1tnPLY7diWrymjdVEZtJE8Y_562ngzwMJhp7ynt0kD-dzJAUqptr-6QU2PHfMKGBoe6P-4zR3IwPZYG9jDcQg8xhvXM5kgWi9ChKX0&#x26;disp=emb&#x26;realattid=ii_lqsix0do2" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://mail.google.com/mail/u/0?ui=2&#x26;ik=ff1edfb7df&#x26;attid=0.3&#x26;permmsgid=msg-f:1787054884674434599&#x26;th=18cce4f30b257627&#x26;view=fimg&#x26;fur=ip&#x26;sz=s0-l75-ft&#x26;attbid=ANGjdJ8uljRg3C_ohi41zoVN_MpuD9X_hVbyDYCKKK3fxM6eAvuHEhPG_HBHBQjJIkQnoHNL4fCECFRkczj6zpqZL9p97BIy9mNrm8ttm-Ds0pzBJKNX5iQHBfSUXrM&#x26;disp=emb&#x26;realattid=ii_lqsj0wun4" alt="" width="563"><figcaption></figcaption></figure>


# Video and Animation


# AI Video Generator

Generate AI videos from static images using SoTA AI video models

### Introduction

Turn any image into a video with Gooey.AI. Compare outputs from Sora2, Kling v2, Veo3, Veo3.1, and WAN 2.5 in a single run. Customize prompts, duration, and parameters to find the best model for your needs.

{% @arcade/embed flowId="wjpTeWShkvr4SpuDUo6c" url="<https://app.arcade.software/share/wjpTeWShkvr4SpuDUo6c>" %}

### Available Models

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Veo3.1 Image to Video</strong></td><td><a href="https://gooey.ai/video/veo31-all-work-and-no-play-makes-meera-a-dull-girl-jw4j8b9k1kw2/">https://gooey.ai/video/veo31-all-work-and-no-play-makes-meera-a-dull-girl-jw4j8b9k1kw2/</a></td><td><a href="/files/LNvjjIl3UdB2hgx9CoNG">/files/LNvjjIl3UdB2hgx9CoNG</a></td></tr><tr><td><strong>Sora 2 Image to Video</strong></td><td><a href="https://gooey.ai/video/sora-2-image-to-video-girls-on-a-motorbike-hui4h5bxl4yq/">https://gooey.ai/video/sora-2-image-to-video-girls-on-a-motorbike-hui4h5bxl4yq/</a></td><td><a href="/files/EtrbdgLp9KDKgUvzXqni">/files/EtrbdgLp9KDKgUvzXqni</a></td></tr><tr><td><strong>Veo3 Text to Video</strong></td><td><a href="https://gooey.ai/video/tamil-skater-girl-8yw4xaby0ams/">https://gooey.ai/video/tamil-skater-girl-8yw4xaby0ams/</a></td><td><a href="/files/QS3RBOhnaCbR8ugwJWm4">/files/QS3RBOhnaCbR8ugwJWm4</a></td></tr><tr><td><strong>Kling v2 Image to Video</strong></td><td><a href="https://gooey.ai/video/ai-animation-of-tigers-sipping-tea-in-mughal-miniature-style-xtdgqsqwyp5q/">https://gooey.ai/video/ai-animation-of-tigers-sipping-tea-in-mughal-miniature-style-xtdgqsqwyp5q/</a></td><td><a href="/files/i8pMssEh58ewp7cQNjPM">/files/i8pMssEh58ewp7cQNjPM</a></td></tr></tbody></table>

### Prompting Tips

#### Motion Description

**Do:** Be specific about movement

* "Camera slowly zooms in"
* "Person walks forward"

**Don't:** Use vague language

* "Make it move"
* "Add motion"

#### Duration & Pacing

**Do:** Match prompt complexity to duration

* Short clips (3-5s): Simple actions
* Longer clips (10s+): Complex sequences

**Don't:** Over-complicate short videos

#### Style Consistency

**Do:** Reference the source image

* "Maintaining the original art style"
* "Keep lighting consistent"

**Don't:** Request drastic style changes that conflict with the input image


# AI Animation Generator

A super simple guide to using our most popular workflow!

AI Animation Generator is an amazing tool that can create beautiful animations from your AI text prompts. You can use this tool to create AI generated music videos, create short clips to include in your videos and other amazing creative outputs without any film editing software.

{% embed url="<https://www.youtube.com/watch?v=IsfPUKEzCgE>" %}

### STEP 1 - **Visualize your video**

The Animation Generator uses AI text prompts to create each frame of  the video.

* Visualize each keyframe for the video and describe it in the prompt section\
  &#x20;
* Assign the keyframe

<figure><img src="/files/s9jFf3R8NiqczAeSkPhU" alt=""><figcaption></figcaption></figure>

### STEP 2 - **Add the Frames and Frame Count**

* You can add more prompts and keyframes as per your video\
  &#x20;
* Add the total number of frames for your video

<figure><img src="https://static.wixstatic.com/media/15a5ef_1c1d90cb678d47be989639ff21cf5710~mv2.png/v1/crop/x_0,y_10,w_485,h_208/fill/w_438,h_188,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/Screenshot%202023-06-19%20132555.png" alt=""><figcaption></figcaption></figure>

### STEP 3 - **Hit Submit**

* Just hit "Submit" \
  &#x20;
* Each run can take about 3-6 mins depending on the total number of frames and the frame rate

<figure><img src="https://static.wixstatic.com/media/15a5ef_40d68c70569d4d449dcff9ac9b348dbf~mv2.png/v1/crop/x_355,y_0,w_310,h_193/fill/w_402,h_250,al_c,lg_1,q_85,enc_auto/Screenshot%202023-06-19%20132643.png" alt=""><figcaption></figcaption></figure>

### **Camera Settings**

The camera settings allow the animation to move around as if it was "shot" with a camera using zoom, pan and rotate techniques.

### Setting 1

**Zoom**&#x20;

* Zoom settings can be assigned to the keyframes
* The format for the setting is "frame number:(zoom speed)"&#x20;
* For each keyframe setting you need to separate it by a comma&#x20;
* If you want to zoom-in use positive numbers e.g. "1.004"
* If you want to zoom-in use positive numbers e.g. "-1.004"
* "1" will give you static/no zoom
* Note: Don't use "0.04" or similar

<figure><img src="https://static.wixstatic.com/media/15a5ef_0808dc49c582452fa38f252feb9a942a~mv2.png/v1/crop/x_31,y_0,w_756,h_426/fill/w_441,h_249,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/Screenshot%202023-06-19%20132741.png" alt=""><figcaption></figcaption></figure>

### Example

If you wanted to zoom in from 0 - 49 frames and zoom out from 50 - 100 frames&#x20;

```
"0:(1.004),50:(-1.004)"
```

### Setting 2

**PAN**

* Pan settings can be assigned to the keyframes
* The format for the setting is "frame number:(pan direction and speed)"&#x20;
* For each keyframe setting you need to separate it by a comma&#x20;
* If you want to pan left use positive numbers e.g. "2"
* If you want to pan right use positive numbers e.g. "-2"
* Note: Don't use "0.04" or similar

### Example

If you wanted to horizontal pan from 0 - 49 frames and no pan from 50 - 100 frames&#x20;

```
"0:(3),50:(1)"
```

<figure><img src="/files/egKzSJtPzVaenE9xjYpv" alt=""><figcaption></figcaption></figure>

### Setting 3

**ROTATE**

* Rotate settings can be assigned to the keyframes
* The format for the setting is "frame number:(rotate direction and speed)"&#x20;
* For each keyframe setting you need to separate it by a comma&#x20;
* If you want to rotate anti-clockwise use positive numbers e.g. "2"
* If you want to rotate clockwise use positive numbers e.g. "-2"
* Note: Don't use "0.04" or similar

<figure><img src="https://static.wixstatic.com/media/15a5ef_a106b16dd386468a9f0d808d6ca99355~mv2.png/v1/fill/w_507,h_362,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/Screenshot%202023-06-19%20133154.png" alt=""><figcaption></figcaption></figure>

### Example

If you wanted to rotate left from 0 - 25frames and rotate right from 26 - 50 frames&#x20;

```
"0:(1),25:(-1)"
```

{% embed url="<https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/5d2106d6-d760-11ed-8c78-02420a00014b/gooey.ai%20animation%20[frame%200%20prompt%20a%20wide%20angle%20...interior%20of%20roller%20coaster%204k%208k%20uhd%201%20people-1].mp4>" %}

TRY THE EXAMPLE HERE 👇

{% embed url="<https://gooey.ai/animation-generator/?example_id=8nuen2rr>" %}

**Additional Resources**

* [Guide to Image Prompting 101](https://docs.google.com/presentation/d/1RaoMP0l7FnBZovDAR42zVmrUND9W5DW6eWet-pi6kiE/edit?usp=sharing)
* [Art styles guide](https://supagruen.github.io/StableDiffusion-CheatSheet/)

VIDEO TUTORIALS

{% embed url="<https://www.youtube.com/watch?v=sUvica6UuQU>" %}

FOLLOW ALONG WORKSHOP

{% embed url="<https://www.youtube.com/watch?v=cg8PpubSkcQ>" %}


# SEO


# Generate “People Also Ask” SEO Content

By tapping into Google's "People also ask" section, this tool helps you discover the questions your audience is eager to find answers to. This workflow not only identifies related queries to your Google search but also delves into URLs you provide, extracting and summarizing all relevant information.

### Why use this workflow?

With this approach, you can generate well-cited, authoritative content that boosts engagement and drives your SEO rank higher. Embrace the power of targeted content with simple yet powerful workflow.

### How it works?

<figure><img src="/files/FMZJPALsjniRFVSlMqOe" alt=""><figcaption></figcaption></figure>

### How to use the workflow:

1. Head to the workflow:

Link: <https://gooey.ai/related-qna-maker/>

![](/files/e2oFaGQkSJeA0r8dwXsf)

1. Add your google search query, in this example we have searched for “jon snow” the character from “Game of Thrones”. You can optionally search specific sites. Here we have used “[https://fandom.com](https://fandom.com/)”
2. Hit submit!
3. Our tool will pull all the related google search questions, use the specific site to search and answer the related google search questions.


# SEO-Optimized content with AI

Make SEO super easy with AI!

Gooey.AI can help you craft the perfect SEO-optimized titles and paragraphs, even if you're not an SEO expert. With a user-friendly interface and powerful tools, Gooey.AI simplifies the process of boosting your website’s visibility.

Head to 'Perfect SEO Optimized Generator’ workflow. Link here:&#x20;

{% embed url="<https://gooey.ai/seo-paragraph-generator/>" %}

### 1. Enter Your Details

Take the example of Kanya.co, a heritage saree brand. You would input your target search query, your website's name, the company name, your website URL, and the key focus points that highlight what makes your business unique.

![](/files/DcvkQki816xy0LOP6JrX)

Example here:&#x20;

{% embed url="<https://gooey.ai/seo-paragraph-generator/heritage-saree/?example_id=o1jdhepn>" %}

### 2. Customize Your Instructions

Gooey.AI provides pre-filled instructions, but you can tailor them to your specific needs. Adjust the settings for the number of outputs, the level of detail, and the creativity of the content—remember, all of this is powered by GPT-4 Turbo.

![](/files/YZPJpbOBjHq6ZhuMCCqH)

You can use the “web search tools” based on your target demographic’s geography.

![](/files/H69L3NXpCDGsQSFDKh51)

### 3. Review and Adjust SEO Content

<mark style="background-color:yellow;">**Hit Submit**</mark>

Gooey.AI generates SEO-friendly content that you can review and tweak if necessary. If you want a different approach, adjust the creativity slider and submit again for new results.

### 4. Regenerate and Collaborate

If you’re happy with the style but want more options, regenerate with the same settings for additional content. Share the results with your team using the copy URL feature, which allows them to jump in and make further adjustments without starting from scratch.

### 5. API Integration

For those looking to automate the process, Gooey.AI provides detailed API documentation for easy integration.


# How to use Workspaces?

With Workspaces, you will be able to:

1. Collaborate on saved workflows
2. Access the [Version History](/help-desk/how-to-use-version-history) of saved workflows (with comments and the ability to revert to the previous version)
3. Share payment methods (so you can cover the Gooey usage cost for your team members)
4. Assign roles and access levels for team members&#x20;
5. Shared API secrets (to securely access private APIs)
6. Manage multiple teams independently, each with their own billing details and saved workflows

If you are already added to a Workspace, you should be able to see it in the drop-down on the top right:

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252FahK2e6DPyD9MbSGc9927%252FScreenshot%25202025-05-05%2520at%25204.17.35%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D74e264e6-48c6-4152-9a8e-93640bc6e091&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=547b40a6&#x26;sv=2" alt=""><figcaption></figcaption></figure>

### Tabs of Workspaces

* **Members** - view and adjust all your member invites and member rights

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252FSa1HaVtERYsF0HCJlpg7%252FScreenshot%25202025-05-05%2520at%25204.22.37%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D6902be0f-3fb4-4132-9a50-5170adbadb7e&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=82a7b430&#x26;sv=2" alt=""><figcaption></figcaption></figure>

* **Saved** - view all your saved workflows here

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252Fp1KwboeiJF1HgI7e6WsW%252FScreenshot%25202025-05-05%2520at%25204.22.51%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Dbacfd1da-a3dd-428e-ac75-ff719dd22c19&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=d081e438&#x26;sv=2" alt=""><figcaption></figcaption></figure>

* **API Keys** - save all your API keys here

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252FNSuv0Utd2vZuLodEGlJp%252FScreenshot%25202025-05-05%2520at%25204.23.16%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D329d6f21-dc70-42b3-96d8-cbb02374c144&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=46eed6c4&#x26;sv=2" alt=""><figcaption></figcaption></figure>

### How to add team members? <a href="#how-to-add-team-members" id="how-to-add-team-members"></a>

If you are an Admin or an Owner you can add team members by clicking the Invite button in the [Manage Workspace>Members](https://gooey.ai/workspaces/members/) section.

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252F9A4mTmu8o1ZpR9blDLmK%252FScreenshot%25202025-06-08%2520at%25205.07.42%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D503bcf46-0029-4146-9c44-c29374210dd9&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=18e5d680&#x26;sv=2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252Fwy5FRnFjaq8paqIVr4MI%252FScreenshot%25202025-06-08%2520at%25205.07.52%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Db9137423-8af5-4ed3-850b-668b4d6e792e&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=39fcb53e&#x26;sv=2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://academy.gooey.ai/~gitbook/image?url=https%3A%2F%2F2450152260-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNWqgWAjD0VVJgjYDpsN5%252Fuploads%252F9Olur7z47InKRcc71axL%252FScreenshot%25202025-06-08%2520at%25205.07.55%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Ddf37f325-f319-43d6-8644-53bfb485150b&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=d18dd38c&#x26;sv=2" alt=""><figcaption></figcaption></figure>

**Learn more about Workspaces:**

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>How to use Version History?</td><td><a href="/pages/JxL1lwGJAGLEa9bddsSq">/pages/JxL1lwGJAGLEa9bddsSq</a></td></tr><tr><td>How to add SECRETS in your Workspace?</td><td><a href="/pages/SWBmoNt06QnT0ByNQF9B">/pages/SWBmoNt06QnT0ByNQF9B</a></td></tr></tbody></table>

### How can I activate Workspaces in Gooey.AI? <a href="#lnsbsam44owq" id="lnsbsam44owq"></a>

If you are interested in using Workspaces with your team or collaborators please connect with us at <sales@gooey.ai>.


# How to add SECRETS in your Workspace?

### Step 1

Go to the [API tab in the Account Page](https://gooey.ai/account/api-keys/)

### Step 2

Scroll down to the "Secrets" Section

<figure><img src="/files/4S8SRyGigvjDLBNwKwFG" alt=""><figcaption></figcaption></figure>

### Step 3

Add Variable Name for the API and the API key&#x20;

<figure><img src="/files/TsBrlrsxTH8CKk1z2R7J" alt=""><figcaption></figcaption></figure>

### Step 4

Access API key as a variable in the [Functions Workflow](https://gooey.ai/functions)

<figure><img src="/files/hMnXxvJkjNGn8zJ7qslt" alt=""><figcaption></figcaption></figure>

READ MORE ABOUT USE SECRETS in FUNCTIONS here:

{% embed url="<https://docs.gooey.ai/guides/how-to-use-gooey-functions/how-to-use-secrets-in-functions>" %}


# Frequently Asked Questions about Workspaces

Q: How can I shift between my Workspace and my account?&#x20;

A: Click the icon on the top right to see your workspace and personal account.&#x20;

{% hint style="warning" %}
NOTE: The team or personal icon on top determines whose credits you are using for a run. If you hit "Run" on any Gooey.AI workflow and the "personal" icon is on the top right, it means your credits from the "personal" workspace will be debited.&#x20;
{% endhint %}

### Q: How can I manage my Workspace settings?

A: Select the workspace in the top right corner, click on "Open Workspace". You will be led to the relevant workspace.&#x20;


# How to use Version History?

If you want to revert to a past version of your AI Workflow, you can use our version history tool in Workspaces.

This is useful if:

* You realize that your newly “Saved” workflow is failing or not successful
* You accidentally clicked “Update” and your Workflow wasn’t ready or was incomplete
* You want to use the previous version of an AI Workflow and “fork” it

#### Step 1: Click on the “Options” button on the top right as circled here in red. <a href="#id-3sl778mlih78" id="id-3sl778mlih78"></a>

![](/files/fsfba1WGG2RJzgkATaNW)

#### Step 2: Click on the version that you want to revert/update to <a href="#id-82g02dybd0vt" id="id-82g02dybd0vt"></a>

<figure><img src="/files/ueGFjlnE2W6SsC9lcpHu" alt=""><figcaption></figcaption></figure>

#### Step 3: Make your changes and click the “Update” button <a href="#so12tkc7vb9k" id="so12tkc7vb9k"></a>

![](/files/mCu34F2K8VAVI5nmQStw)


# How can I get free credits?

Q: I signed up for Gooey.AI but didn't get my 500 credits.&#x20;

A: Only verified accounts will receive 500 credits. You will not receive any credits if you sign up using a non-Gmail email or a temporary email account.&#x20;

<figure><img src="/files/P8lQNmMfJtRxBtyqxDet" alt=""><figcaption></figcaption></figure>


# Contributing

## **Welcome Contributors** <a href="#inhnbn3q0ba8" id="inhnbn3q0ba8"></a>

Hello there! Thank you for your interest in contributing to Gooey.AI. &#x20;

You can contribute to our Github Repo here:

{% embed url="<https://github.com/GooeyAI/gooey-server>" %}

## **🗺️ Guidelines** <a href="#ijrkkii9v589" id="ijrkkii9v589"></a>

### **👩‍💻 Ways to contribute** <a href="#srvcn5b1nf7z" id="srvcn5b1nf7z"></a>

There are many ways to contribute to Gooey.AI. Here are some ways you can contribute:

* [**Documentation**](/contributing/documentation-style-guide): Help improve our docs, including this one!
* [**Code**](https://github.com/GooeyAI/gooey-server): Help us write code, fix bugs, or improve our infrastructure.
* **Integrations**: Help us integrate with your favorite communication platform, vendors and tools.
* [**Discussions**](https://github.com/GooeyAI/gooey-server/discussions): Help answer usage questions and discuss issues with users.
* **Shared AI Recipes**: Create amazing AI workflows on Gooey and save them publicly on your profile page so others can fork them.

### **🚩 GitHub Issues** <a href="#wq90yd4qlpci" id="wq90yd4qlpci"></a>

Our [issues](https://github.com/GooeyAI/gooey-server/issues) page is kept up to date with bugs, improvements, and feature requests.

There is a taxonomy of labels to help with sorting and discovery of issues of interest. Please use these to help organize issues.

If you start working on an issue, please assign it to yourself.

If you are adding an issue, please try to keep it focused on a single, modular bug/improvement/feature. If two issues are related, or blocking, please link them rather than combining them.

We will try to keep these issues as up-to-date as possible, though with the rapid rate of development in this field some may get out of date. If you notice this happening, please let us know.

### **🐛 Fix Bugs**

Most bugs are reported and tracked in the Github Issues Page. We try our best in triaging and tagging these issues:

* Issues tagged as `bug` are confirmed bugs.
* New contributors may want to start with issues tagged with `good first issue`.

Please feel free to open an issue and/or assign an issue to yourself.

### **💭 GitHub Discussions** <a href="#mdugft7kjty8" id="mdugft7kjty8"></a>

We have a [Github Discussions](https://github.com/GooeyAI/gooey-server/discussions) page where users can ask usage questions, discuss design decisions, and propose new features.

If you can help answer questions, please do so! This will allow the maintainers to spend more time focused on development and bug fixing.

### **🙋 Getting Help** <a href="#nx18z0xou2uf" id="nx18z0xou2uf"></a>

Our goal is to have the simplest developer setup possible. Should you experience any difficulty getting set up, please reach out on Discord (<https://gooey.ai/discord>) or contact a team member at <support@gooey.ai>!! Not only do we want to help get you unblocked, but we also want to make sure that the process is smooth for future contributors.

We do enforce certain linting, formatting, and documentation standards in the codebase. If you find these difficult (or even just annoying) to work with, feel free to contact a maintainer for help - we do not want these to get in the way of getting good code into the codebase.


# Documentation Style Guide

## **Documentation Style Guide** <a href="#id-2gidycpw9q4p" id="id-2gidycpw9q4p"></a>

To maintain industry parity, we take inspiration from the best, our Documentation Style Guide is based on [Langchain's Documentation Style Guide](https://python.langchain.com/v0.2/docs/contributing/documentation/style_guide/#general-guidelines)

### **General guidelines**[**​**](https://python.langchain.com/v0.2/docs/contributing/documentation/style_guide/#general-guidelines) <a href="#u06mnxhr6vqy" id="u06mnxhr6vqy"></a>

Here are guidelines for contributing and writing docs for Gooey.AI.

#### **Avoid duplication**[**​**](https://python.langchain.com/v0.2/docs/contributing/documentation/style_guide/#avoid-duplication) <a href="#id-2bamt5jlsl9z" id="id-2bamt5jlsl9z"></a>

Multiple pages that cover the same material in depth are difficult to maintain and cause confusion. There should be only one (very rarely two), canonical pages for a given concept or feature. Instead, you should link to other guides.

#### **Link to other sections**[**​**](https://python.langchain.com/v0.2/docs/contributing/documentation/style_guide/#link-to-other-sections) <a href="#id-227g7xprhisq" id="id-227g7xprhisq"></a>

Because sections of the docs do not exist in a vacuum, it is important to link to other sections as often as possible to allow a developer to learn more about an unfamiliar topic inline.

**This includes linking to the API references as well as conceptual sections!**

#### **Be concise**[**​**](https://python.langchain.com/v0.2/docs/contributing/documentation/style_guide/#be-concise) <a href="#id-7trs8xwq50e2" id="id-7trs8xwq50e2"></a>

In general, take a less-is-more approach. If a section with a good explanation of a concept already exists, you should link to it rather than re-explain it, unless the concept you are documenting presents some new wrinkle.

Be concise, including in code samples.

#### **General style**[**​**](https://python.langchain.com/v0.2/docs/contributing/documentation/style_guide/#general-style) <a href="#lvse80j7jo34" id="lvse80j7jo34"></a>

* Use active voice and present tense whenever possible
* Use examples and code snippets to illustrate concepts and usage
* Use appropriate header levels (#, ##, ###, etc.) to organize the content hierarchically
* Use fewer cells with more code to make copy/paste easier
* Use bullet points and numbered lists to break down information into easily digestible chunks
* Use tables (especially for Reference sections) and diagrams often to present information visually
* Include the table of contents for longer documentation pages to help readers navigate the content, but hide it for shorter pages


# Getting started

You can interact with our APIs through node.js, python or curl

Use Gooey.AI's APIs to build fast! Get started by trying these simple setups - **No servers, API keys, or rate limits to manage.**

## Quickstart

{% tabs %}
{% tab title="Orchestration to webview in minutes" %}
Embed your custom AI workflow on your website or app as a webview instantly. Customize the look and feel in seconds.

```javascript
<div id="gooey-embed"></div>
<script>
    function onLoadGooeyEmbed() {
        GooeyEmbed.mount({});
    }
</script>
<script async defer onload="onLoadGooeyEmbed()" src="
https://gooey.ai/chat/gooey-base-copilot-Kbo/lib.js
"></script>
```

Pass custom in-app context

{% code overflow="wrap" %}

```javascript
GooeyEmbed.mount({ payload: { variables: { username: "John Appleseed" }  } });
```

{% endcode %}

{% embed url="<https://github.com/GooeyAI/gooey-web-widget>" %}
{% endtab %}

{% tab title="Stream AI Responses, Live in Your App" %}
**Real-time results, zero infrastructure**\
Stream AI responses directly to users with tool use, voice, image, and video — all client-side. No servers, API keys, or rate limits to manage.

{% code overflow="wrap" %}

```javascript
// create a stream on Gooey server
let response = await fetch("https://api.gooey.ai/v3/integrations/stream/", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    // your integration's ID as shown in the Gooey.AI Integrations tab
    "integration_id": "Kbo",
    // the prompt for the bot
    "input_prompt": "Generate a QR code of the taj mahal",
    // full api here: https://api.gooey.ai/docs#tag/Copilot-Integrations/operation/video-bots__stream_create
  }),
});
// get the server-sent events URL
let sseUrl = response.headers.get("Location");
// start listening to the stream
const evtSource = new EventSource(sseUrl);
// handle the stream events
evtSource.onmessage = (event) => {
    // log the message to the console
    console.log(data.type, data);
};
```

{% endcode %}
{% endtab %}

{% tab title="Extend with Functions as a service" %}
**Write Python or JavaScript in our AI IDE — no setup required.**\
Secure, fast code execution in V8 + Docker lets you build custom logic and connect to any service. No YAML, no OpenAPI specs, no DevOps.

Try it out here:

{% embed url="<https://gooey.ai/functions/wttr-weather-wi8xj3k0mzbb/>" %}

<figure><img src="/files/a2dRARQ8gqkX4ed4PCCU" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

## Read the API Docs

{% embed url="<https://api.gooey.ai/docs>" %}

### Create an API Key

Gooey.AI allows single API key for several workflows. So whether you are including AI images in your app or making a highly customized AI Copilot, you can access our whole suite of workflows through a single API key.&#x20;

CREATE API KEYS HERE:

{% embed url="<https://gooey.ai/api/#api-keys>" %}

You can click on "Create new secret key"

<figure><img src="/files/hee6kYlLyqpmdCB48AcV" alt=""><figcaption></figcaption></figure>

A new API KEY will appear

<figure><img src="/files/KP1wARxYnfsH1aBLjo7w" alt=""><figcaption></figcaption></figure>

Copy the key and use it for your API Requests.&#x20;

{% hint style="info" %}
Make sure you don't share your API KEY with anyone! 🚫
{% endhint %}

## Authentication

**Remember that your API key is a secret!** Do not share it with others or expose it in any client-side code (browsers, apps). Production requests must be routed through your own backend server where your API key can be securely loaded from an environment variable or key management service.

All API requests should include your API key in an `Authorization` HTTP header as follows:

```
"Authorization": "Bearer " + GOOEY_API_KEY
```

## Making a request

Let's make an example request to the `lipsyncTTS API`

{% tabs %}
{% tab title="node.js" %}

#### Step 1

Install [node-fetch](https://www.npmjs.com/package/node-fetch) & add the `GOOEY_API_KEY` to your environment variables. Never store the api key [in your code](https://12factor.net/config) and don't use direcly in the browser.

```bash
$ npm init
$ npm install node-fetch
$ export GOOEY_API_KEY=sk-xxxx
```

#### Step 2

Use this sample code to call the API. Make sure to include the full code snippet and the error message.

```js
import fetch from 'node-fetch';

const payload = {
  "input_face": "https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/6ce4c720-a799-11ed-9033-02420a0001d8/NEW%20LONG%20VID.mp4",
  "text_prompt": "Add your text prompt for Lipsync TTS here"
};

async function gooeyAPI() {
  const response = await fetch("https://api.gooey.ai/v2/LipsyncTTS/", {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + process.env["GOOEY_API_KEY"],
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload),
  });

  if (!response.ok) {
    throw new Error(response.status);
  }

  const result = await response.json();
  console.log(response.status, result);
}

gooeyAPI();
```

{% endtab %}

{% tab title="python" %}

#### Step 1

Install [requests](https://requests.readthedocs.io/en/latest/) & add the `GOOEY_API_KEY` to your environment variables. Never store the api key [in your code](https://12factor.net/config).

```bash
$ python3 -m pip install requests
$ export GOOEY_API_KEY=sk-xxxx
```

#### Step 2

Use this sample code to call the API. If you encounter any issues, write to us at <support@gooey.ai> and make sure to include the full code snippet and the error message.

<pre class="language-python"><code class="lang-python">import os
import requests

payload = {
    "input_face": "https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/6ce4c720-a799-11ed-9033-02420a0001d8/NEW%20LONG%20VID.mp4",
    "text_prompt": "Add your text prompt for Lipsync TTS here",
<strong>}
</strong>
response = requests.post(
    "https://api.gooey.ai/v2/LipsyncTTS/",
    headers={
        "Authorization": "Bearer " + os.environ["GOOEY_API_KEY"],
    },
    json=payload,
)
assert response.ok, response.content

result = response.json()
print(response.status_code, result)
</code></pre>

{% endtab %}

{% tab title="curl" %}

#### Step 1

#### Install [curl](https://everything.curl.dev/get) & add the `GOOEY_API_KEY` to your environment variables. Never store the api key [in your code](https://12factor.net/config).

```bash
export GOOEY_API_KEY=sk-xxxx
```

#### Step 2

Run the following `curl` command in your terminal. If you encounter any issues, write to us at <support@gooey.ai> and make sure to include the full curl command and the error message.

```bash
curl https://api.gooey.ai/v2/LipsyncTTS/ \
  -H "Authorization: Bearer $GOOEY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "input_face": "https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/6ce4c720-a799-11ed-9033-02420a0001d8/NEW%20LONG%20VID.mp4",
  "text_prompt": "Add your text prompt for Lipsync TTS here"
}'
```

{% endtab %}
{% endtabs %}

#### This is what the example response will look like:

```json
{
  "id": "aghpjaxi",
  "url": "https://gooey.ai/lipsync-maker/?run_id=aghpjaxi&uid=fm165fOmucZlpa5YHupPBdcvDR02",
  "created_at": "2023-05-16T13:48:08.093970+00:00",
  "output": {
    "output_video": "https://storage.googleapis.com/dara-c1b52.appspot.com/daras_ai/media/27b18b98-9a96-11ee-a030-02420a0001ca/gooey.ai%20lipsync.mp4"
  }
}
```


# Rate Limits

Rate limits for Gooey.AI API

Rate limits are restrictions that our API imposes on the number of times a user or client can access our services within a specified period of time.

### Why do we have rate limits? <a href="#kchtzx3a4k15" id="kchtzx3a4k15"></a>

Rate limits are a common practice for APIs, and they're put in place for a few different reasons:

* **They help protect against abuse or misuse of the API.**
* **Rate limits help ensure that everyone has fair access to the API.**
* **Rate limits can help Gooey.AI manage the aggregate load on its infrastructure.**

| **Tier**     | **Rate Limits**                    |
| ------------ | ---------------------------------- |
| **Free**     | 2 concurrent runs, 6 requests/min  |
| **Creator**  | 4 concurrent runs, 10 requests/min |
| **Business** | 4 concurrent runs, 10 requests/min |

### How do these rate limits work? <a href="#jtp4v5fk0x48" id="jtp4v5fk0x48"></a>

At Gooey.AI, we measure rate limits in two ways:

* Number of runs that can run simultaneously
* RPM (requests per minute).

However, as we host several models from across the GenAI ecosystem, there might rate limits on Tokens Per Day, Images Per Day, etc. Please refer to the[ OpenAI guide for Token Limits](https://platform.openai.com/docs/guides/rate-limits/usage-tiers) and the[ Eleven Labs guide for the TTS rate limits](https://help.elevenlabs.io/hc/en-us/articles/14312733311761-How-many-requests-can-I-make-and-can-I-increase-it).

Note:

* Rate limits are defined at the user and org level
* Rate limits may vary by the model being used at the model provider level.

**If you require a higher number of concurrent requests, please reach out to our Sales team via (sales \[at] gooey \[dot] ai).**


# Error Codes

If you encountered some error in your API and SDK calls, chances are there is an "error code" in the response message. Have a look at the error codes to know more and head to the bottom of the page to [handle errors programmatically](#handling-errors):

## API Errors

<table><thead><tr><th width="254">Error Code</th><th>Overview</th></tr></thead><tbody><tr><td>401 API key not provided / banned</td><td><p><strong>Cause</strong>: Invalid Authentication</p><p><strong>Solution</strong>: Ensure the <a href="https://gooey.ai/account/api-keys/">correct API key</a> and requesting organization is being used.<br><br>Or </p><p><br><strong>Cause</strong>: You are banned from using Gooey.AI’s API</p></td></tr><tr><td>402 Payment Required</td><td><p><strong>Cause</strong>: Insufficient credits</p><p><strong>Solution</strong>: Ensure you have sufficient credits to run the API call. You can add <a href="https://gooey.ai/account/">more credits to your account</a>.</p></td></tr><tr><td>403 Invalid API Key </td><td><p><strong>Cause</strong>: The requesting API key is not correct.</p><p><strong>Solution</strong>: Ensure the API key used is correct, clear your browser cache, or <a href="https://gooey.ai/account/api-keys/">generate a new one</a>.</p></td></tr><tr><td>422 Validation Error</td><td><p><strong>Cause</strong>: Your request was malformed or missing some required parameters, such as a token or an input.</p><p><strong>Solution</strong>: The error message should advise you on the specific error made. Check the <a href="https://api.gooey.ai/docs">API documentation</a> for the specific API method you are calling and make sure you are sending valid and complete parameters. You may also need to check the encoding, format, or size of your request data.</p></td></tr><tr><td>429 Too Many Requests</td><td><strong>Cause</strong>: You have exceeded your rate limits<br><strong>Solution</strong>: Pace your requests. Read the <a href="https://docs.gooey.ai/api-reference/rate-limits">Rate limit guide</a>. </td></tr><tr><td>500 Internal Server Error</td><td><p><strong>Cause</strong>: Issue on our servers.</p><p><strong>Solution</strong>: Retry your request after a brief wait and contact us if the issue persists. Check the <a href="https://status.gooey.ai/">status page</a>.</p></td></tr></tbody></table>

## Handling Errors

We recommend that you programmatically handle errors. Here is an example to ensure that you can get the error codes in your console/environment

In the code snippet below the line `if (!response.ok) { throw new Error(response.status); }` provides the error codes in your console/environment.&#x20;

```javascript
import fetch from 'node-fetch';

const payload = {
  "search_query": "what are f-strings?",
  "documents": [
    "https://static.realpython.com/python-basics-sample-chapters.pdf",
    "https://edu.anarcho-copy.org/Programming%20Languages/Python/Automate%20the%20Boring%20Stuff%20with%20Python.pdf"
  ]
};

async function gooeyAPI() {
  const response = await fetch("https://api.gooey.ai/v2/doc-search", {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + process.env["GOOEY_API_KEY"],
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload),
  });

  if (!response.ok) {
    throw new Error(response.status);
  }

  const result = await response.json();
  console.log(response.status, result);
}

gooeyAPI();
```


