mirror of
https://github.com/suitenumerique/meet.git
synced 2026-07-27 20:29:09 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 47cd3eff74 | |||
| 5769203705 | |||
| cadc186c62 | |||
| 5be7595533 |
+8
-1
@@ -8,13 +8,20 @@ and this project adheres to
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.2.0] - 2026-01-05
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
- ✨(agent) support Kyutai client for subtitle
|
- ✨(agent) support Kyutai client for subtitle
|
||||||
- ✨(frontend) remove the beta badge
|
|
||||||
- ✨(all) support starting transcription and recording simultaneously
|
- ✨(all) support starting transcription and recording simultaneously
|
||||||
- ✨(backend) persist options on a recording
|
- ✨(backend) persist options on a recording
|
||||||
- ✨(all) support choosing the transcription language
|
- ✨(all) support choosing the transcription language
|
||||||
- ✨(summary) add a download link to the audio/video file
|
- ✨(summary) add a download link to the audio/video file
|
||||||
- ✨(frontend) allow unprivileged users to request a recording
|
- ✨(frontend) allow unprivileged users to request a recording
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- 🚸(frontend) remove the beta badge
|
||||||
- ♻️(summary) extract file handling in a robust service
|
- ♻️(summary) extract file handling in a robust service
|
||||||
- ♻️(all) manage recording state on the backend side
|
- ♻️(all) manage recording state on the backend side
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
APP_NAME="meet-app-summary-dev"
|
APP_NAME="meet-app-summary-dev"
|
||||||
APP_API_TOKEN="password"
|
APP_API_TOKEN="password"
|
||||||
|
|
||||||
AWS_STORAGE_BUCKET_NAME="meet-media-storage"
|
AWS_STORAGE_BUCKET_NAME="http://meet-media-storage"
|
||||||
AWS_S3_ENDPOINT_URL="minio:9000"
|
AWS_S3_ENDPOINT_URL="minio:9000"
|
||||||
AWS_S3_SECURE_ACCESS=false
|
AWS_S3_SECURE_ACCESS=false
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "agents"
|
name = "agents"
|
||||||
version = "1.1.0"
|
version = "1.2.0"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"livekit-agents==1.3.10",
|
"livekit-agents==1.3.10",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "meet"
|
name = "meet"
|
||||||
version = "1.1.0"
|
version = "1.2.0"
|
||||||
authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }]
|
authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 5 - Production/Stable",
|
"Development Status :: 5 - Production/Stable",
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "meet",
|
"name": "meet",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "meet",
|
"name": "meet",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fontsource-variable/material-symbols-outlined": "5.2.30",
|
"@fontsource-variable/material-symbols-outlined": "5.2.30",
|
||||||
"@fontsource/material-icons-outlined": "5.2.6",
|
"@fontsource/material-icons-outlined": "5.2.6",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "meet",
|
"name": "meet",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "panda codegen && vite",
|
"dev": "panda codegen && vite",
|
||||||
|
|||||||
@@ -66,16 +66,22 @@ export function ToastRecordingRequest({
|
|||||||
name: participant?.name,
|
name: participant?.name,
|
||||||
})}
|
})}
|
||||||
{!options.isMenuOpen && (
|
{!options.isMenuOpen && (
|
||||||
<Button
|
<div
|
||||||
size="sm"
|
|
||||||
variant="text"
|
|
||||||
className={css({
|
className={css({
|
||||||
color: 'primary.300',
|
marginLeft: '0.5rem',
|
||||||
})}
|
})}
|
||||||
onPress={options.openMenu}
|
|
||||||
>
|
>
|
||||||
{t('openMenu')}
|
<Button
|
||||||
</Button>
|
size="sm"
|
||||||
|
variant="text"
|
||||||
|
className={css({
|
||||||
|
color: 'primary.300',
|
||||||
|
})}
|
||||||
|
onPress={options.openMenu}
|
||||||
|
>
|
||||||
|
{t('openMenu')}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</HStack>
|
</HStack>
|
||||||
</StyledToastContainer>
|
</StyledToastContainer>
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ export const ControlsButton = ({
|
|||||||
fullWidth
|
fullWidth
|
||||||
onPress={handle}
|
onPress={handle}
|
||||||
isDisabled={isDisabled}
|
isDisabled={isDisabled}
|
||||||
|
size="compact"
|
||||||
>
|
>
|
||||||
{t('button.start')}
|
{t('button.start')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ export const RowWrapper = ({
|
|||||||
className={css({
|
className={css({
|
||||||
width: '100%',
|
width: '100%',
|
||||||
background: 'gray.100',
|
background: 'gray.100',
|
||||||
padding: '8px',
|
paddingBlock: '0.5rem',
|
||||||
|
paddingInline: '0',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
marginTop: '4px',
|
marginTop: '0.25rem',
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -40,6 +41,7 @@ export const RowWrapper = ({
|
|||||||
display: 'flex',
|
display: 'flex',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
|
paddingInline: '0.25rem',
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{/* fixme - doesn't handle properly material-symbols */}
|
{/* fixme - doesn't handle properly material-symbols */}
|
||||||
@@ -47,10 +49,11 @@ export const RowWrapper = ({
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className={css({
|
className={css({
|
||||||
flex: 5,
|
flex: 6,
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
gap: '0.25rem',
|
gap: '0.25rem',
|
||||||
|
paddingInlineEnd: '8px',
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -31,6 +31,12 @@ export const buttonRecipe = cva({
|
|||||||
borderRadius: 4,
|
borderRadius: 4,
|
||||||
'--square-padding': '0',
|
'--square-padding': '0',
|
||||||
},
|
},
|
||||||
|
compact: {
|
||||||
|
borderRadius: 4,
|
||||||
|
paddingX: '0.5',
|
||||||
|
paddingY: '0.625',
|
||||||
|
'--square-padding': '{spacing.0.625}',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
square: {
|
square: {
|
||||||
true: {
|
true: {
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ backend:
|
|||||||
# Extra volume mounts to manage our local custom CA and avoid to set ssl_verify: false
|
# Extra volume mounts to manage our local custom CA and avoid to set ssl_verify: false
|
||||||
extraVolumeMounts:
|
extraVolumeMounts:
|
||||||
- name: certs
|
- name: certs
|
||||||
mountPath: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem
|
mountPath: /usr/local/lib/python3.13/site-packages/certifi/cacert.pem
|
||||||
subPath: cacert.pem
|
subPath: cacert.pem
|
||||||
|
|
||||||
# Extra volumes to manage our local custom CA and avoid to set ssl_verify: false
|
# Extra volumes to manage our local custom CA and avoid to set ssl_verify: false
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ summary:
|
|||||||
APP_NAME: summary-microservice
|
APP_NAME: summary-microservice
|
||||||
APP_API_TOKEN: password
|
APP_API_TOKEN: password
|
||||||
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
||||||
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000
|
AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000/
|
||||||
AWS_S3_ACCESS_KEY_ID: meet
|
AWS_S3_ACCESS_KEY_ID: meet
|
||||||
AWS_S3_SECRET_ACCESS_KEY: password
|
AWS_S3_SECRET_ACCESS_KEY: password
|
||||||
AWS_S3_SECURE_ACCESS: False
|
AWS_S3_SECURE_ACCESS: False
|
||||||
@@ -187,7 +187,7 @@ celeryTranscribe:
|
|||||||
APP_NAME: summary-microservice
|
APP_NAME: summary-microservice
|
||||||
APP_API_TOKEN: password
|
APP_API_TOKEN: password
|
||||||
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
||||||
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000
|
AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000/
|
||||||
AWS_S3_ACCESS_KEY_ID: meet
|
AWS_S3_ACCESS_KEY_ID: meet
|
||||||
AWS_S3_SECRET_ACCESS_KEY: password
|
AWS_S3_SECRET_ACCESS_KEY: password
|
||||||
AWS_S3_SECURE_ACCESS: False
|
AWS_S3_SECURE_ACCESS: False
|
||||||
@@ -225,7 +225,7 @@ celerySummarize:
|
|||||||
APP_NAME: summary-microservice
|
APP_NAME: summary-microservice
|
||||||
APP_API_TOKEN: password
|
APP_API_TOKEN: password
|
||||||
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
AWS_STORAGE_BUCKET_NAME: meet-media-storage
|
||||||
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000
|
AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000/
|
||||||
AWS_S3_ACCESS_KEY_ID: meet
|
AWS_S3_ACCESS_KEY_ID: meet
|
||||||
AWS_S3_SECRET_ACCESS_KEY: password
|
AWS_S3_SECRET_ACCESS_KEY: password
|
||||||
AWS_S3_SECURE_ACCESS: False
|
AWS_S3_SECURE_ACCESS: False
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "mail_mjml",
|
"name": "mail_mjml",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "mail_mjml",
|
"name": "mail_mjml",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@html-to/text-cli": "0.5.4",
|
"@html-to/text-cli": "0.5.4",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mail_mjml",
|
"name": "mail_mjml",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"description": "An util to generate html and text django's templates from mjml templates",
|
"description": "An util to generate html and text django's templates from mjml templates",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "sdk",
|
"name": "sdk",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "sdk",
|
"name": "sdk",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"./library",
|
"./library",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sdk",
|
"name": "sdk",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "summary"
|
name = "summary"
|
||||||
version = "1.1.0"
|
version = "1.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fastapi[standard]>=0.105.0",
|
"fastapi[standard]>=0.105.0",
|
||||||
"uvicorn>=0.24.0",
|
"uvicorn>=0.24.0",
|
||||||
|
|||||||
@@ -21,8 +21,14 @@ class FileService:
|
|||||||
"""Initialize FileService with MinIO client and configuration."""
|
"""Initialize FileService with MinIO client and configuration."""
|
||||||
self._logger = logger
|
self._logger = logger
|
||||||
|
|
||||||
|
endpoint = (
|
||||||
|
settings.aws_s3_endpoint_url.removeprefix("https://")
|
||||||
|
.removeprefix("http://")
|
||||||
|
.rstrip("/")
|
||||||
|
)
|
||||||
|
|
||||||
self._minio_client = Minio(
|
self._minio_client = Minio(
|
||||||
settings.aws_s3_endpoint_url,
|
endpoint,
|
||||||
access_key=settings.aws_s3_access_key_id,
|
access_key=settings.aws_s3_access_key_id,
|
||||||
secret_key=settings.aws_s3_secret_access_key.get_secret_value(),
|
secret_key=settings.aws_s3_secret_access_key.get_secret_value(),
|
||||||
secure=settings.aws_s3_secure_access,
|
secure=settings.aws_s3_secure_access,
|
||||||
|
|||||||
Reference in New Issue
Block a user