Inference-API / main /utils.py
AurelioAguirre's picture
Added resoruces folder for configs
24b4bfe
raw
history blame
2.25 kB
"""Utility functions for the inference API."""
import json
import logging
import os
import re
from pathlib import Path
from typing import Dict, Any
import yaml
def extract_json(text: str) -> Dict[str, Any]:
"""Extract JSON from text that might contain other content.
Handles cases like:
- Clean JSON: {"key": "value"}
- JSON with prefix: Sure! Here's your JSON: {"key": "value"}
- JSON with suffix: {"key": "value"} Let me know if you need anything else!
"""
# Find anything that looks like a JSON object
json_pattern = r'\{(?:[^{}]|(?R))*\}'
matches = re.finditer(json_pattern, text)
# Try each match until we find valid JSON
for match in matches:
try:
potential_json = match.group()
parsed = json.loads(potential_json)
return parsed
except json.JSONDecodeError:
continue
# If we couldn't find any valid JSON, raise an error
raise ValueError("No valid JSON found in response")
def load_config():
"""
Load configuration from config files in the resources directory.
Uses CONFIG_ENV environment variable to determine which config to load.
Defaults to 'local' if no environment is specified.
"""
# Get environment name from env var, default to 'local'
env_name = os.environ.get("CONFIG_ENV", "local")
# Construct path to resources directory and config file
resources_dir = Path(__file__).parent / "resources"
config_path = resources_dir / f"{env_name}_config.yaml"
# Create resources directory if it doesn't exist
resources_dir.mkdir(exist_ok=True)
# Check if config file exists
if not config_path.exists():
logging.warning(f"Config file {config_path} not found, falling back to local_config.yaml")
config_path = resources_dir / "local_config.yaml"
# If even local config doesn't exist, raise error
if not config_path.exists():
raise FileNotFoundError(
f"No configuration file found at {config_path}. "
"Please ensure at least local_config.yaml exists in the resources directory."
)
# Load and return config
with open(config_path) as f:
return yaml.safe_load(f)