ciyidogan commited on
Commit
c294b06
·
verified ·
1 Parent(s): 894c816

Update admin_routes.py

Browse files
Files changed (1) hide show
  1. admin_routes.py +59 -0
admin_routes.py CHANGED
@@ -602,6 +602,65 @@ async def get_project_versions(
602
  "versions": versions
603
  }
604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  # ===================== API Endpoints =====================
606
  @router.get("/apis")
607
  async def list_apis(
 
602
  "versions": versions
603
  }
604
 
605
+ @router.get("/projects/{project_id}/versions/{version1_id}/compare/{version2_id}")
606
+ async def compare_versions(
607
+ project_id: int,
608
+ version1_id: int,
609
+ version2_id: int,
610
+ username: str = Depends(verify_token)
611
+ ):
612
+ """Compare two versions and return differences"""
613
+ project = ConfigProvider.get_project(project_id)
614
+ if not project:
615
+ raise HTTPException(status_code=404, detail="Project not found")
616
+
617
+ v1 = next((v for v in project.versions if v.id == version1_id), None)
618
+ v2 = next((v for v in project.versions if v.id == version2_id), None)
619
+
620
+ if not v1 or not v2:
621
+ raise HTTPException(status_code=404, detail="Version not found")
622
+
623
+ # Deep comparison
624
+ differences = {
625
+ 'general_prompt': {
626
+ 'changed': v1.general_prompt != v2.general_prompt,
627
+ 'v1': v1.general_prompt,
628
+ 'v2': v2.general_prompt
629
+ },
630
+ 'intents': {
631
+ 'added': [],
632
+ 'removed': [],
633
+ 'modified': []
634
+ }
635
+ }
636
+
637
+ # Compare intents
638
+ v1_intents = {i.name: i for i in v1.intents}
639
+ v2_intents = {i.name: i for i in v2.intents}
640
+
641
+ # Find added/removed
642
+ differences['intents']['added'] = list(set(v2_intents.keys()) - set(v1_intents.keys()))
643
+ differences['intents']['removed'] = list(set(v1_intents.keys()) - set(v2_intents.keys()))
644
+
645
+ # Find modified
646
+ for intent_name in set(v1_intents.keys()) & set(v2_intents.keys()):
647
+ i1, i2 = v1_intents[intent_name], v2_intents[intent_name]
648
+ if i1.model_dump() != i2.model_dump():
649
+ differences['intents']['modified'].append({
650
+ 'name': intent_name,
651
+ 'differences': compare_intent_details(i1, i2)
652
+ })
653
+
654
+ log_info(
655
+ f"Version comparison performed",
656
+ user=username,
657
+ project_id=project_id,
658
+ version1_id=version1_id,
659
+ version2_id=version2_id
660
+ )
661
+
662
+ return differences
663
+
664
  # ===================== API Endpoints =====================
665
  @router.get("/apis")
666
  async def list_apis(