feat: implement create-chat-conversation function with OpenAI integration and Supabase support
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:
2026-02-13 09:31:58 -06:00
parent f441976a7a
commit a70f0c52a9
8 changed files with 742 additions and 35 deletions
+184 -12
View File
@@ -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": []
}