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)}" |