openoperator / api /chat_create.py
OpenOperator Deployer
Deploy source revision ef73a4b421f2d1ececca20f99c9118f4621c5e28
6918275
Raw History Blame Contribute Delete
2.1 kB
from helpers.api import ApiHandler, Input, Output, Request, Response
from helpers import settings, projects, guids
from agent import AgentContext
class CreateChat(ApiHandler):
async def process(self, input: Input, request: Request) -> Output:
current_ctxid = input.get("current_context", "") # current context id
new_ctxid = input.get("new_context", guids.generate_id()) # given or new guid
# context instance - get or create
current_context = AgentContext.get(current_ctxid)
# get/create new context
new_context = self.use_context(new_ctxid)
# copy selected data from current to new context
if current_context and settings.get_settings().get("chat_inherit_project", True):
current_data_1 = current_context.get_data(projects.CONTEXT_DATA_KEY_PROJECT)
if current_data_1:
new_context.set_data(projects.CONTEXT_DATA_KEY_PROJECT, current_data_1)
current_data_2 = current_context.get_output_data(projects.CONTEXT_DATA_KEY_PROJECT)
if current_data_2:
new_context.set_output_data(projects.CONTEXT_DATA_KEY_PROJECT, current_data_2)
projects.reconcile_agent_profile(
new_context, projects.get_context_project_name(new_context)
)
# copy model override from current context (only if override is allowed)
if current_context:
model_override = current_context.get_data("chat_model_override")
if model_override:
from plugins._model_config.helpers.model_config import is_chat_override_allowed
if is_chat_override_allowed(new_context.agent0):
new_context.set_data("chat_model_override", model_override)
# New context should appear in other tabs' chat lists via state_push.
from helpers.state_monitor_integration import mark_dirty_all
mark_dirty_all(reason="api.chat_create.CreateChat")
return {
"ok": True,
"ctxid": new_context.id,
"message": "Context created.",
}