feedback.py 1.4 KB

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