mirror of
https://github.com/katanemo/plano.git
synced 2026-04-26 17:26:26 +02:00
Docs branch - v1 of our tech docs (#69)
* added the first set of docs for our technical docs * more docuemtnation changes * added support for prompt processing and updated life of a request * updated docs to including getting help sections and updated life of a request * committing local changes for getting started guide, sample applications, and full reference spec for prompt-config * updated configuration reference, added sample app skeleton, updated favico * fixed the configuration refernce file, and made minor changes to the intent detection. commit v1 for now --------- Co-authored-by: Salman Paracha <salmanparacha@MacBook-Pro-261.local> Co-authored-by: Adil Hafeez <adil@katanemo.com>
This commit is contained in:
parent
233976a568
commit
80c554ce1a
34 changed files with 1040 additions and 0 deletions
119
docs/source/_include/intent_detection.py
Normal file
119
docs/source/_include/intent_detection.py
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
from flask import Flask, request, jsonify
|
||||
from datetime import datetime
|
||||
import uuid
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Global dictionary to keep track of user conversations
|
||||
user_conversations = {}
|
||||
|
||||
def get_user_conversation(user_id):
|
||||
"""
|
||||
Retrieve the user's conversation history.
|
||||
If the user does not exist, initialize their conversation data.
|
||||
"""
|
||||
if user_id not in user_conversations:
|
||||
user_conversations[user_id] = {
|
||||
'messages': []
|
||||
}
|
||||
return user_conversations[user_id]
|
||||
|
||||
def update_user_conversation(user_id, client_messages, intent_changed):
|
||||
"""
|
||||
Update the user's conversation history with new messages.
|
||||
Each message is augmented with a UUID, timestamp, and intent change marker.
|
||||
Only new messages are added to avoid duplication.
|
||||
"""
|
||||
user_data = get_user_conversation(user_id)
|
||||
|
||||
# Existing messages in the user's conversation
|
||||
stored_messages = user_data['messages']
|
||||
|
||||
# Determine the number of stored messages
|
||||
num_stored_messages = len(stored_messages)
|
||||
|
||||
# Check for out-of-sync messages
|
||||
if num_stored_messages > len(client_messages):
|
||||
return jsonify({'error': 'Client messages are out of sync with server'}), 400
|
||||
|
||||
# Determine new messages by slicing the client messages
|
||||
new_messages = client_messages[num_stored_messages:]
|
||||
|
||||
# Process each new message
|
||||
for index, message in enumerate(new_messages):
|
||||
message_entry = {
|
||||
'uuid': str(uuid.uuid4()),
|
||||
'timestamp': datetime.utcnow().isoformat(),
|
||||
'role': message.get('role'),
|
||||
'content': message.get('content'),
|
||||
'intent_changed': False # Default value
|
||||
}
|
||||
# Mark the intent change on the last message if detected
|
||||
if intent_changed and index == len(new_messages) - 1:
|
||||
message_entry['intent_changed'] = True
|
||||
user_data['messages'].append(message_entry)
|
||||
|
||||
return user_data
|
||||
|
||||
def get_messages_since_last_intent(messages):
|
||||
"""
|
||||
Retrieve messages from the last intent change onwards.
|
||||
"""
|
||||
messages_since_intent = []
|
||||
for message in reversed(messages):
|
||||
messages_since_intent.insert(0, message)
|
||||
if message.get('intent_changed'):
|
||||
break
|
||||
return messages_since_intent
|
||||
|
||||
def forward_to_llm(messages):
|
||||
"""
|
||||
Simulate forwarding messages to an upstream LLM.
|
||||
Replace this with the actual API call to the LLM.
|
||||
"""
|
||||
# For demonstration purposes, we'll return a placeholder response
|
||||
return "LLM response based on provided messages."
|
||||
|
||||
@app.route('/process_rag', methods=['POST'])
|
||||
def process_rag():
|
||||
# Extract JSON data from the request
|
||||
data = request.get_json()
|
||||
|
||||
user_id = data.get('user_id')
|
||||
if not user_id:
|
||||
return jsonify({'error': 'User ID is required'}), 400
|
||||
|
||||
client_messages = data.get('messages')
|
||||
if not client_messages or not isinstance(client_messages, list):
|
||||
return jsonify({'error': 'Messages array is required'}), 400
|
||||
|
||||
# Extract the intent change marker from Arch's headers if present for the current prompt
|
||||
intent_changed_header = request.headers.get('x-arch-intent-marker', '').lower()
|
||||
if intent_changed_header in ['', 'false']:
|
||||
intent_changed = False
|
||||
elif intent_changed_header == 'true':
|
||||
intent_changed = True
|
||||
else:
|
||||
# Invalid value provided
|
||||
return jsonify({'error': 'Invalid value for x-arch-prompt-intent-change header'}), 400
|
||||
|
||||
# Update user conversation based on intent change
|
||||
user_data = update_user_conversation(user_id, client_messages, intent_changed)
|
||||
|
||||
# Retrieve messages since last intent change for LLM
|
||||
messages_for_llm = get_messages_since_last_intent(user_data['messages'])
|
||||
|
||||
# Forward messages to upstream LLM
|
||||
llm_response = forward_to_llm(messages_for_llm)
|
||||
|
||||
# Prepare the response
|
||||
response = {
|
||||
'user_id': user_id,
|
||||
'messages': user_data['messages'],
|
||||
'llm_response': llm_response
|
||||
}
|
||||
|
||||
return jsonify(response), 200
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
Loading…
Add table
Add a link
Reference in a new issue