Commit Graph

172 Commits

Author SHA1 Message Date
Florent Chehab c95e1c67bd ⬆️(summary) update ffmpeg to 8.1.2
Update ffmpeg to 8.1.2 inside summary docker image.
Maintenance task.
2026-07-03 18:51:11 +02:00
Florent Chehab f115c83752 ⬆️(summary) update alpine base image
Update alpine docker base image to 3.24.
Maintenance routine task
2026-07-03 18:51:11 +02:00
lebaudantoine dd6b4512c8 🔖(minor) bump release to 1.22.0 2026-07-03 17:32:46 +02:00
Florent Chehab 9b7c449ca5 🐛(summary) explicit transcription response format
We should be able to use other transcription services,
those usually relie on response_format="diarized_json"
to produce what we need.

Note that as part of this change, we stop using
openai library for making this call to avoid
casting the result to a payload that doesn't
contain the elements we used to rely on.
(setting this specific format auto cast the
results in openai lib). We keep the old
result class used.
2026-06-18 18:10:50 +02:00
Florent Chehab 5c27aba00f (summary) relaxed WhisperX response model
When going through AlbertAPI, timestamp are not provided at the word level.
This adds default values so that the summary external contract stays the same,
while giving us compatibility wisht AlbertAPI.
2026-06-18 18:10:03 +02:00
lebaudantoine 898bc9a0f8 🔖(minor) bump release to 1.21.0 2026-06-15 18:29:52 +02:00
leo 135b99aee7 (summary) add optional satisfaction survey footer
Add a footer to transcription outputs linking to an external satisfaction
survey. The survey URL is built from TRANSCRIPTION_SATISFACTION_FORM_BASE_URL.
When TRANSCRIPTION_SATISFACTION_FORM_BASE_URL is unset or None, the
footer is omitted.
2026-06-15 17:33:24 +02:00
lebaudantoine 64819b3696 🔖(minor) bump release to 1.20.0 2026-06-12 17:25:56 +02:00
lebaudantoine e5184695bb 🔖(minor) bump release to 1.19.0 2026-06-04 19:13:32 +02:00
leo be35c1d6e0 ⬆️(dependencies) update python dependencies
Update python dependencies.

Co-Authored-By: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-04 15:34:39 +02:00
Florent Chehab d9804172e7 🔇(summary) make ffmpeg quiet
In the refactoring of the prepare pipeline, ffmpeg
was added in non quiet mode.
2026-06-04 10:22:27 +02:00
lebaudantoine 73a7841b96 🔖(minor) bump release to 1.18.0 2026-06-03 14:46:26 +02:00
lebaudantoine a4997e7431 🔖(minor) bump release to 1.17.0 2026-05-31 18:18:00 +02:00
Florent Chehab ec688e728d (summary) extended support for all video/audio files
* Removed constraint on file extension
* Infer audio/video streams from the media with ffmpeg
* Infer the correct processed audio file extension based on actual
  codec to avoid ffmpeg errors

We need to support more extensions and make audio extraction dynamic,
as we shipped transcript in production and it led to user complaints
requesting more formats.
2026-05-31 00:01:49 +02:00
leo 79400188d8 🔊(summary) improve logging of speaker assign
Structure logging of speaker assignment in json format to help
assess its performance.
2026-05-14 15:39:02 +02:00
lebaudantoine 35951ba2a6 🔖(minor) bump release to 1.16.0 2026-05-13 22:30:32 +02:00
leo 96f97ed2d0 (summary) improve speaker assignment
Speaker-to-participant assignment relie on WhisperX word timings, but
incorrect word durations in the output can lead to inaccurate overlap
scoring and wrong user attribution. Add a custom heuristic to trim
overly long word durations before computing assignments.
2026-05-12 16:58:07 +02:00
Florent Chehab 90ebe231ef 🐛(summary) complete webm support
When duration is not reported in the files metadata,
we directly infer the duration from the audio packets.
This prevents errors on webm files.

Very simple audio & video test files have been added
that cover relevant usecases to prevent regressions.
2026-05-11 23:00:54 +02:00
leo 1612d8b2d4 (audio) assign users to diarization speaker results using VAD
Introduce a new user assignment mechanism to for more friendly output
than the current (SPEAKER_0, SPEAKER_1, ...). Use the VAD metadata to
compare speech intervals with those returned by WhisperX. User with the
highest overlap score above a defined threshold is assigned to each segment.
This method allows for multi-speaker scenarios for a single account.
2026-05-07 12:45:00 +02:00
leo a695758da4 ♻️(summary) refactor tasks signature and make transcription tz-aware
The tasks endpoint used non-timezone-aware date and time values and split
them into separate variables, which is unconventional. Refactor the
implementation to use timezone-aware datetime objects and align transcription
formatting with the user-declared timezone. Update the source of truth for
recording start time to FileInfo.started_at for improved precision. Adjust
the task signature in preparation for upcoming user assignment work, which
will require `started_at`, `ended_at`, and `metadata_filename`.
2026-05-06 18:33:03 +02:00
renovate[bot] c3adcc8ff3 ⬆️(dependencies) update pytest to v9.0.3 [SECURITY] 2026-05-04 14:24:53 +02:00
lebaudantoine 07698ddced 🔖(minor) bump release to 1.15.0 2026-05-01 00:16:34 +02:00
Cyril bb816eb2e5 💬(backend) clarify french transcription audio download link text
Replace FR locale link label so it clearly identifies the audio file.
2026-04-29 07:41:34 +02:00
Florent Chehab c4fc46727c 💚(summary) add ruff ignore on ffprobe run
It's hard to know the ffprobe path before hand depending on the
environment, so I prefer to ignore the linting error.
2026-04-23 11:49:40 +02:00
Florent Chehab 28acbb5459 🐛(summary) support webm
Mutagen lib doesn't support webm files.
Since we have ffmpeg installed I just switch to
using ffprobe for a broader support.
2026-04-21 17:54:04 +02:00
lebaudantoine aaf21e97e8 🔖(minor) bump release to 1.14.0 2026-04-16 22:12:48 +02:00
Florent Chehab 451be40bb7 🐛(summary) relax whisperX payload format
Sometimes whisperX response is partial, we don't
want to crash in such case.
2026-04-15 10:11:36 +02:00
Florent Chehab 45c5a443fb 🐛(summary) fix failure webhook notification
Computation was off by 1.
Also improve the logging.
2026-04-15 10:11:35 +02:00
Florent Chehab 497b45f2ca (summary) allow more file extensions
Allow more file extensions by default.
2026-04-13 20:10:50 +02:00
Florent Chehab 4fdc2eee11 📝(backend) move and improve summary method documentation
Quick change post PR review.
2026-04-01 17:43:43 +02:00
Florent Chehab 19c2a378e7 (summary) taskV2 closer to target API gateway contract
Updated taskV2 API contract to be closer to the target gateway contract.
GET operations return the same things as the webhook payload.
Also store the summary on S3 to be iso with transcript.
2026-04-01 17:43:43 +02:00
Florent Chehab 5a70604f01 (summary) add multi-tenant support and v2 tasks / API
Add multitenancy support to Summary sub-app. The V1 routes / tasks
behave like before, with the default tenant being "meet".

V2 routes / tasks support being called frm any tenant, and don't have
meet related logic.
V2 tasks are created in separate queues to avoid mix / match,i
2026-04-01 17:43:43 +02:00
lebaudantoine 7e422e5846 🔖(minor) bump release to 1.13.0 2026-04-01 10:24:36 +02:00
dependabot[bot] 570d57d5f5 ⬆️ Bump requests from 2.32.5 to 2.33.0 in /src/summary
Bumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.5...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-28 15:39:28 +01:00
renovate[bot] 73496406e8 ⬆️(dependencies) update python dependencies 2026-03-25 11:18:57 +01:00
lebaudantoine f57fbf2d35 🔖(minor) bump release to 1.12.0 2026-03-24 23:37:41 +01:00
lebaudantoine 4f2c4bfaf9 ️(summary) improve accessibility of transcription download link
Update the link label to use explicit text "Download your recording"
instead of generic "following this link."

This ensures blind users understand the purpose of the link
and the behavior of opening a new window.
2026-03-20 10:17:48 +01:00
lebaudantoine ee8d96bee7 🔖(minor) bump release to 1.11.0 2026-03-19 00:31:32 +01:00
lebaudantoine a27def119c (summary) add tests for the task endpoint
Ensure the API correctly validates and accepts the parameters
required to register a task in the queue.
2026-03-18 20:19:52 +01:00
lebaudantoine 83bd9c5ce3 (summary) add minimal test suite for health endpoint
Based on cameldev's work, introduce basic tests to ensure the
health endpoint responds correctly.
2026-03-18 20:19:52 +01:00
lebaudantoine b564044e70 🔖(minor) bump release to 1.10.0 2026-03-05 14:19:25 +01:00
leo 14526808ab ♻️(summary) clean up code and unify logging in preparation for testing
Refactor the summary service to better separate concerns, making components
easier to isolate and test. Unify logging logic to ensure consistent
behavior and reduce duplication across the service layer. These changes
set up the codebase for granular testing.
2026-03-03 15:44:53 +01:00
lebaudantoine b2ad423886 🔖(minor) bump release to 1.9.0 2026-03-02 14:33:25 +01:00
leo f5e0ddf692 (summary) add localization support for transcription context text
Transcription and summarization results were always generated
using a French text structure (e.g. "Réunion du..."), regardless
of user preference or meeting language. Introduced basic localization
support to adapt generated string languages.
2026-02-25 18:07:19 +01:00
lebaudantoine be79fdac80 🩹(summary) fix pip uninstall order in build stages
Pip was removed before copying the builder stage output, which caused
it to be reinstalled unintentionally. Adjust the order to align with
the backend image behavior.
2026-02-20 18:27:17 +01:00
lebaudantoine 9916ab7d7e 🔖(minor) bump release to 1.8.0 2026-02-20 13:44:19 +01:00
lebaudantoine 4507325331 🔒️(summary) switch to Alpine base image
Reduce surface area and keep the runtime image minimal.

Alpine 3.22 provides ffmpeg v6 as the latest version.
Alpine 3.23 does not include ffmpeg v7, so upgrade directly to v8.

Install pip temporarily for build steps, then remove it from the
production image.
2026-02-20 13:17:45 +01:00
lebaudantoine ce9f812a7e 🔖(minor) bump release to 1.7.0 2026-02-19 12:37:26 +01:00
lebaudantoine 89031abb63 🔖(minor) bump release to 1.6.0 2026-02-10 15:31:29 +01:00
lebaudantoine 9f58efb851 🥅(summary) catch file-related exceptions when handling recording objects
Previously, if a recording file was not found in the bucket, the code would
crash. This adds proper error handling to avoid unhandled failures.
2026-02-05 17:50:35 +01:00