Skip to content

Commit ddbc031

Browse files
authored
[ Feature ] Make calling collection creation with a webhook optional (#183)
* Callback semantics based on callback URL specification * Make payload key the collection ID
1 parent fe4e92f commit ddbc031

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

backend/app/api/routes/collections.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import logging
33
import warnings
44
from uuid import UUID, uuid4
5-
from typing import Any, List
5+
from typing import Any, List, Optional
66
from dataclasses import dataclass, field, fields, asdict, replace
77

88
from openai import OpenAI, OpenAIError
@@ -67,7 +67,7 @@ class AssistantOptions(BaseModel):
6767

6868

6969
class CallbackRequest(BaseModel):
70-
callback_url: HttpUrl
70+
callback_url: Optional[HttpUrl] = None
7171

7272

7373
class CreationRequest(
@@ -86,9 +86,28 @@ class DeletionRequest(CallbackRequest):
8686

8787

8888
class CallbackHandler:
89+
def __init__(self, payload: ResponsePayload):
90+
self.payload = payload
91+
92+
def fail(self, body):
93+
raise NotImplementedError()
94+
95+
def success(self, body):
96+
raise NotImplementedError()
97+
98+
99+
class SilentCallback(CallbackHandler):
100+
def fail(self, body):
101+
return
102+
103+
def success(self, body):
104+
return
105+
106+
107+
class WebHookCallback(CallbackHandler):
89108
def __init__(self, url: HttpUrl, payload: ResponsePayload):
109+
super().__init__(payload)
90110
self.url = url
91-
self.payload = payload
92111

93112
def __call__(self, response: APIResponse, status: str):
94113
time = ResponsePayload.now()
@@ -125,7 +144,10 @@ def do_create_collection(
125144
payload: ResponsePayload,
126145
):
127146
client = OpenAI(api_key=settings.OPENAI_API_KEY)
128-
callback = CallbackHandler(request.callback_url, payload)
147+
if request.callback_url is None:
148+
callback = SilentCallback(payload)
149+
else:
150+
callback = WebHookCallback(request.callback_url, payload)
129151

130152
#
131153
# Create the assistant and vector store
@@ -160,6 +182,7 @@ def do_create_collection(
160182

161183
collection_crud = CollectionCrud(session, current_user.id)
162184
collection = Collection(
185+
id=UUID(payload.key),
163186
llm_service_id=assistant.id,
164187
llm_service_name=request.model,
165188
)

0 commit comments

Comments
 (0)