{"id":963,"date":"2025-08-06T08:00:18","date_gmt":"2025-08-06T06:00:18","guid":{"rendered":"https:\/\/germanmallo.com\/?p=963"},"modified":"2026-10-05T08:15:52","modified_gmt":"2026-10-05T06:15:52","slug":"modelo-open-source-openai-local","status":"publish","type":"post","link":"https:\/\/germanmallo.com\/en\/modelo-open-source-openai-local\/","title":{"rendered":"C\u00f3mo utilizar el nuevo modelo \u201copen\u201d de OpenAI desde mi terminal"},"content":{"rendered":"<p style=\"text-align: justify\">Llevaba tiempo esperando esto. OpenAI, <strong>por fin<\/strong>, ha liberado <a href=\"https:\/\/openai.com\/es-ES\/index\/introducing-gpt-oss\/\"><strong>gpt-oss<\/strong><\/a>, su <strong>primera familia de modelos con pesos abiertos<\/strong> en muchos a\u00f1os: dos versiones, <strong>gpt-oss-120b<\/strong> y <strong>gpt-oss-20b<\/strong>, con <strong>licencia Apache 2.0<\/strong> y pensados para ejecutarse en local. Ayer, <strong>5 de agosto de 2025<\/strong>, publicaron la p\u00e1gina oficial y los enlaces de descarga. Yo, que soy bastante entusiasta de tener los modelos funcionando en mi propia m\u00e1quina, estaba deseando algo as\u00ed: menos dependencia de servicios externos, m\u00e1s control y margen para cacharrear.<\/p>\n<p><!--more--><\/p>\n<blockquote>\n<p style=\"text-align: justify\">No es \u201copen-source\u201d en el sentido m\u00e1s estricto (no han publicado los datos ni el proceso completo de entrenamiento), pero s\u00ed es <a href=\"https:\/\/es.tradingview.com\/news\/invezz:8f1ebdf0609cd:0\/\"><strong>open-weight<\/strong><\/a>, con una licencia permisiva y pesos descargables. Para muchos usos, eso es m\u00e1s que suficiente.<\/p>\n<\/blockquote>\n<hr \/>\n<h3 id=\"-qu-es-exactamente-lo-que-han-lanzado-y-por-qu-me-interesa-\">\u00bfQu\u00e9 es exactamente lo que han lanzado y por qu\u00e9 me interesa?<\/h3>\n<p style=\"text-align: justify\">OpenAI ha publicado dos modelos:<\/p>\n<ul style=\"text-align: justify\">\n<li><strong>gpt-oss-120b<\/strong>, pensado para tareas exigentes y que requiere una <strong>GPU con unos 80 GB de VRAM<\/strong>.<\/li>\n<li><strong>gpt-oss-20b<\/strong>, mucho m\u00e1s ligero, que <strong>funciona con unos 16 GB<\/strong> de memoria (ideal para ordenadores de escritorio, port\u00e1tiles potentes o servidores dom\u00e9sticos).<\/li>\n<\/ul>\n<p style=\"text-align: justify\">Ambos admiten <strong>contexto de hasta 128k tokens<\/strong>, y tienen una particularidad que me parece interesante: se puede ajustar el \u201c<strong>esfuerzo de razonamiento<\/strong>\u201d (<em>low<\/em>, <em>medium<\/em> o <em>high<\/em>) simplemente con una instrucci\u00f3n al sistema. Esto permite modular el rendimiento y el coste seg\u00fan el uso.<\/p>\n<p style=\"text-align: justify\">OpenAI presenta estos modelos como un paso intermedio: no sustituyen a los modelos hospedados (tipo GPT-4), pero s\u00ed permiten tener opciones <strong>privadas, reproducibles y controladas<\/strong>, que se pueden integrar en cualquier flujo local. Justo lo que quer\u00eda.<\/p>\n<hr \/>\n<h3 id=\"casos-de-uso-que-tengo-en-mente\">Casos de uso que tengo en mente<\/h3>\n<ul>\n<li style=\"text-align: justify\"><strong>Agentes locales<\/strong> que puedan ejecutar c\u00f3digo, navegar o hacer <em>function calling<\/em> sin conexi\u00f3n a la nube.<\/li>\n<li style=\"text-align: justify\"><strong>Razonamiento complejo<\/strong> en problemas t\u00e9cnicos o de c\u00f3digo, con latencia estable.<\/li>\n<li style=\"text-align: justify\"><a href=\"https:\/\/germanmallo.com\/portfolio\/\" target=\"_blank\" rel=\"noopener\"><strong>Proyectos personales<\/strong><\/a> en los que no quiero depender de una API externa o enviar datos fuera.<\/li>\n<li style=\"text-align: justify\"><strong>Ajustes personalizados<\/strong>, sin restricciones comerciales.<\/li>\n<\/ul>\n<hr \/>\n<h3 id=\"as-lo-he-puesto-a-funcionar-todo-desde-la-terminal-\">As\u00ed lo he puesto a funcionar (todo desde la terminal)<\/h3>\n<h4 id=\"opci-n-r-pida-ollama-\">Opci\u00f3n r\u00e1pida: <strong>Ollama<\/strong><\/h4>\n<p style=\"text-align: justify\">Si quiero probar el modelo <em>ya<\/em>, la ruta m\u00e1s directa es con <strong>Ollama<\/strong>, que permite tirar de modelos con un solo comando:<\/p>\n<pre><code class=\"lang-bash\"><span class=\"hljs-comment\"># Modelo peque\u00f1o (recomendado para empezar)<\/span>\nollama <span class=\"hljs-keyword\">run<\/span><span class=\"bash\"> gpt-oss:20b\n<\/span>\n<span class=\"hljs-comment\"># Modelo grande (si tienes una GPU potente)<\/span>\nollama <span class=\"hljs-keyword\">run<\/span><span class=\"bash\"> gpt-oss:120b<\/span>\n<\/code><\/pre>\n<p style=\"text-align: justify\">Estos modelos ya est\u00e1n publicados y disponibles en la interfaz de Ollama. En el primer mensaje, puedes indicar el nivel de razonamiento, por ejemplo:<\/p>\n<pre><code class=\"lang-txt\"><span class=\"hljs-string\">Sistema:<\/span> <span class=\"hljs-string\">Reasoning:<\/span> medium\n<\/code><\/pre>\n<p>Listo para funcionar en segundos.<\/p>\n<hr \/>\n<h4 id=\"api-local-compatible-con-openai-vllm-\">API local compatible con OpenAI: <strong>vLLM<\/strong><\/h4>\n<p style=\"text-align: justify\">Si quiero algo m\u00e1s vers\u00e1til, levanto un <strong>servidor local<\/strong> compatible con la API de OpenAI usando <strong>vLLM<\/strong>. Esto me permite conectarme desde scripts, aplicaciones o terminal.<\/p>\n<p>Por ejemplo, en Docker:<\/p>\n<pre><code class=\"lang-bash\">docker run --gpus all \\\n  -<span class=\"ruby\">p <span class=\"hljs-number\">8000<\/span><span class=\"hljs-symbol\">:<\/span><span class=\"hljs-number\">8000<\/span> \\\n<\/span>  -<span class=\"ruby\">-ipc=host \\\n<\/span>  vllm\/vllm-openai:gptoss \\\n  -<span class=\"ruby\">-model openai\/gpt-oss-<span class=\"hljs-number\">20<\/span>b<\/span>\n<\/code><\/pre>\n<p>Y para interactuar v\u00eda HTTP:<\/p>\n<pre><code class=\"lang-bash\">curl http:<span class=\"hljs-comment\">\/\/localhost:8000\/v1\/chat\/completions \\<\/span>\n  -H <span class=\"hljs-string\">\"Content-Type: application\/json\"<\/span> \\\n  -d <span class=\"hljs-string\">'{\n    \"<\/span>model<span class=\"hljs-string\">\": \"<\/span>openai\/gpt-oss<span class=\"hljs-number\">-20<\/span>b<span class=\"hljs-string\">\",\n    \"<\/span>messages<span class=\"hljs-string\">\": [\n      {\"<\/span>role<span class=\"hljs-string\">\": \"<\/span><span class=\"hljs-built_in\">system<\/span><span class=\"hljs-string\">\", \"<\/span>content<span class=\"hljs-string\">\": \"<\/span>Reasoning: high<span class=\"hljs-string\">\"},\n      {\"<\/span>role<span class=\"hljs-string\">\": \"<\/span>user<span class=\"hljs-string\">\", \"<\/span>content<span class=\"hljs-string\">\": \"<\/span>Expl\u00edcame RAG en <span class=\"hljs-number\">5<\/span> l\u00edneas.<span class=\"hljs-string\">\"}\n    ],\n    \"<\/span>max_tokens<span class=\"hljs-string\">\": 300\n  }'<\/span>\n<\/code><\/pre>\n<p>Ideal si quieres montar un entorno tipo API privada.<\/p>\n<hr \/>\n<h4 id=\"opci-n-m-s-flexible-transformers-hugging-face-\">Opci\u00f3n m\u00e1s flexible: <strong>Transformers (Hugging Face)<\/strong><\/h4>\n<p>Si prefiero escribir un script en Python, puedo usar <strong>Transformers<\/strong> directamente con el modelo:<\/p>\n<pre><code class=\"lang-bash\">pip <span class=\"hljs-keyword\">install<\/span> -U transformers torch\npython - &lt;&lt; <span class=\"hljs-string\">'PY'<\/span>\n<span class=\"hljs-keyword\">from<\/span> transformers <span class=\"hljs-keyword\">import<\/span> pipeline\n<span class=\"hljs-keyword\">pipe<\/span> = pipeline(\n    <span class=\"hljs-string\">\"text-generation\"<\/span>,\n    <span class=\"hljs-keyword\">model<\/span>=<span class=\"hljs-string\">\"openai\/gpt-oss-20b\"<\/span>,\n    torch_dtype=<span class=\"hljs-string\">\"auto\"<\/span>,\n    device_map=<span class=\"hljs-string\">\"auto\"<\/span>\n)\nmessages = [\n  {<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"system\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: <span class=\"hljs-string\">\"Reasoning: low\"<\/span>},\n  {<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"user\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: <span class=\"hljs-string\">\"Dame un ejemplo de prompt para generar tests unitarios.\"<\/span>}\n]\n<span class=\"hljs-keyword\">out<\/span> = <span class=\"hljs-keyword\">pipe<\/span>(messages, max_new_tokens=<span class=\"hljs-number\">256<\/span>)\nprint(<span class=\"hljs-keyword\">out<\/span>[<span class=\"hljs-number\">0<\/span>][<span class=\"hljs-string\">\"generated_text\"<\/span>][<span class=\"hljs-number\">-1<\/span>])\nPY\n<\/code><\/pre>\n<p>Este pipeline ya soporta el <strong>formato de chat \u201charmony\u201d<\/strong> que OpenAI recomienda para gpt-oss.<\/p>\n<hr \/>\n<h4 id=\"opci-n-minimalista-descargar-los-pesos\">Opci\u00f3n minimalista: descargar los pesos<\/h4>\n<p>Si lo que quiero es solo los archivos para trastear o integrarlos de otra forma:<\/p>\n<pre><code class=\"lang-bash\">huggingface-<span class=\"hljs-keyword\">cli<\/span> download openai\/gpt-oss-20b --<span class=\"hljs-keyword\">local<\/span>-<span class=\"hljs-keyword\">dir<\/span> gpt-oss-20b\nhuggingface-<span class=\"hljs-keyword\">cli<\/span> download openai\/gpt-oss-120b --<span class=\"hljs-keyword\">local<\/span>-<span class=\"hljs-keyword\">dir<\/span> gpt-oss-120b\n<\/code><\/pre>\n<p>Todos los detalles (formatos, configuraciones, cuantizaci\u00f3n, etc.) est\u00e1n en los <em>model cards<\/em> oficiales.<\/p>\n<hr \/>\n<h3 id=\"detalles-t-cnicos-que-me-guardo\">Detalles t\u00e9cnicos que me guardo<\/h3>\n<ul>\n<li style=\"text-align: justify\"><strong>Licencia:<\/strong> Apache 2.0 \u2192 permite uso comercial y ajuste fino (<em>fine-tuning<\/em>).<\/li>\n<li style=\"text-align: justify\"><strong>Cuantizaci\u00f3n:<\/strong> los pesos vienen en formato <strong>MXFP4<\/strong>, lo que permite usar menos memoria.<\/li>\n<li style=\"text-align: justify\"><strong>Requisitos orientativos:<\/strong>\n<ul>\n<li><code>20b<\/code>: funciona bien con ~16 GB de VRAM.<\/li>\n<li><code>120b<\/code>: requiere ~80 GB (no es para todos los equipos, claro).<\/li>\n<\/ul>\n<\/li>\n<li style=\"text-align: justify\"><strong>Contexto largo:<\/strong> hasta 128k tokens \u2192 \u00fatil para documentos extensos.<\/li>\n<li style=\"text-align: justify\"><strong>Rendimiento:<\/strong> OpenAI lo sit\u00faa cerca de modelos como o3-mini o o4-mini, y bien preparado para tareas de razonamiento, programaci\u00f3n y agentes.<\/li>\n<\/ul>\n<p style=\"text-align: justify\">Llevaba a\u00f1os usando modelos cerrados de OpenAI y, aunque son buen\u00edsimos, echaba en falta algo que pudiera descargar, ejecutar, modificar&#8230; y <strong>controlar<\/strong>. Esto, sin ser \u201copen-source\u201d de verdad, <strong>se siente como un paso importante<\/strong>. Ahora puedo tener mis propios modelos GPT-style corriendo en casa, listos para lo que surja.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Llevaba tiempo esperando esto. OpenAI, por fin, ha liberado gpt-oss, su primera familia de modelos con pesos abiertos en muchos a\u00f1os: dos versiones, gpt-oss-120b y gpt-oss-20b, con licencia Apache 2.0 y pensados para ejecutarse en local. Ayer, 5 de agosto de 2025, publicaron la p\u00e1gina oficial y los enlaces de descarga. Yo, que soy bastante [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":990,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[76],"tags":[222,126,267],"class_list":["post-963","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia","tag-ia-local","tag-llm","tag-modelos-abiertos"],"acf":[],"_links":{"self":[{"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/posts\/963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/comments?post=963"}],"version-history":[{"count":1,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/posts\/963\/revisions"}],"predecessor-version":[{"id":4515,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/posts\/963\/revisions\/4515"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/media\/990"}],"wp:attachment":[{"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/media?parent=963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/categories?post=963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/germanmallo.com\/en\/wp-json\/wp\/v2\/tags?post=963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}