{"id":28452939,"url":"https://github.com/marketsquare/robotframework-ai","last_synced_at":"2025-06-27T23:31:18.029Z","repository":{"id":240936270,"uuid":"803823860","full_name":"MarketSquare/robotframework-ai","owner":"MarketSquare","description":"RobotFramework-AI is a library that adds AI functionality to the Robot Framework. It can generate test data for you using the RealTestDataGenerator but also reply to your messages with the Chatbot.","archived":false,"fork":false,"pushed_at":"2024-10-19T14:21:33.000Z","size":143,"stargazers_count":31,"open_issues_count":17,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-06-06T18:13:13.514Z","etag":null,"topics":["ai","python","robotframework"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MarketSquare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-21T12:56:26.000Z","updated_at":"2025-04-22T11:08:16.000Z","dependencies_parsed_at":"2024-07-31T15:59:06.867Z","dependency_job_id":"65ef0076-2d60-4a28-9e50-a68ce66cb08c","html_url":"https://github.com/MarketSquare/robotframework-ai","commit_stats":null,"previous_names":["marketsquare/robotframework-ai"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/MarketSquare/robotframework-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarketSquare%2Frobotframework-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarketSquare%2Frobotframework-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarketSquare%2Frobotframework-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarketSquare%2Frobotframework-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MarketSquare","download_url":"https://codeload.github.com/MarketSquare/robotframework-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarketSquare%2Frobotframework-ai/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262351458,"owners_count":23297626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","python","robotframework"],"created_at":"2025-06-06T18:13:11.519Z","updated_at":"2025-06-27T23:31:18.020Z","avatar_url":"https://github.com/MarketSquare.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# RobotFramework-AI\n\n`RobotFramework-AI` is a library that adds AI functionality to the `Robot Framework`.\nIt can generate test data for you using the `RealTestDataGenerator` but also reply to your\nmessages with the `Chatbot`.\n\n## Setup\n\nTo setup the library:\n\n1. Start by cloning this repository.\n2. Open a terminal and locate the `robotframework-ai` folder.\n3. Use the following command to create the package.\n\n        python setup.py sdist bdist_wheel\n\n    This requires the wheel package to be installed, which can be installed with:\n\n        pip install wheel\n\n4. To install the library using the package just created, use the following command.\n\n        pip install .\\dist\\RobotFrameworkAI-0.0.2-py3-none-any.whl\n\n5. Setup the API key for the AI you want to use. This can be done by creating a new environment variable called `OPENAI_KEY` with your key as the value. More information about this in the AI models header below.\n6. The library is now properly setup, to confirm it works, run the following code in a robot file. This will generate 3 addresses and create a log.html file.\n\n        *** Settings ***\n        Library   RobotFrameworkAI\n\n\n        *** Test Cases ***\n        Exec Test\n            [Documentation]    Test\n            ${response}    Generate Test Data    openai    address\n            Log    ${response}\n\n    Opening this testlog file in a browser and opening the suite `Test`, the test `Exec test` and the keyword `Log` will reveal a list with the 3 addresses in the `INFO` section.\n\n    ![testlog](https://github.com/user-attachments/assets/b97ade59-0156-4817-aff1-555637eddcd1)\n\n## AI models\n\nEach module in the RobotFramework-AI library can support multiple different AI models. Each AI model needs an API key for the generation of test data.\nThis key gets read directly from your environment variables. Each AI model has their own API key. To define a key, create a new variable with the name of\nthe AI model capitalized followed by \"_KEY\". Then set this variable to your key. At the moment only OpenAI is supported.\n\n**Example API keys**\n- OPENAI_KEY=278bxw4m89monwxmu89wm98ufx8hwxfhqwifmxou09qwxp09jmx\n- GEMINI_KEY=cavhjbcZCJKnvmzxcnzkcjkczckzcskjnjn7h38nwd923hdnind\n\n## RealTestDataGenerator\n\n`RealTestDataGenerator` can generate test data for the `Robot Framework` similar to\nthe library `Faker`. The `RealTestDataGenerator` however, generates real existing data, using AI.\n\nTo generate test data simply import the package and use the keyword: `Generate Test Data`\nThis keyword takes various arguments, some being specific for the generation of certain\ntypes of test data.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n- ***type: str:** The type of test data to create, e.g. \"address\", \"user_data\", etc. Currently supporting: \"address\"\n- **model: str:** AI model specfic. The model of the AI model to be used. E.g. \"gpt-3.5-turbo\" when using the \"openai\" AI model.\n    Default per AI model:\n  - \"openai\" = \"gpt-3.5-turbo\"\n- **amount: int = 3** The amount of rows of test data to generate.\n- **format: str = None** The format in which the test data will be given. If None, will return a 2 dimensional list.\n- **max_tokens: int = 256** The token limit for a conversation. Both prompt and response tokens will count towards this limit.\n- **temperature: float = 1** This value determines the creativity of the AI model. Can be anything from 0-2.\n- **top_p: float = 1** Similar to temperature. Determines the selection of tokens before selecting one.\n    The higher the value the more less likely tokens get added to the selection. Can be anything from 0-2. At 1,\n    only the top 50% of tokens will be used when selecting a token at 0 all tokens will be taken into consideration\n- **frequency_penalty: float = 0** Penalizes more frequent token reducing the chance of it reappearing.\n    Negative values encourage it to reuse tokens. Can be anything from -2 to 2.\n- **presence_penalty: float = 0** Exact same as frequency_penalty except its scope is reduced to the immediate context.\n    The immediate context can be seen as one or more paragrahps about a singular subject.\n    Can be anything from -2 to 2.\n- **kwargs: dict:** Additional arguments can be supplied for specific types of test data. These will be explained in per type below\n\n**NOTE:** Be careful with changing the temperature, top p, frequency- and presence penalty as it will likely deviate from the format we expect it to return.\n\n### Addresses\n\nWhen generating addresses additional argument are available. These arguments are as follows:\n\n- **Country:str:** The country from which to create addresses. If None, will generate an address from anywhere. Default = None\n\n### Examples\n\nGenerate 3 addresses from anywhere using OpenAI:\n\n    Generate Test Data    openai    address\n\nGenerate 10 addresses from Finland using the gpt-3.5-turbo from OpenAI in the default format with a token limit at 1024, temperature at 1, top p at .5 and frequency- and presence penalty at 0\n\n    Generate Test Data    openai    address    gpt-3.5-turbo    10    None    1024    1    .5    0    0    country=finland\n\n## Chatbot\n\nThe `Chatbot` is a simple response generating library for `Robot Framework` similar to\n`ChatGPT` on the web. You can ask it a question or give it a task to have it automatically\nreply to your emails.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n- ***message: str:** The message you want to send to the AI model, e.g. \"What is the weather today?\"\n- **model: str:** AI model specfic. The model of the AI model to be used. E.g. \"gpt-3.5-turbo\" when using the \"openai\" AI model.\n    Default depends on AI model:\n  - \"openai\" = \"gpt-3.5-turbo\"\n- **max_tokens: int = 256** The token limit for a conversation. Both prompt and response tokens will count towards this limit.\n- **temperature: float = 1** This value determines the creativity of the AI model. Can be anything from 0-2.\n- **top_p: float = 1** Similar to temperature. Determines the selection of tokens before selecting one.\n    The higher the value the more less likely tokens get added to the selection. Can be anything from 0-2.\n    At 1, only the top 50% of tokens will be used when selecting a token at 0 all tokens will be taken into consideration\n- **frequency_penalty: float = 0** Penalizes more frequent token reducing the chance of it reappearing.\n    Negative values encourage it to reuse tokens. Can be anything from -2 to 2.\n- **presence_penalty: float = 0** Exact same as frequency_penalty except its scope is reduced to the immediate context.\n    The immediate context can be seen as one or more paragrahps about a singular subject.\n    Can be anything from -2 to 2.\n- **keep_history: bool = False** A flag to keep the chat history of previous messages. When settings this to True, your previous prompt and\n    the response by the AI will be saved for the next message. This feature will keep the previous message, so if you want to send\n    two messages and refer to your first message from the second message, you need to set this flag to True in the second message.\n    Leaving this on for the third message aswell will keep both the first and second message.\n\n    **NOTE:** This works by incorporating the previous messages into the prompt, this will charge you again for both the prompt and\n    response. So leaving this on, could quickly drain all your tokens.\n\n- **response_format: dict = None** Can be used to make the response compile to JSON.\n    Set this to { \"type\": \"json_object\" } to make the response compile to JSON or None if it shouldn't necessarily.\n\n### Examples\n\nGenerate a response to a question using OpenAI\n\n    Generate Response    openai    What is the wheather today?\n\nDeclare a rule in the first message and refer to it in the second message\n\n    Generate Response    openai    If I say water you say fire\n    Generate Response    openai    Water    keep_history=True\n\nGenerate the meaning of life in a json format using the gpt-3.5-turbo from OpenAI in the default format with a token limit at 1024, temperature at 2, top p at .5 and frequency- and presence penalty at 0 without using the previous messages in the response.\n\n    Generate Response    openai    What is the meaning of life? In json.    gpt-3.5-turbo    1024    2    .5    0    0    False    {\"type\": \"json_object\"}   \n\n## Assistant\n\nThe `Assistant` is a module that allows talking to AI and adding files to the conversation.\n\nIt functions similar to the Chatbot module, but with some changes.\nWith the `Assistant` module AI Assistants can be created, these will exists for aslong as they\nare not deleted, meaning that they are still available several weeks later or indefinitely.\nIn the mean time new AI Assistants can be created and talked to.\n\nFiles can be uploaded to the AI for inspection or to add knowledge. Similarly files can also\nbe send along side a message to the AI Assistant. The difference being that files send alongsides\nmessage only remain aslong as the thread (conversation). When a new thread is created,\nthe AI Assistant wont remember previous message send to it, including files. It will only\nremember files uploaded to the AI assistant itself.\n\nThe `Assistant` can also be given instructions and parameters to influence its behaviour. These\ncan be given at creation or later be changed.\n\n### Keywords\n\nThe `Assistant` has 9 different keywords that can be used to interact with the AI assistant.\nThe way the `Assistant` module works is that there can be multiple AI assistants. But there can\nonly be 1 active assistant. All keywords where it isn't explicitely mentioned which assistant\nwill be affected (all keywords that don't require an Id as argument), will be performed on the\nactive assistant.\n\n#### Create Assistant\n\nThis keyword creates a new assistant and sets it as the active assistant.\n\nReturns the Id of the newly created assistant.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n- ***name: str:** The name of the assistant. This name will show up in responses and in the logs, e.g. \"Bob\". Max 256 characters\n- ***instructions: str:** The instructions given to the assistant. Here you can explain how the assistant should behave, e.g. \"You are a software engineer that can debug my code and explain it in a easy to understand manner\". Max 256,000 characters\n- **model: str:** AI model specfic. The model of the AI model to be used. E.g. \"gpt-3.5-turbo\" when using the \"openai\" AI model. Default depends on AI model:\n  - \"openai\" = \"gpt-3.5-turbo\"\n- **temperature: float = 1** This value determines the creativity of the AI model. Can be anything from 0-2.\n- **top_p: float = 1** Similar to temperature. Determines the selection of tokens before selecting one. The higher the value the more less likely tokens get added to the selection. Can be anything from 0-2. At 1, only the top 50% of tokens will be used when selecting a token at 0 all tokens will be taken into consideration\n- **response_format: dict = None** Can be used to make the response compile to JSON. Set this to { \"type\": \"json_object\" } to make the response compile to JSON or None if it shouldn't necessarily.\n\n##### Examples\n\nCreate a new assistant Test Assistant:\n\n    Set AI Model    openai\n    Set Name    Test Assistant\n    Create Assistant\n\nCreate a new assistant with all changing all default arguments:\n\n    Set AI Model    openai\n    Set Name    Full Featured Assistant\n    Set Instructions    This assistant is capable of handling various technical queries.\n    Set Model    gpt-3.5-turbo\n    Set Temperature    1.5\n    Set Top P    0.8\n    Set Response Format    { \"type\": \"json_object\" }\n    Create Assistant\n\n#### Update Assistant\n\nThis keyword updates parameters of the active assistant.\n\nThis keyword takes the same arguments as the Create Assistant keyword\n\nReturns a success message explaining which parameters have been updated.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n- **name: str:** The name of the assistant. This name will show up in responses and in the logs, e.g. \"Bob\". Max 256 characters\n- **instructions: str:** The instructions given to the assistant. Here you can explain how the assistant should behave, e.g. \"You are a software engineer that can debug my code and explain it in a easy to understand manner\". Max 256,000 characters\n- **model: str:** AI model specfic. The model of the AI model to be used. E.g. \"gpt-3.5-turbo\" when using the \"openai\" AI model. Default depends on AI model:\n  - \"openai\" = \"gpt-3.5-turbo\"\n- **temperature: float = 1** This value determines the creativity of the AI model. Can be anything from 0-2.\n- **top_p: float = 1** Similar to temperature. Determines the selection of tokens before selecting one. The higher the value the more less likely tokens get added to the selection. Can be anything from 0-2. At 1, only the top 50% of tokens will be used when selecting a token at 0 all tokens will be taken into consideration\n- **response_format: dict = None** Can be used to make the response compile to JSON. Set this to { \"type\": \"json_object\" } to make the response compile to JSON or None if it shouldn't necessarily.\n\n##### Examples\n\nUpdate the active assistant's name:\n\n    Set AI Model    openai\n    Set Name    Mark\n    Update Assistant\n\nUpdate the all the parameters of the active assistant:\n\n    Set AI Model    openai\n    Set Name    Helpy\n    Set Instructions    You write documentation for code.\n    Set Model    gpt-3.5-turbo\n    Set Temperature    1.8\n    Set Top P    0.6\n    Set Response Format    { \"type\": \"json_object\" }\n    Update Assistant\n\n#### Send Message\n\nSends a prompt to the active assistant and returns its response\n\nBy supplying file_paths as an argument in the method call, files can be send with it as well. Make sure to unset file_paths to not send it with each prompt.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n- ***message: str:** The message you want to send to the AI model, e.g. \"What is the weather today?\"\n- ***file_paths: str:** A list of paths that determine which files get send with the prompt. Both paths to files and paths to folder can be used. Paths to files will directly add that file to the prompt. Paths to folders will look into all files in that folder and add them to the prompt. e.g. [\"src/main.py\", \"src/resources\"]\n**NOTE:** file_paths can not be set using setters. Allowing file_paths to be set could cause users to accidentally add the same files multiple times to the same assistant and will also cause users to send those with every prompt. This would make the library slower but more importantly lose the user a lot of money.\n\n\n##### Examples\n\nSend a prompt to ask for the weather:\n\n    Set AI Model    openai\n    Set Message    What is the weather today?\n    Send Message\n\nSend a prompt to ask for improvements for code:\n\n    Set AI Model    openai\n    Set Message    How can I improve my code?\n    Send Message    file_paths=[\"src/main.py\", \"src/resources\"]\n\n#### Delete Assistant\n\nDeletes the active assistant\n\nAfter deleting the active assistant, there will be no active assistant. Either create a new assistant or set a new assistant as active.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n\n##### Examples\n\nDelete the active assistant:\n\n    Set AI Model    openai\n    Delete Assistant\n\n#### Delete Assistant By Id\n\nDeletes the assistant with the specified Id\n\nIf that assistant is also the active assistant, there will be no active assistant. Either create a new assistant or set a new assistant as active.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\"\n- ***id: str:** The Id of the assistant. This an Id created by the AI model itself. e.g. \"asst_0Ta3aCdE675foHxkLTnujjgl\"\n\n##### Examples\n\nDelete an assistant by Id:\n\n    Set AI Model    openai\n    Set Id    asst_0Ta3aCdE675foHxkLTnujjgl\n    Delete Assistant By Id\n\n#### Attach Files\n\nAttaches files to the active assistant\n\nThese files can be used by the assistant in any thread as opposed to sending files with a prompt.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\", \"gemini\", \"copilot\", etc. Currently supporting: \"openai\"\n- ***file_paths: str:** A list of paths that determine which files get send with the prompt. Both paths to files and paths to folder can be used. Paths to files will directly add that file to the prompt. Paths to folders will look into all files in that folder and add them to the prompt. e.g. [\"src/main.py\", \"src/resources\"]\n**NOTE:** file_paths can not be set using setters. Allowing file_paths to be set could cause users to accidentally add the same files multiple times to the same assistant and will also cause users to send those with every prompt. This would make the library slower but more importantly lose the user a lot of money.\n\n##### Examples\n\nAttach the main.py file and all files in the src/resources directory:\n\n    Set AI Model    openai\n    Set File Paths    [\"src/main.py\", \"src/resources\"]\n    Attach Files\n\n#### Get Active Assistant Id\n\nReturns the Id of the active assistant\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\"\n\n##### Examples\n\nGet the Id of the active assistant using setters:\n\n    Set AI Model    openai\n    Get Active Assistant Id\n\n#### Create New Thread\n\nCreate a new thread\n\nCreating a new thread effectively restarts the conversation.\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\"\n\n##### Examples\n\nCreate a new thread using setters:\n\n    Set AI Model    openai\n    Create New Thread\n\n#### Set Active Assistant\n\nSets the assistant with the specified Id as active\n\nThis will also create a new thread\n\nThe following arguments can be used (arguments prefixed by an * are required):\n\n- ***ai_model: str:** The AI model to be used, e.g. \"openai\"\n- ***id: str:** The Id of the assistant. This an Id created by the AI model itself. e.g. \"asst_0Ta3aCdE675foHxkLTnujjgl\"\n\n##### Examples\n\nSet a specific assistant as the active assistant and start a new thread using setters:\n\n    Set AI Model    openai\n    Set Id    asst_0Ta3aCdE675foHxkLTnujjgl\n    Set Active Assistant\n\n\n## AI models\n\nEach module in the RobotFramework-AI library can support multiple different AI models. Each AI model needs an API key for the generation of test data.\nThis key gets read directly from your environment variables. Each AI model has their own API key. To define a key, create a new variable with the name of\nthe AI model capitalized followed by \"_KEY\". Then set this variable to your key.\n\n**Example API keys**\nOPENAI_KEY=278bxw4m89monwxmu89wm98ufx8hwxfhqwifmxou09qwxp09jmx\nGEMINI_KEY=cavhjbcZCJKnvmzxcnzkcjkczckzcskjnjn7h38nwd923hdnind\n\n## Setters\n\nInstead of providing all arguments through this keyword, it is also possible to set each argument beforehand. This way, when making repeated calls, arguments\ndo not have to be supplied each time. After setting these arguments they will remain untill set again. When arguments are set and the keyword also has arguments\nsupplied, then the supplied arguments will take priority.\n\n**NOTE:** Setting arguments will impact other modules aswell. This means that when setting the temperature to 2, that both the RealTestDataGenerator and the Chatbot\nwill use this temperature from then on. This is only the case when both modules share arguments, the arguments that are shared are as followed:\n\n    ai_model, model, max_tokens, temperature, top_p,\n    frequency_penalty, presence_penalty, response_format\n\nEach argument has its own setter, the name of the keyword is 'Set' plus the name of the argument e.g. Set AI Model for AI Model.\nIn the case of kwargs, use the setter to set individual kwargs, set to None to unset it. The setter takes 2 arguments, the name of\nthe kwarg to set and its value.\nTo set a kwarg use:\n\n    Set Kwarg    country    Czechia\n\n**NOTE:** file_paths can not be set using setters. Allowing file_paths to be set could cause users to accidentally add the same files multiple times to the same assistant and will also cause users to send those with every prompt. This would make the library slower but more importantly lose the user a lot of money.\n\n### Examples\n\nGenerate 3 addresses from anywhere using OpenAI:\n\n    Set AI Model    openai\n    Set Type    address\n    Generate Test Data\n\nGenerate 10 addresses from Finland using the gpt-3.5-turbo from OpenAI in the default format with a token limit at 1024, temperature at 1, top p at .5 and frequency- and presence penalty at 0\n\n    Set AI Model    openai\n    Set Type    address\n    Set Model    gpt-3.5-turbo\n    Set Amount    10\n    Set Format    None\n    Set Max Tokens    1024\n    Set Temperature    1\n    Set Top P    .5\n    Set Frequency Penalty    0\n    Set Presence Penalty    0\n    Set Kwarg    country    finland\n    Generate Test Data\n\n## Logging\n\nThe RobotFramework-AI library includes configurable logging capabilities to assist with debugging and monitoring. This logging setup ensures that log messages are handled appropriately, including support for Unicode characters.\n\n### Enabling Logging\n\nTo enable logging, use the Setup Logging keyword provided by the RobotFramework-AI library. This keyword allows you to configure console and file logging, and to enable or disable logging as needed.\n\nThe Setup Logging keyword takes the following arguments:\n\n- **enabled: bool = True** Determines whether logging should be turned on.\n- **for_test: bool = False** Can be used to log logs to a different folder specific for test logs.\n    Will log to the logs_test folder instead of logs if set to True.\n- **console_logging: bool = True** Determines whether logs should be printed in the console.\n- **file_logging: bool = True** Determines whether logs should be logged to a file.\n\n### Examples\n\nTo log to both the console and a file:\n\n    Setup Logging\n\nTo log for tests without console logging:\n\n    Setup Logging    True    True    False\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarketsquare%2Frobotframework-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarketsquare%2Frobotframework-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarketsquare%2Frobotframework-ai/lists"}