File size: 2,304 Bytes
6de4a00
 
d044c5c
6de4a00
be2dee9
a825f6c
 
 
 
 
6de4a00
 
 
 
 
 
 
ad17334
6de4a00
51387b1
 
 
 
 
d044c5c
3d900a3
d044c5c
 
1ca3568
d044c5c
 
be2dee9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d044c5c
6de4a00
a825f6c
51387b1
 
 
6de4a00
ad17334
51387b1
a825f6c
ad17334
a825f6c
ad17334
be2dee9
 
 
 
 
 
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
import os
import litellm
from fastapi import FastAPI, HTTPException, Header, Depends
from pydantic import BaseModel
import gradio as gr

# Configuration du modèle
model_name = "gemini/gemini-1.5-pro"
api_key = os.environ.get("GEMINI_API_KEY")

# Configuration de LiteLLM
litellm.api_key = api_key

app = FastAPI()

class PromptRequest(BaseModel):
    prompt: str
    model: str = "gemini/gemini-1.5-pro"  # Valeur par défaut

# Prompt de base
base_prompt = """
Tu es un développeur logiciel expérimenté. Tu dois toujours répondre en français d'une manière réfléchie et concise. 
"""

# Clé API pour l'authentification
USER_API_KEY = os.environ.get("USER_API_KEY")  # Récupère la valeur de la variable d'environnement

async def verify_api_key(x_api_key: str = Header(...)):
    if x_api_key != USER_API_KEY:
        raise HTTPException(status_code=401, detail="Clé API invalide")

# Historique de la conversation
conversation_history = []

def chatbot_function(user_input):
    conversation_history.append({"role": "user", "content": user_input})

    response = litellm.completion(
        model=model_name,  # Utilisation du modèle par défaut pour le chatbot
        messages=conversation_history
    )

    conversation_history.append({"role": "assistant", "content": response.choices[0].message.content})

    return conversation_history

# Interface Gradio
iface = gr.Interface(
    fn=chatbot_function,
    inputs=gr.Textbox(lines=2, placeholder="Votre message..."),
    outputs="chatbot",
    title="Chatbot",
)


@app.post("/", dependencies=[Depends(verify_api_key)])
async def predict(request: PromptRequest):
    try:
        # Ajout du prompt de base à la requête de l'utilisateur
        full_prompt = base_prompt + request.prompt 

        response = litellm.completion(
            model=request.model, 
            messages=[{"role": "user", "content": full_prompt}]
        )
        return {"response": response.choices[0].message.content, "model": request.model}
    except Exception as e:
        return {"error": str(e)}

# Lancement de l'interface Gradio après le lancement de FastAPI
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)  # Lance FastAPI
    iface.launch(share=True)  # Lance Gradio et partage l'interface