Download agent.py from hanyi00i/Final_Assignment_Template: direct link, hf CLI and curl.
- Browser
- Download file 2.22 kB
-
https://huggingface.co/spaces/hanyi00i/Final_Assignment_Template/resolve/main/agent.py
- Command line
-
hf download hf://spaces/hanyi00i/Final_Assignment_Template/agent.py
-
curl -L -o agent.py https://huggingface.co/spaces/hanyi00i/Final_Assignment_Template/resolve/main/agent.py
2.22 kB
| import os | |
| from dotenv import load_dotenv | |
| from tavily import TavilyClient | |
| from openai import OpenAI | |
| from cerebras.cloud.sdk import Cerebras | |
| load_dotenv() | |
| SAMPLE_MODEL = "gpt-oss-120b" | |
| class HanBasicAgent: | |
| def __init__(self): | |
| self.hf_token = os.getenv("HF_TOKEN") | |
| self.tavily_key = os.getenv("TAVILY_API_KEY") | |
| assert self.hf_token and self.tavily_key | |
| self.tavily = TavilyClient(api_key=self.tavily_key) | |
| # self.llm_client = OpenAI(base_url="https://router.huggingface.co/v1", api_key=self.hf_token) | |
| self.llm_client = Cerebras(api_key=os.environ.get("CEREBRAS_API_KEY")) | |
| self.model = os.getenv("LLM_MODEL", SAMPLE_MODEL) | |
| def _truncate_query(self, query: str, max_len: int = 390) -> str: | |
| return query[:max_len] + ("..." if len(query) > max_len else "") | |
| def answer(self, question: str, mode="context") -> str: | |
| # Truncate BEFORE Tavily call | |
| truncated_question = self._truncate_query(question) | |
| # Use truncated_question for Tavily | |
| context = ( | |
| self.tavily.get_search_context(query=truncated_question) | |
| if mode == "context" | |
| else self.tavily.qna_search(query=truncated_question) | |
| ) | |
| if not context: | |
| context = "No context found. Answer based on your knowledge." | |
| # Use truncated_question for LLM too | |
| messages = [ | |
| {"role": "system", "content": "You are a helpful assistant. Do not call tools. Use context faithfully."}, | |
| {"role": "user", "content": f"Question: {truncated_question}\nContext:\n{context}\nAnswer concisely."} | |
| ] | |
| comp = self.llm_client.chat.completions.create( | |
| model=self.model, | |
| messages=messages, | |
| ) | |
| return comp.choices[0].message.content.strip() | |
| def __call__(self, question: str) -> str: | |
| return self.answer(question) | |
| if __name__ == "__main__": | |
| agent = HanBasicAgent() | |
| # Default (context mode) | |
| print(agent("Who founded Tavily?")) | |
| # Quick Q&A mode | |
| print(agent("What is the capital of France?", mode="qna")) | |
| # Return both context and answer | |
| print(agent("Explain Burning Man floods", return_context=True)) | |