API compatible con OpenAI GLM-5.2: una guía práctica para el esfuerzo de razonamiento, la llamada a funciones y la recuperación de contexto prolongado
importar sistema, subproceso subproceso.run ([sys.executable, “-m”, “pip”, “install”, “-q”, “-U”, “openai”]check=False) import os, re, json, time, getpass from openai import OpenAI PROVIDERS = { “zai”: {“base_url”: “https://api.z.ai/api/paas/v4/”, “model”: “glm-5.2”, “env”: “ZAI_API_KEY”}, “openrouter”: {“base_url”: “https://openrouter.ai/api/v1”, “model”: “z-ai/glm-5.2”, “env”: “OPENROUTER_API_KEY”}, “together”: {“base_url”: “https://api.together.xyz/v1”, “model”: “zai-org/GLM-5.2″,”env”: “TOGETHER_API_KEY”}, “requesty”: {“base_url”: “https://router.requesty.ai/v1”, “model”: “zai/glm-5.2”, “env”: “REQUESTY_API_KEY”}, “huggingface”: {“base_url”: “https://router.huggingface.co/v1″,”model”: “zai-org/GLM-5.2″,”env”: “HF_TOKEN”}, } PROVIDER = “zai” CFG = PROVEEDORES[PROVIDER]
MODELO = CFG[“model”]
def load_api_key(env_name): intente: desde google.colab importe datos de usuario v = userdata.get(env_name) si v: devuelva v excepto Excepción: pase si os.environ.get(env_name): devuelva os.environ[env_name]
return getpass.getpass(f”Ingrese su {env_name}: “) cliente = OpenAI(api_key=load_api_key(CFG[“env”]), URL_base=CFG[“base_url”]) PRICE_IN_PER_M, PRICE_OUT_PER_M = 1,40, 4,40 _USAGE = {“in”: 0, “out”: 0, “calls”: 0} def _track(usage): si uso: _USAGE[“in”] += getattr(uso, “prompt_tokens”, 0) o 0 _USAGE[“out”] += getattr(uso, “completion_tokens”, 0) o 0 _USAGE[“calls”] += 1 def get_reasoning(obj): “””Extrae el rastreo de razonamiento oculto de GLM de un mensaje/delta (un campo adicional del proveedor).””” val = getattr(obj, “reasoning_content”, Ninguno) if val: devuelve val extra = getattr(obj, “model_extra”, Ninguno) o {} if extra.get(“reasoning_content”): devuelve extra[“reasoning_content”]
intente: devolver obj.to_dict().get(“reasoning_content”) excepto Excepción: devolver Ninguno def chat(messages, esfuerzo=Ninguno, pensamiento=True, herramientas=Ninguno, herramienta_choice=”auto”, flujo=False, max_tokens=2048, temperatura=1.0, tool_stream=False): “”” esfuerzo: Ninguno | “alto” | “máximo” (nivel de esfuerzo de pensamiento GLM-5.2; máximo es el modelo predeterminado) pensamiento: Verdadero -> pensamiento profundo activado; Falso -> desactivado (rápido, económico, de baja latencia) Los parámetros específicos de GLM pasan por extra_body para que cualquier cliente OpenAI funcione “”” extra = {“pensamiento”: {“tipo”: “enabled” si el pensamiento está “deshabilitado”}} si es esfuerzo y pensamiento: extra.[“reasoning_effort”] = esfuerzo si tool_stream: extra[“tool_stream”] = True kwargs = dict(modelo=MODELO, mensajes=mensajes, max_tokens=max_tokens, temperatura=temperatura, flujo=flujo, extra_body=extra) if herramientas: kwargs.update(herramientas=herramientas, herramienta_choice=tool_choice) if flujo: kwargs[“stream_options”] = {“include_usage”: True} devuelve client.chat.completions.create(**kwargs)