Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion config.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,7 @@ class Config:
DOCSTAR_COLLECTION_ID = os.getenv('DOCSTAR_COLLECTION_ID')
AI_ML_APIKEY = os.getenv('AI_ML_APIKEY')
AI_MIDDLEWARE_PAUTH_KEY = os.getenv('AI_MIDDLEWARE_PAUTH_KEY')
OPENAI_API_KEY_GPT_5_NANO = os.getenv('OPENAI_API_KEY_GPT_5_NANO')
OPENAI_API_KEY_GPT_5_NANO = os.getenv('OPENAI_API_KEY_GPT_5_NANO')
HIPPOCAMPUS_API_URL = os.getenv('HIPPOCAMPUS_API_URL')
HIPPOCAMPUS_API_KEY = os.getenv('HIPPOCAMPUS_API_KEY')
HIPPOCAMPUS_COLLECTION_ID = os.getenv('HIPPOCAMPUS_COLLECTION_ID')
13 changes: 13 additions & 0 deletions src/services/commonServices/baseService/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,11 @@ async def make_request_data(request: Request):
async def make_request_data_and_publish_sub_queue(parsed_data, result, params, thread_info=None):
suggestion_content = {'data': {'content': {}}}
suggestion_content['data']['content'] = result.get('historyParams', {}).get('message')

# Extract user and assistant messages for Hippocampus
user_message = parsed_data.get('user', '')
assistant_message = result.get('historyParams', {}).get('message', '')

data = {
"save_sub_thread_id_and_name" : {
"org_id" : parsed_data.get('org_id'),
Expand Down Expand Up @@ -456,6 +461,14 @@ async def make_request_data_and_publish_sub_queue(parsed_data, result, params, t
"check_chatbot_suggestions" : {
"bridgeType" : parsed_data.get('bridgeType'),
},
"save_to_hippocampus" : {
"bridgeType" : parsed_data.get('bridgeType'),
"user_message" : user_message,
"assistant_message" : assistant_message,
"bridge_id" : parsed_data.get('bridge_id'),
"bridge_name" : parsed_data.get('name', ''),
"chatbot_auto_answers": parsed_data.get('chatbot_auto_answers')
},
"type" : parsed_data.get('type'),
"save_files_to_redis" : {
"thread_id" : parsed_data.get('thread_id'),
Expand Down
12 changes: 12 additions & 0 deletions src/services/commonServices/queueService/queueLogService.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from src.services.commonServices.baseService.utils import total_token_calculation, save_files_to_redis
from src.controllers.conversationController import save_sub_thread_id_and_name
from src.services.commonServices.queueService.baseQueue import BaseQueue
from src.services.utils.hippocampus_utils import save_conversation_to_hippocampus


class Queue2(BaseQueue):
Expand All @@ -33,6 +34,17 @@ async def process_messages(self, messages):
# If message type is 'image', only run save_sub_thread_id_and_name
if messages.get('type') == 'image':
return

# Save conversation to Hippocampus for chatbot bridge types
hippocampus_data = messages.get('save_to_hippocampus', {})
if hippocampus_data.get('bridgeType') and hippocampus_data.get('chatbot_auto_answers'):
await save_conversation_to_hippocampus(
user_message=hippocampus_data.get('user_message', ''),
assistant_message=hippocampus_data.get('assistant_message', ''),
agent_id=hippocampus_data.get('bridge_id', ''),
bridge_name=hippocampus_data.get('bridge_name', '')
)

# await create(**messages['metrics_service'])
await validateResponse(**messages['validateResponse'])
await total_token_calculation(**messages['total_token_calculation'])
Expand Down
1 change: 1 addition & 0 deletions src/services/utils/common_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ def parse_request_body(request_body):
"transfer_request_id": body.get('transfer_request_id'),
"orchestrator_flag": body.get('orchestrator_flag'),
"batch_variables": body.get('batch_variables'),
"chatbot_auto_answers": body.get('chatbot_auto_answers')
}


Expand Down
3 changes: 2 additions & 1 deletion src/services/utils/getConfiguration.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ async def _prepare_configuration_response(configuration, service, bridge_id, api
"is_embed": result.get('bridges', {}).get("folder_type") == 'embed',
"user_id": result.get("bridges", {}).get("user_id"),
'folder_id': result.get('bridges', {}).get('folder_id'),
'web_search_filters': web_search_filters_value
'web_search_filters': web_search_filters_value,
'chatbot_auto_answers': result.get('bridges', {}).get('chatbot_auto_answers')
}

return None, base_config, result, resolved_bridge_id
Expand Down
64 changes: 64 additions & 0 deletions src/services/utils/hippocampus_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import json
from config import Config
from src.services.utils.logger import logger
from src.services.utils.apiservice import fetch


async def save_conversation_to_hippocampus(user_message, assistant_message, agent_id, bridge_name=''):
"""
Save conversation to Hippocampus API for chatbot bridge types.

Args:
user_message: The user's message content
assistant_message: The assistant's response content
agent_id: The bridge/agent ID (used as ownerId)
bridge_name: The bridge/agent name (used as title)
"""
try:
if not Config.HIPPOCAMPUS_API_KEY or not Config.HIPPOCAMPUS_COLLECTION_ID or not Config.HIPPOCAMPUS_API_URL:
logger.warning("Hippocampus API key, collection ID, or API URL not configured")
return

# Create content as stringified JSON with question and answer
content_obj = {
"question": user_message,
"answer": assistant_message
}
content = json.dumps(content_obj)

# Use bridge_name if available, otherwise fallback to agent_id
title = bridge_name if bridge_name else agent_id

payload = {
"collectionId": Config.HIPPOCAMPUS_COLLECTION_ID,
"title": title,
"ownerId": agent_id,
"content": content,



"settings": {
"strategy": "custom",
"chunkingUrl": "https://flow.sokt.io/func/scriQywSNndU",
"chunkSize": 4000
}
}

headers = {
"x-api-key": Config.HIPPOCAMPUS_API_KEY,
"Content-Type": "application/json"
}


response_data, response_headers = await fetch(
url=Config.HIPPOCAMPUS_API_URL,
method="POST",
headers=headers,
json_body=payload
)

logger.info(f"Successfully saved conversation to Hippocampus for agent_id: {agent_id}")

except Exception as e:
logger.error(f"Error saving conversation to Hippocampus: {str(e)}")