Skip to content

Commit 19e1fc9

Browse files
110 improving fine tuned models (#122)
1 parent 754a238 commit 19e1fc9

File tree

8 files changed

+94
-56
lines changed

8 files changed

+94
-56
lines changed
Binary file not shown.
0 Bytes
Binary file not shown.
Binary file not shown.
0 Bytes
Binary file not shown.

app/services/chroma_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def __init__(
7070
def get_db(self):
7171
return self.db
7272

73-
def search(self, query: str, limit: int = 10) -> Optional[dict]:
73+
def search(self, query: str, limit: int) -> Optional[dict]:
7474
"""
7575
Search the ChromaDB for documents similar to the query text.
7676

app/services/llm_service.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,23 +89,22 @@ def __init__(
8989
self.top_p = top_p
9090
self.named_endpoint = named_endpoint
9191

92-
if self.use_azure:
93-
self.azure_endpoint = azure_endpoint
94-
self.azure_api_key = os.getenv('AZURE_API_KEY')
95-
96-
retry_policy = RetryPolicy()
97-
retry_policy.total_retries = 3
98-
retry_policy.connect_retries = 2
99-
retry_policy.read_retries = 2
100-
retry_policy.status_retries = 2
101-
retry_policy.backoff_factor = 0.5
102-
103-
self.client = ChatCompletionsClient(
104-
endpoint=self.azure_endpoint,
105-
credential=AzureKeyCredential(self.azure_api_key),
106-
api_version='2024-05-01-preview',
107-
retry_policy=retry_policy,
108-
)
92+
self.azure_endpoint = azure_endpoint
93+
self.azure_api_key = os.getenv('AZURE_API_KEY')
94+
95+
retry_policy = RetryPolicy()
96+
retry_policy.total_retries = 3
97+
retry_policy.connect_retries = 2
98+
retry_policy.read_retries = 2
99+
retry_policy.status_retries = 2
100+
retry_policy.backoff_factor = 0.5
101+
102+
self.client = ChatCompletionsClient(
103+
endpoint=self.azure_endpoint,
104+
credential=AzureKeyCredential(self.azure_api_key),
105+
api_version='2024-05-01-preview',
106+
retry_policy=retry_policy,
107+
)
109108

110109
def generate_response(
111110
self,

app/services/query_service.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22
from typing import Any, Optional
33

4-
from app.config import SIMILARITY_THRESHOLD
4+
from app.config import USE_AZURE, SIMILARITY_THRESHOLD
55
from app.models.endpoint_enum import NamedEndpoint
66
from app.services.llm_service import LLMService
77
from app.services.chroma_service import ChromaService
@@ -71,7 +71,7 @@ def run_query(
7171
previous: Optional[list[str]] = None,
7272
external_context: Optional[dict[str, Any]] = None,
7373
logs: Optional[str] = None,
74-
limit: int = 7,
74+
limit: Optional[int] = None,
7575
) -> str:
7676
"""
7777
Runs a query against the ChromaDB, retrieves relevant document chunks and runs this query to an LLM.
@@ -88,6 +88,9 @@ def run_query(
8888

8989
# TODO: Add optional log-search-functionality
9090

91+
if limit is None:
92+
limit = 10 if USE_AZURE else 3
93+
9194
faq_str = ''
9295
try:
9396
retrieved_context = self._search_docs(
@@ -156,7 +159,7 @@ def _search_faq(
156159
def _search_docs(
157160
self,
158161
user_query: str,
159-
limit: int = 10,
162+
limit: int,
160163
endpoint: NamedEndpoint = NamedEndpoint.DEFAULT,
161164
):
162165
user_query = self.llm_service.clean_query(user_query)

app/utils/prompt_factory.py

Lines changed: 71 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def get_prompt(
4545
):
4646
if USE_AZURE:
4747
return f"""
48-
Du er en hjelpsom DigDir-assistent. Du svarer på spørsmål basert på denne dokumentasjonen, men dersom Digdir sin dokumentasjon er tom må du være hyggelig og si at du ikke vet.
48+
Du er en hjelpsom DigDir-assistent. Du svarer på spørsmål basert på denne dokumentasjonen, men dersom Digdir sin dokumentasjon er tom må du være hyggelig og si at du ikke vet.
4949
Svar på norsk om spørsmålet er på norsk, svar på engelsk om spørsmålet er på engelsk.
5050
Svar kort og tydelig, men med relevante detaljer fra kildene. Ikke gjett.
5151
Husk å ta høyde for den tidligere samtalen, og bruk det dersom det er relevant. Vær obs på at brukeren kan stille helt nye spørsmål som ikke er relatert til tidligere samtale.
@@ -69,16 +69,37 @@ def get_prompt(
6969

7070
else:
7171
return f"""
72-
You are a helpful Digdir assistant.
73-
Always reply in the same language as the user (Norwegian or English).
74-
If the answer is in the documentation → respond briefly and factually.
75-
If only partial info → respond and add:
76-
"For more details, contact brukerstotte@digdir.no."
77-
If no info exists → reply:
78-
"I can't help based on the available documentation. Please contact brukerstotte@digdir.no."
79-
If the question is vague → ask for clarification.
80-
If the user wants to talk to a human → say they can contact brukerstotte@digdir.no.
81-
Be polite, professional, and do not guess.
72+
73+
Du skal svare basert på dokumentasjonen og tidligere samtale og ikke noe annet. Etterlign det i Digdir-dokumentasjonen.
74+
Ikke gjett, spekuler eller finn på informasjon.
75+
76+
Svar på samme språk som dokumentasjonen. Bruk gjerne mange av de samme ordene
77+
78+
---
79+
80+
Retningslinjer:
81+
82+
1. Hvis dokumentasjonen tydelig svarer på spørsmålet:
83+
→ Svar kort, presist og faktabasert.
84+
85+
2. Hvis dokumentasjonen bare delvis dekker spørsmålet:
86+
→ Del det du vet, og legg til:
87+
"For mer informasjon, kontakt brukerstotte@digdir.no."
88+
89+
3. Hvis du ikke vet svaret:
90+
→ Svar:
91+
"Jeg kan ikke hjelpe basert på den dokumentasjonen jeg har. Kontakt servicedesk@digdir.no."
92+
93+
4. Hvis spørsmålet er uklart eller for generelt:
94+
→ Be brukeren utdype.
95+
96+
5. Hvis det er småprat (hei, takk o.l.):
97+
→ Svar kort og høflig.
98+
99+
---
100+
101+
Tone: profesjonell, hjelpsom og løsningsorientert.
102+
Svar alltid på grunnlag av dokumentasjonen. Aldri spekuler.
82103
83104
Digdir-dokumentasjon:
84105
{retrieved_context}
@@ -173,12 +194,9 @@ def get_prompt(
173194
174195
---
175196
176-
Tone: profesjonell, hjelpsom og løysingsorientert. Aldri spekuler. Bruk dokumentasjonen så langt den rekk.
177-
178-
Dersom spørsmålet er veldig kort og det er tydelig at det er avhengig av konteksten, bruk det som er gitt i `tidligere samtale` for å gi eit relevant svar.
179-
180-
Logger:
181-
{logs}
197+
Tone: profesjonell, hjelpsom og løysingsorientert. Aldri spekuler. Bruk dokumentasjonen så langt den rekk.
198+
199+
Dersom spørsmålet er veldig kort og det er tydelig at det er avhengig av konteksten, bruk det som er gitt i `tidligere samtale` for å gi eit relevant svar.
182200
183201
Tidligere samtale:
184202
{previous}
@@ -194,27 +212,45 @@ def get_prompt(
194212

195213
else:
196214
return f"""
197-
You are a helpful Digdir assistant.
198-
Always reply in the same language as the user (Norwegian or English).
199-
If the answer is in the documentation → respond briefly and factually.
200-
If only partial info → respond and add:
201-
"For more details, contact servicedesk@digdir.no."
202-
If no info exists → reply:
203-
"I can't help based on the available documentation. Please contact servicedesk@digdir.no."
204-
If the question is vague → ask for clarification.
205-
If the user wants to talk to a human → say they can contact servicedesk@digdir.no.
206-
Be polite, professional, and do not guess.
215+
Du er en hjelpsom assistent for Digdir (Digitaliseringsdirektoratet).
216+
Du skal kun svare basert på dokumentasjonen og tidligere samtale – ikke gjett, spekuler eller finn på informasjon.
207217
208-
Digdir-dokumentasjon:
209-
{retrieved_context}
210-
211-
Lignende tidligere spørsmål og svar:
212-
{faq_str}
218+
Svar på samme språk som dokumentasjonen. Bruk gjerne mange av de samme ordene
219+
220+
---
221+
222+
Retningslinjer:
223+
224+
1. Hvis dokumentasjonen tydelig svarer på spørsmålet:
225+
→ Svar kort, presist og faktabasert.
226+
227+
2. Hvis dokumentasjonen bare delvis dekker spørsmålet:
228+
→ Del det du vet, og legg til:
229+
"For mer informasjon, kontakt servicedesk@digdir.no."
230+
231+
3. Hvis du ikke vet svaret:
232+
→ Svar:
233+
"Jeg kan ikke hjelpe basert på den dokumentasjonen jeg har. Kontakt servicedesk@digdir.no."
234+
235+
4. Hvis spørsmålet er uklart eller for generelt:
236+
→ Be brukeren utdype.
237+
238+
5. Hvis det er småprat (hei, takk o.l.):
239+
→ Svar kort og høflig.
240+
241+
---
242+
243+
Tone: profesjonell, hjelpsom og løsningsorientert.
244+
Svar alltid på grunnlag av dokumentasjonen. Aldri spekuler.
213245
214-
Tidligere samtale:
215-
{previous}
216246
217-
Spørsmål:
247+
Tidlegare samtale:
248+
{previous}
249+
250+
Relevant dokumentasjon:
251+
{retrieved_context}
252+
253+
Spørsmål frå brukaren:
218254
{user_query}
219255
220256
Svar:

0 commit comments

Comments
 (0)