File size: 2,756 Bytes
b7e3227
f48033e
db702c7
 
fd245bb
db702c7
b7e3227
 
 
 
 
 
 
 
 
f48033e
 
cca83b9
f48033e
 
b7e3227
 
 
 
 
 
 
 
 
 
 
f48033e
 
18192fe
f48033e
b7e3227
 
 
f48033e
 
 
 
b7e3227
 
 
 
 
 
9ba94ed
16d55a9
4ecb374
d17f8b2
4ecb374
9b7ac3b
4ecb374
 
d17f8b2
 
4ecb374
 
 
b7e3227
 
f48033e
b7e3227
 
 
 
 
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
import gradio as gr
from openai import OpenAI
import json

with open("manual_usuario_text_urls_resumen.json", "r", encoding="utf-8") as file:
    context = file.read()  # Cargar JSON como string

def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    client = OpenAI(
        base_url="https://openrouter.ai/api/v1",
        api_key="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",
    )

    messages = [{"role": "system", "content": system_message}]

    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    messages.append({"role": "user", "content": message})

    response = ""
    completion = client.chat.completions.create(
        extra_body={},
        model="google/gemini-2.0-flash-lite-preview-02-05:free",
        messages=messages,
        max_tokens=max_tokens,
        temperature=temperature,
        top_p=top_p,
    )
    
    for choice in completion.choices:
        response += choice.message.content
        yield response


demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value= 
            f'''Eres un asistente virtual especializado en atenci贸n al cliente para la empresa Wisphub. Tu objetivo es ayudar a los clientes a resolver 煤nicamente problemas t茅cnicos relacionados con la plataforma Wisphub.

                Todas tus respuestas deben basarse exclusivamente en la informaci贸n proporcionada en el siguiente manual de usuario: {context}.
                
                - Incluye en todas tus respuestas el una imagen y el url del manual relacionada a lo que pregunto el usuario, para ello usaras los urls que contiene el manual de usuario, muestra la imagen usando la sintaxis de Markdown sin bloque de c贸digo.
                  
                  ![Descripci贸n de la imagen](URL_de_la_imagen)
                 
                 Si tampoco encuentras informaci贸n relevante, indica que no puedes proporcionar detalles adicionales y sugiere al usuario contactar con el soporte t茅cnico oficial de Wisphub.
                
                - Aseg煤rate de que tus respuestas sean claras y f谩ciles de entender para usuarios sin conocimientos t茅cnicos.
                '''  , label="System message"),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
    ],
)

if __name__ == "__main__":
    demo.launch()