shamik
feat: adding api key usage instead of using the default api key.
b84899f unverified
# from dotenv import find_dotenv, load_dotenv
from pathlib import Path
from huggingface_hub import InferenceClient # , login
from smolagents import (
CodeAgent,
DuckDuckGoSearchTool,
FinalAnswerTool,
InferenceClientModel,
PythonInterpreterTool,
Tool,
ToolCallingAgent,
VisitWebpageTool,
WikipediaSearchTool,
)
from src.insurance_assistants.complex_rag import RAG
from src.insurance_assistants.consts import PROMPT_PREFIX, VLM_PROMPT
# _ = load_dotenv(dotenv_path=find_dotenv())
rag_app = RAG()
# FIXME Comment the following if you want to reprocess everything
rag_app.vectordb_id = "policy_wordings"
# login(os.getenv("HF_TOKEN"))
class InsuranceInfoRetriever(Tool):
name = "InsuranceInfoRetriever"
description = "Retrieves information from insurance documents."
inputs = {
"query": {"type": "string", "description": "The query to search for."},
}
output_type = "string"
def forward(self, query: str) -> str:
client = InferenceClient(
provider="hyperbolic",
# bill_to="VitalNest",
# token=os.getenv("HF_TOKEN")
)
results = rag_app.search_documents(query)
img_paths = [Path(res[0]) for res in results]
grouped_images = [rag_app.encode_image_to_base64(pth) for pth in img_paths]
chat_template = [
{
"role": "system",
"content": VLM_PROMPT,
},
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{image}"},
}
for image in grouped_images
]
+ [{"type": "text", "text": query}],
},
]
completion = client.chat.completions.create(
model="Qwen/Qwen2.5-VL-72B-Instruct",
messages=chat_template,
temperature=0.1,
max_tokens=10_000,
)
answer = completion.choices[0].message.content
if answer:
answer += f"The information was retrived from the following documents: {img_paths}"
return answer if answer else ""
insurance_agent = CodeAgent(
tools=[InsuranceInfoRetriever(), FinalAnswerTool()],
model=InferenceClientModel(
# bill_to="VitalNest",
temperature=0.1,
# token=os.getenv("HF_TOKEN")
),
additional_authorized_imports=["os", "requests", "bs4", "pil", "base64", "io"],
max_steps=1,
verbosity_level=-1,
name="insurance_agent",
description="You answer health insurance questions based on the `InsuranceInfoRetriever` "
"tool. All health insurance questions must be answered by you.",
)
websearch_agent = ToolCallingAgent(
model=InferenceClientModel(
model_id="Qwen/Qwen3-30B-A3B",
# bill_to="VitalNest",
temperature=0.1,
# token=os.getenv("HF_TOKEN")
),
tools=[
VisitWebpageTool(max_output_length=20_000),
DuckDuckGoSearchTool(max_results=5),
FinalAnswerTool(),
],
max_steps=4,
verbosity_level=-1,
name="web_search_agent",
planning_interval=2,
description="Searches the web with a particular query.",
)
wikipedia_agent = ToolCallingAgent(
model=InferenceClientModel(
model_id="Qwen/Qwen3-30B-A3B",
# bill_to="VitalNest", temperature=0.1,
# token=os.getenv("HF_TOKEN")
),
tools=[
WikipediaSearchTool(user_agent="WikiAssistant (merlin@example.com)"),
FinalAnswerTool(),
],
max_steps=3,
verbosity_level=-1,
name="wikipedia_agent",
description="Searches Wikipedia for a topic.",
)
manager_agent = CodeAgent(
tools=[FinalAnswerTool(), PythonInterpreterTool()],
additional_authorized_imports=["os"],
model=InferenceClientModel(
model_id="Qwen/Qwen3-235B-A22B",
# bill_to="VitalNest",
temperature=0.1,
# token=os.getenv("HF_TOKEN")
),
managed_agents=[websearch_agent, wikipedia_agent, insurance_agent],
max_steps=10,
planning_interval=2,
verbosity_level=0,
add_base_tools=True,
name="Versatile_Multi_Agent",
description="Answer health insurance related questions from pre-defined set of "
"health insurance documents using the `insurance_agent` team member, search wikipedia and the web for general information.",
)
manager_agent.system_prompt = manager_agent.system_prompt + PROMPT_PREFIX