initSession method

Future<SessionDto> initSession(
  1. CapabilityDto capabilityDto,
  2. void listen(
    1. String sessionId,
    2. AgentMessageDto agentMessageDto
    ), {
  3. Map<String, OpenToolDriver>? opentoolDriverMap,
  4. List<ToolDriver>? customToolDriverList,
  5. void listenChunk(
    1. String sessionId,
    2. AgentMessageChunkDto agentMessageChunkDto
    )?,
})

Implementation

Future<SessionDto> initSession(
    CapabilityDto capabilityDto,
    void Function(String sessionId, AgentMessageDto agentMessageDto) listen, {
      Map<String, OpenToolDriver>? opentoolDriverMap,
      List<ToolDriver>? customToolDriverList,
      void Function(String sessionId, AgentMessageChunkDto agentMessageChunkDto)? listenChunk
    }) async {
  String sessionId = uniqueId();
  String systemPrompt = capabilityDto.systemPrompt;
  LLMConfig llmConfig = capabilityDto.llmConfig.toModel();
  List<ReflectPrompt>? reflectPromptList = capabilityDto.reflectPromptList?.map((reflectPromptDto) => ReflectPrompt(llmConfig: reflectPromptDto.llmConfig.toModel(), prompt: reflectPromptDto.prompt)).toList();

  if(opentoolDriverMap != null) opentoolDriverMap.forEach((key, value) { this.opentoolDriverMap[key] = value;});
  // if(capabilityDto.clientOpenTool != null && listenClientFunctionCall != null) {
  //   OpenTool clientOpenTool = await OpenToolLoader().load(capabilityDto.clientOpenTool!.opentool);
  //
  //   clientDriverMap[sessionId] = ClientDriver(listenFunctionCall, timeout: capabilityDto.clientOpenTool?.timeout??60).bind(clientOpenTool) as ClientDriver;
  // }

  List<ToolDriver> agentToolDriverList = [];
  agentToolDriverList.addAll(globalDriverList);
  agentToolDriverList.addAll(await _buildToolDriverList(capabilityDto.openSpecList));
  agentToolDriverList.addAll(await _buildAgentDriverList(capabilityDto.sessionList, sessionId, listen));
  if(customToolDriverList != null) agentToolDriverList.addAll(customToolDriverList);
  // if(clientDriverMap[sessionId] != null) agentToolDriverList.add(clientDriverMap[sessionId]!);

  if(agentToolDriverList.isEmpty && capabilityDto.clientOpenTool == null) {
    SessionAgent textAgent = TextAgent(
      sessionId: sessionId,
      llmConfig: llmConfig,
      agentSession: _buildSession(sessionId, listen, listenChunk: listenChunk),
      systemPrompt: systemPrompt,
      textReflectPromptList: reflectPromptList??[],
      timeoutSeconds: capabilityDto.timeoutSeconds,
      taskPipelineStrategy: capabilityDto.taskPipelineStrategy
    );
    sessionAgents[sessionId] = textAgent;
  } else {
    ClientOpenTool? clientOpenTool = null;
    if(capabilityDto.clientOpenTool != null) clientOpenTool = ClientOpenTool(opentool: capabilityDto.clientOpenTool!.opentool, timeout: capabilityDto.clientOpenTool!.timeout, fetchClientDriver: this.fetchClientDriver);
    SessionAgent toolAgent = ToolAgent(
      sessionId: sessionId,
      llmConfig: llmConfig,
      agentSession: _buildSession(sessionId, listen, listenChunk: listenChunk),
      toolDriverList: agentToolDriverList,
      clientOpenTool: clientOpenTool,
      systemPrompt: systemPrompt,
      toolReflectPromptList: reflectPromptList??[],
      timeoutSeconds: capabilityDto.timeoutSeconds,
      taskPipelineStrategy: capabilityDto.taskPipelineStrategy,
      toolPipelineStrategy: capabilityDto.toolPipelineStrategy??PipelineStrategyType.PARALLEL
    );
    sessionAgents[sessionId] = toolAgent;
  }

  SessionDto sessionDto = SessionDto(sessionId: sessionId);

  return sessionDto;
}