| """ |
| This module handles the creation of API clients for the application. |
| It includes the logic for instantiating the Hugging Face InferenceClient |
| and the Tavily Search client. |
| |
| The get_inference_client function is critical for enabling the "user-pays" |
| model in a Hugging Face Space. It prioritizes the API token of the logged-in |
| user, ensuring their account is billed for inference costs. |
| """ |
|
|
| import os |
| from typing import Optional |
|
|
| from huggingface_hub import InferenceClient |
| from tavily import TavilyClient |
|
|
| |
|
|
| |
| |
| HF_TOKEN = os.getenv('HF_TOKEN') |
|
|
| def get_inference_client(model_id: str, provider: str = "auto", user_token: Optional[str] = None) -> InferenceClient: |
| """ |
| Creates and returns a Hugging Face InferenceClient. |
| |
| This function implements the "user-pays" logic. It prioritizes using the token |
| provided by the logged-in user (`user_token`). If that is not available, |
| it falls back to the Space owner's token (`HF_TOKEN`). |
| |
| Args: |
| model_id (str): The ID of the model to be used (e.g., "mistralai/Mistral-7B-Instruct-v0.2"). |
| provider (str): The specific inference provider (e.g., "groq"). Defaults to "auto". |
| user_token (Optional[str]): The API token of the logged-in user, passed from the Gradio app. |
| |
| Returns: |
| InferenceClient: An initialized client ready for making API calls. |
| |
| Raises: |
| ValueError: If no API token can be found (neither from the user nor the environment). |
| """ |
| |
| token_to_use = user_token or HF_TOKEN |
|
|
| |
| if not token_to_use: |
| raise ValueError( |
| "Cannot proceed without an API token. " |
| "Please log into Hugging Face, or ensure the HF_TOKEN environment secret is set for this Space." |
| ) |
|
|
| |
| if model_id == "moonshotai/Kimi-K2-Instruct": |
| provider = "groq" |
| |
| |
| |
| |
| return InferenceClient( |
| provider=provider, |
| api_key=token_to_use |
| ) |
|
|
|
|
| |
|
|
| |
| TAVILY_API_KEY = os.getenv('TAVILY_API_KEY') |
| tavily_client = None |
|
|
| if TAVILY_API_KEY: |
| try: |
| tavily_client = TavilyClient(api_key=TAVILY_API_KEY) |
| except Exception as e: |
| |
| print(f"Warning: Failed to initialize Tavily client. Web search will be unavailable. Error: {e}") |
| tavily_client = None |