mirror of
https://github.com/tiennm99/DocsGPT.git
synced 2026-10-16 12:14:44 +00:00
Merge branch 'main' of https://github.com/arc53/DocsGPT
This commit is contained in:
commit
3e77e79194
7 files changed
+109
-74
No files matched your search
@@ -3,7 +3,6 @@ import datetime
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from bson.dbref import DBRef
|
from bson.dbref import DBRef
|
||||||
@@ -263,13 +262,12 @@ def complete_stream(
|
|||||||
data = json.dumps({"type": "end"})
|
data = json.dumps({"type": "end"})
|
||||||
yield f"data: {data}\n\n"
|
yield f"data: {data}\n\n"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("\033[91merr", str(e), file=sys.stderr)
|
logger.error(f"Error in stream: {str(e)}")
|
||||||
traceback.print_exc()
|
logger.error(traceback.format_exc())
|
||||||
data = json.dumps(
|
data = json.dumps(
|
||||||
{
|
{
|
||||||
"type": "error",
|
"type": "error",
|
||||||
"error": "Please try again later. We apologize for any inconvenience.",
|
"error": "Please try again later. We apologize for any inconvenience.",
|
||||||
"error_exception": str(e),
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
yield f"data: {data}\n\n"
|
yield f"data: {data}\n\n"
|
||||||
@@ -384,7 +382,7 @@ class Stream(Resource):
|
|||||||
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
message = "Malformed request body"
|
message = "Malformed request body"
|
||||||
print("\033[91merr", str(message), file=sys.stderr)
|
current_app.logger.error(f"/stream - error: {message}")
|
||||||
return Response(
|
return Response(
|
||||||
error_stream_generate(message),
|
error_stream_generate(message),
|
||||||
status=400,
|
status=400,
|
||||||
@@ -395,13 +393,9 @@ class Stream(Resource):
|
|||||||
f"/stream - error: {str(e)} - traceback: {traceback.format_exc()}",
|
f"/stream - error: {str(e)} - traceback: {traceback.format_exc()}",
|
||||||
extra={"error": str(e), "traceback": traceback.format_exc()},
|
extra={"error": str(e), "traceback": traceback.format_exc()},
|
||||||
)
|
)
|
||||||
message = e.args[0]
|
|
||||||
status_code = 400
|
status_code = 400
|
||||||
# Custom exceptions with two arguments, index 1 as status code
|
|
||||||
if len(e.args) >= 2:
|
|
||||||
status_code = e.args[1]
|
|
||||||
return Response(
|
return Response(
|
||||||
error_stream_generate(message),
|
error_stream_generate('Unknown error occurred'),
|
||||||
status=status_code,
|
status=status_code,
|
||||||
mimetype="text/event-stream",
|
mimetype="text/event-stream",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import json
|
|||||||
from bson.binary import Binary, UuidRepresentation
|
from bson.binary import Binary, UuidRepresentation
|
||||||
from bson.dbref import DBRef
|
from bson.dbref import DBRef
|
||||||
from bson.objectid import ObjectId
|
from bson.objectid import ObjectId
|
||||||
from flask import Blueprint, jsonify, make_response, redirect, request
|
from flask import Blueprint, current_app, jsonify, make_response, redirect, request
|
||||||
from flask_restx import fields, inputs, Namespace, Resource
|
from flask_restx import fields, inputs, Namespace, Resource
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
@@ -83,7 +83,8 @@ class DeleteConversation(Resource):
|
|||||||
try:
|
try:
|
||||||
conversations_collection.delete_one({"_id": ObjectId(conversation_id)})
|
conversations_collection.delete_one({"_id": ObjectId(conversation_id)})
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error deleting conversation: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -97,7 +98,8 @@ class DeleteAllConversations(Resource):
|
|||||||
try:
|
try:
|
||||||
conversations_collection.delete_many({"user": user_id})
|
conversations_collection.delete_many({"user": user_id})
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error deleting all conversations: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -114,7 +116,8 @@ class GetConversations(Resource):
|
|||||||
for conversation in conversations
|
for conversation in conversations
|
||||||
]
|
]
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving conversations: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
return make_response(jsonify(list_conversations), 200)
|
return make_response(jsonify(list_conversations), 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -138,7 +141,8 @@ class GetSingleConversation(Resource):
|
|||||||
if not conversation:
|
if not conversation:
|
||||||
return make_response(jsonify({"status": "not found"}), 404)
|
return make_response(jsonify({"status": "not found"}), 404)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving conversation: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
return make_response(jsonify(conversation["queries"]), 200)
|
return make_response(jsonify(conversation["queries"]), 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -170,7 +174,8 @@ class UpdateConversationName(Resource):
|
|||||||
{"_id": ObjectId(data["id"])}, {"$set": {"name": data["name"]}}
|
{"_id": ObjectId(data["id"])}, {"$set": {"name": data["name"]}}
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating conversation name: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -221,7 +226,8 @@ class SubmitFeedback(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error submitting feedback: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -244,7 +250,8 @@ class DeleteByIds(Resource):
|
|||||||
if result:
|
if result:
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error deleting indexes: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": False}), 400)
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
@@ -277,7 +284,8 @@ class DeleteOldIndexes(Resource):
|
|||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error deleting old indexes: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
sources_collection.delete_one({"_id": ObjectId(source_id)})
|
sources_collection.delete_one({"_id": ObjectId(source_id)})
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
@@ -389,8 +397,8 @@ class UploadFile(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print(f"Error: {err}")
|
current_app.logger.error(f"Error uploading file: {err}")
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
return make_response(jsonify({"success": False}), 400)
|
||||||
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
|
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -439,7 +447,8 @@ class UploadRemote(Resource):
|
|||||||
loader=data["source"]
|
loader=data["source"]
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error uploading remote source: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
|
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
|
||||||
|
|
||||||
@@ -471,7 +480,8 @@ class TaskStatus(Resource):
|
|||||||
):
|
):
|
||||||
task_meta = str(task_meta) # Convert to a string representation
|
task_meta = str(task_meta) # Convert to a string representation
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting task status: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"status": task.status, "result": task_meta}), 200)
|
return make_response(jsonify({"status": task.status, "result": task_meta}), 200)
|
||||||
|
|
||||||
@@ -546,7 +556,8 @@ class PaginatedSources(Resource):
|
|||||||
return make_response(jsonify(response), 200)
|
return make_response(jsonify(response), 200)
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving paginated sources: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
|
|
||||||
@user_ns.route("/api/sources")
|
@user_ns.route("/api/sources")
|
||||||
@@ -606,7 +617,8 @@ class CombinedJson(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving sources: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify(data), 200)
|
return make_response(jsonify(data), 200)
|
||||||
|
|
||||||
@@ -632,7 +644,8 @@ class CheckDocs(Resource):
|
|||||||
if os.path.exists(vectorstore) or data["docs"] == "default":
|
if os.path.exists(vectorstore) or data["docs"] == "default":
|
||||||
return {"status": "exists"}, 200
|
return {"status": "exists"}, 200
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error checking document: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"status": "not found"}), 404)
|
return make_response(jsonify({"status": "not found"}), 404)
|
||||||
|
|
||||||
@@ -670,7 +683,8 @@ class CreatePrompt(Resource):
|
|||||||
)
|
)
|
||||||
new_id = str(resp.inserted_id)
|
new_id = str(resp.inserted_id)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error creating prompt: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"id": new_id}), 200)
|
return make_response(jsonify({"id": new_id}), 200)
|
||||||
|
|
||||||
@@ -697,7 +711,8 @@ class GetPrompts(Resource):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving prompts: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify(list_prompts), 200)
|
return make_response(jsonify(list_prompts), 200)
|
||||||
|
|
||||||
@@ -738,7 +753,8 @@ class GetSinglePrompt(Resource):
|
|||||||
|
|
||||||
prompt = prompts_collection.find_one({"_id": ObjectId(prompt_id)})
|
prompt = prompts_collection.find_one({"_id": ObjectId(prompt_id)})
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving prompt: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"content": prompt["content"]}), 200)
|
return make_response(jsonify({"content": prompt["content"]}), 200)
|
||||||
|
|
||||||
@@ -762,7 +778,8 @@ class DeletePrompt(Resource):
|
|||||||
try:
|
try:
|
||||||
prompts_collection.delete_one({"_id": ObjectId(data["id"])})
|
prompts_collection.delete_one({"_id": ObjectId(data["id"])})
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error deleting prompt: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -795,7 +812,8 @@ class UpdatePrompt(Resource):
|
|||||||
{"$set": {"name": data["name"], "content": data["content"]}},
|
{"$set": {"name": data["name"], "content": data["content"]}},
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating prompt: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -830,7 +848,8 @@ class GetApiKeys(Resource):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error retrieving API keys: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
return make_response(jsonify(list_keys), 200)
|
return make_response(jsonify(list_keys), 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -874,7 +893,8 @@ class CreateApiKey(Resource):
|
|||||||
resp = api_key_collection.insert_one(new_api_key)
|
resp = api_key_collection.insert_one(new_api_key)
|
||||||
new_id = str(resp.inserted_id)
|
new_id = str(resp.inserted_id)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error creating API key: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"id": new_id, "key": key}), 201)
|
return make_response(jsonify({"id": new_id, "key": key}), 201)
|
||||||
|
|
||||||
@@ -900,7 +920,8 @@ class DeleteApiKey(Resource):
|
|||||||
if result.deleted_count == 0:
|
if result.deleted_count == 0:
|
||||||
return {"success": False, "message": "API Key not found"}, 404
|
return {"success": False, "message": "API Key not found"}, 404
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return {"success": False, "error": str(err)}, 400
|
current_app.logger.error(f"Error deleting API key: {err}")
|
||||||
|
return {"success": False}, 400
|
||||||
|
|
||||||
return {"success": True}, 200
|
return {"success": True}, 200
|
||||||
|
|
||||||
@@ -1100,7 +1121,8 @@ class ShareConversation(Resource):
|
|||||||
201,
|
201,
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error sharing conversation: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
|
|
||||||
@user_ns.route("/api/shared_conversation/<string:identifier>")
|
@user_ns.route("/api/shared_conversation/<string:identifier>")
|
||||||
@@ -1155,7 +1177,8 @@ class GetPubliclySharedConversations(Resource):
|
|||||||
res["api_key"] = shared["api_key"]
|
res["api_key"] = shared["api_key"]
|
||||||
return make_response(jsonify(res), 200)
|
return make_response(jsonify(res), 200)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting shared conversation: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
|
|
||||||
@user_ns.route("/api/get_message_analytics")
|
@user_ns.route("/api/get_message_analytics")
|
||||||
@@ -1196,7 +1219,8 @@ class GetMessageAnalytics(Resource):
|
|||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting API key: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
end_date = datetime.datetime.now(datetime.timezone.utc)
|
end_date = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
|
||||||
if filter_option == "last_hour":
|
if filter_option == "last_hour":
|
||||||
@@ -1289,7 +1313,8 @@ class GetMessageAnalytics(Resource):
|
|||||||
daily_messages[entry["_id"]["day"]] = entry["total_messages"]
|
daily_messages[entry["_id"]["day"]] = entry["total_messages"]
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting message analytics: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(
|
return make_response(
|
||||||
jsonify({"success": True, "messages": daily_messages}), 200
|
jsonify({"success": True, "messages": daily_messages}), 200
|
||||||
@@ -1331,7 +1356,8 @@ class GetTokenAnalytics(Resource):
|
|||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting API key: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
end_date = datetime.datetime.now(datetime.timezone.utc)
|
end_date = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
|
||||||
if filter_option == "last_hour":
|
if filter_option == "last_hour":
|
||||||
@@ -1440,7 +1466,8 @@ class GetTokenAnalytics(Resource):
|
|||||||
daily_token_usage[entry["_id"]["day"]] = entry["total_tokens"]
|
daily_token_usage[entry["_id"]["day"]] = entry["total_tokens"]
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting token analytics: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(
|
return make_response(
|
||||||
jsonify({"success": True, "token_usage": daily_token_usage}), 200
|
jsonify({"success": True, "token_usage": daily_token_usage}), 200
|
||||||
@@ -1482,7 +1509,8 @@ class GetFeedbackAnalytics(Resource):
|
|||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting API key: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
end_date = datetime.datetime.now(datetime.timezone.utc)
|
end_date = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
|
||||||
@@ -1583,7 +1611,8 @@ class GetFeedbackAnalytics(Resource):
|
|||||||
}
|
}
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting feedback analytics: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(
|
return make_response(
|
||||||
jsonify({"success": True, "feedback": daily_feedback}), 200
|
jsonify({"success": True, "feedback": daily_feedback}), 200
|
||||||
@@ -1625,7 +1654,8 @@ class GetUserLogs(Resource):
|
|||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting API key: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
query = {}
|
query = {}
|
||||||
if api_key:
|
if api_key:
|
||||||
@@ -1709,7 +1739,8 @@ class ManageSync(Resource):
|
|||||||
update_data,
|
update_data,
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating sync frequency: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -1744,7 +1775,8 @@ class TextToSpeech(Resource):
|
|||||||
200,
|
200,
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error synthesizing audio: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
|
|
||||||
@user_ns.route("/api/available_tools")
|
@user_ns.route("/api/available_tools")
|
||||||
@@ -1768,7 +1800,8 @@ class AvailableTools(Resource):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting available tools: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True, "data": tools_metadata}), 200)
|
return make_response(jsonify({"success": True, "data": tools_metadata}), 200)
|
||||||
|
|
||||||
@@ -1786,7 +1819,8 @@ class GetTools(Resource):
|
|||||||
tool.pop("_id")
|
tool.pop("_id")
|
||||||
user_tools.append(tool)
|
user_tools.append(tool)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error getting user tools: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True, "tools": user_tools}), 200)
|
return make_response(jsonify({"success": True, "tools": user_tools}), 200)
|
||||||
|
|
||||||
@@ -1858,7 +1892,8 @@ class CreateTool(Resource):
|
|||||||
resp = user_tools_collection.insert_one(new_tool)
|
resp = user_tools_collection.insert_one(new_tool)
|
||||||
new_id = str(resp.inserted_id)
|
new_id = str(resp.inserted_id)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error creating tool: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"id": new_id}), 200)
|
return make_response(jsonify({"id": new_id}), 200)
|
||||||
|
|
||||||
@@ -1909,7 +1944,8 @@ class UpdateTool(Resource):
|
|||||||
{"$set": update_data},
|
{"$set": update_data},
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating tool: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -1941,7 +1977,8 @@ class UpdateToolConfig(Resource):
|
|||||||
{"$set": {"config": data["config"]}},
|
{"$set": {"config": data["config"]}},
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating tool config: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -1975,7 +2012,8 @@ class UpdateToolActions(Resource):
|
|||||||
{"$set": {"actions": data["actions"]}},
|
{"$set": {"actions": data["actions"]}},
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating tool actions: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -2007,7 +2045,8 @@ class UpdateToolStatus(Resource):
|
|||||||
{"$set": {"status": data["status"]}},
|
{"$set": {"status": data["status"]}},
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return make_response(jsonify({"success": False, "error": str(err)}), 400)
|
current_app.logger.error(f"Error updating tool status: {err}")
|
||||||
|
return make_response(jsonify({"success": False}), 400)
|
||||||
|
|
||||||
return make_response(jsonify({"success": True}), 200)
|
return make_response(jsonify({"success": True}), 200)
|
||||||
|
|
||||||
@@ -2033,6 +2072,7 @@ class DeleteTool(Resource):
|
|||||||
if result.deleted_count == 0:
|
if result.deleted_count == 0:
|
||||||
return {"success": False, "message": "Tool not found"}, 404
|
return {"success": False, "message": "Tool not found"}, 404
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
return {"success": False, "error": str(err)}, 400
|
current_app.logger.error(f"Error deleting tool: {err}")
|
||||||
|
return {"success": False}, 400
|
||||||
|
|
||||||
return {"success": True}, 200
|
return {"success": True}, 200
|
||||||
@@ -29,21 +29,22 @@ class PDFParser(BaseParser):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import PyPDF2
|
from pypdf import PdfReader
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise ValueError("PyPDF2 is required to read PDF files.")
|
raise ValueError("pypdf is required to read PDF files.")
|
||||||
text_list = []
|
text_list = []
|
||||||
with open(file, "rb") as fp:
|
with open(file, "rb") as fp:
|
||||||
# Create a PDF object
|
# Create a PDF object
|
||||||
pdf = PyPDF2.PdfReader(fp)
|
pdf = PdfReader(fp)
|
||||||
|
|
||||||
# Get the number of pages in the PDF document
|
# Get the number of pages in the PDF document
|
||||||
num_pages = len(pdf.pages)
|
num_pages = len(pdf.pages)
|
||||||
|
|
||||||
# Iterate over every page
|
# Iterate over every page
|
||||||
for page in range(num_pages):
|
for page_index in range(num_pages):
|
||||||
# Extract the text from the page
|
# Extract the text from the page
|
||||||
page_text = pdf.pages[page].extract_text()
|
page = pdf.pages[page_index]
|
||||||
|
page_text = page.extract_text()
|
||||||
text_list.append(page_text)
|
text_list.append(page_text)
|
||||||
text = "\n".join(text_list)
|
text = "\n".join(text_list)
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ pydantic==2.10.4
|
|||||||
pydantic-core==2.27.2
|
pydantic-core==2.27.2
|
||||||
pydantic-settings==2.7.1
|
pydantic-settings==2.7.1
|
||||||
pymongo==4.10.1
|
pymongo==4.10.1
|
||||||
pypdf2==3.0.1
|
pypdf==5.2.0
|
||||||
python-dateutil==2.9.0.post0
|
python-dateutil==2.9.0.post0
|
||||||
python-dotenv==1.0.1
|
python-dotenv==1.0.1
|
||||||
python-pptx==1.0.2
|
python-pptx==1.0.2
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
frontend:
|
frontend:
|
||||||
build: ./frontend
|
build: ../frontend
|
||||||
environment:
|
environment:
|
||||||
- VITE_API_HOST=http://localhost:7091
|
- VITE_API_HOST=http://localhost:7091
|
||||||
- VITE_API_STREAMING=$VITE_API_STREAMING
|
- VITE_API_STREAMING=$VITE_API_STREAMING
|
||||||
@@ -10,7 +10,7 @@ services:
|
|||||||
- backend
|
- backend
|
||||||
|
|
||||||
backend:
|
backend:
|
||||||
build: ./application
|
build: ../application
|
||||||
environment:
|
environment:
|
||||||
- API_KEY=$OPENAI_API_KEY
|
- API_KEY=$OPENAI_API_KEY
|
||||||
- EMBEDDINGS_KEY=$OPENAI_API_KEY
|
- EMBEDDINGS_KEY=$OPENAI_API_KEY
|
||||||
@@ -25,15 +25,15 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "7091:7091"
|
- "7091:7091"
|
||||||
volumes:
|
volumes:
|
||||||
- ./application/indexes:/app/application/indexes
|
- ../application/indexes:/app/application/indexes
|
||||||
- ./application/inputs:/app/application/inputs
|
- ../application/inputs:/app/application/inputs
|
||||||
- ./application/vectors:/app/application/vectors
|
- ../application/vectors:/app/application/vectors
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mongo
|
- mongo
|
||||||
|
|
||||||
worker:
|
worker:
|
||||||
build: ./application
|
build: ../application
|
||||||
command: celery -A application.app.celery worker -l INFO
|
command: celery -A application.app.celery worker -l INFO
|
||||||
environment:
|
environment:
|
||||||
- API_KEY=$OPENAI_API_KEY
|
- API_KEY=$OPENAI_API_KEY
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
services:
|
services:
|
||||||
frontend:
|
frontend:
|
||||||
build: ./frontend
|
build: ../frontend
|
||||||
volumes:
|
volumes:
|
||||||
- ./frontend/src:/app/src
|
- ../frontend/src:/app/src
|
||||||
environment:
|
environment:
|
||||||
- VITE_API_HOST=http://localhost:7091
|
- VITE_API_HOST=http://localhost:7091
|
||||||
- VITE_API_STREAMING=$VITE_API_STREAMING
|
- VITE_API_STREAMING=$VITE_API_STREAMING
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
services:
|
services:
|
||||||
frontend:
|
frontend:
|
||||||
build: ./frontend
|
build: ../frontend
|
||||||
volumes:
|
volumes:
|
||||||
- ./frontend/src:/app/src
|
- ../frontend/src:/app/src
|
||||||
environment:
|
environment:
|
||||||
- VITE_API_HOST=http://localhost:7091
|
- VITE_API_HOST=http://localhost:7091
|
||||||
- VITE_API_STREAMING=$VITE_API_STREAMING
|
- VITE_API_STREAMING=$VITE_API_STREAMING
|
||||||
@@ -12,7 +12,7 @@ services:
|
|||||||
- backend
|
- backend
|
||||||
|
|
||||||
backend:
|
backend:
|
||||||
build: ./application
|
build: ../application
|
||||||
environment:
|
environment:
|
||||||
- API_KEY=$API_KEY
|
- API_KEY=$API_KEY
|
||||||
- EMBEDDINGS_KEY=$API_KEY
|
- EMBEDDINGS_KEY=$API_KEY
|
||||||
@@ -26,15 +26,15 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "7091:7091"
|
- "7091:7091"
|
||||||
volumes:
|
volumes:
|
||||||
- ./application/indexes:/app/application/indexes
|
- ../application/indexes:/app/application/indexes
|
||||||
- ./application/inputs:/app/application/inputs
|
- ../application/inputs:/app/application/inputs
|
||||||
- ./application/vectors:/app/application/vectors
|
- ../application/vectors:/app/application/vectors
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mongo
|
- mongo
|
||||||
|
|
||||||
worker:
|
worker:
|
||||||
build: ./application
|
build: ../application
|
||||||
command: celery -A application.app.celery worker -l INFO -B
|
command: celery -A application.app.celery worker -l INFO -B
|
||||||
environment:
|
environment:
|
||||||
- API_KEY=$API_KEY
|
- API_KEY=$API_KEY
|
||||||
|
|||||||
Reference in new issue
Block a user