mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-04-08 03:48:14 +02:00
Sample API Script (#1079)
This commit is contained in:
parent
aa7c811a9a
commit
23bf6ad4c7
86
backend/scripts/api_inference_sample.py
Normal file
86
backend/scripts/api_inference_sample.py
Normal file
@ -0,0 +1,86 @@
|
||||
# This file is used to demonstrate how to use the backend APIs directly
|
||||
# In this case, the equivalent of asking a question in Danswer Chat in a new chat session
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
def create_new_chat_session(danswer_url: str, api_key: str | None) -> int:
|
||||
headers = {"Authorization": f"Bearer {api_key}"} if api_key else None
|
||||
session_endpoint = danswer_url + "/api/chat/create-chat-session"
|
||||
|
||||
response = requests.post(
|
||||
session_endpoint,
|
||||
headers=headers,
|
||||
json={"persona_id": 0}, # Global default Persona/Assistant ID
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
||||
new_session_id = response.json()["chat_session_id"]
|
||||
return new_session_id
|
||||
|
||||
|
||||
def process_question(danswer_url: str, question: str, api_key: str | None) -> None:
|
||||
message_endpoint = danswer_url + "/api/chat/send-message"
|
||||
|
||||
chat_session_id = create_new_chat_session(danswer_url, api_key)
|
||||
|
||||
headers = {"Authorization": f"Bearer {api_key}"} if api_key else None
|
||||
|
||||
data = {
|
||||
"message": question,
|
||||
"chat_session_id": chat_session_id,
|
||||
"parent_message_id": None,
|
||||
# Default Question Answer prompt
|
||||
"prompt_id": 0,
|
||||
# Not specifying any specific docs to chat to, we want to run a search
|
||||
"search_doc_ids": None,
|
||||
"retrieval_options": {
|
||||
"run_search": "always",
|
||||
"real_time": True,
|
||||
"enable_auto_detect_filters": False,
|
||||
# No filters applied, check all sources, document-sets, time ranges, etc.
|
||||
"filters": {},
|
||||
},
|
||||
}
|
||||
|
||||
with requests.post(message_endpoint, headers=headers, json=data) as response:
|
||||
response.raise_for_status()
|
||||
|
||||
for packet in response.iter_lines():
|
||||
response_text = json.loads(packet.decode())
|
||||
# Can also check "top_documents" to capture the streamed search results
|
||||
# that include the highest matching documents to the query
|
||||
# or check "message_id" to get the message_id used as parent_message_id
|
||||
# to create follow-up messages
|
||||
new_token = response_text.get("answer_piece")
|
||||
|
||||
if new_token:
|
||||
print(new_token, end="", flush=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Sample API Usage")
|
||||
parser.add_argument(
|
||||
"--danswer-url",
|
||||
type=str,
|
||||
default="http://localhost:80",
|
||||
help="Danswer URL, should point to Danswer nginx.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--test-question",
|
||||
type=str,
|
||||
default="What is Danswer?",
|
||||
help="Test question for new Chat Session.",
|
||||
)
|
||||
|
||||
# Not needed if Auth is disabled
|
||||
# Or for Danswer MIT API key must be replaced with session cookie
|
||||
api_key = os.environ.get("DANSWER_API_KEY")
|
||||
|
||||
args = parser.parse_args()
|
||||
process_question(
|
||||
danswer_url=args.danswer_url, question=args.test_question, api_key=api_key
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user