Spaces:
Sleeping
Sleeping
| """ | |
| Sample API demonstrating the new LLM client framework. | |
| This API shows how to use the unified LLM client with Pydantic schema validation. | |
| One file = one API function (matching the file name). | |
| """ | |
| import os | |
| from typing import List | |
| from pydantic import BaseModel, Field | |
| from src.clients import LLMClient | |
| from src.utils.tracer import customtracer | |
| # ============================================================================= | |
| # Response Schema (Pydantic Model) | |
| # ============================================================================= | |
| class TextAnalysisResponse(BaseModel): | |
| """Schema for text analysis results.""" | |
| summary: str = Field(description="Brief summary of the input text") | |
| sentiment: str = Field(description="Sentiment: positive, negative, or neutral") | |
| key_points: List[str] = Field(description="List of key points extracted from text") | |
| confidence: float = Field(ge=0.0, le=1.0, description="Confidence score 0-1") | |
| # ============================================================================= | |
| # API Function | |
| # ============================================================================= | |
| def sample( | |
| text: str, | |
| model: str = "meta-llama/Llama-3.1-8B-Instruct", | |
| openai_key: str = "default", | |
| ) -> dict: | |
| """ | |
| input1 (text): This product is amazing! The quality exceeded my expectations. | |
| input2 (text): gpt-4o | |
| input3 (text): default | |
| output1 (json): Analysis result with summary, sentiment, key_points, and confidence | |
| """ | |
| # Setup API key | |
| if openai_key == "default": | |
| api_key = os.environ.get("OPENAI_KEY") or os.environ.get("OPENAI_API_KEY") | |
| else: | |
| api_key = openai_key | |
| # Create LLM client | |
| client = LLMClient(openai_key=api_key) | |
| # Define the prompt | |
| prompt = f"""Analyze the following text and provide: | |
| 1. A brief summary | |
| 2. The overall sentiment (positive, negative, or neutral) | |
| 3. Key points extracted from the text | |
| 4. Your confidence level in this analysis (0-1) | |
| Text to analyze: | |
| {text} | |
| """ | |
| system_prompt = ( | |
| "You are a text analysis assistant. Provide accurate, concise analysis. " | |
| "Focus on the actual content and avoid over-interpretation." | |
| ) | |
| # Call LLM with Pydantic schema validation | |
| result = client.call( | |
| prompt=prompt, | |
| schema=TextAnalysisResponse, | |
| model=model, | |
| system_prompt=system_prompt, | |
| temperature=0.3, | |
| ) | |
| # Return as dict (Gradio JSON component expects dict) | |
| return result.model_dump() | |