File size: 2,455 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
 
 
 
21de675
 
 
85b993c
21de675
 
 
85b993c
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
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
    import threading

    # Lancer FastAPI dans un thread séparé
    api_thread = threading.Thread(target=uvicorn.run, args=(app,), kwargs={"host": "0.0.0.0", "port": 7860})
    api_thread.start()

    # Lancer Gradio sur le port 7860
    iface.launch(server_port=7861, share=True)