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

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

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

get_readonly_fields

Source code in django_spire/ai/admin.py
def get_readonly_fields(self, request, obj=None):
    return [field.name for field in self.model._meta.fields]
Source code in django_spire/ai/admin.py
def view_interactions_link(
        self,
        ai_usage: models.AiUsage,
        was_successful: bool | None = None,
) -> str:
    was_successful_filter = '' if was_successful is None else f'&was_successful__exact={int(was_successful)}'
    url = (
            reverse("admin:django_spire_ai_aiinteraction_changelist")
            + "?"
            + urlencode({"ai_usage__id": f"{ai_usage.id}"})
            + was_successful_filter
    )

    if was_successful is None:
        interactions_count = ai_usage.interactions.count()
    elif was_successful:
        interactions_count = ai_usage.interactions.filter(was_successful=True).count()
    else:
        interactions_count = ai_usage.interactions.filter(was_successful=False).count()

    return format_html(
        f'<a href="{url}">{interactions_count} Interactions</a>'
    )
Source code in django_spire/ai/admin.py
def view_successful_interactions_link(
        self,
        ai_usage: models.AiUsage,
) -> str:
    return self.view_interactions_link(ai_usage, was_successful=True)
Source code in django_spire/ai/admin.py
def view_failed_interactions_link(
        self,
        ai_usage: models.AiUsage,
) -> str:
    return self.view_interactions_link(ai_usage, was_successful=False)

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

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

ordering = ('-created_datetime',) 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