Skip to content
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

Fix #24

Merged
merged 11 commits into from
Dec 19, 2024
Merged

Fix #24

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 115 additions & 77 deletions README.md

Large diffs are not rendered by default.

Large diffs are not rendered by default.

1,989 changes: 1,989 additions & 0 deletions bun.lock

Large diffs are not rendered by default.

Binary file removed bun.lockb
Binary file not shown.
8 changes: 6 additions & 2 deletions controllers/POST.login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { get_user, save_user } from '../utils/handle-user'

export const controller = async (c: Context) => {
// Parse request body and initialize variables
const redirection = encodeURIComponent(c.req.query('redirection') ?? '/a')
let redirection = encodeURIComponent(c.req.query('redirection') ?? '/a')

const { email, password, action }: { email: string; password: string; action: string } =
await c.req.parseBody()
Expand Down Expand Up @@ -49,7 +49,11 @@ export const controller = async (c: Context) => {
return c.redirect(`/a/login?message=wrong_password&redirection=${redirection}`)
}

// If both `email` and `password` are correct,
// If both `email` and `password` are correct
if (user.role === 'collaborator')
redirection =
redirection === encodeURIComponent('/a') ? encodeURIComponent('/c') : redirection

// set a signed authentication cookie for user session
await setSignedCookie(
c,
Expand Down
2 changes: 1 addition & 1 deletion docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@

<p class="small">
<br /><br />
PIERRE est en version <b>0.16.x</b> avec une
PIERRE est en version <b>0.17.x</b> avec une
<b>qualité de base de connaissances estimée à 10 %</b> puisqu'elle
<b>NE CONTIENT PAS les caractéristiques et spécificités des bailleurs sociaux</b> (ex :
coordonnées du service-client, nombre de logements en gestion...), hors cas de
Expand Down
Binary file modified knowledge/.data/proprietary.private.sqlite
Binary file not shown.
Binary file modified knowledge/.data/proprietary.public.sqlite
Binary file not shown.
13 changes: 6 additions & 7 deletions knowledge/org/granddijonhabitat.fr/Présentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

Avec plus de 10 000 logements sur le territoire de la communauté urbaine Dijon métropole, l’Office public de l’habitat Grand Dijon Habitat est le 1er bailleur social et l’un des premiers donneurs d’ordre de l’agglomération.

Cette forte implantation locale lui donne la responsabilité de l’action et le devoir de tendre vers l’excellence. Grand Dijon Habitat est ainsi un acteur essentiel de la politique locale de l’habitat, au service de l’intérêt général du logement social.
Grand Dijon Habitat est ainsi un acteur essentiel de la politique locale de l’habitat, au service de l’intérêt général du logement social et du développement de son territoire.

Le 22 décembre 1925, le conseil municipal de Dijon délibérait en vue de la création de l’Office, prenant dans le même temps l’engagement de lui fournir une dotation initiale de 250 000 francs. Le décret de création a été signé par le président de la République Gaston Doumergue le 18 août 1926. Dès lors, l'organisme s’est engagé dans la construction de logements à loyer modéré. Il a ainsi inscrit son savoir-faire dans chaque grande époque et période phare de l’urbanisation de la ville.

Expand Down Expand Up @@ -50,12 +50,11 @@ En 2017, conformément à la loi, l’Office passe d’une échelle communale à

### La société de coordination "Amplitudes"

La loi portant évolution du logement, de l’aménagement et du numérique (loi ELAN), promulguée le 24 novembre 2018, impose à tous les organismes de logement social gérant moins de 12 000 logements de s’engager dans un processus de rapprochement ; que ce soit via un
transfert de patrimoine, une fusion d’organismes ou la création d’une société de coordination (SC).
La loi portant évolution du logement, de l’aménagement et du numérique (loi ELAN), promulguée le 24 novembre 2018, impose à tous les organismes de logement social gérant moins de 12 000 logements de s’engager dans un processus de rapprochement ; que ce soit via un transfert de patrimoine, une fusion d’organismes ou la création d’une société de coordination (SC).

La Société de coordination "Amplitudes" créée au 1er janvier 2020 fédère quatre Offices Publics de l’Habitat : Ardèche Habitat, Bourg Habitat, Mâcon Habitat et Ophéor (Roanne). Ils partagent une forme juridique identique, des patrimoines structurellement proches et ensemble, ils ont l’envie de répondre à des besoins communs tout en gardant une gouvernance de proximité.

Suite à la décision du Conseil d’administration de Grand Dijon Habitat du mois de juillet 2021, l’intégration à la SC Amplitudes est voté à l’unanimité et les membres de la SC Amplitudes et leurs collectivités de rattachement ont à leur tour délibéré favorablement.
Suite à la décision du Conseil d’administration de Grand Dijon Habitat du mois de juillet 2021, l’intégration à la SC Amplitudes est votée à l’unanimité et les membres de la SC Amplitudes et leurs collectivités de rattachement ont à leur tour délibéré favorablement.

Au 1er janvier 2022, la SC Amplitudes compte désormais 5 bailleurs sociaux de premier plan sur leurs territoires respectifs et représentera un ensemble près de 34 000 logements, 67 000 locataires et 650 collaborateurs.

Expand All @@ -81,7 +80,7 @@ Les constructions actuelles répondent toutes aux critères des bâtiments basse

Grand Dijon Habitat acquiert des logements auprès de propriétaires privés et les rénove avant de les louer. Il contribue ainsi à offrir des logements à loyer modéré dans des quartiers ou des communes où l’offre était faible jusqu’alors. L’office public de l’habitat veille, dans chacune de ses rénovations, à respecter les normes environnementales actuelles : il garantit un faible niveau de charges à ses locataires tout en jouant la carte du développement durable.

Premier bailleur de l’agglomération dijonnaise, Grand Dijon Habitat dispose d’un parc diversifié dont les années de construction s’échelonnent des années 30 à nos jours. Son patrimoine est sa richesse, il se doit de l’entretenir et de le maintenir à un bon niveau de confort et de qualité.Gérer son patrimoine est donc naturellement l’une de ses missions premières : entretenir les parties communes et les espaces extérieurs, remettre en état les logements avant de les relouer, améliorer les perfomances énergétiques des logements, traiter les réclamations… sont autant de missions gages de qualité de service pour l’amélioration de la vie quotidienne de ses clients.
Premier bailleur de l’agglomération dijonnaise, Grand Dijon Habitat dispose d’un parc diversifié dont les années de construction s’échelonnent des années 30 à nos jours. Son patrimoine est sa richesse, il se doit de l’entretenir et de le maintenir à un bon niveau de confort et de qualité. Gérer son patrimoine est donc naturellement l’une de ses missions premières : entretenir les parties communes et les espaces extérieurs, remettre en état les logements avant de les relouer, améliorer les performances énergétiques des logements, traiter les réclamations… sont autant de missions gages de qualité de service pour l’amélioration de la vie quotidienne de ses clients.

### Vendre

Expand All @@ -95,7 +94,7 @@ Joignable en journée au 03 80 71 84 00, ce numéro unique permet de contacter G

En soirée et la nuit, ce numéro unique est toujours accessible et permet de contacter Grand Dijon Habitat en cas d’incidents urgents et graves nécessitant l’intervention rapide de nos équipes d’astreinte (fuite d’eau, incendie, panne de chauffage…)

2. Via le site internet, unevéritable agence virtuelle
2. Via le site internet, une véritable agence virtuelle

Ce site a été conçu pour répondre à la plupart des questions et permet au locataire d’être en contact 24/7/365 en accédant à votre espace locataire :

Expand All @@ -108,7 +107,7 @@ Ce site a été conçu pour répondre à la plupart des questions et permet au l
- L’accueil est ouvert du lundi au vendredi de 9h à 12h30 et de 13h30 à 17h30, et le mercredi et vendredi jusqu’à 16h30.
- Pour une rencontre de qualité, il est recommandé de prendre rendez-vous au 03 80 71 84 00.

4. Dans les agence de proximité
4. Dans les agences de proximité

Grand Dijon Habitat est toujours à proximité de ses locataires avec 6 agences réparties sur l’agglomération dijonnaise. Elles accueillent sur rendez-vous uniquement (03 80 71 84 00) pour permettre de signaler un incident ou venir à la rencontre des équipes présentes sur le terrain, notamment pour récupérer clés ou badges.

Expand Down
Binary file modified knowledge/proprietary/_metadata.example.xlsx
Binary file not shown.
18 changes: 9 additions & 9 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@
"dependencies": {
"@ai-sdk/anthropic": "^1.0.5",
"@ai-sdk/cohere": "^1.0.5",
"@ai-sdk/google": "^1.0.10",
"@ai-sdk/google": "^1.0.11",
"@ai-sdk/mistral": "^1.0.5",
"@ai-sdk/openai": "^1.0.8",
"ai": "^4.0.18",
"@ai-sdk/openai": "^1.0.10",
"ai": "^4.0.20",
"date-fns": "^4.1.0",
"date-fns-tz": "^3.2.0",
"hono": "^4.6.14",
Expand All @@ -45,7 +45,7 @@
"marked": "^15.0.4",
"natural": "^8.0.1",
"prettier": "^3.4.2",
"remove-markdown": "^0.5.5",
"remove-markdown": "^0.6.0",
"sqlite-vec": "^0.1.6",
"sqlite-vec-darwin-arm64": "^0.1.6",
"sqlite-vec-linux-x64": "^0.1.6",
Expand All @@ -57,19 +57,19 @@
},
"devDependencies": {
"arg": "^5.0.2",
"chalk": "^5.3.0",
"chalk": "^5.4.0",
"@dotenvx/dotenvx": "^1.31.0",
"@biomejs/biome": "^1.9.4",
"@types/bun": "^1.1.14",
"ora": "^8.1.1",
"@types/lodash": "^4.17.13",
"@types/turndown": "^5.0.5",
"llamaindex": "^0.8.29",
"llamaindex": "^0.8.30",
"markdown-toc": "^1.2.0",
"puppeteer": "^23.10.4",
"puppeteer": "^23.11.1",
"prettier-plugin-tailwindcss": "^0.6.9",
"@tailwindcss/cli": "^4.0.0-beta.7",
"tailwindcss": "^4.0.0-beta.7",
"@tailwindcss/cli": "^4.0.0-beta.8",
"tailwindcss": "^4.0.0-beta.8",
"turndown": "^7.2.0",
"typescript": "^5.7.2"
}
Expand Down
4 changes: 3 additions & 1 deletion tests/e2e/connect-and-browse-admin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,9 @@ it('`admin` should pass e2e test', async () => {
await page.type('input[type="password"]', 'oXVOtYqxODmD')
await page.click('input[type="submit"]')
await Bun.sleep(250) // Wait for redirection
expect(page.url()).toBe('http://localhost:3000/a/login')
expect(page.url()).toMatch(
/http:\/\/localhost:3000\/c\/.{36}\?config=pierre-ia.org&context=default/
)

// Cookie must be set
cookie = (await page.cookies()).find((cookie) => cookie.name === 'pierre-ia')
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/utils/__snapshots__/search-by-bm25.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ Ci-après la procédure et la répartition des responsabilités entre la sociét
- consigne/commentaire pour la société de télésurveillance : faire une main courante avec toutes les coordonnées (adresse cage d'escalier, étage...) + le week-end ou jour férié en journée uniquement, la société de télésurveillance appelle l'entreprise skydome 01 80 87 45 97 (intervention en 4h). code à transmettre au télésurveilleur : 0210.
"
,
"distance": -5.363186029570297,
"entity_hash": "dFNKit50RDtcM6WNE45Mz0TAHVvIFfDhgQ5VfkG9Jw4",
"distance": -5.360347442825854,
"entity_hash": "Pm6N6W7pP2_rQITOr3gnulkBT4CxevdN7ViixJlGYg",
},
]
`;
3 changes: 2 additions & 1 deletion utils/deliver-answer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { createCohere } from '@ai-sdk/cohere'
import { createGoogleGenerativeAI } from '@ai-sdk/google'
import { createMistral } from '@ai-sdk/mistral'
import { createOpenAI } from '@ai-sdk/openai'
import { generateText, streamText } from 'ai'
import { generateText, smoothStream, streamText } from 'ai'
import remove_markdown from 'remove-markdown'
import type { AIContext } from './_schema'
import { save_reply } from './handle-conversation'
Expand All @@ -30,6 +30,7 @@ export const stream_answer = async (context: AIContext) =>
streamText({
// biome-ignore lint: server-side eval to keep `config.ts` simple
model: eval((context.config as { model: string }).model),
experimental_transform: smoothStream({ delayInMs: 20 }),
messages: context.conversation,
async onFinish({ text, usage }) {
context.metadata.tokens.completion = usage.completionTokens
Expand Down
14 changes: 7 additions & 7 deletions utils/knowledge/save-metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ export const get_and_save_metadata = async (args: Args) => {
const files = XLSX.utils
.sheet_to_json<{
"Chemin d'accès": string
Accès: string
Onglet: number
"Ligne d'en-tête": number
Accès: string
Segmentation: string
Description: string
last_modified: null
"Type d'entité": string
"Colonne de l'entité": number
"Type de l'entité": string
Découpage: string
}>(sheet, { range: 1 })
last_modified: null
}>(sheet, { range: 2 })
.map((item) => ({
id: randomUUIDv7(),
filepath: `knowledge/proprietary/${item["Chemin d'accès"]}`,
Expand All @@ -40,8 +40,8 @@ export const get_and_save_metadata = async (args: Args) => {
description: item.Description,
last_modified: null,
entity_column: item["Colonne de l'entité"],
entity_type: item["Type de l'entité"],
chunk: item.Découpage === 'true'
entity_type: item["Type d'entité"],
chunk: item.Segmentation === 'true'
}))

Bun.write(
Expand Down
2 changes: 1 addition & 1 deletion utils/knowledge/transform-office-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export const transform_office_file = async (args: Args) => {
// Format the date in the 'Europe/Paris' timezone
return [
lowercaseKey,
formatInTimeZone(value, 'Europe/Paris', 'PPPP à HH:mm', { locale: fr })
formatInTimeZone(value, 'Europe/Paris', 'PPPP', { locale: fr })
]
}

Expand Down
2 changes: 1 addition & 1 deletion utils/rank-chunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ Evaluate whether the chunk pertains to the process “${context.query?.named_ent
- Score 1000: The chunk explicitly addresses the process with high accuracy.
- Score 1-999: Partial or nuanced relevance (e.g., related processes but not an exact match). Example: “Une panne d’ascenseur” is distinct from “Un locataire bloqué dans l’ascenseur”.
`
: 'Assign a building score of 0.'
: 'Assign a process/guideline score of 0.'
}

## Task: Evaluate Overall Relevance
Expand Down
2 changes: 1 addition & 1 deletion views/admin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const view = (user) => {
<script src="https://unpkg.com/@hotwired/[email protected]/dist/turbo.es2017-umd.js"></script>
<link rel="icon" href="../assets/pierre-ia.org/system.svg" type="image/svg+xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<title>PIERRE — Administration</title>
</head>

Expand Down
2 changes: 1 addition & 1 deletion views/conversations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const view = (data, conversation: Reply[] | []) => {
<script src="https://unpkg.com/@hotwired/[email protected]/dist/turbo.es2017-umd.js"></script>
<link rel="icon" href="../assets/pierre-ia.org/system.svg" type="image/svg+xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<title>PIERRE — Administration > Conversations</title>
</head>

Expand Down
2 changes: 1 addition & 1 deletion views/encyclopedia.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const view = () => {
<script src="https://unpkg.com/@hotwired/[email protected]/dist/turbo.es2017-umd.js"></script>
<link rel="icon" href="../assets/pierre-ia.org/system.svg" type="image/svg+xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<title>PIERRE — Administration > Encyclopédie</title>
</head>

Expand Down
4 changes: 2 additions & 2 deletions views/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ export const view = (config: Config, context: string) => {
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="../assets/${config.id}/system.svg" type="image/svg+xml" />
<link rel="manifest" href="../assets/${config.id}/manifest.json" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<script type="module" src="../assets/pierre-ia.org/dist/js/ai.1734255227039.js"></script>
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<script type="module" src="../assets/pierre-ia.org/dist/js/ai.1734620244584.js"></script>
<title>Comment puis-je vous aider ? 🖐️</title>
</head>

Expand Down
2 changes: 1 addition & 1 deletion views/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const view = (message) => {
<script src="https://unpkg.com/@hotwired/[email protected]/dist/turbo.es2017-umd.js"></script>
<link rel="icon" href="../assets/pierre-ia.org/system.svg" type="image/svg+xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<title>PIERRE — Administration > Connexion</title>
</head>

Expand Down
2 changes: 1 addition & 1 deletion views/statistics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const view = () => {
<script src="https://unpkg.com/@hotwired/[email protected]/dist/turbo.es2017-umd.js"></script>
<link rel="icon" href="../assets/pierre-ia.org/system.svg" type="image/svg+xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<title>PIERRE — Administration > Statistiques</title>
</head>

Expand Down
2 changes: 1 addition & 1 deletion views/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const view = (users: User[]) => {
<script src="https://unpkg.com/@hotwired/[email protected]/dist/turbo.es2017-umd.js"></script>
<link rel="icon" href="../assets/pierre-ia.org/system.svg" type="image/svg+xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734255227039.css" />
<link rel="stylesheet" href="../assets/pierre-ia.org/dist/css/style.1734620244584.css" />
<title>PIERRE — Administration > Utilisateurs</title>
</head>

Expand Down
Loading