Spaces:
Build error
Build error
| from typing import Optional, Dict, Any, Union, Generator | |
| from huggingface_hub import InferenceClient | |
| from openai import OpenAI | |
| from prompt_template import PromptTemplate | |
| class AIAssistant: | |
| def __init__(self, client: Union[OpenAI, InferenceClient], model: str): | |
| self.client = client | |
| self.model = model | |
| def generate_response( | |
| self, | |
| prompt_template: PromptTemplate, | |
| messages: list[Dict[str, str]], | |
| generation_params: Optional[Dict] = None, | |
| stream: bool = True, | |
| ) -> Generator[str, None, None]: | |
| """ | |
| Generate LLM response using the provided template and parameters. | |
| Args: | |
| prompt_template: PromptTemplate object containing template and parameters | |
| messages: List of message dictionaries with role and content | |
| generation_params: Optional generation parameters (overrides template parameters) | |
| stream: Whether to stream the response | |
| Yields: | |
| Streamed response text | |
| """ | |
| params = generation_params or prompt_template.parameters | |
| # Ensure messages are in correct format | |
| formatted_messages = [ | |
| {"role": msg["role"], "content": str(msg["content"])} | |
| for msg in messages | |
| ] | |
| try: | |
| completion = self.client.chat.completions.create( | |
| model=self.model, | |
| messages=formatted_messages, | |
| stream=stream, | |
| **params | |
| ) | |
| if stream: | |
| response = "" | |
| for chunk in completion: | |
| if chunk.choices[0].delta.content is not None: | |
| response += chunk.choices[0].delta.content | |
| yield response | |
| else: | |
| return completion.choices[0].message.content | |
| except Exception as e: | |
| yield f"Error generating response: {str(e)}" |