feat: implement create-chat-conversation function with OpenAI integration and Supabase support
CI / test (pull_request) Failing after 8s
CI / test (pull_request) Failing after 8s
- Added CORS handling for the create-chat-conversation function. - Implemented health check endpoint for the function. - Created endpoints for managing conversations and messages with OpenAI. - Added error handling and response formatting for better API usability. - Introduced utility functions for environment variable management and Supabase client creation. - Enhanced schema handling for structured responses from OpenAI. - Implemented conversation archiving and retrieval logic.
This commit is contained in:
@@ -357,18 +357,18 @@
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{\n",
|
||||
" id: \u001b[32m\"conv_698f33afabe48195a8a5788835263c32097da13f4f3911d1\"\u001b[39m,\n",
|
||||
" object: \u001b[32m\"conversation.deleted\"\u001b[39m,\n",
|
||||
" deleted: \u001b[33mtrue\u001b[39m\n",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"execution_count": 47,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
"ename": "Error",
|
||||
"evalue": "404 Conversation with id 'conv_698f3438114c8194a400f01568cf1a56058487a13fa1da16' not found.",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"Stack trace:",
|
||||
"Error: 404 Conversation with id 'conv_698f3438114c8194a400f01568cf1a56058487a13fa1da16' not found.",
|
||||
" at APIError.generate (https://jsr.io/@openai/openai/6.16.0/core/error.ts:84:14)",
|
||||
" at OpenAI.makeStatusError (https://jsr.io/@openai/openai/6.16.0/client.ts:478:28)",
|
||||
" at OpenAI.makeRequest (https://jsr.io/@openai/openai/6.16.0/client.ts:728:24)",
|
||||
" at eventLoopTick (ext:core/01_core.js:187:7)",
|
||||
" at async <anonymous>:8:1"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
@@ -377,6 +377,7 @@
|
||||
"await supabase.from(\"conversaciones_plan\").update({\n",
|
||||
" estado: \"ARCHIVANDO\",\n",
|
||||
" conversacion_json: items,\n",
|
||||
" openai_conversation_id: null,\n",
|
||||
"}).eq(\"id\", conversationPlane.id);\n",
|
||||
"\n",
|
||||
"await openai.conversations.delete(conversation.openai_conversation_id);"
|
||||
@@ -537,6 +538,177 @@
|
||||
"execution_count": null,
|
||||
"id": "3e705a02",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"{ data: { ok: true }, error: null }\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"const { data, error } = await supabase.functions.invoke(\n",
|
||||
" \"create-chat-conversation/health\",\n",
|
||||
" {\n",
|
||||
" method: \"GET\",\n",
|
||||
" },\n",
|
||||
");\n",
|
||||
"\n",
|
||||
"console.log({ data, error });\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "57e06acc",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"{\n",
|
||||
" data: {\n",
|
||||
" conversation_plan: {\n",
|
||||
" id: \"afafb048-8108-4b19-b170-8c27f89bfa96\",\n",
|
||||
" plan_estudio_id: \"4660b774-a6e2-44f4-a340-747b41235c7c\",\n",
|
||||
" openai_conversation_id: \"conv_698f41b0582c819694b1565021a2390c09878265d4aa3f0d\",\n",
|
||||
" estado: \"ACTIVA\"\n",
|
||||
" }\n",
|
||||
" },\n",
|
||||
" error: null\n",
|
||||
"}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"const { data, error } = await supabase.functions.invoke(\n",
|
||||
" \"create-chat-conversation/conversations\",\n",
|
||||
" {\n",
|
||||
" method: \"POST\",\n",
|
||||
" body: {\n",
|
||||
" plan_estudio_id: input.id,\n",
|
||||
" instanciador: \"alex\",\n",
|
||||
" },\n",
|
||||
" },\n",
|
||||
");\n",
|
||||
"\n",
|
||||
"console.log({ data, error });\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 75,
|
||||
"id": "3426d5ff",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"{\n",
|
||||
" respuesta: {\n",
|
||||
" ok: true,\n",
|
||||
" openai_response_id: \"resp_09878265d4aa3f0d00698f41f461b88196858dc9a9ad31fc38\",\n",
|
||||
" data: {\n",
|
||||
" perfil_de_ingreso: \"El aspirante deberá haber concluido el bachillerato con perfil Área 1 (Ciencias Físico-Matemáticas). Debe demostrar sólido dominio de matemáticas, física y química, así como capacidad de razonamiento lógico-abstracto y resolución de problemas complejos. Se espera experiencia en el manejo básico de herramientas computacionales y en la lectura e interpretación de textos científicos, así como habilidad para aprender de forma autónoma y trabajar en equipo. El candidato debe mostrar interés por la física, especialmente en temas teóricos y experimentales, y compromiso con la ética científica, la comunicación técnica y la realización de proyectos con buenas prácticas de investigación. En suma, se valora la curiosidad, la iniciativa, la disciplina y la capacidad para adaptar ideas complejas a contextos interdisciplinarios.\",\n",
|
||||
" programa_de_investigacion: \"No aplica\",\n",
|
||||
" \"ai-message\": \"Se mejoró la redacción del perfil de ingreso para mayor claridad y alineación con las competencias esperadas (matemáticas, física, química, razonamiento, herramientas computacionales, aprendizaje autónomo y trabajo en equipo) y se propusieron temas de investigación adecuados para un proyecto de Bachillerato en gravedad cuántica de bucles. Temas de investigación sugeridos: 1) Modelo computacional de una red de espines 2D para estudiar geometría emergente y observables básicos; 2) Protocolo mínimo de reproducibilidad en simulaciones de redes de espines; 3) Análisis conceptual comparando GR y LQG en cosmología a nivel didáctico. Recomendación: ajustar el alcance y recursos con el tutor para asegurar viabilidad y supervisión adecuada.\"\n",
|
||||
" },\n",
|
||||
" raw: '{\"perfil_de_ingreso\":\"El aspirante deberá haber concluido el bachillerato con perfil Área 1 (Ciencias Físico-Matemáticas). Debe demostrar sólido dominio de matemáticas, física y química, así como capacidad de razonamiento lógico-abstracto y resolución de problemas complejos. Se espera experiencia en el manejo básico de herramientas computacionales y en la lectura e interpretación de textos científicos, así como habilidad para aprender de forma autónoma y trabajar en equipo. El candidato debe mostrar interés por la física, especialmente en temas teóricos y experimentales, y compromiso con la ética científica, la comunicación técnica y la realización de proyectos con buenas prácticas de investigación. En suma, se valora la curiosidad, la iniciativa, la disciplina y la capacidad para adaptar ideas complejas a contextos interdisciplinarios.\",\"programa_de_investigacion\":\"No aplica\",\"ai-message\":\"Se mejoró la redacción del perfil de ingreso para mayor claridad y alineación con las competencias esperadas (matemáticas, física, química, razonamiento, herramientas computacionales, aprendizaje autónomo y trabajo en equipo) y se propusieron temas de investigación adecuados para un proyecto de Bachillerato en gravedad cuántica de bucles. Temas de investigación sugeridos: 1) Modelo computacional de una red de espines 2D para estudiar geometría emergente y observables básicos; 2) Protocolo mínimo de reproducibilidad en simulaciones de redes de espines; 3) Análisis conceptual comparando GR y LQG en cosmología a nivel didáctico. Recomendación: ajustar el alcance y recursos con el tutor para asegurar viabilidad y supervisión adecuada.\"}'\n",
|
||||
" },\n",
|
||||
" error: null\n",
|
||||
"}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"const { data: respuesta, error } = await supabase.functions.invoke(\n",
|
||||
" `create-chat-conversation/conversations/${data.conversation_plan.id}/messages`,\n",
|
||||
" {\n",
|
||||
" method: \"POST\",\n",
|
||||
" body: {\n",
|
||||
" content:\n",
|
||||
" \"Dale mejor redacción al perfil de ingreso y sugiere tema de investigación.\",\n",
|
||||
" campos: [\"perfil_de_ingreso\", \"programa_de_investigacion\"],\n",
|
||||
" },\n",
|
||||
" },\n",
|
||||
");\n",
|
||||
"\n",
|
||||
"console.log({ respuesta, error });\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 84,
|
||||
"id": "c68073e8",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"{\n",
|
||||
" \"source\": \"openai\",\n",
|
||||
" \"items\": [\n",
|
||||
" {\n",
|
||||
" \"role\": \"assistant\",\n",
|
||||
" \"content\": \"{\\\"perfil_de_ingreso\\\":\\\"El aspirante deberá haber concluido el bachillerato con perfil Área 1 (Ciencias Físico-Matemáticas). Debe demostrar sólido dominio de matemáticas, física y química, así como capacidad de razonamiento lógico-abstracto y resolución de problemas complejos. Se espera experiencia en el manejo básico de herramientas computacionales y en la lectura e interpretación de textos científicos, así como habilidad para aprender de forma autónoma y trabajar en equipo. El candidato debe mostrar interés por la física, especialmente en temas teóricos y experimentales, y compromiso con la ética científica, la comunicación técnica y la realización de proyectos con buenas prácticas de investigación. En suma, se valora la curiosidad, la iniciativa, la disciplina y la capacidad para adaptar ideas complejas a contextos interdisciplinarios.\\\",\\\"programa_de_investigacion\\\":\\\"No aplica\\\",\\\"ai-message\\\":\\\"Se mejoró la redacción del perfil de ingreso para mayor claridad y alineación con las competencias esperadas (matemáticas, física, química, razonamiento, herramientas computacionales, aprendizaje autónomo y trabajo en equipo) y se propusieron temas de investigación adecuados para un proyecto de Bachillerato en gravedad cuántica de bucles. Temas de investigación sugeridos: 1) Modelo computacional de una red de espines 2D para estudiar geometría emergente y observables básicos; 2) Protocolo mínimo de reproducibilidad en simulaciones de redes de espines; 3) Análisis conceptual comparando GR y LQG en cosmología a nivel didáctico. Recomendación: ajustar el alcance y recursos con el tutor para asegurar viabilidad y supervisión adecuada.\\\"}\"\n",
|
||||
" },\n",
|
||||
" {\n",
|
||||
" \"role\": \"user\",\n",
|
||||
" \"content\": \"Dale mejor redacción al perfil de ingreso y sugiere tema de investigación.\"\n",
|
||||
" }\n",
|
||||
" ]\n",
|
||||
"}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"const { data: respuesta, error } = await supabase.functions.invoke(\n",
|
||||
" `create-chat-conversation/conversations/${data.conversation_plan.id}/messages`,\n",
|
||||
" {\n",
|
||||
" method: \"GET\"\n",
|
||||
" },\n",
|
||||
");\n",
|
||||
"\n",
|
||||
"console.log(JSON.stringify(respuesta, null, 2));\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 87,
|
||||
"id": "7fbae7c3",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{ ok: \u001b[33mtrue\u001b[39m }"
|
||||
]
|
||||
},
|
||||
"execution_count": 87,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"const { data: respuesta, error } = await supabase.functions.invoke(\n",
|
||||
" `create-chat-conversation/conversations/${data.conversation_plan.id}/archive`,\n",
|
||||
" {\n",
|
||||
" method: \"DELETE\"\n",
|
||||
" },\n",
|
||||
");\n",
|
||||
"\n",
|
||||
"respuesta\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "852fa8b0",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user