File size: 8,425 Bytes
152413c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\knobb\\OneDrive\\Documents\\ING.SISTEMAS\\SEMESTRE 8\\OPTATIVA II\\API's\\.venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    }
   ],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\knobb\\OneDrive\\Documents\\ING.SISTEMAS\\SEMESTRE 8\\OPTATIVA II\\API's\\.venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running on local URL:  http://127.0.0.1:7860\n",
      "\n",
      "Could not create share link. Please check your internet connection or our status page: https://status.gradio.app.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div><iframe src=\"http://127.0.0.1:7860/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": []
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import gradio as gr\n",
    "from openai import OpenAI\n",
    "client = OpenAI(api_key='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')\n",
    "questions = \"\"\"\n",
    "        1. Cuéntame sobre ti.,\n",
    "        2. ¿Cómo conociste y qué sabes sobre nuestra empresa?,\n",
    "        3. ¿Qué te motivó a postularte para realizar tus practicas en nuestra empresa?,\n",
    "        4. ¿Qué habilidades o conocimientos consideras que puedes aportar a nuestro equipo?,\n",
    "        5. ¿Cuáles son tus principales fortalezas?,\n",
    "        6. ¿Cuáles son tus principales debilidades?,\n",
    "        7. ¿Puedes hablarme sobre un proyecto académico o experiencia laboral relevante que hayas tenido?,\n",
    "        8. ¿Cómo te enfrentas a los desafíos o situaciones difíciles?,\n",
    "        9. ¿Qué esperas lograr durante tus prácticas profesionales?,\n",
    "        10. ¿Cómo te defines en términos de trabajo en equipo y colaboración?,\n",
    "        11. ¿Cómo manejas el trabajo bajo presión o los plazos ajustados?,\n",
    "        12. ¿Has tenido experiencia liderando equipos o proyectos?,\n",
    "        13. ¿Cómo manejas los conflictos en el trabajo?,\n",
    "        14. ¿Qué te gustaría aprender o desarrollar durante tus prácticas con nosotros?,\n",
    "        15. ¿Dónde te ves profesionalmente en los próximos 5 años?,\n",
    "        16. ¿Cómo buscas seguir desarrollándote y mejorando en tu carrera?,\n",
    "        17. ¿Cómo te mantienes actualizado en tu campo de estudio o industria?,\n",
    "        18. ¿Cómo te adaptas a nuevos entornos o situaciones desconocidas?,\n",
    "        19. ¿Qué te diferencia de otros candidatos que están aplicando para estas prácticas?\n",
    "        \"\"\"  \n",
    "    \n",
    "    \n",
    "def get_completion_from_messages(messages, temperature=0, tokens=70 ,model=\"gpt-3.5-turbo\"):\n",
    "    response = client.chat.completions.create(\n",
    "        model=model,\n",
    "        messages=messages,\n",
    "        temperature=temperature,\n",
    "        max_tokens= tokens\n",
    "    )\n",
    "    return response.choices[0].message.content\n",
    "\n",
    "def chat(answer, interview, job, temperature, tokens):\n",
    "\n",
    "    conversation = [{'role':'system', 'content': \n",
    "            f\"\"\"\n",
    "            Eres un entrevistador de recursos humanos, para solicitantes recién egresados/graduados, para realizar sus prácticas profesionales\n",
    "            del puesto {job}, y harás las siguientes preguntas en orden: '{questions}'\n",
    "            \n",
    "            Primero mostraras un saludo preguntando si el usuario está listo para iniciar la entrevista.\n",
    "            Con la respuesta que te del usuario le harás la pregunta.\n",
    "             \n",
    "            Basándote en la respuesta a la pregunta, brindaras una retroalimentación constructiva, precisa, resaltando\n",
    "            los partes que le faltan por mencionar y mejorar al usuario, para que así\n",
    "            pueda mejorar su respuesta para futuras entrevistas y al final de la retroalimentación, preguntarás \n",
    "            que, si tiene más dudas, de ser así responderás las dudas y en cada respuesta preguntarás \n",
    "            si está listo para la siguiente pregunta, de ser que si mostrarás la siguiente pregunta.\n",
    "            \n",
    "            Reglas que seguir:\n",
    "                - Sigue y respeta el orden de las preguntas.\n",
    "                - Resalta las partes que sean buenas respuestas del usuario.\n",
    "                - Si el usuario ingresa texto en inglés, continua en inglés.\n",
    "                - No darás respuesta si el usuario ingresa información que no tiene que ver con la entrevista.\n",
    "                - Al finalizar la entrevista indicaras una retroalimentación general.\n",
    "\n",
    "            \"\"\"\n",
    "        }]\n",
    "       \n",
    "    for user, assistant in interview:\n",
    "        conversation.append({\"role\": \"user\", \"content\": user})\n",
    "        conversation.append({\"role\": \"assistant\", \"content\": assistant})\n",
    "        \n",
    "    conversation.append({\"role\": \"user\", \"content\": answer})\n",
    "\n",
    "    \n",
    "    response = get_completion_from_messages(conversation, temperature, tokens)\n",
    "   \n",
    "    print(temperature)\n",
    "    return response\n",
    "\n",
    "job         = gr.Textbox(label=\"Ingresa el puesto:\")\n",
    "temperature = gr.Slider(label=\"Elige la creatividad de respuestas del modelo.\", minimum=0, maximum=1, step=.1)\n",
    "tokens      = gr.Slider(label=\"Elige la cantidad de palabras de respuestas del modelo.\", minimum=70, maximum=500, step=10)\n",
    "\n",
    "# Crear un tema personalizado\n",
    "theme = gr.Theme(\n",
    "    primary_hue=\"gray\",\n",
    "    # secondary_hue=\"black\",\n",
    "    # neutral_hue=\"red\",\n",
    "    text_size=\"lg\",\n",
    "    # # spacing_size=\"md\",\n",
    "    radius_size=\"sm\",\n",
    "    font_mono=(\"Courier New\", \"monospace\")\n",
    "\n",
    ")\n",
    "\n",
    "iface = gr.ChatInterface(\n",
    "    fn=chat,\n",
    "    title=\"Preparación para entrevistas laborales.\",\n",
    "    additional_inputs=[job, temperature, tokens],\n",
    "    description=\"\"\"\n",
    "        1. Primero ingresarás el tipo de puesto en el campo de abajo \"Additional Inputs\".\\n\n",
    "        2. Responde a las preguntas de la forma más completa posible, para obtener mejor retroalimentación.\\n\n",
    "        3. Inicia la entrevista mandando un saludo.\n",
    "    \"\"\",\n",
    "    textbox=gr.Textbox(placeholder=\"Escribir respuesta..\", container=False, scale=5),\n",
    "    submit_btn=\"Enviar respuesta\",\n",
    "    clear_btn =\"Borrar conversación\",\n",
    "    theme=theme,\n",
    "    \n",
    "    )\n",
    "iface.launch(share=True)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}