File size: 3,752 Bytes
d825c91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
from fastapi import APIRouter, HTTPException, Depends
from typing import List, Dict, Any
from loguru import logger
from pydantic import BaseModel

from services.ai_service import ai_service

router = APIRouter()

class ModelConfig(BaseModel):
    provider: str
    model: str
    max_tokens: int = 1000
    temperature: float = 0.7

class BenchmarkRequest(BaseModel):
    prompt: str
    models: List[ModelConfig]

@router.post("/generate")
async def generate_response(

    prompt: str,

    provider: str = "openai",

    model: str = "gpt-3.5-turbo",

    max_tokens: int = 1000,

    temperature: float = 0.7

) -> Dict[str, Any]:
    """

    Generate response using specified AI model.

    

    Parameters:

    - prompt: The input prompt

    - provider: AI provider to use (openai, local, openrouter)

    - model: Model to use

    - max_tokens: Maximum tokens in response

    - temperature: Response temperature

    """
    try:
        response = await ai_service.generate_response(
            prompt=prompt,
            provider=provider,
            model=model,
            max_tokens=max_tokens,
            temperature=temperature
        )
        return response
    except Exception as e:
        logger.error(f"Error generating response: {str(e)}")
        raise HTTPException(status_code=500, detail=str(e))

@router.post("/benchmark")
async def benchmark_models(request: BenchmarkRequest) -> List[Dict[str, Any]]:
    """

    Benchmark multiple models with the same prompt.

    

    Parameters:

    - request: Benchmark request containing prompt and model configurations

    """
    try:
        results = await ai_service.benchmark_models(
            prompt=request.prompt,
            models=[model.dict() for model in request.models]
        )
        return results
    except Exception as e:
        logger.error(f"Error benchmarking models: {str(e)}")
        raise HTTPException(status_code=500, detail=str(e))

@router.get("/available-models")
async def get_available_models() -> Dict[str, List[str]]:
    """Get list of available models for each provider."""
    return {
        "openai": [
            "gpt-3.5-turbo",
            "gpt-4",
            "gpt-4-turbo"
        ],
        "openrouter": [
            "anthropic/claude-2",
            "google/palm-2",
            "meta-llama/llama-2-70b"
        ],
        "local": [
            "llama-2-7b",
            "llama-2-13b",
            "llama-2-70b"
        ]
    }

@router.post("/validate-response")
async def validate_response(

    prompt: str,

    response: str,

    provider: str = "openai",

    model: str = "gpt-3.5-turbo"

) -> Dict[str, Any]:
    """

    Validate AI response against the prompt.

    

    Parameters:

    - prompt: Original prompt

    - response: AI-generated response

    - provider: AI provider used

    - model: Model used

    """
    try:
        validation_prompt = f"""

        Validate if the following response adequately addresses the prompt:

        

        Prompt:

        {prompt}

        

        Response:

        {response}

        

        Provide:

        1. Relevance score (0-1)

        2. Completeness score (0-1)

        3. Specific feedback

        """
        
        validation = await ai_service.generate_response(
            prompt=validation_prompt,
            provider=provider,
            model=model
        )
        
        return {
            "status": "success",
            "validation": validation["response"]
        }
    except Exception as e:
        logger.error(f"Error validating response: {str(e)}")
        raise HTTPException(status_code=500, detail=str(e))