Download chat_session.py from 0danielfonseca/Doninha-Artificial-Inteligence: direct link, hf CLI and curl.
- Browser
- Download file 1.99 kB
-
https://huggingface.co/0danielfonseca/Doninha-Artificial-Inteligence/resolve/main/chat_session.py
- Command line
-
hf download hf://0danielfonseca/Doninha-Artificial-Inteligence/chat_session.py
-
curl -L -o chat_session.py https://huggingface.co/0danielfonseca/Doninha-Artificial-Inteligence/resolve/main/chat_session.py
1.99 kB
| """ | |
| Sessão de chat com histórico. | |
| ============================= | |
| Mantém as últimas N trocas (usuário/assistente) e monta o contexto | |
| para o pipeline ou para o gerador. | |
| """ | |
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import List, Optional, Tuple | |
| class Turn: | |
| role: str # "user" | "assistant" | |
| content: str | |
| class ChatSession: | |
| """ | |
| Histórico de mensagens para diálogo multi-turno. | |
| """ | |
| def __init__(self, max_turns: int = 10): | |
| self.max_turns = max(1, max_turns) | |
| self.turns: List[Turn] = [] | |
| def add_user(self, content: str) -> None: | |
| self.turns.append(Turn(role="user", content=content.strip())) | |
| def add_assistant(self, content: str) -> None: | |
| self.turns.append(Turn(role="assistant", content=content.strip())) | |
| def get_context_for_prompt(self, current_prompt: str, max_turns_in_context: Optional[int] = None) -> str: | |
| """ | |
| Retorna um único texto com as últimas N trocas + pergunta atual, | |
| para ser usado como contexto (ex.: prefixo da pergunta ou resumo). | |
| """ | |
| n = max_turns_in_context if max_turns_in_context is not None else self.max_turns | |
| n = max(0, n) | |
| recent = self.turns[-n * 2 :] if n else [] # pares user/assistant | |
| parts = [] | |
| for t in recent: | |
| prefix = "Usuário" if t.role == "user" else "Assistente" | |
| parts.append(f"{prefix}: {t.content}") | |
| if parts: | |
| parts.append(f"Usuário: {current_prompt}") | |
| return "\n".join(parts) | |
| return current_prompt | |
| def get_last_user_prompt(self) -> str: | |
| """Retorna a última mensagem do usuário (para pipeline que não usa contexto).""" | |
| for t in reversed(self.turns): | |
| if t.role == "user": | |
| return t.content | |
| return "" | |
| def clear(self) -> None: | |
| self.turns.clear() | |
| def turn_count(self) -> int: | |
| return len(self.turns) | |