whFalsa / .github /prompts /plan-mergeDriverChecksAddTripTools.prompt.md
codeBOKER's picture
feature: modify and delete driver trips
dc8cb49
|
Raw
History Blame Contribute Delete
4.55 kB

Plan: Merge driver checks & add trip modify/delete tools

TL;DR: Merge check_driver_info and check_driver_trips into a single check_driver_dashboard tool that returns driver profile, registered vehicles, and upcoming trips. Add update_driver_trip and delete_driver_trip tools (prefer soft-cancel) with schemas, handlers, DB methods, indexing calls, and tests.

Steps

  1. Update schemas (app/ai/tool_schemas.py):

    • Add _CHECK_DRIVER_DASHBOARD for check_driver_dashboard (no parameters).
    • Add _UPDATE_DRIVER_TRIP and _DELETE_DRIVER_TRIP for update_driver_trip and delete_driver_trip.
    • Replace check_driver_info and check_driver_trips entries in _TOOLS_BY_MODE["driver"] with check_driver_dashboard, and add the two new tool names to the driver mode list.
  2. Implement merged handler (app/tools/handlers.py):

    • Add check_driver_dashboard(self, arguments) that:
      • Resolves driver by phone (existing helper), fetches registered vehicles and upcoming trips (reuse list_driver_trips), and returns a structured JSON payload combining profile, vehicles, and trips summaries.
    • Place the method next to existing check_driver_info/check_driver_trips logic and remove or keep old helpers as internal functions if useful.
  3. Implement update/delete handlers (app/tools/handlers.py):

    • update_driver_trip(self, arguments):
      • Validate trip_id and driver ownership (get_driver_by_phone + get_trip_by_id).
      • Accept only allowed fields: departure, destination, departure_date, departure_time, vehicle_type, available_seats, total_seats, price.
      • Call repository update_driver_trip(trip_id, updates) and reindex the trip.
      • Return the updated trip record.
    • delete_driver_trip(self, arguments):
      • Validate ownership.
      • Prefer soft-cancel: call repository cancel_driver_trip(trip_id) that sets status = "cancelled".
      • Remove/unindex from vector index and return cancelled trip.
  4. Add DB methods (app/database/supabase.py):

    • async def update_driver_trip(self, trip_id: str, updates: dict) -> dict — update allowed columns and return the updated row.
    • async def cancel_driver_trip(self, trip_id: str) -> dict — set status to cancelled (soft delete) and return updated row.
    • Follow existing style/patterns used by create_driver_trip and get_trip_by_id.
  5. Indexing updates (app/services/trip_indexing.py):

    • Add async def unindex_trip(trip_id: str) or delete_from_index(trip_id) to remove vectors.
    • Ensure update_driver_trip calls index_trip after DB update and cancel_driver_trip calls unindex_trip.
  6. Registration / wiring:

    • No registry code changes required: conversation_service._tool_registry() registers tools from _TOOLS_BY_MODE automatically once names are updated.
  7. Tests:

    • Update tests/conftest.py FakeRepository to implement update_driver_trip and cancel_driver_trip behaviors.
    • Replace or update tests that call check_driver_info / check_driver_trips to assert the merged check_driver_dashboard behavior in tests/test_tools.py.
    • Add tests for update_driver_trip and delete_driver_trip mirroring existing handler test patterns.
  8. Docs & prompts:

    • Update prompts/system_driver.md to document the merged tool and the new modify/delete tools so the model calls them appropriately.

Verification

  1. Run unit tests: pytest -q and ensure all tests pass (focus on tests/test_tools.py).
  2. Run targeted tests: pytest -q tests/test_tools.py::test_check_driver_dashboard and new tests for update/delete.
  3. Manual local sanity: call the tool handlers via the existing orchestrator test harness in tests/test_ai_orchestrator.py.
  4. Verify indexing: after update, trip appears in index with new values; after cancel, it's unindexed.

Decisions & assumptions

  • Use soft-cancel (status = "cancelled") instead of hard delete to preserve audit/history and avoid breaking references.
  • Require driver ownership verification before allowing update/delete.
  • Limit updatable fields to the set listed above; price/seats allowed, but payments/refunds are out of scope.

Further considerations

  1. Notifications: consider notifying booked passengers when a trip is modified/cancelled (out of scope for this change).
  2. Concurrency: consider optimistic locking/versioning if concurrent edits are possible.
  3. Permissions & audit logs: ensure handlers record who made the change (phone/driver id) for traceability.