Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import json | |
| import re | |
| from typing import Any | |
| _JSON_BLOCK_RE = re.compile(r"```(?:json)?\s*(\{.*\})\s*```", re.IGNORECASE | re.DOTALL) | |
| def parse_json_dict(content: Any) -> dict[str, Any]: | |
| text = str(content or "").strip() | |
| if not text: | |
| return {} | |
| candidates: list[str] = [text] | |
| block_match = _JSON_BLOCK_RE.search(text) | |
| if block_match: | |
| candidates.insert(0, block_match.group(1).strip()) | |
| start = text.find("{") | |
| end = text.rfind("}") | |
| if start != -1 and end != -1 and start < end: | |
| candidates.append(text[start : end + 1].strip()) | |
| seen: set[str] = set() | |
| for candidate in candidates: | |
| if not candidate or candidate in seen: | |
| continue | |
| seen.add(candidate) | |
| try: | |
| payload = json.loads(candidate) | |
| except json.JSONDecodeError: | |
| continue | |
| if isinstance(payload, dict): | |
| return payload | |
| return {} | |
| def create_json_chat_completion( | |
| client: Any, | |
| *, | |
| model: str, | |
| messages: list[dict[str, str]], | |
| temperature: float, | |
| max_output_tokens: int, | |
| api_base_url: str, | |
| ) -> Any: | |
| kwargs: dict[str, Any] = { | |
| "model": model, | |
| "messages": messages, | |
| "temperature": temperature, | |
| } | |
| if "openai.com" in str(api_base_url or "").lower(): | |
| kwargs["response_format"] = {"type": "json_object"} | |
| last_exc: Exception | None = None | |
| for token_key in ("max_completion_tokens", "max_tokens"): | |
| try: | |
| return client.chat.completions.create( | |
| **kwargs, | |
| **{token_key: max(1, int(max_output_tokens))}, | |
| ) | |
| except TypeError as exc: | |
| last_exc = exc | |
| continue | |
| except Exception as exc: # noqa: BLE001 | |
| message = str(exc).lower() | |
| if "response_format" in kwargs and any( | |
| fragment in message | |
| for fragment in ( | |
| "response_format", | |
| "json_schema", | |
| "json_object", | |
| "extra inputs are not permitted", | |
| ) | |
| ): | |
| last_exc = exc | |
| kwargs = dict(kwargs) | |
| kwargs.pop("response_format", None) | |
| continue | |
| if token_key == "max_completion_tokens" and any( | |
| fragment in message | |
| for fragment in ( | |
| "max_completion_tokens", | |
| "unexpected keyword", | |
| "unknown parameter", | |
| "unsupported", | |
| ) | |
| ): | |
| last_exc = exc | |
| continue | |
| raise | |
| if last_exc is not None: | |
| raise last_exc | |
| raise RuntimeError("Failed to create JSON chat completion.") | |