import os import gradio as gr from http import HTTPStatus import openai from typing import Generator, List, Optional, Tuple, Dict from urllib.error import HTTPError API_URL = os.getenv('API_URL') API_KEY = os.getenv('API_KEY') oai_client = openai.OpenAI(api_key=API_KEY, base_url=API_URL) History = List[Tuple[str, str]] Messages = List[Dict[str, str]] def clear_session() -> History: return '', [] def history_to_messages(history: History) -> Messages: messages = [] for h in history: messages.append({'role': 'user', 'content': h[0]}) messages.append({'role': 'assistant', 'content': h[1]}) return messages def messages_to_history(messages: Messages) -> Tuple[str, History]: history = [] for q, r in zip(messages[0::2], messages[1::2]): history.append([q['content'], r['content']]) return history def model_chat(query: Optional[str], history: Optional[History]) -> Generator[Tuple[str, History], None, None]: if query is None: query = '' if history is None: history = [] messages = history_to_messages(history) messages.append({'role': 'user', 'content': query}) gen = oai_client.chat.completions.create( model='dicta-il/dictalm2.0-instruct', messages=messages, temperature=0.7, max_tokens=1024, top_p=0.9, stream=True ) messages.append({'role': 'assistant', 'content': ''}) for completion in gen: print(completion) text = completion.choices[0].delta.content if not text: continue messages[-1]['content'] += text history = messages_to_history(messages) yield '', history with gr.Blocks() as demo: gr.Markdown("""