Implement create_session.dspy script and update backend function to call hermes-service API
This commit is contained in:
parent
607718ac21
commit
f6c07f6d10
@ -19,9 +19,31 @@ def load_hermes_web_cli():
|
||||
"""Initialize and load the hermes-web-cli module.
|
||||
|
||||
This function is called by Sage system during module loading.
|
||||
It can be used to perform any necessary initialization.
|
||||
It registers all module functions with the ServerEnv instance
|
||||
so they can be called directly from .ui and .dspy files.
|
||||
"""
|
||||
# Perform any module initialization here if needed
|
||||
from ahserver.serverenv import ServerEnv
|
||||
|
||||
# Get the ServerEnv instance
|
||||
env = ServerEnv()
|
||||
|
||||
# Register all module functions with ServerEnv
|
||||
env.get_setting = get_setting
|
||||
env.save_setting = save_setting
|
||||
env.get_all_services = get_all_services
|
||||
env.create_service = create_service
|
||||
env.delete_service = delete_service
|
||||
env.get_service_by_id = get_service_by_id
|
||||
env.test_service_connection = test_service_connection
|
||||
env.create_session = create_session
|
||||
env.send_message_to_service = send_message_to_service
|
||||
env.get_session_messages = get_session_messages
|
||||
env.get_active_sessions = get_active_sessions
|
||||
env.get_recent_sessions = get_recent_sessions
|
||||
env.get_session_by_id = get_session_by_id
|
||||
env.validate_service_url = validate_service_url
|
||||
env.generate_session_id = generate_session_id
|
||||
|
||||
return True
|
||||
|
||||
# Database operations using sqlor-database-module
|
||||
@ -112,13 +134,42 @@ def test_service_connection(url: str, apikey: str = "") -> Tuple[bool, str]:
|
||||
return False, f"Error: {str(e)}"
|
||||
|
||||
# Session management
|
||||
def create_session(service_id: str, user_message: str) -> str:
|
||||
def create_session(service_id: str, user_message: str = "") -> str:
|
||||
"""Create a new session with a Hermes service."""
|
||||
try:
|
||||
session_id = str(uuid.uuid4())
|
||||
# Save session to database
|
||||
# Call remote service to create session
|
||||
return session_id
|
||||
# Get service configuration
|
||||
service = get_service_by_id(service_id)
|
||||
if not service:
|
||||
raise ValueError(f"Service {service_id} not found")
|
||||
|
||||
service_url = service["service_url"]
|
||||
apikey = service.get("apikey", "")
|
||||
|
||||
# Prepare headers
|
||||
headers = {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
# Add Authorization header if API key is provided
|
||||
if apikey:
|
||||
headers["Authorization"] = f"Bearer {apikey}"
|
||||
|
||||
# Call remote service API to create session
|
||||
response = requests.post(
|
||||
f"{service_url.rstrip('/')}/api/v1/sessions",
|
||||
json={
|
||||
"user_id": "web-cli-user", # This could be made configurable
|
||||
"initial_message": user_message if user_message else None
|
||||
},
|
||||
headers=headers,
|
||||
timeout=30
|
||||
)
|
||||
response.raise_for_status()
|
||||
result = response.json()
|
||||
|
||||
# Return the session ID from the remote service
|
||||
return result.get("session_id", "")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error creating session: {e}")
|
||||
raise
|
||||
|
||||
34
wwwroot/hermes-web-cli/sessions/create_session.dspy
Normal file
34
wwwroot/hermes-web-cli/sessions/create_session.dspy
Normal file
@ -0,0 +1,34 @@
|
||||
# Create a new session with the selected Hermes service
|
||||
# This .dspy file handles the POST request from new_session.ui form submission
|
||||
# It receives form data with service_id and initial-prompt fields
|
||||
|
||||
try:
|
||||
# Extract form data from request context
|
||||
form_data = request.form if hasattr(request, 'form') else {}
|
||||
|
||||
# Get required parameters
|
||||
service_id = form_data.get('service_id')
|
||||
initial_prompt = form_data.get('initial-prompt', '')
|
||||
|
||||
if not service_id:
|
||||
return {"error": "Service ID is required", "success": False}
|
||||
|
||||
# Use the function provided by the hermes-web-cli module
|
||||
# This will call the remote hermes-service API
|
||||
session_result = create_session(service_id, initial_prompt)
|
||||
|
||||
if session_result:
|
||||
# Return success response with session details
|
||||
return {
|
||||
"success": True,
|
||||
"session_id": session_result,
|
||||
"service_id": service_id,
|
||||
"redirect_url": f"/hermes-web-cli/sessions/{session_result}"
|
||||
}
|
||||
else:
|
||||
return {"error": "Failed to create session", "success": False}
|
||||
|
||||
except Exception as e:
|
||||
# Log the error and return failure
|
||||
print(f"Error creating session: {str(e)}")
|
||||
return {"error": f"Internal error: {str(e)}", "success": False}
|
||||
@ -24,6 +24,16 @@
|
||||
"width": "100%",
|
||||
"maxWidth": "600px",
|
||||
"fields": [
|
||||
{
|
||||
"uitype": "select",
|
||||
"name": "service_id",
|
||||
"label": "Select Service",
|
||||
"required": true,
|
||||
"placeholder": "Choose a Hermes service",
|
||||
"options": {
|
||||
"url": "/hermes-web-cli/hermes_services/options"
|
||||
}
|
||||
},
|
||||
{
|
||||
"uitype": "text",
|
||||
"name": "initial-prompt",
|
||||
@ -44,7 +54,7 @@
|
||||
"borderRadius": "6px",
|
||||
"padding": "10px 20px",
|
||||
"fontWeight": "600",
|
||||
"action": "create_session"
|
||||
"action": "submit"
|
||||
},
|
||||
{
|
||||
"label": "Cancel",
|
||||
@ -61,13 +71,15 @@
|
||||
"binds": [
|
||||
{
|
||||
"wid": "self",
|
||||
"event": "create_session",
|
||||
"actiontype": "registerfunction",
|
||||
"target": "app.new-session-container",
|
||||
"rfname": "create_session",
|
||||
"params": {
|
||||
"form_data": "{{ 'new-session-form'.data }}"
|
||||
}
|
||||
"event": "submit",
|
||||
"actiontype": "urlwidget",
|
||||
"target": "app.main-content",
|
||||
"options": {
|
||||
"url": "{{entire_url('hermes-web-cli/sessions/create_session.dspy')}}",
|
||||
"method": "POST",
|
||||
"data": "{{ 'new-session-form'.data }}"
|
||||
},
|
||||
"mode": "replace"
|
||||
},
|
||||
{
|
||||
"wid": "self",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user