Refactor Suggestion for agent_run Function in src/agent.c

Current State:

The agent_run function is lengthy and handles multiple responsibilities, including request building, response processing, tool execution, and completion logic.

Proposed Refactor:

Break down agent_run into smaller, focused functions:

  1. build_request_json: Handles request JSON creation.
  2. process_response_choice: Handles parsing and processing of the response choice.
  3. check_incomplete_response: Checks if the response indicates incomplete work.
  4. execute_tools: Executes tools when called.
  5. handle_completion: Checks for completion conditions.

Benefits:

  • Improved readability and maintainability.
  • Easier testing and debugging.
  • Clear separation of concerns.

Implementation:

  • Extract code segments into dedicated functions.
  • Replace inline code in agent_run with calls to these functions.

Example:

// Inside agent.c
static struct json_object *build_request_json(agent_handle agent, const char *role, const char *message) {
    // Implementation
}

static struct json_object *process_response_choice(agent_handle agent, struct json_object *choice) {
    // Implementation
}

// ... other helper functions ...

char *agent_run(agent_handle agent, const char *user_message) {
    // Main loop
    // Use helper functions for each responsibility
}

Conclusion:

This refactor will make the agent_run function more modular, easier to understand, and maintainable.

Further detailed code snippets and refactoring steps are documented here for implementation.