diff --git a/src/api/parole/content-types/parole/schema.json b/src/api/parole/content-types/parole/schema.json index da31490..95e3356 100644 --- a/src/api/parole/content-types/parole/schema.json +++ b/src/api/parole/content-types/parole/schema.json @@ -125,6 +125,23 @@ "allowedTypes": [ "files" ] + }, + "langueSource": { + "type": "enumeration", + "enum": ["ka", "fr", "en", "es", "de", "it"], + "default": "ka" + }, + "sourceOriginale": { + "type": "relation", + "relation": "manyToOne", + "target": "api::parole.parole", + "inversedBy": "remixes" + }, + "remixes": { + "type": "relation", + "relation": "oneToMany", + "target": "api::parole.parole", + "mappedBy": "sourceOriginale" } } } diff --git a/src/api/parole/services/parole.js b/src/api/parole/services/parole.js index 0e36cc3..0c3bc3d 100644 --- a/src/api/parole/services/parole.js +++ b/src/api/parole/services/parole.js @@ -117,7 +117,7 @@ module.exports = createCoreService('api::parole.parole', ({strapi}) => ({ const batch = await strapi.documents('api::parole.parole').findMany({ status: 'published', populate: ['artistes', 'traductions'], - fields: ['documentId', 'titre', 'slug', 'transcription', 'annee'], + fields: ['documentId', 'titre', 'slug', 'transcription', 'annee', 'langueSource'], limit: pageSize, start, }) @@ -138,10 +138,13 @@ module.exports = createCoreService('api::parole.parole', ({strapi}) => ({ for (const parole of paroles) { const source = stripMarkdown(parole.transcription) + const sourceLang = parole.langueSource || 'ka' const artists = (parole.artistes || []).map(a => a.alias) const paroleMeta = { title: parole.titre, artists } - if (suspectFrench(source)) { + if (sourceLang !== 'ka') { + nonKa.push({ documentId: parole.documentId, slug: parole.slug, ...paroleMeta, suspected_lang: sourceLang }) + } else if (suspectFrench(source)) { nonKa.push({ documentId: parole.documentId, slug: parole.slug, ...paroleMeta, suspected_lang: 'fr' }) } @@ -152,25 +155,26 @@ module.exports = createCoreService('api::parole.parole', ({strapi}) => ({ for (const lang of targetLangs) { const { field, targetLang, userPrompt } = LANG_MAP[lang] + if (lang === sourceLang) continue const target = stripMarkdown(parole.traductions?.[field]) if (!target) continue langCounts[lang] = (langCounts[lang] || 0) + 1 if (type === 'instruct') { + const systemPrompt = sourceLang === 'ka' + ? 'Tu es un expert en langue KA (créole guadeloupéen/martiniquais). Traduis le texte KA suivant.' + : `Tu es un expert en traduction. Traduis le texte suivant (langue source : ${sourceLang}).` pairs.push({ messages: [ - { - role: 'system', - content: 'Tu es un expert en langue KA (créole guadeloupéen/martiniquais). Traduis le texte KA suivant.', - }, + { role: 'system', content: systemPrompt }, { role: 'user', content: `${userPrompt} :\n\n${source}` }, { role: 'assistant', content: target }, ], }) } else { pairs.push({ - source_lang: 'ka', + source_lang: sourceLang, target_lang: targetLang, source, target, diff --git a/types/generated/contentTypes.d.ts b/types/generated/contentTypes.d.ts index a7ecefe..35dba52 100644 --- a/types/generated/contentTypes.d.ts +++ b/types/generated/contentTypes.d.ts @@ -540,6 +540,10 @@ export interface ApiParoleParole extends Struct.CollectionTypeSchema { >; forceSlug: Schema.Attribute.Boolean; gadeEmbed: Schema.Attribute.String; + langueSource: Schema.Attribute.Enumeration< + ['ka', 'fr', 'en', 'es', 'de', 'it'] + > & + Schema.Attribute.DefaultTo<'ka'>; locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', @@ -551,7 +555,12 @@ export interface ApiParoleParole extends Struct.CollectionTypeSchema { pawol: Schema.Attribute.Media<'files'>; prioriteArtistes: Schema.Attribute.String; publishedAt: Schema.Attribute.DateTime; + remixes: Schema.Attribute.Relation<'oneToMany', 'api::parole.parole'>; slug: Schema.Attribute.String & Schema.Attribute.Unique; + sourceOriginale: Schema.Attribute.Relation< + 'manyToOne', + 'api::parole.parole' + >; streamAudio: Schema.Attribute.Component<'store.album', true>; streamVideo: Schema.Attribute.Component<'url.liens', true>; titre: Schema.Attribute.String & Schema.Attribute.Required;