Update app.py
#248
by
						
pandoucha
	
							
						- opened
							
					
    	
        app.py
    CHANGED
    
    | @@ -1,69 +1,38 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            import  | 
| 3 | 
            -
            import  | 
| 4 | 
            -
            import  | 
| 5 | 
            -
            import yaml
         | 
| 6 | 
            -
            from tools.final_answer import FinalAnswerTool
         | 
| 7 |  | 
| 8 | 
            -
            from  | 
|  | |
|  | |
|  | |
| 9 |  | 
| 10 | 
            -
            #  | 
| 11 | 
            -
             | 
| 12 | 
            -
            def my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type
         | 
| 13 | 
            -
                #Keep this format for the description / args / args description but feel free to modify the tool
         | 
| 14 | 
            -
                """A tool that does nothing yet 
         | 
| 15 | 
            -
                Args:
         | 
| 16 | 
            -
                    arg1: the first argument
         | 
| 17 | 
            -
                    arg2: the second argument
         | 
| 18 | 
            -
                """
         | 
| 19 | 
            -
                return "What magic will you build ?"
         | 
| 20 |  | 
| 21 | 
            -
             | 
| 22 | 
            -
            def get_current_time_in_timezone(timezone: str) -> str:
         | 
| 23 | 
            -
                """A tool that fetches the current local time in a specified timezone.
         | 
| 24 | 
            -
                Args:
         | 
| 25 | 
            -
                    timezone: A string representing a valid timezone (e.g., 'America/New_York').
         | 
| 26 | 
            -
                """
         | 
| 27 | 
            -
                try:
         | 
| 28 | 
            -
                    # Create timezone object
         | 
| 29 | 
            -
                    tz = pytz.timezone(timezone)
         | 
| 30 | 
            -
                    # Get current time in that timezone
         | 
| 31 | 
            -
                    local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
         | 
| 32 | 
            -
                    return f"The current local time in {timezone} is: {local_time}"
         | 
| 33 | 
            -
                except Exception as e:
         | 
| 34 | 
            -
                    return f"Error fetching time for timezone '{timezone}': {str(e)}"
         | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
            final_answer = FinalAnswerTool()
         | 
| 38 | 
            -
             | 
| 39 | 
            -
            # If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
         | 
| 40 | 
            -
            # model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' 
         | 
| 41 | 
            -
             | 
| 42 | 
            -
            model = HfApiModel(
         | 
| 43 | 
            -
            max_tokens=2096,
         | 
| 44 | 
            -
            temperature=0.5,
         | 
| 45 | 
            -
            model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
         | 
| 46 | 
            -
            custom_role_conversions=None,
         | 
| 47 | 
            -
            )
         | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
            # Import tool from Hub
         | 
| 51 | 
            -
            image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
         | 
| 52 | 
            -
             | 
| 53 | 
            -
            with open("prompts.yaml", 'r') as stream:
         | 
| 54 | 
            -
                prompt_templates = yaml.safe_load(stream)
         | 
| 55 | 
            -
                
         | 
| 56 | 
             
            agent = CodeAgent(
         | 
|  | |
| 57 | 
             
                model=model,
         | 
| 58 | 
            -
                 | 
| 59 | 
            -
                max_steps=6,
         | 
| 60 | 
            -
                verbosity_level=1,
         | 
| 61 | 
            -
                grammar=None,
         | 
| 62 | 
            -
                planning_interval=None,
         | 
| 63 | 
            -
                name=None,
         | 
| 64 | 
            -
                description=None,
         | 
| 65 | 
            -
                prompt_templates=prompt_templates
         | 
| 66 | 
             
            )
         | 
| 67 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 68 |  | 
| 69 | 
            -
             | 
|  | |
| 1 | 
            +
            # app.py
         | 
| 2 | 
            +
            from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel
         | 
| 3 | 
            +
            import gradio as gr
         | 
| 4 | 
            +
            import os
         | 
|  | |
|  | |
| 5 |  | 
| 6 | 
            +
            # Load token from environment variable
         | 
| 7 | 
            +
            hf_token = os.getenv("HF_TOKEN")
         | 
| 8 | 
            +
            if not hf_token:
         | 
| 9 | 
            +
                raise ValueError("HF_TOKEN not set in environment variables")
         | 
| 10 |  | 
| 11 | 
            +
            # Initialize the model with explicit model ID and token
         | 
| 12 | 
            +
            model = HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct", token=hf_token)
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 13 |  | 
| 14 | 
            +
            # Initialize the agent
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 15 | 
             
            agent = CodeAgent(
         | 
| 16 | 
            +
                tools=[DuckDuckGoSearchTool()],
         | 
| 17 | 
             
                model=model,
         | 
| 18 | 
            +
                add_base_tools=True
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 19 | 
             
            )
         | 
| 20 |  | 
| 21 | 
            +
            def find_lowest_price(product):
         | 
| 22 | 
            +
                task = f"Search for the product '{product}' on Tunisian websites (domain .tn) and find the lowest price in TND."
         | 
| 23 | 
            +
                try:
         | 
| 24 | 
            +
                    result = agent.run(task)
         | 
| 25 | 
            +
                    return result
         | 
| 26 | 
            +
                except Exception as e:
         | 
| 27 | 
            +
                    return f"Error: {str(e)}"
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            # Gradio interface
         | 
| 30 | 
            +
            interface = gr.Interface(
         | 
| 31 | 
            +
                fn=find_lowest_price,
         | 
| 32 | 
            +
                inputs=gr.Textbox(label="Enter the product to search for", placeholder="e.g., olive oil"),
         | 
| 33 | 
            +
                outputs=gr.Textbox(label="Lowest Price Result"),
         | 
| 34 | 
            +
                title="Tunisian Product Price Finder",
         | 
| 35 | 
            +
                description="Enter a product name to find its lowest price on Tunisian websites."
         | 
| 36 | 
            +
            )
         | 
| 37 |  | 
| 38 | 
            +
            interface.launch(server_name="0.0.0.0", server_port=7860)
         | 
