AG4DP-Example-Chatbot / assistant.py
harpreetsahota's picture
Update assistant.py
575fee0 verified
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)}"