Make server API endpoints accept client as query param

- The chat, search and update API will accept client as request param.
- This will allow logging the client from which these APIs was called.
This commit is contained in:
Debanjum Singh Solanky
2023-06-05 23:57:08 +05:30
parent 8617cf1389
commit 168c11cea7
2 changed files with 10 additions and 6 deletions

View File

@@ -70,6 +70,7 @@ def search(
r: Optional[bool] = False, r: Optional[bool] = False,
score_threshold: Optional[Union[float, None]] = None, score_threshold: Optional[Union[float, None]] = None,
dedupe: Optional[bool] = True, dedupe: Optional[bool] = True,
client: Optional[str] = None,
): ):
results: List[SearchResponse] = [] results: List[SearchResponse] = []
if q is None or q == "": if q is None or q == "":
@@ -181,14 +182,16 @@ def search(
# Only log telemetry if query is new and not a continuation of previous query # Only log telemetry if query is new and not a continuation of previous query
if state.previous_query is None or state.previous_query not in user_query: if state.previous_query is None or state.previous_query not in user_query:
state.telemetry += [log_telemetry(telemetry_type="api", api="search", app_config=state.config.app)] state.telemetry += [
log_telemetry(telemetry_type="api", api="search", client=client, app_config=state.config.app)
]
state.previous_query = user_query state.previous_query = user_query
return results return results
@api.get("/update") @api.get("/update")
def update(t: Optional[SearchType] = None, force: Optional[bool] = False): def update(t: Optional[SearchType] = None, force: Optional[bool] = False, client: Optional[str] = None):
try: try:
state.search_index_lock.acquire() state.search_index_lock.acquire()
state.model = configure_search(state.model, state.config, regenerate=force, t=t) state.model = configure_search(state.model, state.config, regenerate=force, t=t)
@@ -207,13 +210,13 @@ def update(t: Optional[SearchType] = None, force: Optional[bool] = False):
else: else:
logger.info("📬 Processor reconfigured via API") logger.info("📬 Processor reconfigured via API")
state.telemetry += [log_telemetry(telemetry_type="api", api="update", app_config=state.config.app)] state.telemetry += [log_telemetry(telemetry_type="api", api="update", client=client, app_config=state.config.app)]
return {"status": "ok", "message": "khoj reloaded"} return {"status": "ok", "message": "khoj reloaded"}
@api.get("/chat") @api.get("/chat")
def chat(q: Optional[str] = None): def chat(q: Optional[str] = None, client: Optional[str] = None):
if ( if (
state.processor_config is None state.processor_config is None
or state.processor_config.conversation is None or state.processor_config.conversation is None
@@ -277,6 +280,6 @@ def chat(q: Optional[str] = None):
conversation_log=meta_log.get("chat", []), conversation_log=meta_log.get("chat", []),
) )
state.telemetry += [log_telemetry(telemetry_type="api", api="chat", app_config=state.config.app)] state.telemetry += [log_telemetry(telemetry_type="api", api="chat", client=client, app_config=state.config.app)]
return {"status": status, "response": gpt_response, "context": compiled_references} return {"status": status, "response": gpt_response, "context": compiled_references}

View File

@@ -3,11 +3,11 @@ from __future__ import annotations # to avoid quoting type hints
from collections import OrderedDict from collections import OrderedDict
import datetime import datetime
from importlib import import_module from importlib import import_module
from importlib.metadata import version
import logging import logging
from os import path from os import path
from pathlib import Path from pathlib import Path
import platform import platform
import requests
import sys import sys
from time import perf_counter from time import perf_counter
import torch import torch
@@ -184,6 +184,7 @@ def log_telemetry(telemetry_type: str, api: str = None, client: str = None, app_
request_body = { request_body = {
"telemetry_type": telemetry_type, "telemetry_type": telemetry_type,
"server_id": get_server_id(), "server_id": get_server_id(),
"server_version": version("khoj-assistant"),
"os": platform.system(), "os": platform.system(),
"timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
} }