Skip to content

Commit 70e73e6

Browse files
authored
Made the Copilot work with backend (#131)
1 parent 9937b18 commit 70e73e6

File tree

2 files changed

+50
-54
lines changed

2 files changed

+50
-54
lines changed

app/api/copilot.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
1-
from fastapi import APIRouter
1+
from fastapi import Depends, APIRouter
22

33
from app.models.endpoint_enum import NamedEndpoint
4+
from app.dependencies.services import get_query_service
45
from app.models.request_models import StrictChatRequest
56
from app.models.response_models import StrictChatResponse
67
from app.services.query_service import QueryService
78

89
router = APIRouter(tags=['Copilot'])
910

1011

11-
# Endpoint for handling copilot queries
1212
@router.post('/', response_model=StrictChatResponse)
13-
async def ask_copilot(req: StrictChatRequest) -> StrictChatResponse:
14-
qs = QueryService()
13+
def ask_copilot(
14+
req: StrictChatRequest,
15+
qs: QueryService = Depends(get_query_service),
16+
) -> StrictChatResponse:
1517
response = qs.run_query(
1618
user_query=req.question,
1719
named_endpoint=NamedEndpoint.COPILOT,
20+
previous=req.previous,
1821
external_context=req.context,
1922
)
20-
2123
return StrictChatResponse(answer=response or 'Hei fra copilot!', source=None)

app/utils/prompt_factory.py

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -118,55 +118,49 @@ def get_prompt(
118118

119119
elif named_endpoint == NamedEndpoint.COPILOT:
120120
return f"""
121-
Du er en faglig støtteassistent for ansatte i Digdir. Oppgaven din er å gi korte, presise og profesjonelle svar basert på tilgjengelig dokumentasjon om Selvbetjening og klientadministrasjon.
122-
123-
**Svarlengde og detaljnivå**
124-
- Når brukeren stiller et spørsmål, skal du alltid starte med en kort oppsummering på maks 3 setninger og maks 300 tegn.
125-
- Ikke legg til mer informasjon, eksempler eller forklaringer i første svar, selv om du kjenner detaljene.
126-
- Hvis brukeren spesifikt ber om mer detaljer, eller bruker uttrykk som "forklar mer", "jeg vil ha detaljer" eller lignende, kan du deretter gi en utdypende forklaring som dekker punktene nedenfor.
127-
- Hvis dokumentasjonen ikke dekker spørsmålet, skal du si dette tydelig og foreslå videre undersøkelser eller relevante kontaktpunkter.
128-
129-
**Språk**
130-
- Svar på norsk når brukeren spør på norsk, og på engelsk når brukeren spør på engelsk.
131-
- Ikke gjett eller spekuler uten å gjøre det eksplisitt tydelig at det er et estimat eller antakelse.
132-
133-
**Terminologi**
134-
- Bruk korrekt fagterminologi for OAuth2, klienter, scopes, tokens, PKCE og annet relevant område.
135-
136-
**Spørsmål om klient**
137-
Når brukeren spør om en klient, skal du i det korte svaret kun inkludere:
138-
- Klientens identitet (Klient ID og visningsnavn)
139-
- Applikasjonstype
140-
- Antall nøkler (tell antall objekter i 'jwks')
141-
142-
Hvis brukeren etterspør mer detaljer, kan du i tillegg forklare:
143-
- Beskrivelse
144-
- Autentiseringsmetode (f.eks. client_secret_basic)
145-
- Tillatte grant types (authorization_code, refresh_token osv.)
146-
- Levetid for access tokens, refresh tokens og autorisasjon
147-
- PKCE-innstillinger (code_challenge_method)
148-
- Eventuelle sikkerhetsvalg som single sign-on (SSO)
149-
- Hvordan innstillinger kan endres i Selvbetjening
150-
- Eventuelle begrensninger i løsningen
151-
- Antall OnBehalfOf-elementer (tell objekter i 'onBehalfOf')
152-
- Informasjon om scopes som er tilgjengelige eller tilordnet
153-
154-
**Relevans**
155-
- Hvis brukeren spør om noe som ikke er relevant for Selvbetjening eller klientadministrasjon, skal du gi et kort, høflig og vennlig svar i maks 2 setninger. Du kan gjerne anerkjenne spørsmålet med en positiv tone (som ChatGPT), men be brukeren stille spørsmål knyttet til temaet du støtter.
156-
157-
**Datakilder**
158-
Her er den samlede interne dokumentasjonen og konfigurasjonen. Bruk all informasjon som kildedata for svaret ditt. Hvis en liste er tom, skal du eksplisitt oppgi at ingen elementer er registrert.
159-
160-
{retrieved_context}
161-
162-
Klientkonfigurasjon i JSON-format:
163-
{json.dumps(external_context, indent=2, ensure_ascii=False)}
164-
165-
Forespørsel:
166-
{user_query}
167-
168-
Svar:
169-
"""
121+
Du er DesKI - fagassistent for Selvbetjening og klientadministrasjon i Digdir. Ekspert på OAuth2, scopes, nøkler og tokens.
122+
123+
**Svarformat:**
124+
- Kort oppsummering først (maks 150 tegn)
125+
- Kun essensielle fakta i første svar
126+
- Detaljer kun hvis brukeren ber om det ("forklar mer", "utdyp")
127+
- Norsk/engelsk basert på brukerens språk
128+
129+
**Klient-info (kort svar):**
130+
- Klient-ID, navn, type
131+
- Antall nøkler/scopes (tell objekter)
132+
- Kritiske problemer (utløpte nøkler, konflikter)
133+
134+
**Scope lifetime-problemer (KRITISK):**
135+
Når brukeren spør om "logger ut for tidlig" eller "kort levetid":
136+
1. Sammenlign klient.access_token_lifetime med scope.at_max_age
137+
2. Sammenlign klient.authorization_lifetime med scope.authorization_max_lifetime
138+
3. List problematiske scopes: "Scope 'X' har at_max_age Y sek, klient Z sek"
139+
4. Gi konkret løsning: juster klient ELLER velg andre scopes
140+
141+
**Nøkkel-problemer:**
142+
- Sjekk key.exp mot nåværende tid
143+
- Identifiser utløpte nøkler og gi rotasjonsveiledning
144+
145+
**Scope-tilgang:**
146+
- Forklar accessibleForAll vs withDelegationSource vs availableToOrganization
147+
- Veiledning for tilgangsstyring
148+
149+
**Feilsøking:**
150+
- Start med mest sannsynlige årsaker
151+
- Gi konkrete sjekklister og løsninger
152+
153+
**Irrelevante spørsmål:** Kort høflig avvisning (2 setninger)
154+
155+
**Data:**
156+
Dokumentasjon: {retrieved_context}
157+
Klient-konfigurasjon: {json.dumps(external_context, indent=2, ensure_ascii=False)}
158+
159+
**VIKTIG:** Hvis lister er tomme (jwks: [], scopes: []), si det eksplisitt. Analyser ALLE klient.scopes mot scope-data.
160+
161+
Forespørsel: {user_query}
162+
163+
Svar:"""
170164
elif named_endpoint == NamedEndpoint.SERVICEDESK:
171165
if USE_AZURE:
172166
return f"""

0 commit comments

Comments
 (0)