Skip to content

admin

django_spire.ai.admin

AiUsageAdmin

Bases: AiUsageAdminMixin

list_display = ('recorded_date', 'was_successful', 'event_count', 'token_usage', 'run_time_seconds_formatted', 'view_interactions_link', 'view_successful_interactions_link', 'view_failed_interactions_link') class-attribute instance-attribute

ordering = ('-recorded_date',) class-attribute instance-attribute

search_fields = ('recorded_date',) class-attribute instance-attribute

get_queryset

Source code in django_spire/ai/admin.py
def get_queryset(self, request: HttpRequest) -> QuerySet[models.AiUsage]:
    queryset = super().get_queryset(request)

    return queryset.annotate(
        _interaction_count=Count('interaction', distinct=True),
        _successful_interaction_count=Count(
            'interaction',
            filter=Q(interaction__was_successful=True),
            distinct=True,
        ),
        _failed_interaction_count=Count(
            'interaction',
            filter=Q(interaction__was_successful=False),
            distinct=True,
        ),
    )

get_readonly_fields

Source code in django_spire/ai/admin.py
def get_readonly_fields(self, request: HttpRequest, obj: Model | None = None) -> list[str]:
    return [field.name for field in self.model._meta.fields]

has_add_permission

Source code in django_spire/ai/admin.py
def has_add_permission(self, request: HttpRequest) -> bool:
    return False
Source code in django_spire/ai/admin.py
@admin.display(description='Failed', ordering='_failed_interaction_count')
def view_failed_interactions_link(self, ai_usage: models.AiUsage) -> str:
    return self._interactions_link(
        ai_usage,
        ai_usage._failed_interaction_count,
        was_successful=False,
    )
Source code in django_spire/ai/admin.py
@admin.display(description='All', ordering='_interaction_count')
def view_interactions_link(self, ai_usage: models.AiUsage) -> str:
    return self._interactions_link(ai_usage, ai_usage._interaction_count)
Source code in django_spire/ai/admin.py
@admin.display(description='Successful', ordering='_successful_interaction_count')
def view_successful_interactions_link(self, ai_usage: models.AiUsage) -> str:
    return self._interactions_link(
        ai_usage,
        ai_usage._successful_interaction_count,
        was_successful=True,
    )

AiInteractionModelForm

Bases: ModelForm

interaction = forms.JSONField(widget=JsonTreeWidget) class-attribute instance-attribute

Meta

model = models.AiInteraction class-attribute instance-attribute
fields = '__all__' class-attribute instance-attribute

AiInteractionAdmin

Bases: AiUsageAdminMixin

form = AiInteractionModelForm class-attribute instance-attribute

list_display = ('actor', 'callable_name', 'was_successful', 'event_count', 'token_usage', 'run_time_seconds_formatted', 'created_datetime') class-attribute instance-attribute

list_filter = ('module_name', 'callable_name', 'was_successful') class-attribute instance-attribute

ordering = ('-created_datetime',) class-attribute instance-attribute

search_fields = ('actor', 'user_email', 'user_first_name', 'user_last_name', 'module_name', 'callable_name') class-attribute instance-attribute

readonly_fields = ('actor', 'created_datetime', 'module_name', 'callable_name', 'was_successful', 'user', 'user_email', 'user_first_name', 'user_last_name', 'exception', 'stack_trace') class-attribute instance-attribute

fields = ('actor', 'user', 'created_datetime', 'module_name', 'callable_name', 'was_successful', 'interaction', 'user_email', 'user_first_name', 'user_last_name', 'exception', 'stack_trace') class-attribute instance-attribute

has_add_permission

Source code in django_spire/ai/admin.py
def has_add_permission(self, request: HttpRequest) -> bool:
    return False