feedback.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import json
  2. from typing import Any, Literal
  3. import requests
  4. from pydantic import BaseModel
  5. from opendevin.core.logger import opendevin_logger as logger
  6. class FeedbackDataModel(BaseModel):
  7. version: str
  8. email: str
  9. token: str
  10. feedback: Literal['positive', 'negative']
  11. permissions: Literal['public', 'private']
  12. trajectory: list[dict[str, Any]]
  13. FEEDBACK_URL = 'https://share-od-trajectory-3u9bw9tx.uc.gateway.dev/share_od_trajectory'
  14. def store_feedback(feedback: FeedbackDataModel) -> dict[str, str]:
  15. # Start logging
  16. display_feedback = feedback.model_dump()
  17. if 'trajectory' in display_feedback:
  18. display_feedback['trajectory'] = (
  19. f"elided [length: {len(display_feedback['trajectory'])}"
  20. )
  21. if 'token' in display_feedback:
  22. display_feedback['token'] = 'elided'
  23. logger.info(f'Got feedback: {display_feedback}')
  24. # Start actual request
  25. response = requests.post(
  26. FEEDBACK_URL,
  27. headers={'Content-Type': 'application/json'},
  28. json=feedback.model_dump(),
  29. )
  30. if response.status_code != 200:
  31. raise ValueError(f'Failed to store feedback: {response.text}')
  32. response_data = json.loads(response.text)
  33. logger.info(f'Stored feedback: {response.text}')
  34. return response_data