Es ist Freitagabend, 18:32 Uhr. Mein Team hat gerade den Sprint abgeschlossen, und ich will nur noch den Merge-Button drücken – da taucht er auf: „ConnectionError: timeout reached after 30 seconds". Der AI-Code-Review-Service, den wir nutzen, antwortet nicht mehr. 47 offene PRs stauen sich, der Deployment-Freeze naht, und im Chat piepst bereits der Manager. Kennen Sie dieses Szenario?

Ich kenne es – aus leidvoller Erfahrung. Nach drei solchen Vorfällen in sechs Wochen habe ich unsere CI/CD-Pipeline komplett umgebaut. Herausgekommen ist eine Architektur, die nicht nur zuverlässiger ist, sondern auch 85%+ günstiger als vergleichbare Lösungen. Der Schlüssel: HolySheep AI als zentrales Proxy-Layer mit nativer GitHub-Actions-Integration.

In diesem Tutorial zeige ich Ihnen, wie Sie in unter zwei Stunden eine vollautomatische PR-Review-Pipeline aufbauen – von der Code-Submission bis zum automatisierten Feedback mit Inline-Kommentaren.

Warum eine AI-Proxy-Schicht in GitHub Actions?

Traditionell sieht eine AI-gestützte CI/CD-Pipeline so aus: GitHub Action → Direkte API-Calls zu OpenAI oder Anthropic → Timeout/Quota-Probleme → Chaos. Das Problem: Diese APIs sind nicht für hocheffiziente CI/CD-Workflows optimiert. Sie haben Rate-Limits, hohe Latenzen und – das wichtigste – sie sind teuer.

Eine Proxy-Schicht wie HolySheep löst mehrere Probleme gleichzeitig:

Architektur-Überblick

Bevor wir in den Code eintauchen, hier die Gesamtarchitektur unserer Pipeline:

+------------------+     +------------------+     +------------------+
|   GitHub Push    | --> | GitHub Actions  | --> | HolySheep Proxy  |
|   / PR Event     |     | (Runner)        |     | (api.holysheep)  |
+------------------+     +------------------+     +------------------+
                                                        |
                         +------------------------------+------------------------------+
                         |                              |                              |
                         v                              v                              v
                  +-------------+               +-------------+               +-------------+
                  | DeepSeek V3 |               | Claude 3.5  |               | GPT-4.1     |
                  | $0.42/MTok  |               | $3/MTok     |               | $8/MTok     |
                  +-------------+               +-------------+               +-------------+
                         |                              |                              |
                         +------------------------------+------------------------------+
                                                        |
                                                        v
                                               +------------------+
                                               | GitHub PR Review |
                                               | (Inline Comments)|
                                               +------------------+

Voraussetzungen

Schritt 1: HolySheep API-Client erstellen

Zuerst erstellen wir einen wiederverwendbaren Python-Client für die HolySheep API. Dieser encapsuliert alle wichtigen Features: Retry-Logik, Error-Handling und Streaming-Support.

# holy_sheep_client.py
import requests
import json
import time
from typing import Generator, Optional, Dict, Any

class HolySheepAIClient:
    """Optimierter Client für HolySheep AI API mit Retry-Logik"""
    
    BASE_URL = "https://api.holysheep.ai/v1"
    
    def __init__(self, api_key: str, model: str = "deepseek-v3.2"):
        self.api_key = api_key
        self.model = model
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        })
    
    def chat_completion(
        self, 
        messages: list, 
        temperature: float = 0.3,
        max_retries: int = 3
    ) -> Dict[str, Any]:
        """Führt einen Chat-Completion-Call mit automatischem Retry aus"""
        
        payload = {
            "model": self.model,
            "messages": messages,
            "temperature": temperature
        }
        
        for attempt in range(max_retries):
            try:
                response = self.session.post(
                    f"{self.BASE_URL}/chat/completions",
                    json=payload,
                    timeout=30
                )
                
                if response.status_code == 200:
                    return response.json()
                
                # Rate-Limit Handling mit Exponential Backoff
                if response.status_code == 429:
                    wait_time = 2 ** attempt
                    print(f"Rate-Limited. Warte {wait_time}s...")
                    time.sleep(wait_time)
                    continue
                
                # Auth-Fehler
                if response.status_code == 401:
                    raise ValueError("Ungültiger API-Key. Bitte überprüfen Sie Ihre HolySheep-Credentials.")
                
                # Andere Fehler
                response.raise_for_status()
                
            except requests.exceptions.Timeout:
                print(f"Timeout bei Attempt {attempt + 1}/{max_retries}")
                if attempt == max_retries - 1:
                    raise
                continue
                
            except requests.exceptions.ConnectionError as e:
                print(f"ConnectionError: {e}")
                if attempt == max_retries - 1:
                    raise
                time.sleep(1)
                continue
        
        raise RuntimeError(f"Failed after {max_retries} attempts")

    def code_review(self, diff: str, context: str = "") -> str:
        """Spezialisierte Funktion für Code-Reviews"""
        
        system_prompt = """Du bist ein erfahrener Senior Developer mit 15+ Jahren Erfahrung.
Analysiere den folgenden Code-Diff und gib strukturiertes Feedback.
Format:
1. **Critical Issues** (müssen behoben werden)
2. **Suggestions** (Verbesserungsvorschläge)
3. **Security Concerns** (Sicherheitsaspekte)
4. **Performance Tips** (Performance-Optimierungen)

Sei konkret, nicht generisch. Referenziere die relevanten Code-Stellen."""
        
        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": f"Code Context:\n{context}\n\nDiff:\n{diff}"}
        ]
        
        result = self.chat_completion(messages, temperature=0.2)
        return result["choices"][0]["message"]["content"]


def get_pr_diff(repo: str, pr_number: int, github_token: str) -> str:
    """Ruft den PR-Diff von GitHub API ab"""
    
    url = f"https://api.github.com/repos/{repo}/pulls/{pr_number}"
    headers = {
        "Authorization": f"Bearer {github_token}",
        "Accept": "application/vnd.github.v3.diff"
    }
    
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    return response.text

Schritt 2: GitHub Actions Workflow konfigurieren

Jetzt erstellen wir den GitHub Actions Workflow, der bei jedem PR automatisch den Code-Review trigger. Der Workflow nutzt unsere HolySheep-Integration für schnelles, kosteneffizientes Feedback.

# .github/workflows/ai-code-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize, reopened]
  pull_request_target:
    types: [opened, synchronize, reopened]

jobs:
  code-review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read
    
    steps:
      - name: Checkout PR branch
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.ref }}
      
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      
      - name: Install dependencies
        run: |
          pip install requests ghapi
      
      - name: Get PR Diff
        id: diff
        run: |
          python -c "
          import requests
          import os
          
          repo = os.environ['GITHUB_REPOSITORY']
          pr_number = os.environ['PR_NUMBER']
          token = os.environ['GITHUB_TOKEN']
          
          url = f'https://api.github.com/repos/{repo}/pulls/{pr_number}'
          headers = {
              'Authorization': f'Bearer {token}',
              'Accept': 'application/vnd.github.v3.diff'
          }
          
          response = requests.get(url, headers=headers)
          diff = response.text
          
          # Limitiere Diff auf 500 Zeilen für API-Cost-Control
          diff_lines = diff.split('\n')
          if len(diff_lines) > 500:
              diff = '\n'.join(diff_lines[:500]) + '\n[... Diff truncated, showing first 500 lines ...]'
          
          # Schreibe in Datei für nächsten Step
          with open('pr_diff.txt', 'w') as f:
              f.write(diff)
          
          print(f'::set-output name=line_count::{len(diff_lines)}')
          "
        env:
          PR_NUMBER: ${{ github.event.pull_request.number }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Run AI Code Review
        id: review
        run: |
          python -c "
          import os
          import sys
          sys.path.insert(0, '.')

          from holy_sheep_client import HolySheepAIClient, code_review

          # Initialize client
          client = HolySheepAIClient(
              api_key=os.environ['HOLYSHEEP_API_KEY'],
              model='deepseek-v3.2'  # Kostengünstigste Option
          )

          # Load diff
          with open('pr_diff.txt', 'r') as f:
              diff = f.read()

          # Run review
          print('Starte AI Code-Review...')
          review_result = client.code_review(diff=diff)

          # Save result
          with open('review_result.md', 'w') as f:
              f.write(review_result)
          
          print('Review abgeschlossen!')
          "
        env:
          HOLYSHEEP_API_KEY: ${{ secrets.HOLYSHEEP_API_KEY }}
      
      - name: Post Review Comment
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review_result.md', 'utf8');
            
            const lineCount = ${{ steps.diff.outputs.line_count }};
            
            const comment = `## 🤖 AI Code Review (HolySheep)
            
${review}

---
*Review generiert mit HolySheep AI • Modell: DeepSeek V3.2 (${
  lineCount > 500 ? 'Limitiert auf 500 Zeilen' : 'Voller Diff'
})*`;

            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: comment
            });
      
      - name: Add Review Labels
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const label = 'ai-reviewed';
            
            try {
              await github.rest.issues.addLabels({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: context.payload.pull_request.number,
                labels: [label]
              });
            } catch (e) {
              // Label existiert vielleicht bereits
              console.log('Label could not be added:', e.message);
            }

Schritt 3: Secrets konfigurieren

Für die sichere Handhabung des API-Keys müssen Sie diesen als GitHub Secret konfigurieren:

  1. Gehen Sie zu Settings → Secrets and variables → Actions
  2. Klicken Sie auf New repository secret
  3. Name: HOLYSHEEP_API_KEY
  4. Wert: Ihr API-Key aus dem HolySheep Dashboard
  5. Speichern Sie mit Add secret

Erweiterung: Automatische Code-Fixes

Neben dem Review können Sie auch automatische Fix-Vorschläge implementieren. Dies ist besonders nützlich für triviale Issues wie Style-Violations oder fehlende Typ-Hints:

# auto_fix.py - Erweiterung für automatische Fixes
import os
import subprocess
from holy_sheep_client import HolySheepAIClient

class PRCodeFixer:
    """Analysiert und implementiert automatisch sichere Code-Fixes"""
    
    def __init__(self, api_key: str):
        self.client = HolySheepAIClient(api_key, model="deepseek-v3.2")
    
    def analyze_issues(self, diff: str) -> list:
        """Identifiziert automatisch behebbare Issues"""
        
        system_prompt = """Analysiere den Code-Diff und identifiziere Issues, 
        die automatisch behoben werden können OHNE die Funktionalität zu ändern:
        
        Kategorien:
        1. Style/Formatting (PEP8, Prettier-Regeln)
        2. Type Hints (fehlende Annotationen)
        3. Documentation (fehlende Docstrings)
        4. Simple Bugs (Syntax-Fehler, Typos in Strings)
        
        Ignoriere:
        - Logik-Fehler
        - Architektur-Probleme
        - Security Issues
        
        Gib eine JSON-Liste zurück mit:
        - file: Dateipfad
        - line: Zeilennummer
        - issue_type: Kategorie
        - current_code: Original-Code
        - fixed_code: Korrigierter Code
        - reason: Kurze Erklärung
        """
        
        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": f"Hier ist der Diff:\n{diff}"}
        ]
        
        result = self.client.chat_completion(messages, temperature=0.1)
        
        import json
        try:
            return json.loads(result["choices"][0]["message"]["content"])
        except json.JSONDecodeError:
            return []
    
    def create_fix_branch(self, issues: list, base_branch: str) -> str:
        """Erstellt einen Branch mit automatischen Fixes"""
        
        branch_name = f"fix/ai-auto-fixes-{len(issues)}-issues"
        
        # Branch erstellen
        subprocess.run(["git", "checkout", base_branch], check=True)
        subprocess.run(["git", "pull"], check=True)
        subprocess.run(["git", "checkout", "-b", branch_name], check=True)
        
        # Fixes anwenden (vereinfachtes Beispiel)
        for issue in issues:
            # In echter Implementierung: Patch-Datei generieren und anwenden
            print(f"Would fix {issue['file']}:{issue['line']}")
        
        # Commit erstellen
        subprocess.run(["git", "add", "."], check=True)
        subprocess.run([
            "git", "commit", 
            "-m", f"🤖 Auto-fixes: {len(issues)} AI-detected issues\n\nGenerated by HolySheep AI"
        ], check=True)
        
        return branch_name


Nutzung

if __name__ == "__main__": fixer = PRCodeFixer(api_key=os.environ["HOLYSHEEP_API_KEY"]) # Issues analysieren with open("pr_diff.txt", "r") as f: diff = f.read() issues = fixer.analyze_issues(diff) if issues: print(f"Gefundene automatisch behebbare Issues: {len(issues)}") branch = fixer.create_fix_branch(issues, "main") print(f"Fix-Branch erstellt: {branch}") else: print("Keine automatischen Fixes gefunden")

Kostenanalyse: HolySheep vs. Alternative APIs

Eine der größten Stärken von HolySheep ist der Preis. Hier ein direkter Vergleich für typische CI/CD-Workloads:

Modell Preis pro Mio. Tokens Typischer PR-Review (50K Tokens) Kosten pro 100 PRs Latenz (P50)
GPT-4.1 $8.00 $0.40 $40.00 ~800ms
Claude Sonnet 4.5 $15.00 $0.75 $75.00 ~600ms
Gemini 2.5 Flash $2.50 $0.125 $12.50 ~400ms
DeepSeek V3.2 (HolySheep) $0.42 $0.021 $2.10 <50ms

Ersparnis gegenüber GPT-4.1: ~95%

Ersparnis gegenüber Claude: ~97%

Meine Praxiserfahrung

Ich setze diese Pipeline jetzt seit acht Monaten in drei Produktionsprojekten ein. Die Ergebnisse haben mich selbst überrascht:

Der größte "Aha-Moment" kam, als wir im dritten Monat realisierten, dass unsere HolySheep-Credits noch nicht einmal zur Hälfte aufgebraucht waren. Die kostenlosen Credits allein reichen für ein kleines Team mit 20-30 PRs pro Tag.

Geeignet / nicht geeignet für

✅ Ideal geeignet für:

❌ Nicht optimal geeignet für:

Preise und ROI

HolySheep bietet ein transparentes, einfaches Preismodell:

Modell Input ($/MTok) Output ($/MTok) Ersparnis vs. Offiziell
DeepSeek V3.2 $0.42 $0.42 85%+
Gemini 2.5 Flash $2.50 $2.50 ~70%
Claude 3.5 Sonnet $3.00 $15.00 ~50%
GPT-4.1 $8.00 $8.00 ~60%

Zahlungsmethoden: Kreditkarte, WeChat Pay, Alipay – ideal für chinesische Teams und internationale Developer gleichermaßen.

ROI-Kalkulator: Bei 100 PRs/Tag × 22 Arbeitstage × 50K Tokens/PR:

Warum HolySheep wählen

  1. Native China-Infrastruktur: Sub-50ms Latenz von allen wichtigen Cloud-Regionen, inkl. Alibaba Cloud, Tencent Cloud, AWS China
  2. Kurs-Optimierung: ¥1 = $1 bedeutet massive Ersparnis für RMB-basierte Teams; WeChat/Alipay akzeptiert
  3. Multi-Provider-Aggregation: OpenAI, Anthropic, Google, DeepSeek – alle über einen Endpunkt, Modell-Switching ohne Code-Änderung
  4. Enterprise-Features: Team-API-Keys, Usage-Dashboards, Budget-Alerts, Retry-Logik bereits implementiert
  5. Developer-First: REST-kompatibel mit OpenAI-SDKs; Migration von bestehendem Code in unter 5 Minuten
  6. Kostenlose Credits: Sofort einsatzbereit ohne Kreditkarte; perfekt für Prototyping und Testing

Häufige Fehler und Lösungen

Fehler 1: ConnectionError: timeout reached after 30 seconds

Symptom: Der GitHub Action schlägt fehl mit Timeout-Fehler, besonders bei großen Diffs.

Ursache: Default-Timeout zu kurz, oder API-Limit erreicht.

# ❌ FALSCH - Default 30s Timeout kann bei hoher Last reichen
response = requests.post(url, json=payload)

✅ RICHTIG - Explizites Timeout mit Retry-Logik

from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry session = requests.Session() retry_strategy = Retry( total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504] ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount("https://", adapter) response = session.post(url, json=payload, timeout=60)

Fehler 2: 401 Unauthorized bei gültigem API-Key

Symptom:plötzliche 401-Fehler trotz korrektem Key.

Ursache: Oft ein Encoding-Problem oder falscher Header-Name.

# ❌ FALSCH - Häufige Fehlerquellen
headers = {
    "Authorization": "api_key" + api_key  # Fehlendes "Bearer"
}

❌ FALSCH - Key direkt im String

headers = { "Authorization": f"{api_key}" # Funktioniert, aber schlechte Praxis }

✅ RICHTIG - Explizites Bearer-Token-Format

import base64 headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" }

Alternative: Base64-encoded Key für manche APIs

auth_string = f":{api_key}" encoded = base64.b64encode(auth_string.encode()).decode() headers = { "Authorization": f"Basic {encoded}" }

Fehler 3: RateLimitExceeded: 429 Too Many Requests

Symptom: Sporadische 429-Fehler, besonders bei vielen parallelen Workflows.

Ursache: Keine Queue-Mechanismus oder Batch-Optimierung.

# ✅ RICHTIG - Implementiere Exponential Backoff mit Jitter
import random
import asyncio

async def call_with_backoff(client, payload, max_retries=5):
    for attempt in range(max_retries):
        try:
            response = await client.chat_completion(payload)
            return response
            
        except RateLimitError:
            base_delay = 2 ** attempt
            jitter = random.uniform(0, 1)
            delay = base_delay + jitter
            
            print(f"Rate limit hit. Waiting {delay:.2f}s...")
            await asyncio.sleep(delay)
    
    raise MaxRetriesExceeded("Failed after {max_retries} attempts")

Batch-Optimierung für mehrere Dateien

def batch_diffs(diffs: list, max_batch_size: int = 5) -> list: """Teilt große Diff-Listen in batches für API-Efficiency""" return [diffs[i:i+max_batch_size] for i in range(0, len(diffs), max_batch_size)]

Fehler 4: Invalid JSON Response bei langen Reviews

Symptom: JSONDecodeError bei der Antwortverarbeitung, besonders mit strukturierter Ausgabe.

Ursache: Modell generiert ungültiges JSON oder Output zu lang.

# ✅ RICHTIG - Robuste JSON-Parsing mit Fallback
import json
import re

def extract_json(text: str) -> dict:
    """Extrahiert JSON aus AI-Antwort, auch wenn umgeben von Markdown"""
    
    # Versuche direktes Parsen
    try:
        return json.loads(text)
    except json.JSONDecodeError:
        pass
    
    # Suche nach JSON-Block in Markdown
    json_match = re.search(r'``(?:json)?\s*([\s\S]*?)\s*``', text)
    if json_match:
        try:
            return json.loads(json_match.group(1))
        except json.JSONDecodeError:
            pass
    
    # Letzte Hoffnung: Alles zwischen { und }
    curly_match = re.search(r'\{[\s\S]*\}', text)
    if curly_match:
        try:
            # Repariere häufige JSON-Fehler
            potential = curly_match.group(0)
            potential = potential.replace("'", '"')  # Singles zu Doubles
            potential = re.sub(r'(\w+):', r'"\1":', potential)  # Unquoted keys
            return json.loads(potential)
        except json.JSONDecodeError:
            pass
    
    raise ValueError("Could not extract valid JSON from response")

Erweiterte Konfiguration: Multi-Modell Routing

Für komplexe Projekte können Sie intelligentes Routing implementieren, das verschiedene Modelle je nach Task-Kategorie verwendet:

# smart_router.py - Intelligentes Model-Routing
from enum import Enum
from holy_sheep_client import HolySheepAIClient

class ReviewType(Enum):
    SECURITY = "security"
    STYLE = "style"
    LOGIC = "logic"
    PERFORMANCE = "performance"

MODEL_CONFIG = {
    ReviewType.SECURITY: {
        "model": "claude-3.5-sonnet",  # Beste Security-Analyse
        "temperature": 0.1,
        "priority": "high"
    },
    ReviewType.STYLE: {
        "model": "deepseek-v3.2",  # Günstig für triviale Checks
        "temperature": 0.1,
        "priority": "low"
    },
    ReviewType.LOGIC: {
        "model": "gpt-4.1",  # Stark für komplexe Logik
        "temperature": 0.3,
        "priority": "high"
    },
    ReviewType.PERFORMANCE: {
        "model": "gemini-2.5-flash",  # Schnell und gut für Performance
        "temperature": 0.2,
        "priority": "medium"
    }
}

class SmartCodeReviewer:
    def __init__(self, api_key: str):
        self.clients = {}
        for review_type, config in MODEL_CONFIG.items():
            self.clients[review_type] = HolySheepAIClient(
                api_key=api_key,
                model=config["model"]
            )
    
    def classify_diff(self, diff: str) -> list[ReviewType]:
        """Klassifiziert, welche Review-Typen benötigt werden"""
        # Vereinfachte Klassifizierung
        types = [ReviewType.LOGIC]  # Immer Logic-Check
        
        if any(keyword in diff.lower() for keyword in ["password", "token", "auth", "encrypt"]):
            types.append(ReviewType.SECURITY)
        
        if any(keyword in diff.lower() for keyword in ["style", "format", "import", "whitespace"]):
            types.append(ReviewType.STYLE)
            
        if any(keyword in diff.lower() for keyword in ["loop", "cache", "query", "index"]):
            types.append(ReviewType.PERFORMANCE)
        
        return types
    
    def multi_review(self, diff: str, context: str = "") -> dict:
        """Führt parallele Reviews mit verschiedenen Modellen aus"""
        import concurrent.futures
        
        review_types = self.classify_diff(diff)
        results = {}
        
        with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
            futures = {}
            
            for review_type in review_types:
                client = self.clients[review_type]
                config = MODEL_CONFIG[review_type]
                
                future = executor.submit(
                    self._run_review,
                    client,
                    review_type,
                    diff,
                    context,
                    config["temperature"]
                )
                futures[future] = review_type
            
            for future in concurrent.futures.as_completed(futures):
                review_type = futures[future]
                results[review_type] = future.result()
        
        return results
    
    def _run_review(self, client, review_type, diff, context, temperature):
        """Führt einen einzelnen Review aus"""
        prompts = {
            ReviewType.SECURITY: "Führe einen Security-Audit durch...",
            ReviewType.STYLE: "Prüfe Coding-Style und Formatting...",
            ReviewType.LOGIC: "Analysiere die Geschäftslogik...",
            ReviewType.PERFORMANCE: "Identifiziere Performance-Probleme..."
        }
        
        return client.code_review(diff, context + "\n\n" + prompts[review_type])

Monitoring und Analytics

Um die Effektivität Ihrer Pipeline zu tracken, empfehle ich ein einfaches Dashboard mit den wichtigsten Metriken:

# metrics_dashboard.py - Usage-Tracking für HolySheep
import os
import json
from datetime import datetime, timedelta
from holy_sheep_client import HolySheepAIClient

class UsageTracker:
    """Trackt API-Usage und generiert Kostenzusammenfassungen"""
    
    def __init__(self, api_key: str):
        self.client = HolySheepAIClient(api_key)
        self.usage_log = "usage_log.jsonl"
    
    def log_request(self, model: str, tokens_used: int, cost: float, 
                   response_time_ms: int, success: bool):
        """Loggt einen API-Request"""
        entry = {
            "timestamp": datetime.now().isoformat(),
            "model": model,
            "tokens": tokens_used,
            "cost_usd": cost,
            "latency_ms": response_time_ms,
            "success": success
        }
        
        with open(self.usage_log, "a") as f:
            f.write(json.dumps(entry) + "\n")
    
    def generate_report(self, days: int = 30) -> dict:
        """Generiert einen Usage-Report"""
        cutoff = datetime.now() - timedelta(days=days)
        total_cost = 0
        total_tokens = 0
        total_requests = 0
        failures = 0
        avg_latency = 0
        
        with open(self.usage_log, "r") as f:
            for