Results Retrieve

Mixin for views that need superadmin access to all resources. Provides FOUR key features (all bundled - no separate mixins needed): 1. Queryset routing (superadmin sees all, regular user sees own org) 2. Organization injection (post/patch/put auto-inject org) 3. Object ownership checking (auto-registers ObjectOwnershipPermission) 4. Superadmin-only field protection (certain fields can only be modified by superadmins) Inherits from: - ObjectOwnershipMixin: Config attributes + auto-permission registration - OrganizationInjectionMixin: Cross-org write protection + org injection Config attributes (inherited from ObjectOwnershipMixin): - ownership_object_field_name: Field on object (default: "organization_id") - ownership_user_field_name: Field on user (default: "curr_org_id") - is_allowing_global_object_read: Allow reading global objects (default: False) - is_allowing_org_admin_access: Allow org admins access to any object in their org (default: False) - is_requiring_org_admin_for_write: Require org admin for writes (default: False) Config attributes (superadmin-only fields): - superadmin_only_fields: List of field names that only superadmins can modify (default: []) On CREATE: Fields are stripped from non-superadmin requests (model defaults apply) On UPDATE: Non-superadmins trying to change these fields get PermissionDenied - superadmin_lock_field: Field name that locks the entire object for non-superadmins (default: None) When this field is truthy on the instance, non-superadmins cannot modify ANY field. Common use case: is_managed=True means Keywords AI manages this resource, users can't edit it. Note: Writing to global objects (ownership field is None) always requires superadmin. Usage (detail view): class MyDetailView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView): # Optional: customize ownership config (inherited from ObjectOwnershipMixin) is_allowing_global_object_read = True def get_regular_user_queryset(self): return MyModel.objects.filter(organization_id=self.request.user.curr_org_id) def get_superadmin_queryset(self): return MyModel.objects.all() Usage (superadmin-only fields): class IntegrationView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView): superadmin_only_fields = ['is_managed'] # Only superadmins can modify is_managed superadmin_lock_field = 'is_managed' # When is_managed=True, object is locked for non-superadmins def get_regular_user_queryset(self): return Integration.objects.filter(organization_id=self.request.user.curr_org_id) def get_superadmin_queryset(self): return Integration.objects.all() Usage (related-object org pattern like PromptVersion - PREFERRED: annotate queryset): from django.db.models import F class PromptVersionView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView): def get_regular_user_queryset(self): # Annotate organization_id so ownership checks work automatically return PromptVersion.objects.filter( prompt__organization_id=self.request.user.curr_org_id ).annotate(organization_id=F("prompt__organization_id")) def get_superadmin_queryset(self): return PromptVersion.objects.annotate(organization_id=F("prompt__organization_id")) Alternative (override method - only if annotation not possible): class PromptVersionView(SuperAdminMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView): def get_affiliated_object_organization_id(self, instance): return instance.prompt.organization_id # Org is on parent object DO NOT use inline checks like this: # ❌ BAD - easy to forget in branching code def get_queryset(self): if has_staff_role(self.request.user): return MyModel.objects.all() return MyModel.objects.filter(...)

Authentication

AuthorizationBearer
JWT access token or Respan API key

Path parameters

idintegerRequired

Response

idstringRead-only
evaluation_idstringRead-only
resultsstringRead-only
evaluatorobject
Mixin for internal evaluator serializers that work with full configuration format.
results_idintegerRead-only
inputsstringRead-only
created_atdatetimeRead-only
updated_atdatetimeRead-only
eval_classenum
  • ragas_faithfulness - ragas_faithfulness
  • ragas_noise_sensitivity - ragas_noise_sensitivity
  • ragas_response_relevancy - ragas_response_relevancy
  • ragas_answer_relevancy - ragas_answer_relevancy
  • ragas_context_precision - ragas_context_precision
  • ragas_context_recall - ragas_context_recall
  • ragas_context_entity_recall - ragas_context_entity_recall
  • ragas_factual_correctness - ragas_factual_correctness
  • ragas_semantic_similarity - ragas_semantic_similarity
  • ragas_non_llm_string_similarity - ragas_non_llm_string_similarity
  • ragas_non_llm_string_presence - ragas_non_llm_string_presence
  • ragas_non_llm_exact_match - ragas_non_llm_exact_match
  • relari_llm_based_custom_metric - relari_llm_based_custom_metric
  • relari_llm_based_answer_correctness - relari_llm_based_answer_correctness
  • keywordsai_custom_evaluator - keywordsai_custom_evaluator
  • keywordsai_custom_llm - keywordsai_custom_llm
  • output_char_count - output_char_count
  • output_word_count - output_word_count
  • custom_code - custom_code
updated_byinteger or nullRead-only
organizationinteger
human_text_valuestring
projectstring or null
eval_result_unique_idstring<=255 characters
typeenum
  • llm - Llm
  • code - Code
  • human - Human
  • function - Function
  • human_numerical - Human Numerical
  • human_categorical - Human Categorical
  • human_boolean - Human Boolean
  • human_text - Human Text
  • custom - Custom
environmentstring<=30 characters
unique_organization_idstring<=255 characters
evaluator_slugstring<=255 characters
evaluator_namestring or null<=255 characters
scorerstring<=255 characters
workflow_version_idstring<=255 characters
sourcestring<=64 characters
costdouble
evaluation_identifierstring or null<=255 characters
log_unique_idstring or null<=100 characters
customer_identifierstring or null<=254 characters
eval_set_idstring or null<=255 characters
log_timestampdatetime or null
prompt_version_idstring or null<=70 characters
pipeline_run_idstring<=255 characters
automation_idstring or null<=255 characters
primary_scoredouble or null
string_valuestring or null
json_valuestring
boolean_valueboolean or null
categorical_valuelist of strings
secondary_scoredouble or null
tertiary_scoredouble or null
quaternary_scoredouble or null
score_mappingany
human_numerical_valuedouble or null
human_categorical_valuestring or null<=100 characters
passedboolean or null
statusenum
  • pending - Pending
  • completed - Completed
  • failed - Failed
error_messagestring or null
storage_object_keystring<=255 characters
evaluationstring or null
annotation_configstring or null
loginteger or null