codeflash-internal/django/aiservice/log_features/models.py
Aseem Saxena 1192df12a6
feedback loop for unmatched test results (#2059)
fixes CF-932

# Pull Request Checklist

## Description
- [ ] **Description of PR**: Clear and concise description of what this
PR accomplishes
- [ ] **Breaking Changes**: Document any breaking changes (if
applicable)
- [ ] **Related Issues**: Link to any related issues or tickets

## Testing
- [ ] **Test cases Attached**: All relevant test cases have been
added/updated
- [ ] **Manual Testing**: Manual testing completed for the changes

## Monitoring & Debugging
- [ ] **Logging in place**: Appropriate logging has been added for
debugging user issues
- [ ] **Sentry will be able to catch errors**: Error handling ensures
Sentry can capture and report errors
- [ ] **Avoid Dev based/Prisma logging**: No development-only or
Prisma-specific logging in production code

## Configuration
- [ ] **Env variables newly added**: Any new environment variables are
documented in .env.example file or mentioned in description
---

## Additional Notes
<!-- Add any additional context, screenshots, or notes for reviewers
here -->

---------

Co-authored-by: codeflash-ai[bot] <148906541+codeflash-ai[bot]@users.noreply.github.com>
Co-authored-by: ali <mohammed18200118@gmail.com>
Co-authored-by: Kevin Turcios <106575910+KRRT7@users.noreply.github.com>
2025-12-17 08:14:32 +05:30

111 lines
5.4 KiB
Python

import uuid
from typing import Any
from django.contrib.postgres.fields import ArrayField
from django.core.validators import MinLengthValidator
from django.db import models
from ninja import Schema
class OptimizationFeatures(models.Model):
trace_id = models.CharField(max_length=36, primary_key=True, validators=[MinLengthValidator(36)])
original_code = models.TextField(null=True, blank=True)
dependency_code = models.TextField(null=True, blank=True)
line_profiler_results = models.TextField(null=True, blank=True)
user_id = models.TextField(null=True, blank=True)
optimizations_raw = models.JSONField(null=True, blank=True)
optimizations_post = models.JSONField(null=True, blank=True)
explanations_raw = models.JSONField(null=True, blank=True)
explanations_post = models.JSONField(null=True, blank=True)
speedup_ratio = models.JSONField(null=True, blank=True)
original_runtime = models.FloatField(null=True, blank=True)
optimized_runtime = models.JSONField(null=True, blank=True)
optimized_line_profiler_results = models.JSONField(null=True, blank=True)
is_correct = models.JSONField(null=True, blank=True)
generated_test = ArrayField(models.TextField(), null=True, blank=True)
instrumented_generated_test = ArrayField(models.TextField(), null=True, blank=True)
test_framework = models.CharField(max_length=32, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
aiservice_commit_id = models.CharField(max_length=50, null=True, blank=True)
metadata = models.JSONField(null=True, blank=True)
experiment_metadata = models.JSONField(null=True, blank=True)
final_explanation = models.TextField(null=True, blank=True)
ranking = models.JSONField(null=True, blank=True)
optimizations_origin = models.JSONField(null=True, blank=True)
# PR suggestions or create Approval fields
approval_required = models.BooleanField(default=False)
approval_status = models.CharField(max_length=20, null=True, blank=True)
approval_user = models.CharField(max_length=255, null=True, blank=True)
approval_timestamp = models.DateTimeField(null=True, blank=True)
slack_message_ts = models.CharField(max_length=50, null=True, blank=True)
organization = models.CharField(max_length=255, null=True, blank=True)
repository = models.CharField(max_length=255, null=True, blank=True)
review_quality = models.CharField(max_length=255, null=True, blank=True)
review_explanation = models.CharField(max_length=255, null=True, blank=True)
calling_fn_details = models.CharField(max_length=1100, null=True, blank=True)
class Meta:
managed = False
db_table = "optimization_features"
class OptimizationEvents(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
event_type = models.CharField(max_length=64) # 'pr_created', 'pr_merged', 'pr_closed'
user_id = models.CharField(max_length=255, null=True, blank=True)
repository_id = models.CharField(max_length=255, null=True, blank=True)
trace_id = models.CharField(max_length=36, null=True, blank=True, unique=True)
pr_id = models.CharField(max_length=255, null=True, blank=True, unique=True)
api_key_id = models.IntegerField(null=True, blank=True)
llm_cost = models.FloatField(null=True, blank=True)
metadata = models.JSONField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
current_username = models.CharField(max_length=255, null=True, blank=True)
baseBranch = models.CharField(max_length=255, null=True, blank=True)
pr_url = models.CharField(max_length=255, null=True, blank=True)
is_optimization_found = models.BooleanField(null=True, blank=True)
is_staging = models.BooleanField(null=True, blank=True)
status = models.CharField(max_length=255, null=True, blank=True)
function_name = models.CharField(max_length=255, null=True, blank=True)
file_path = models.CharField(max_length=255, null=True, blank=True)
speedup_x = models.FloatField(null=True, blank=True)
speedup_pct = models.FloatField(null=True, blank=True)
class Meta:
managed = False
db_table = "optimization_events"
class Repositories(models.Model):
id = models.CharField(max_length=255, primary_key=True)
github_repo_id = models.CharField(max_length=255, unique=True)
installation_id = models.IntegerField()
name = models.CharField(max_length=255)
full_name = models.CharField(max_length=255)
is_private = models.BooleanField()
is_active = models.BooleanField(default=True)
has_github_action = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
last_optimized = models.DateTimeField(null=True, blank=True)
optimizations_limit = models.IntegerField(null=True, blank=True)
optimizations_used = models.IntegerField(default=0)
class Meta:
managed = False
db_table = "repositories"
class LoggingSchema(Schema):
trace_id: str
speedup_ratio: dict[str, float | int | None] | None
original_runtime: float | int | None
optimized_runtime: dict[str, float | int | None] | None
is_correct: dict[str, bool] | None
optimized_line_profiler_results: dict[str, str] | None = None
metadata: dict[str, Any] | None = None
optimizations_post: dict[str, str] | None = None
class LoggingErrorResponseSchema(Schema):
error: str