Spaces:
Sleeping
Sleeping
Sneha Dixit
commited on
Commit
•
5b90a2e
1
Parent(s):
283373b
[UPDATE] api
Browse files- auth.py +2 -1
- client.py +55 -15
- model.py +9 -0
- requirements.txt +2 -1
- server.py +9 -5
auth.py
CHANGED
@@ -2,9 +2,10 @@ from fastapi.security.api_key import APIKeyHeader
|
|
2 |
from fastapi import Security, HTTPException
|
3 |
import os
|
4 |
|
5 |
-
|
6 |
api_key_header = APIKeyHeader(name="x-api-key", auto_error=False)
|
7 |
|
8 |
async def api_key_auth(api_key: str = Security(api_key_header)):
|
|
|
9 |
if api_key not in API_Keys:
|
10 |
raise HTTPException(status_code=401, detail="Missing or invalid API key")
|
|
|
2 |
from fastapi import Security, HTTPException
|
3 |
import os
|
4 |
|
5 |
+
|
6 |
api_key_header = APIKeyHeader(name="x-api-key", auto_error=False)
|
7 |
|
8 |
async def api_key_auth(api_key: str = Security(api_key_header)):
|
9 |
+
API_Keys = [os.environ.get('API_KEY')]
|
10 |
if api_key not in API_Keys:
|
11 |
raise HTTPException(status_code=401, detail="Missing or invalid API key")
|
client.py
CHANGED
@@ -1,23 +1,63 @@
|
|
1 |
from openai import AzureOpenAI
|
2 |
import os
|
|
|
3 |
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
|
|
8 |
)
|
|
|
9 |
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
from openai import AzureOpenAI
|
2 |
import os
|
3 |
+
import model
|
4 |
|
5 |
+
def create_client():
|
6 |
+
print("In create client")
|
7 |
+
client = AzureOpenAI(
|
8 |
+
api_key=os.environ.get('OPENAI_API_KEY'),
|
9 |
+
api_version=os.environ.get('MODEL_VERSION'),
|
10 |
+
azure_endpoint = os.environ.get('END_POINT')
|
11 |
)
|
12 |
+
return client
|
13 |
|
14 |
+
def get_completion(ticket:model.Ticket):
|
15 |
+
print("In get completion")
|
16 |
+
client = create_client()
|
17 |
+
prompt = create_prompt(ticket.subject, ticket.description)
|
18 |
+
response = client.completions.create(
|
19 |
+
model=os.environ.get('MODEL_NAME'),
|
20 |
+
prompt=prompt,
|
21 |
+
max_tokens=100,
|
22 |
+
n=1,
|
23 |
+
stop=None,
|
24 |
+
temperature=0.7
|
25 |
+
)
|
26 |
+
result = response.choices[0].text.strip()
|
27 |
+
print(result)
|
28 |
+
return result
|
29 |
|
30 |
+
def create_prompt(subject:str, desc:str):
|
31 |
+
print("In create Prompt")
|
32 |
+
# add booking data here
|
33 |
+
data = ""
|
34 |
+
prompt = '''
|
35 |
+
You are an AI Customer Service Agent for booking.com. Please use the below instructions to answer.
|
36 |
+
What is the intent of this request ```
|
37 |
+
Subject: {{subject}} Description: {{desc}}``` in 1 single word? Use these options for intent :
|
38 |
|
39 |
+
Complaint
|
40 |
+
Information Request
|
41 |
+
Service Request
|
42 |
+
Cancellation
|
43 |
+
Change
|
44 |
+
Refund Request
|
45 |
|
46 |
+
In the context of the previous request,
|
47 |
+
If the intent is Information Request, use the ``` Booking Details: {{data}}``` to provide information as part of resolution response.
|
48 |
+
otherwise Suggest a resolution response to address the customer query from the following actions list:
|
49 |
+
|
50 |
+
Issue Refund
|
51 |
+
Cancellation
|
52 |
+
Change in booking requested
|
53 |
+
|
54 |
+
Finally, Summarize the message: ```
|
55 |
+
Subject: {{subject}}Description:{{desc}}``` and generate a mail content for the customer about the whole conversation.
|
56 |
+
|
57 |
+
Give the final result like this:
|
58 |
+
intent= {your intent}
|
59 |
+
suggested_response= {your response}
|
60 |
+
summary= {your summary}
|
61 |
+
mail={generated_mail}
|
62 |
+
'''
|
63 |
+
return prompt
|
model.py
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel
|
2 |
+
|
3 |
+
class Ticket(BaseModel):
|
4 |
+
subject: str
|
5 |
+
description: str
|
6 |
+
|
7 |
+
class TicketResponse(BaseModel):
|
8 |
+
subject: str
|
9 |
+
description: str
|
requirements.txt
CHANGED
@@ -1,3 +1,4 @@
|
|
1 |
fastapi==0.99.1
|
2 |
uvicorn
|
3 |
-
openai
|
|
|
|
1 |
fastapi==0.99.1
|
2 |
uvicorn
|
3 |
+
openai
|
4 |
+
pydantic
|
server.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
from fastapi import FastAPI, Depends
|
2 |
import os
|
3 |
import auth
|
|
|
|
|
4 |
|
5 |
app = FastAPI()
|
6 |
|
@@ -8,9 +10,11 @@ app = FastAPI()
|
|
8 |
async def welcome():
|
9 |
return "Hello, Welcome to AI space!"
|
10 |
|
11 |
-
@app.get("/
|
12 |
async def generate(api_key = Depends(auth.api_key_auth)):
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
|
|
|
|
|
1 |
from fastapi import FastAPI, Depends
|
2 |
import os
|
3 |
import auth
|
4 |
+
import client
|
5 |
+
import model
|
6 |
|
7 |
app = FastAPI()
|
8 |
|
|
|
10 |
async def welcome():
|
11 |
return "Hello, Welcome to AI space!"
|
12 |
|
13 |
+
@app.get("/test")
|
14 |
async def generate(api_key = Depends(auth.api_key_auth)):
|
15 |
+
return "All good. You only get this message if you're authenticated"
|
16 |
+
|
17 |
+
@app.post("/generate")
|
18 |
+
async def generate(ticket: model.Ticket, api_key = Depends(auth.api_key_auth)):
|
19 |
+
response = client.get_completion(ticket)
|
20 |
+
return response
|