-
Notifications
You must be signed in to change notification settings - Fork 5.3k
OpenAI Speech to Text / Create Transcription #16544
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 3 Skipped Deployments
|
""" WalkthroughA new module was introduced to enable audio transcription using the OpenAI API. This action, named "Create Transcription," supports multiple models and configurable options such as language, response format, and additional output details. The implementation prepares a multipart form-data request with user-specified parameters and sends it to OpenAI's transcription endpoint. The package version was incremented to reflect the new feature addition. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant ActionModule
participant OpenAI API
User->>ActionModule: Provide audio file and options
ActionModule->>ActionModule: Prepare multipart form data
ActionModule->>OpenAI API: POST /audio/transcriptions with form data
OpenAI API-->>ActionModule: Return transcription result
ActionModule-->>User: Return transcription response and summary
Assessment against linked issues
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
components/openai/actions/create-transcription/create-transcription.mjsOops! Something went wrong! :( ESLint: 8.57.1 Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms (3)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (2)
components/openai/actions/create-transcription/create-transcription.mjs (2)
62-66
: Consider using numeric type for temperature.The temperature parameter represents a numeric value between 0 and 1, but it's defined as a string type. Consider changing to
type: "number"
with appropriate min/max constraints to ensure valid input values and avoid type conversion issues.temperature: { - type: "string", + type: "number", label: "Temperature", description: "The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.", + min: 0, + max: 1, optional: true, },
83-90
: Unused variable in destructuring.The
createTranscription
variable is destructured fromthis
but isn't used directly, which may cause confusion. Instead, you can usethis.createTranscription()
directly in the code.async run({ $ }) { const { /* eslint-disable no-unused-vars */ openai, file, - createTranscription, ...fields } = this;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (2)
components/openai/actions/create-transcription/create-transcription.mjs
(1 hunks)components/openai/package.json
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: pnpm publish
- GitHub Check: Publish TypeScript components
- GitHub Check: Lint Code Base
- GitHub Check: Verify TypeScript components
🔇 Additional comments (9)
components/openai/package.json (1)
3-3
: Version increment looks appropriate.The version bump from 0.9.4 to 0.10.0 follows semantic versioning principles, correctly indicating the addition of new functionality (transcription feature) in a backward-compatible manner.
components/openai/actions/create-transcription/create-transcription.mjs (8)
48-60
: Handle response format compatibility with model selection.The description mentions that
gpt-4o-transcribe
andgpt-4o-mini-transcribe
only supportjson
format, but there's no validation to ensure compatible selections. Consider adding validation for this constraint.You should add validation to ensure the response format is compatible with the selected model. For example:
async run({ $ }) { const { /* eslint-disable no-unused-vars */ openai, file, ...fields } = this; + // Validate response format compatibility with model + if ((fields.model === "gpt-4o-transcribe" || fields.model === "gpt-4o-mini-transcribe") && + fields.response_format && fields.response_format !== "json") { + throw new Error(`Model ${fields.model} only supports 'json' response format`); + }
67-72
: Add validation for timestamp_granularities dependency on response_format.The description states that
timestamp_granularities
requiresresponse_format
to be set toverbose_json
, but there's no validation to enforce this dependency.Consider adding validation to ensure that when
timestamp_granularities
is provided,response_format
is set toverbose_json
:async run({ $ }) { const { /* eslint-disable no-unused-vars */ openai, file, ...fields } = this; + // Validate timestamp_granularities dependency on response_format + if (fields.timestamp_granularities && fields.timestamp_granularities.length > 0 && + fields.response_format !== "verbose_json") { + throw new Error("timestamp_granularities can only be used with response_format set to verbose_json"); + }
1-4
: LGTM: Appropriate imports.The imports are appropriate for the functionality being implemented, including the OpenAI app module, FormData for multipart requests, and fs for file operations.
5-10
: LGTM: Component metadata is well-defined.The component metadata is correctly defined with an appropriate key, descriptive name, informative description with a link to the documentation, and a proper version number.
19-28
: LGTM: Model options are well-defined.The model options include the appropriate choices for OpenAI's transcription models, including the latest models like gpt-4o-transcribe and gpt-4o-mini-transcribe.
74-82
: LGTM: Helper method implementation is clean.The
createTranscription
helper method is cleanly implemented to use the OpenAI app's _makeRequest method with the appropriate endpoint and parameters.
97-104
: LGTM: Parameters are properly appended to FormData.The code correctly appends all fields to the FormData object, handling the file content separately and adding all other parameters through the loop.
112-114
: LGTM: Response handling is appropriate.The code correctly exports a summary message and returns the API response to the user.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @michelle0927 lgtm! Ready for QA!
Resolves #16501
Summary by CodeRabbit
New Features
Chores