When accessing the /api/v1/agents/{agent_id}/completions API, sessions
created before agent modifications retain the old DSL data. To use the
latest agent configuration (like new prompts) in historical sessions, I
added the sync_dsl parameter. It defaults to False to maintain existing
behavior and only synchronizes when set to True. If needed, a manual
synchronization API can be created to trigger the sync explicitly.
tags/v0.17.1
| @@ -365,6 +365,18 @@ def agent_completions(tenant_id, agent_id): | |||
| conv = API4ConversationService.query(id=req["session_id"], dialog_id=agent_id) | |||
| if not conv: | |||
| return get_error_data_result(f"You don't own the session {req['session_id']}") | |||
| # If an update to UserCanvas is detected, update the API4Conversation.dsl | |||
| sync_dsl = req.get("sync_dsl", False) | |||
| if sync_dsl is True and cvs[0].update_time > conv[0].update_time: | |||
| current_dsl = conv[0].dsl | |||
| new_dsl = json.loads(dsl) | |||
| state_fields = ["history", "messages", "path", "reference"] | |||
| states = {field: current_dsl.get(field, []) for field in state_fields} | |||
| current_dsl.update(new_dsl) | |||
| current_dsl.update(states) | |||
| API4ConversationService.update_by_id(req["session_id"], { | |||
| "dsl": current_dsl | |||
| }) | |||
| else: | |||
| req["question"] = "" | |||
| if req.get("stream", True): | |||
| @@ -2513,6 +2513,7 @@ Asks a specified agent a question to start an AI-powered conversation. | |||
| - `"stream"`: `boolean` | |||
| - `"session_id"`: `string` | |||
| - `"user_id"`: `string`(optional) | |||
| - `"sync_dsl"`: `boolean` (optional) | |||
| - other parameters: `string` | |||
| ##### Request example | |||
| If the **Begin** component does not take parameters, the following code will create a session. | |||
| @@ -2565,6 +2566,8 @@ curl --request POST \ | |||
| The ID of the session. If it is not provided, a new session will be generated. | |||
| - `"user_id"`: (*Body parameter*), `string` | |||
| The optional user-defined ID. Valid *only* when no `session_id` is provided. | |||
| - `"sync_dsl"`: (*Body parameter*), `boolean` | |||
| Whether to synchronize the changes to existing sessions when an agent is modified, defaults to `false`. | |||
| - Other parameters: (*Body Parameter*) | |||
| Parameters specified in the **Begin** component. | |||