{"id":30675216,"url":"https://github.com/craigsdennis/talk-to-javascript-openai-workers","last_synced_at":"2025-09-01T08:15:35.814Z","repository":{"id":269650398,"uuid":"904882422","full_name":"craigsdennis/talk-to-javascript-openai-workers","owner":"craigsdennis","description":"Demonstrates how to protect your OpenAI API Key using a Cloudflare Worker and then do client side tool calling","archived":false,"fork":false,"pushed_at":"2025-02-05T06:55:18.000Z","size":30,"stargazers_count":203,"open_issues_count":2,"forks_count":62,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-05T07:29:04.460Z","etag":null,"topics":["client-side","function-calling","openai","realti","robot-hand","tool-calling","voice-assistant","voice-control"],"latest_commit_sha":null,"homepage":"https://platform.openai.com/docs/guides/realtime","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/craigsdennis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-17T18:22:24.000Z","updated_at":"2025-02-05T06:55:21.000Z","dependencies_parsed_at":"2024-12-25T07:25:04.376Z","dependency_job_id":"4230f85d-42ec-4fa3-a990-9c56ae7dd2a3","html_url":"https://github.com/craigsdennis/talk-to-javascript-openai-workers","commit_stats":null,"previous_names":["craigsdennis/talk-to-javascript-openai-workers"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/craigsdennis/talk-to-javascript-openai-workers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craigsdennis%2Ftalk-to-javascript-openai-workers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craigsdennis%2Ftalk-to-javascript-openai-workers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craigsdennis%2Ftalk-to-javascript-openai-workers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craigsdennis%2Ftalk-to-javascript-openai-workers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/craigsdennis","download_url":"https://codeload.github.com/craigsdennis/talk-to-javascript-openai-workers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craigsdennis%2Ftalk-to-javascript-openai-workers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273094150,"owners_count":25044439,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-side","function-calling","openai","realti","robot-hand","tool-calling","voice-assistant","voice-control"],"created_at":"2025-09-01T08:15:31.598Z","updated_at":"2025-09-01T08:15:35.804Z","avatar_url":"https://github.com/craigsdennis.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Client Side Tool Calling with the OpenAI WebRTC Realtime API\n\nThis project is a [Cloudflare Workers](https://developers.cloudflare.com) app using [Hono](https://honojs.dev) to relay the [OpenAI Realtime API](https://platform.openai.com/docs/api-reference/realtime) over WebRTC. The main files are just [static assets](https://developers.cloudflare.com/workers/static-assets/).\n\n[\u003cimg src=\"https://img.youtube.com/vi/TcOytsfva0o/0.jpg\"\u003e](https://youtu.be/TcOytsfva0o \"Client Side Tool Calling with the OpenAI WebRTC Realtime API\")\n\n\n## Develop\n\nCopy [.dev.vars.example](./.dev.vars.example) to `.dev.vars` and fill out your OpenAI API Key.\n\nInstall your dependencies\n\n```bash\nnpm install\n```\n\nRun local server\n\n```bash\nnpm run dev\n```\n\n## Deploy\n\nUpload your secret\n\n```bash\nnpx wrangler secret put OPENAI_API_KEY\n```\n\n```bash\nnpm run deploy\n```\n\nThe hand is a [HiWonder AI Hand](https://www.hiwonder.com/products/aihand?variant=41022039654487). AI and I reverse-engineered the mobile app to make it work over Bluetooth, see [the code in hand.js](./public/hand.js)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcraigsdennis%2Ftalk-to-javascript-openai-workers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcraigsdennis%2Ftalk-to-javascript-openai-workers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcraigsdennis%2Ftalk-to-javascript-openai-workers/lists"}