Skip to content

Instantly share code, notes, and snippets.

@revolunet
Last active December 11, 2024 00:19
Show Gist options
  • Save revolunet/6ef9fb426c8ce4aa07417b4f2e38d8a8 to your computer and use it in GitHub Desktop.
Save revolunet/6ef9fb426c8ce4aa07417b4f2e38d8a8 to your computer and use it in GitHub Desktop.
Albert internet collection demo
// @ts-check
// run in your browser or with `node internet.mjs` with the ALBERT_API_KEY set below
// see also: https://albert.api.etalab.gouv.fr/documentation
const API_KEY = process.env.ALBERT_API_KEY;
const API_URL = "https://albert.api.etalab.gouv.fr";
const LANGUAGE_MODEL = "AgentPublic/llama3-instruct-8b"; // see https://albert.api.etalab.gouv.fr/v1/models
/**
* Call albert API
* @param {{path: string, method?: "POST"|"GET", body: string}} param0
* @returns {Promise<any>} Search API result
*/
const albertApi = ({ path, method = "POST", body }) =>
fetch(`${API_URL}/v1${path}`, {
method,
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body,
}).then((r) => r.json());
/**
* Query some albert collection
*
* @param {{query: string, collectionId: string}} param0
* @returns {Promise<string>}
*/
const askAlbert = async ({ query, collectionId }) => {
const searchResult = await albertApi({
path: "/search",
body: JSON.stringify({ collections: [collectionId], k: 6, prompt: query }),
});
const prompt = `Réponds à la question suivante en markdown en te basant sur les documents ci-dessous : ${query}
# Documents :
${searchResult.data.map((c) => c.chunk.content)}`;
const result = await albertApi({
path: "/chat/completions",
body: JSON.stringify({
model: LANGUAGE_MODEL,
stream: false,
messages: [{ role: "user", content: prompt }],
}),
});
const sources = searchResult.data.map(
(c) => `${c.chunk.metadata.document_name}`
);
const sourcesList = sources.length
? "Sources:\n" +
Array.from(new Set(sources))
.sort()
.map((s) => `- ${s}`)
.join("\n")
: "";
return `${result.choices[0].message.content}\n\n${sourcesList}`;
};
const queries = [
"Qui est Ada Lovelace ?",
"C'est quoi la direction interministerielle du numérique ?",
"Qui est premier ministre en France ?",
];
queries.forEach(async (q) => {
const answer = await askAlbert({ query: q, collectionId: "internet" });
console.log(`\n\n${q}\n> ${answer}`);
});

Qui est premier ministre en France ?

Qui est premier ministre en France ? Depuis le 5 septembre 2024, le Premier ministre de la République française est Michel Barnier. Cependant, il a démissionné le 5 décembre 2024, et selon le document, il n'y a pas de mention de son remplaçant actuel.

Sources:

Qui est Ada Lovelace ?

Qui est Ada Lovelace ? Ada Lovelace, née Ada Augusta Byron, est la fille unique et légitime du poète Lord Byron et de la réformatrice Anne Isabella Milbanke. Elle est considérée comme la première programmeuse informatique du monde pour avoir écrit les commentaires du code de l'Analytical Engine, un ordinateur conçu par Charles Babbage.

Sources:

C'est quoi la direction interministerielle du numérique ?

La direction interministérielle du numérique (DINUM) ===========================

La direction interministérielle du numérique (DINUM) est un service du Premier ministre, placé sous l'autorité de la ministre de la Transformation et de la Fonction publique. Elle a pour mission d'élaborer la stratégie numérique de l'État et de piloter sa mise en œuvre.

Missions

La DINUM accompagne les ministères dans leur transformation numérique, conseille le Gouvernement et développe des services et ressources partagées. Elle pilote également le programme TECH.GOUV d'accélération de la transformation numérique du service public.

Organisation

La DINUM comprend une direction de programme, trois départements et un secrétariat général :

  • La direction de programme TECH.GOUV pilote le programme interministériel de transformation numérique du service public.
  • Le département "Infrastructures et services opérés" (ISO) conçoit et opère des services d'infrastructures à valeur ajoutée mutualisés entre les administrations.
  • Le département Etalab coordonne la conception et la mise en œuvre de la stratégie de l'État dans le domaine de la donnée.
  • Le département "Performance des services numériques" (PSN) conçoit les plans d'actions interministériels en matière de mutualisation, dématérialisation, pilotage des projets et qualité des services numériques.
  • Le secrétariat général soutient l'activité de la direction et assure la communication externe et interne, la gestion des ressources humaines et financières, la synthèse des missions et veille à la qualité des conditions de travail des agents.

Objectif

L'objectif de la DINUM est de créer un État plus efficace, plus simple et plus souverain grâce au numérique.

Sources:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment