from typing import TypedDict, Annotated, Literal, Union, Any, List, Tuple """ Typing: Union = either type A or type B Optional = either type A or None Literal = only specific values (constants), not any value of a type """ from pydantic import BaseModel import os import re import random import requests import inspect import subprocess import gradio as gr import pandas as pd # from lmnr import Laminar from dotenv import load_dotenv load_dotenv() from together import Together import base64 import yt_dlp import datasets from datasets import load_dataset from huggingface_hub import list_models from langchain.docstore.document import Document from langchain_community.retrievers import BM25Retriever from langchain_community.tools import DuckDuckGoSearchRun from langchain_community.document_loaders import UnstructuredExcelLoader from langchain_community.tools import WikipediaQueryRun from langchain_community.utilities import WikipediaAPIWrapper from langchain.tools import Tool from langchain_ollama import ChatOllama from langchain_together import ChatTogether from langchain_huggingface import HuggingFaceEndpoint,ChatHuggingFace from langchain_core.messages import AnyMessage, HumanMessage, AIMessage, SystemMessage, ToolMessage from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages from langgraph.prebuilt import tools_condition, ToolNode from langsmith import traceable # GLOBALS HF_TOKEN = os.getenv('HF_TOKEN') LAMINAR_API_KEY = os.getenv('LAMINAR_API_KEY') # from the task DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space" api_url = DEFAULT_API_URL questions_url = f"{api_url}/questions" submit_url = f"{api_url}/submit" file_url = f"{api_url}/files" # DEFAULT_SYSTEM_PROMPT = """You are a general AI assistant. I will ask you a question. Report your thoughts, and finish your answer with the following template: FINAL ANSWER: [YOUR FINAL ANSWER]. YOUR FINAL ANSWER should be a number OR as few words as possible OR a comma separated list of numbers and/or strings. If you are asked for a number, don't use comma to write your number neither use units such as $ or percent sign unless specified otherwise. If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text unless specified otherwise.If you are asked for a comma separated list, apply the above rules depending of whether the element to be put in the list is a number or a string.""" DEFAULT_SYSTEM_PROMPT = """ You are a general AI assistant. I will ask you a question. Report your thoughts, and finish your answer with the following template: FINAL ANSWER: [YOUR FINAL ANSWER]. YOUR FINAL ANSWER should be a number OR as few words as possible OR a comma separated list of numbers and/or strings. If you are asked for a number, don't use comma to write your number neither use units such as $ or percent sign unless specified otherwise. If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text unless specified otherwise. If you are asked for a comma separated list, apply the above rules depending of whether the element to be put in the list is a number or a string. """ # Think step by step. On every step use a tool if it is needed. Make multiple tool calls if required. DEFAULT_SYSTEM_PROMPT = DEFAULT_SYSTEM_PROMPT.replace("\n", "") # model_name = 'qwen3:8b' model_name = 'llama3.2:latest'