XQ commited on
Commit
20b4d6f
·
1 Parent(s): 278c896

Update README

Browse files
Files changed (2) hide show
  1. .github/README.md +17 -23
  2. README.md +17 -23
.github/README.md CHANGED
@@ -1,13 +1,13 @@
1
  # Dokumentassistent
2
 
3
- ## Live demo
4
  Hosted on Hugging Face Spaces: [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space)
5
 
6
  [Skip to English ↓](#english)
7
 
8
  ## Dansk
9
 
10
- En produktionsklar RAG-applikation, der gør det muligt at stille spørgsmål til dokumenter på et hvilket som helst sprog og få svar med kildehenvisninger. Systemet er bygget på open source-komponenter (LangChain, LangGraph, Qdrant, Ollama) og kan køre helt lokalt uden eksterne API-kald. Det implementerer hybrid søgning med reranking, en Plan-and-Execute agent med samtalehukommelse, og RAGAS-baseret evaluering af svarkvaliteten.
11
 
12
  ### Funktioner
13
 
@@ -32,9 +32,9 @@ Når en bruger stiller et spørgsmål, kører systemet både den semantiske og d
32
 
33
  Systemet kan køre i to forskellige tilstande, der vælges via miljøvariablen `AGENT_MODE`.
34
 
35
- **Pipeline** (`AGENT_MODE=pipeline`) bygger en fast LangGraph-graf med sprogdetektion, valgfri oversættelse, hybrid søgning, reranking og generering. Tilstanden har en confidence-baseret retry-loop og fungerer fint med lette lokale modeller.
36
 
37
- **Plan-and-Execute Agent** (`AGENT_MODE=react`, standard) er en flertrinsagent, hvor en planner først nedbryder spørgsmålet i delopgaver, en executor kører hver delopgave gennem en ReAct-subagent med adgang til et sæt værktøjer, og en synthesizer producerer det endelige svar med kildehenvisninger. Tilstanden indeholder samtalehukommelse til opfølgende spørgsmål og kræver en model, der understøtter tool calling.
38
 
39
  | Værktøj | Formål |
40
  |---|---|
@@ -47,12 +47,9 @@ Systemet kan køre i to forskellige tilstande, der vælges via miljøvariablen `
47
 
48
  ### Produktionshensyn
49
 
50
- - **Sporbarhed.** Hvert genereret svar har kildehenvisninger chunk-niveau med dokument-ID, sidenummer og tekststykke, så det kan revideres bagudrettet.
51
- - **Governance.** RAGAS-evalueringspipelinen i `src/evaluation/` gør det muligt at måle faithfulness og context precision, før ændringer slippes løs i produktion.
52
- - **Konfigurerbarhed.** Ingen hardkodede stier, modelnavne eller API-nøgler. Alt styres via miljøvariabler gennem `src/config.py`.
53
- - **Provider-neutralitet.** Forretningskoden importerer aldrig en provider-SDK direkte. LLM- og embedding-backends skiftes via factory-funktionerne `create_llm()` og `create_embeddings()`, hvilket undgår vendor lock-in.
54
- - **Lokal som standard.** Standardkonfigurationen kører helt uden eksterne API-kald og passer til miljøer med strenge krav til datahjemsted.
55
- - **Pakket i containere.** Docker Compose til lokal kørsel og Hugging Face Spaces til den offentlige demo.
56
 
57
  ### Teknologivalg
58
 
@@ -79,13 +76,13 @@ Se `.env.example` for konfiguration pr. provider.
79
 
80
  Demoen ligger på [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
81
 
82
- Prøv for eksempel disse spørgsmål på et hvilket som helst sprog.
83
 
84
  - "Hvad er KU's politik for brug af AI-værktøjer?"
85
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
86
  - "Sammenlign reglerne for AI-brug i forskning og undervisning."
87
 
88
- Det sidste spørgsmål udløser Plan-and-Execute-agenten, så man kan se den nedbryde spørgsmålet i delopgaver i realtid.
89
 
90
  ### Kom i gang
91
 
@@ -177,7 +174,7 @@ docs/ # eksempel-PDF'er eller tekster (KU AI-dokumenter)
177
 
178
  ## English
179
 
180
- A production-ready RAG application that lets users ask questions about documents in any language and receive answers with source citations. The system is built on open source components (LangChain, LangGraph, Qdrant, Ollama) and can run fully local without any external API calls. It implements hybrid search with reranking, a Plan-and-Execute agent with conversation memory, and RAGAS-based evaluation of answer quality.
181
 
182
  ### Capabilities
183
 
@@ -188,7 +185,7 @@ A production-ready RAG application that lets users ask questions about documents
188
  | Reranking | Cross-encoder `mmarco-mMiniLMv2-L12-H384-v1` |
189
  | Agent flows | Plan-and-Execute with six tools, ReAct sub-agent and conversation memory |
190
  | Evaluation | RAGAS metrics (faithfulness, answer relevancy, context precision) |
191
- | Traceability | Each answer carries source references with chunk ID and page number, plus structured logging |
192
  | Provider abstraction | Factory pattern that allows swapping between Ollama, OpenAI, Azure OpenAI, Anthropic and Google GenAI without touching business code |
193
  | Deployment | Docker Compose for local setup, Hugging Face Spaces for the public demo |
194
 
@@ -202,9 +199,9 @@ At query time, both indexes are searched and the results merged with reciprocal
202
 
203
  The system can run in two different modes, switchable via the `AGENT_MODE` environment variable.
204
 
205
- **Pipeline** (`AGENT_MODE=pipeline`) is built on a fixed LangGraph graph with language detection, optional translation, hybrid retrieval, reranking, and generation. The mode has a confidence-based retry loop and works well with lightweight local models.
206
 
207
- **Plan-and-Execute Agent** (`AGENT_MODE=react`, default) is a multi-step agent where a planner first decomposes the query into sub-tasks, an executor runs each sub-task through a ReAct sub-agent with access to a set of tools, and a synthesizer produces the final answer with citations. The mode includes conversation memory for follow-up questions and requires a model that supports tool calling.
208
 
209
  | Tool | Purpose |
210
  |---|---|
@@ -217,12 +214,9 @@ The system can run in two different modes, switchable via the `AGENT_MODE` envir
217
 
218
  ### Production considerations
219
 
220
- - **Traceability.** Every generated answer carries chunk-level source references with document ID, page number and span, so it can be audited and reviewed afterwards.
221
- - **Governance.** The RAGAS evaluation pipeline in `src/evaluation/` lets you measure faithfulness and context precision before promoting changes to production.
222
- - **Configurability.** No hardcoded paths, model names or API keys. Everything is controlled via environment variables through `src/config.py`.
223
- - **Provider neutrality.** Business code never imports a provider SDK directly. LLM and embedding backends swap via the `create_llm()` and `create_embeddings()` factory functions, which avoids vendor lock-in.
224
- - **Local-first.** The default configuration runs entirely without external API calls and fits environments with strict data residency requirements.
225
- - **Containerized.** Docker Compose for local runs and Hugging Face Spaces for the public demo.
226
 
227
  ### Tech stack
228
 
@@ -249,7 +243,7 @@ See `.env.example` for per-provider configuration.
249
 
250
  The demo lives at [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
251
 
252
- Try asking these questions, or in your language.
253
 
254
  - "Hvad er KU's politik for brug af AI-værktøjer?"
255
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
 
1
  # Dokumentassistent
2
 
3
+ ## Live demo
4
  Hosted on Hugging Face Spaces: [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space)
5
 
6
  [Skip to English ↓](#english)
7
 
8
  ## Dansk
9
 
10
+ En RAG-applikation, der lader brugeren stille spørgsmål til dokumenter på et hvilket som helst sprog og få svar med kildehenvisninger. Systemet er bygget på open source-komponenter (LangChain, LangGraph, Qdrant, Ollama) og kan køre lokalt uden API-nøgler. Det bruger hybrid søgning med reranking, en Plan-and-Execute-agent med samtalehukommelse, og RAGAS-baseret evaluering af svarkvaliteten.
11
 
12
  ### Funktioner
13
 
 
32
 
33
  Systemet kan køre i to forskellige tilstande, der vælges via miljøvariablen `AGENT_MODE`.
34
 
35
+ **Pipeline** (`AGENT_MODE=pipeline`) er en fast LangGraph-DAG, der kører sprogdetektion, valgfri oversættelse, hybrid søgning, reranking, generering, plus en confidence-baseret retry-loop. Den fungerer fint med små lokale modeller, der ikke understøtter tool calling.
36
 
37
+ **Plan-and-Execute-agent** (`AGENT_MODE=react`, standard) er flertrinet: en planner nedbryder først spørgsmålet i delopgaver, en executor kører hver delopgave gennem en ReAct-subagent med adgang til værktøjerne nedenfor, og en synthesizer samler resultaterne til ét svar med kildehenvisninger. Den bruger samtalehukommelse til opfølgende spørgsmål og kræver en model, der understøtter tool calling.
38
 
39
  | Værktøj | Formål |
40
  |---|---|
 
47
 
48
  ### Produktionshensyn
49
 
50
+ Hvert svar henviser tilbage til de tekststykker, det bygger på, med dokument-ID, sidenummer og selve teksten, så svarene kan kontrolleres bagefter. RAGAS-evalueringen i `src/evaluation/` måler faithfulness og context precision, så man kan opdage forringelser, før en ændring går i drift.
51
+
52
+ Konfigurationen ligger i miljøvariabler via `src/config.py`; der er ingen hardkodede stier, modelnavne eller API-nøgler. Koden importerer aldrig en provider-SDK direkte — LLM- og embedding-backends hentes gennem `create_llm()` og `create_embeddings()`, så man kan skifte mellem Ollama, OpenAI og andre uden at røre den øvrige kode. Standardopsætningen kører lokalt uden eksterne API-kald.
 
 
 
53
 
54
  ### Teknologivalg
55
 
 
76
 
77
  Demoen ligger på [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
78
 
79
+ Prøv disse spørgsmål — eller dine egne — på et hvilket som helst sprog.
80
 
81
  - "Hvad er KU's politik for brug af AI-værktøjer?"
82
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
83
  - "Sammenlign reglerne for AI-brug i forskning og undervisning."
84
 
85
+ Det tredje spørgsmål udløser Plan-and-Execute-agenten, så man kan se den nedbryde spørgsmålet i delopgaver i realtid.
86
 
87
  ### Kom i gang
88
 
 
174
 
175
  ## English
176
 
177
+ A RAG application that lets users ask questions about documents in any language and get answers with source citations. The system is built on open source components (LangChain, LangGraph, Qdrant, Ollama) and can run locally without API keys. It uses hybrid search with reranking, a Plan-and-Execute agent with conversation memory, and RAGAS-based evaluation of answer quality.
178
 
179
  ### Capabilities
180
 
 
185
  | Reranking | Cross-encoder `mmarco-mMiniLMv2-L12-H384-v1` |
186
  | Agent flows | Plan-and-Execute with six tools, ReAct sub-agent and conversation memory |
187
  | Evaluation | RAGAS metrics (faithfulness, answer relevancy, context precision) |
188
+ | Traceability | Each answer includes source references with chunk ID and page number, plus structured logging |
189
  | Provider abstraction | Factory pattern that allows swapping between Ollama, OpenAI, Azure OpenAI, Anthropic and Google GenAI without touching business code |
190
  | Deployment | Docker Compose for local setup, Hugging Face Spaces for the public demo |
191
 
 
199
 
200
  The system can run in two different modes, switchable via the `AGENT_MODE` environment variable.
201
 
202
+ **Pipeline** (`AGENT_MODE=pipeline`) is a fixed LangGraph DAG that runs language detection, optional translation, hybrid retrieval, reranking, generation, and a confidence-based retry loop. It works well with small local models that don't support tool calling.
203
 
204
+ **Plan-and-Execute agent** (`AGENT_MODE=react`, default) is multi-step: a planner first decomposes the query into sub-tasks, an executor runs each sub-task through a ReAct sub-agent with access to the tools listed below, and a synthesizer combines the results into a single cited answer. It uses conversation memory for follow-up questions and requires a model that supports tool calling.
205
 
206
  | Tool | Purpose |
207
  |---|---|
 
214
 
215
  ### Production considerations
216
 
217
+ Every answer points back to the chunks it was built on, with document ID, page number and the chunk text itself, so answers can be checked after the fact. The RAGAS evaluation in `src/evaluation/` measures faithfulness and context precision, which lets you catch regressions before a change goes live.
218
+
219
+ Configuration lives in environment variables via `src/config.py`; there are no hardcoded paths, model names or API keys. The application code never imports a provider SDK directly — LLM and embedding backends are loaded through `create_llm()` and `create_embeddings()`, so you can switch between Ollama, OpenAI and others without touching the rest of the code. The default setup runs locally without any external API calls.
 
 
 
220
 
221
  ### Tech stack
222
 
 
243
 
244
  The demo lives at [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
245
 
246
+ Try these questions, or ask one of your own in any language.
247
 
248
  - "Hvad er KU's politik for brug af AI-værktøjer?"
249
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
README.md CHANGED
@@ -10,14 +10,14 @@ noindex: true
10
 
11
  # Dokumentassistent
12
 
13
- ## Live demo
14
  Hosted on Hugging Face Spaces: [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space)
15
 
16
  [Skip to English ↓](#english)
17
 
18
  ## Dansk
19
 
20
- En produktionsklar RAG-applikation, der gør det muligt at stille spørgsmål til dokumenter på et hvilket som helst sprog og få svar med kildehenvisninger. Systemet er bygget på open source-komponenter (LangChain, LangGraph, Qdrant, Ollama) og kan køre helt lokalt uden eksterne API-kald. Det implementerer hybrid søgning med reranking, en Plan-and-Execute agent med samtalehukommelse, og RAGAS-baseret evaluering af svarkvaliteten.
21
 
22
  ### Funktioner
23
 
@@ -42,9 +42,9 @@ Når en bruger stiller et spørgsmål, kører systemet både den semantiske og d
42
 
43
  Systemet kan køre i to forskellige tilstande, der vælges via miljøvariablen `AGENT_MODE`.
44
 
45
- **Pipeline** (`AGENT_MODE=pipeline`) bygger en fast LangGraph-graf med sprogdetektion, valgfri oversættelse, hybrid søgning, reranking og generering. Tilstanden har en confidence-baseret retry-loop og fungerer fint med lette lokale modeller.
46
 
47
- **Plan-and-Execute Agent** (`AGENT_MODE=react`, standard) er en flertrinsagent, hvor en planner først nedbryder spørgsmålet i delopgaver, en executor kører hver delopgave gennem en ReAct-subagent med adgang til et sæt værktøjer, og en synthesizer producerer det endelige svar med kildehenvisninger. Tilstanden indeholder samtalehukommelse til opfølgende spørgsmål og kræver en model, der understøtter tool calling.
48
 
49
  | Værktøj | Formål |
50
  |---|---|
@@ -57,12 +57,9 @@ Systemet kan køre i to forskellige tilstande, der vælges via miljøvariablen `
57
 
58
  ### Produktionshensyn
59
 
60
- - **Sporbarhed.** Hvert genereret svar har kildehenvisninger chunk-niveau med dokument-ID, sidenummer og tekststykke, så det kan revideres bagudrettet.
61
- - **Governance.** RAGAS-evalueringspipelinen i `src/evaluation/` gør det muligt at måle faithfulness og context precision, før ændringer slippes løs i produktion.
62
- - **Konfigurerbarhed.** Ingen hardkodede stier, modelnavne eller API-nøgler. Alt styres via miljøvariabler gennem `src/config.py`.
63
- - **Provider-neutralitet.** Forretningskoden importerer aldrig en provider-SDK direkte. LLM- og embedding-backends skiftes via factory-funktionerne `create_llm()` og `create_embeddings()`, hvilket undgår vendor lock-in.
64
- - **Lokal som standard.** Standardkonfigurationen kører helt uden eksterne API-kald og passer til miljøer med strenge krav til datahjemsted.
65
- - **Pakket i containere.** Docker Compose til lokal kørsel og Hugging Face Spaces til den offentlige demo.
66
 
67
  ### Teknologivalg
68
 
@@ -89,13 +86,13 @@ Se `.env.example` for konfiguration pr. provider.
89
 
90
  Demoen ligger på [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
91
 
92
- Prøv for eksempel disse spørgsmål på et hvilket som helst sprog.
93
 
94
  - "Hvad er KU's politik for brug af AI-værktøjer?"
95
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
96
  - "Sammenlign reglerne for AI-brug i forskning og undervisning."
97
 
98
- Det sidste spørgsmål udløser Plan-and-Execute-agenten, så man kan se den nedbryde spørgsmålet i delopgaver i realtid.
99
 
100
  ### Kom i gang
101
 
@@ -187,7 +184,7 @@ docs/ # eksempel-PDF'er eller tekster (KU AI-dokumenter)
187
 
188
  ## English
189
 
190
- A production-ready RAG application that lets users ask questions about Danish documents in any language and receive answers with source citations. The system is built on open source components (LangChain, LangGraph, Qdrant, Ollama) and can run fully local without any external API calls. It implements hybrid search with reranking, a Plan-and-Execute agent with conversation memory, and RAGAS-based evaluation of answer quality.
191
 
192
  ### Capabilities
193
 
@@ -198,7 +195,7 @@ A production-ready RAG application that lets users ask questions about Danish do
198
  | Reranking | Cross-encoder `mmarco-mMiniLMv2-L12-H384-v1` |
199
  | Agent flows | Plan-and-Execute with six tools, ReAct sub-agent and conversation memory |
200
  | Evaluation | RAGAS metrics (faithfulness, answer relevancy, context precision) |
201
- | Traceability | Each answer carries source references with chunk ID and page number, plus structured logging |
202
  | Provider abstraction | Factory pattern that allows swapping between Ollama, OpenAI, Azure OpenAI, Anthropic and Google GenAI without touching business code |
203
  | Deployment | Docker Compose for local setup, Hugging Face Spaces for the public demo |
204
 
@@ -212,9 +209,9 @@ At query time, both indexes are searched and the results merged with reciprocal
212
 
213
  The system can run in two different modes, switchable via the `AGENT_MODE` environment variable.
214
 
215
- **Pipeline** (`AGENT_MODE=pipeline`) is built on a fixed LangGraph graph with language detection, optional translation, hybrid retrieval, reranking, and generation. The mode has a confidence-based retry loop and works well with lightweight local models.
216
 
217
- **Plan-and-Execute Agent** (`AGENT_MODE=react`, default) is a multi-step agent where a planner first decomposes the query into sub-tasks, an executor runs each sub-task through a ReAct sub-agent with access to a set of tools, and a synthesizer produces the final answer with citations. The mode includes conversation memory for follow-up questions and requires a model that supports tool calling.
218
 
219
  | Tool | Purpose |
220
  |---|---|
@@ -227,12 +224,9 @@ The system can run in two different modes, switchable via the `AGENT_MODE` envir
227
 
228
  ### Production considerations
229
 
230
- - **Traceability.** Every generated answer carries chunk-level source references with document ID, page number and span, so it can be audited and reviewed afterwards.
231
- - **Governance.** The RAGAS evaluation pipeline in `src/evaluation/` lets you measure faithfulness and context precision before promoting changes to production.
232
- - **Configurability.** No hardcoded paths, model names or API keys. Everything is controlled via environment variables through `src/config.py`.
233
- - **Provider neutrality.** Business code never imports a provider SDK directly. LLM and embedding backends swap via the `create_llm()` and `create_embeddings()` factory functions, which avoids vendor lock-in.
234
- - **Local-first.** The default configuration runs entirely without external API calls and fits environments with strict data residency requirements.
235
- - **Containerized.** Docker Compose for local runs and Hugging Face Spaces for the public demo.
236
 
237
  ### Tech stack
238
 
@@ -259,7 +253,7 @@ See `.env.example` for per-provider configuration.
259
 
260
  The demo lives at [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
261
 
262
- Try asking these questions, or in your language.
263
 
264
  - "Hvad er KU's politik for brug af AI-værktøjer?"
265
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
 
10
 
11
  # Dokumentassistent
12
 
13
+ ## Live demo
14
  Hosted on Hugging Face Spaces: [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space)
15
 
16
  [Skip to English ↓](#english)
17
 
18
  ## Dansk
19
 
20
+ En RAG-applikation, der lader brugeren stille spørgsmål til dokumenter på et hvilket som helst sprog og få svar med kildehenvisninger. Systemet er bygget på open source-komponenter (LangChain, LangGraph, Qdrant, Ollama) og kan køre lokalt uden API-nøgler. Det bruger hybrid søgning med reranking, en Plan-and-Execute-agent med samtalehukommelse, og RAGAS-baseret evaluering af svarkvaliteten.
21
 
22
  ### Funktioner
23
 
 
42
 
43
  Systemet kan køre i to forskellige tilstande, der vælges via miljøvariablen `AGENT_MODE`.
44
 
45
+ **Pipeline** (`AGENT_MODE=pipeline`) er en fast LangGraph-DAG, der kører sprogdetektion, valgfri oversættelse, hybrid søgning, reranking, generering, plus en confidence-baseret retry-loop. Den fungerer fint med små lokale modeller, der ikke understøtter tool calling.
46
 
47
+ **Plan-and-Execute-agent** (`AGENT_MODE=react`, standard) er flertrinet: en planner nedbryder først spørgsmålet i delopgaver, en executor kører hver delopgave gennem en ReAct-subagent med adgang til værktøjerne nedenfor, og en synthesizer samler resultaterne til ét svar med kildehenvisninger. Den bruger samtalehukommelse til opfølgende spørgsmål og kræver en model, der understøtter tool calling.
48
 
49
  | Værktøj | Formål |
50
  |---|---|
 
57
 
58
  ### Produktionshensyn
59
 
60
+ Hvert svar henviser tilbage til de tekststykker, det bygger på, med dokument-ID, sidenummer og selve teksten, så svarene kan kontrolleres bagefter. RAGAS-evalueringen i `src/evaluation/` måler faithfulness og context precision, så man kan opdage forringelser, før en ændring går i drift.
61
+
62
+ Konfigurationen ligger i miljøvariabler via `src/config.py`; der er ingen hardkodede stier, modelnavne eller API-nøgler. Koden importerer aldrig en provider-SDK direkte — LLM- og embedding-backends hentes gennem `create_llm()` og `create_embeddings()`, så man kan skifte mellem Ollama, OpenAI og andre uden at røre den øvrige kode. Standardopsætningen kører lokalt uden eksterne API-kald.
 
 
 
63
 
64
  ### Teknologivalg
65
 
 
86
 
87
  Demoen ligger på [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
88
 
89
+ Prøv disse spørgsmål — eller dine egne — på et hvilket som helst sprog.
90
 
91
  - "Hvad er KU's politik for brug af AI-værktøjer?"
92
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"
93
  - "Sammenlign reglerne for AI-brug i forskning og undervisning."
94
 
95
+ Det tredje spørgsmål udløser Plan-and-Execute-agenten, så man kan se den nedbryde spørgsmålet i delopgaver i realtid.
96
 
97
  ### Kom i gang
98
 
 
184
 
185
  ## English
186
 
187
+ A RAG application that lets users ask questions about documents in any language and get answers with source citations. The system is built on open source components (LangChain, LangGraph, Qdrant, Ollama) and can run locally without API keys. It uses hybrid search with reranking, a Plan-and-Execute agent with conversation memory, and RAGAS-based evaluation of answer quality.
188
 
189
  ### Capabilities
190
 
 
195
  | Reranking | Cross-encoder `mmarco-mMiniLMv2-L12-H384-v1` |
196
  | Agent flows | Plan-and-Execute with six tools, ReAct sub-agent and conversation memory |
197
  | Evaluation | RAGAS metrics (faithfulness, answer relevancy, context precision) |
198
+ | Traceability | Each answer includes source references with chunk ID and page number, plus structured logging |
199
  | Provider abstraction | Factory pattern that allows swapping between Ollama, OpenAI, Azure OpenAI, Anthropic and Google GenAI without touching business code |
200
  | Deployment | Docker Compose for local setup, Hugging Face Spaces for the public demo |
201
 
 
209
 
210
  The system can run in two different modes, switchable via the `AGENT_MODE` environment variable.
211
 
212
+ **Pipeline** (`AGENT_MODE=pipeline`) is a fixed LangGraph DAG that runs language detection, optional translation, hybrid retrieval, reranking, generation, and a confidence-based retry loop. It works well with small local models that don't support tool calling.
213
 
214
+ **Plan-and-Execute agent** (`AGENT_MODE=react`, default) is multi-step: a planner first decomposes the query into sub-tasks, an executor runs each sub-task through a ReAct sub-agent with access to the tools listed below, and a synthesizer combines the results into a single cited answer. It uses conversation memory for follow-up questions and requires a model that supports tool calling.
215
 
216
  | Tool | Purpose |
217
  |---|---|
 
224
 
225
  ### Production considerations
226
 
227
+ Every answer points back to the chunks it was built on, with document ID, page number and the chunk text itself, so answers can be checked after the fact. The RAGAS evaluation in `src/evaluation/` measures faithfulness and context precision, which lets you catch regressions before a change goes live.
228
+
229
+ Configuration lives in environment variables via `src/config.py`; there are no hardcoded paths, model names or API keys. The application code never imports a provider SDK directly — LLM and embedding backends are loaded through `create_llm()` and `create_embeddings()`, so you can switch between Ollama, OpenAI and others without touching the rest of the code. The default setup runs locally without any external API calls.
 
 
 
230
 
231
  ### Tech stack
232
 
 
253
 
254
  The demo lives at [xq-dokumentassistent.hf.space](https://xq-dokumentassistent.hf.space).
255
 
256
+ Try these questions, or ask one of your own in any language.
257
 
258
  - "Hvad er KU's politik for brug af AI-værktøjer?"
259
  - "Hvilke regler gælder for brug af generativ AI i eksamen?"