<div align="center">
<img src="https://raw.githubusercontent.com/zairobastos/LLM4Time/main/docs/assets/LLM4Time.svg" width="150" />
# LLM4Time
**A library for time series forecasting using Large Language Models (LLMs)**
[](https://colab.research.google.com/drive/1TcQ9RPNrtPHSq5gaMXfBTEV7uEpMA66w?usp=sharing)
[](https://pypi.org/project/llm4time/)

[](https://github.com/zairobastos/LLM4Time/blob/main/LICENSE)
[](https://zairobastos.github.io/LLM4Time/)
</div>
<p align="center">
<a href="#-get-started">Get Started</a> •
<a href="https://zairobastos.github.io/LLM4Time/">Documentation</a> •
<a href="#-referências">References</a> •
<a href="#-contato">Contact</a>
</p>
## 🧩 Get Started
LLM4Time is a Python library for time series forecasting using Large Language Models (LLMs).
It provides a modular architecture that includes:
- [Data preprocessing and handling](#pré-processamento-e-tratamento-de-dados)
- [Prompt generation](#geração-de-prompts)
- [Forecasting with LLMs](#previsão-com-llms)
- [Metric evaluation](#avaliação-de-métricas)
- [Interactive visualization](#visualização-interativa)
### Installation
```bash
pip install llm4time
```
### Running the Streamlit interface
In addition, we provide a Streamlit-based interface, offering a more intuitive and practical way to interact with the library.
Follow the steps below to clone the repository, set up the environment, and run the application.
#### 1. Clone the repository
```bash
git clone https://github.com/zairobastos/LLM4Time.git
cd LLM4Time
```
#### 2. Create and activate a virtual environment (Optional)
```bash
python -m venv .venv
source .venv/bin/activate # Bash/Zsh
source .venv/bin/activate.fish # Fish Shell
```
#### 3. Install the dependencies
```bash
pip install -e .
pip install -r requirements.txt -r requirements-streamlit.txt
```
#### 4. Run the application
Using python 🐍
```bash
python app/main.py
```
> Access the application at `http://localhost:8501`
Or using docker 🐋
```bash
docker compose up
```
### Data preprocessing and handling
#### 1. Data loading
```python
from llm4time.core.data import loader
from llm4time.core.evaluate import Statistics
# Data loading using CSV, XLSX, JSON or Parquet
df = loader.load_data("etth2.csv")
# Descriptive statistics
stats = Statistics(df['OT'])
print(f"Mean: {stats.mean}")
print(f"Median: {stats.median}")
print(f"1° Quartile: {stats.first_quartile}")
print(f"3° Quartile: {stats.third_quartile}")
print(f"Standard Deviation: {stats.std}")
print(f"Minimum: {stats.min}")
print(f"Maximum: {stats.max}")
print(f"Number of missing values: {stats.missing_count}")
print(f"Percentage of missing values: {stats.missing_percentage}")
```
#### 2. Data preprocessing
```python
from llm4time.core.data import preprocessor
# Standardize into time series format
df = preprocessor.standardize(
df,
date_col='date', # Column containing dates/timestamps
value_col='OT', # Column containing time series values
duplicates='first' # How to handle duplicate rows: 'first' keeps the first occurrence
)
# Ensure all timestamps are present
df = preprocessor.normalize(df, freq='h')
```
#### 3. Missing data imputation
```python
from llm4time.core.data import imputation
# Replace missing values with the column mean
df = imputation.mean(df)
```
#### 4. Data split
```python
from llm4time.core.data import preprocessor
# Split the dataset into training and validation sets
train, y_val = preprocessor.split(
df,
start_date='2016-06-01 00:00:00', # Start of the training set
end_date='2016-12-01 00:00:00', # End of the training set
periods=24 # Number of periods to forecast
)
```
### Prompt generation
#### 5. Zero-shot prompt generation
```python
from llm4time.core import prompt
from llm4time.core import PromptType, TSFormat, TSType
content = prompt.generate(
train, # Training set [(date, value), ...]
periods=24, # Number of periods to forecast
prompt_type=PromptType.ZERO_SHOT, # prompt type: ZERO_SHOT (no examples)
ts_format=TSFormat.ARRAY, # time series format
ts_type=TSType.NUMERIC # Type of encoding for series values
)
```
### Forecasting with LLMs
#### 6. Initializing an OpenAI model
```python
from llm4time.core.models import OpenAI
model = OpenAI(
model='gpt-4o', # OpenAI model to be used.
api_key='...', # API key for authentication with the OpenAI service.
base_url='..' # Base URL of the OpenAI endpoint.
)
```
#### 7. Predicting values
```python
# Forecasting
response, prompt_tokens, response_tokens, time_sec = model.predict(
content, # Previously generated prompt
temperature=0.7, # Level of randomness in the response
max_tokens=1000 # Maximum number of tokens in the response
)
print("Model response:", response)
print("Prompt tokens:", prompt_tokens)
print("Response tokens:", response_tokens)
print("Execution time (s):", time_sec)
```
### Metric evaluation
#### 8. Error metrics
```python
from llm4time.core import formatter
from llm4time.core.evaluate.metrics import Metrics
# Converts the response string into a numerical list
y_pred = formatter.parse(
response,
ts_format=TSFormat.ARRAY,
ts_type=TSType.NUMERIC
)
metrics = Metrics(y_val, y_pred)
# Error metrics
print(f"sMAPE: {metrics.smape}") # Symmetric Mean Absolute Percentage Error
print(f"MAE: {metrics.mae}") # Mean Absolute Error
print(f"RMSE: {metrics.rmse}") # Root Mean Squared Error
```
### Interactive evaluation
#### 9. Plots comparing actual and predicted values
```python
from llm4time.visualization import plots
# Generate a comparison plot between actual and predicted values
plots.plot_forecast("Comparison between actual and predicted values", y_val, y_pred)
# Generate a bar chart comparing descriptive statistics
plots.plot_forecast_statistics("Statistical comparison", y_val, y_pred)
```
---
## 🔍 References
```latex
@article{zairo2025prompt,
title={Prompt-Driven Time Series Forecasting with Large Language Models},
author={Zairo Bastos and João David Freitas and José Wellington Franco and Carlos Caminha},
journal={Proceedings of the 27th International Conference on Enterprise Information Systems - Volume 1: ICEIS},
year={2025}
}
```
## 👥 Team
<div align="center">
<table>
<tr>
<td align="center" nowrap>
<a href="https://github.com/zairobastos"><img src="https://github.com/zairobastos.png" style="width: 80px; height: 80px;" alt="Zairo Bastos"/></a>
<br />
<sub><b>Zairo Bastos</b></sub>
<br />
<sub><i>Master’s student - UFC</i></sub>
<br />
<a href="mailto:zairobastos@gmail.com" title="Email">📧</a>
<a href="https://www.linkedin.com/in/zairobastos/" title="LinkedIn">🔗</a>
</td>
<td align="center" nowrap>
<a href="https://github.com/wesleey"><img src="https://github.com/wesleey.png" style="width: 80px; height: 80px;" alt="Wesley Barbosa"/></a>
<br />
<sub><b>Wesley Barbosa</b></sub>
<br />
<sub><i>Undergraduate student - UFC</i></sub>
<br />
<a href="mailto:wesley.barbosa.developer@gmail.com" title="Email">📧</a>
<a href="https://www.linkedin.com/in/wesleybarbosasilva/" title="LinkedIn">🔗</a>
</td>
<td align="center" nowrap>
<a href="https://github.com/fernandascarcela"><img src="https://github.com/fernandascarcela.png" style="width: 80px; height: 80px;" alt="Fernanda Scarcela"/></a>
<br />
<sub><b>Fernanda Scarcela</b></sub>
<br />
<sub><i>Undergraduate student - UFC</i></sub>
<br />
<a href="mailto:fernandascla@alu.ufc.br" title="Email">📧</a>
<a href="https://www.linkedin.com/in/fernanda-scarcela-a95543220/" title="LinkedIn">🔗</a>
</td>
<td align="center" nowrap>
<a href="https://lattes.cnpq.br/4380023778677961"><img src="https://raw.githubusercontent.com/zairobastos/LLM4Time/main/docs/assets/carlos.png" style="width: 80px; height: 80px;" alt="Carlos Caminha"/></a>
<br />
<sub><b>Carlos Caminha</b></sub>
<br />
<sub><i>Academic advisor - UFC</i></sub>
<br />
<a href="mailto:caminha@ufc.br" title="Email">📧</a>
<a href="https://lattes.cnpq.br/4380023778677961" title="Lattes">🔗</a>
</td>
<td align="center" nowrap>
<a href="https://lattes.cnpq.br/5168415467086883"><img src="https://raw.githubusercontent.com/zairobastos/LLM4Time/main/docs/assets/wellington.png" style="width: 80px; height: 80px;" alt="José Wellington Franco"/></a>
<br />
<sub><b>José Wellington Franco</b></sub>
<br />
<sub><i>Academic advisor - UFC</i></sub>
<br />
<a href="mailto:wellington@crateus.ufc.br" title="Email">📧</a>
<a href="https://lattes.cnpq.br/5168415467086883" title="Lattes">🔗</a>
</td>
</tr>
</table>
</div>
## 📄 License
This project is licensed under the [MIT License](https://github.com/zairobastos/LLM4Time/blob/main/LICENSE).
## 📬 Contact
For questions, suggestions, or feedback:
- 📧 Email: [zairobastos@gmail.com](mailto:zairobastos@gmail.com)
- 🔗 LinkedIn: [Zairo Bastos](https://www.linkedin.com/in/zairobastos/)
Raw data
{
"_id": null,
"home_page": "https://github.com/zairobastos/LLM4Time",
"name": "llm4time",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "time series, forecasting, LLM, large language models",
"author": "Zairo Bastos",
"author_email": "zairobastos@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/62/82/10c2dc5a9eda0b4cfc931b1b5f57b83c478f5afc16e99e8be2b5607d8d55/llm4time-0.5.0.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/zairobastos/LLM4Time/main/docs/assets/LLM4Time.svg\" width=\"150\" />\n\n# LLM4Time\n**A library for time series forecasting using Large Language Models (LLMs)**\n\n[](https://colab.research.google.com/drive/1TcQ9RPNrtPHSq5gaMXfBTEV7uEpMA66w?usp=sharing)\n[](https://pypi.org/project/llm4time/)\n\n[](https://github.com/zairobastos/LLM4Time/blob/main/LICENSE)\n[](https://zairobastos.github.io/LLM4Time/)\n</div>\n\n<p align=\"center\">\n <a href=\"#-get-started\">Get Started</a> \u2022\n <a href=\"https://zairobastos.github.io/LLM4Time/\">Documentation</a> \u2022\n <a href=\"#-refer\u00eancias\">References</a> \u2022\n <a href=\"#-contato\">Contact</a>\n</p>\n\n## \ud83e\udde9 Get Started\nLLM4Time is a Python library for time series forecasting using Large Language Models (LLMs).\nIt provides a modular architecture that includes:\n- [Data preprocessing and handling](#pr\u00e9-processamento-e-tratamento-de-dados)\n- [Prompt generation](#gera\u00e7\u00e3o-de-prompts)\n- [Forecasting with LLMs](#previs\u00e3o-com-llms)\n- [Metric evaluation](#avalia\u00e7\u00e3o-de-m\u00e9tricas)\n- [Interactive visualization](#visualiza\u00e7\u00e3o-interativa)\n\n### Installation\n```bash\npip install llm4time\n```\n\n### Running the Streamlit interface\nIn addition, we provide a Streamlit-based interface, offering a more intuitive and practical way to interact with the library.\n\nFollow the steps below to clone the repository, set up the environment, and run the application.\n\n#### 1. Clone the repository\n```bash\ngit clone https://github.com/zairobastos/LLM4Time.git\ncd LLM4Time\n```\n#### 2. Create and activate a virtual environment (Optional)\n```bash\npython -m venv .venv\nsource .venv/bin/activate # Bash/Zsh\nsource .venv/bin/activate.fish # Fish Shell\n```\n#### 3. Install the dependencies\n```bash\npip install -e .\npip install -r requirements.txt -r requirements-streamlit.txt\n```\n#### 4. Run the application\nUsing python \ud83d\udc0d\n```bash\npython app/main.py\n```\n> Access the application at `http://localhost:8501`\n\nOr using docker \ud83d\udc0b\n```bash\ndocker compose up\n```\n\n### Data preprocessing and handling\n#### 1. Data loading\n```python\nfrom llm4time.core.data import loader\nfrom llm4time.core.evaluate import Statistics\n\n# Data loading using CSV, XLSX, JSON or Parquet\ndf = loader.load_data(\"etth2.csv\")\n\n# Descriptive statistics\nstats = Statistics(df['OT'])\nprint(f\"Mean: {stats.mean}\")\nprint(f\"Median: {stats.median}\")\nprint(f\"1\u00b0 Quartile: {stats.first_quartile}\")\nprint(f\"3\u00b0 Quartile: {stats.third_quartile}\")\nprint(f\"Standard Deviation: {stats.std}\")\nprint(f\"Minimum: {stats.min}\")\nprint(f\"Maximum: {stats.max}\")\nprint(f\"Number of missing values: {stats.missing_count}\")\nprint(f\"Percentage of missing values: {stats.missing_percentage}\")\n```\n#### 2. Data preprocessing\n```python\nfrom llm4time.core.data import preprocessor\n\n# Standardize into time series format\ndf = preprocessor.standardize(\n df,\n date_col='date', # Column containing dates/timestamps\n value_col='OT', # Column containing time series values\n duplicates='first' # How to handle duplicate rows: 'first' keeps the first occurrence\n)\n\n# Ensure all timestamps are present\ndf = preprocessor.normalize(df, freq='h')\n```\n\n#### 3. Missing data imputation\n```python\nfrom llm4time.core.data import imputation\n\n# Replace missing values with the column mean\ndf = imputation.mean(df)\n```\n\n#### 4. Data split\n```python\nfrom llm4time.core.data import preprocessor\n\n# Split the dataset into training and validation sets\ntrain, y_val = preprocessor.split(\n df,\n start_date='2016-06-01 00:00:00', # Start of the training set\n end_date='2016-12-01 00:00:00', # End of the training set\n periods=24 # Number of periods to forecast\n)\n```\n### Prompt generation\n#### 5. Zero-shot prompt generation\n```python\nfrom llm4time.core import prompt\nfrom llm4time.core import PromptType, TSFormat, TSType\n\ncontent = prompt.generate(\n train, # Training set [(date, value), ...]\n periods=24, # Number of periods to forecast\n prompt_type=PromptType.ZERO_SHOT, # prompt type: ZERO_SHOT (no examples)\n ts_format=TSFormat.ARRAY, # time series format\n ts_type=TSType.NUMERIC # Type of encoding for series values\n)\n```\n\n### Forecasting with LLMs\n#### 6. Initializing an OpenAI model\n```python\nfrom llm4time.core.models import OpenAI\n\nmodel = OpenAI(\n model='gpt-4o', # OpenAI model to be used.\n api_key='...', # API key for authentication with the OpenAI service.\n base_url='..' # Base URL of the OpenAI endpoint.\n)\n```\n\n#### 7. Predicting values\n```python\n# Forecasting\nresponse, prompt_tokens, response_tokens, time_sec = model.predict(\n content, # Previously generated prompt\n temperature=0.7, # Level of randomness in the response\n max_tokens=1000 # Maximum number of tokens in the response\n)\n\nprint(\"Model response:\", response)\nprint(\"Prompt tokens:\", prompt_tokens)\nprint(\"Response tokens:\", response_tokens)\nprint(\"Execution time (s):\", time_sec)\n```\n\n### Metric evaluation\n#### 8. Error metrics\n\n```python\nfrom llm4time.core import formatter\nfrom llm4time.core.evaluate.metrics import Metrics\n\n# Converts the response string into a numerical list\ny_pred = formatter.parse(\n response,\n ts_format=TSFormat.ARRAY,\n ts_type=TSType.NUMERIC\n)\n\nmetrics = Metrics(y_val, y_pred)\n\n# Error metrics\nprint(f\"sMAPE: {metrics.smape}\") # Symmetric Mean Absolute Percentage Error\nprint(f\"MAE: {metrics.mae}\") # Mean Absolute Error\nprint(f\"RMSE: {metrics.rmse}\") # Root Mean Squared Error\n```\n\n### Interactive evaluation\n#### 9. Plots comparing actual and predicted values\n```python\nfrom llm4time.visualization import plots\n\n# Generate a comparison plot between actual and predicted values\nplots.plot_forecast(\"Comparison between actual and predicted values\", y_val, y_pred)\n\n# Generate a bar chart comparing descriptive statistics\nplots.plot_forecast_statistics(\"Statistical comparison\", y_val, y_pred)\n```\n---\n\n## \ud83d\udd0d References\n```latex\n@article{zairo2025prompt,\n title={Prompt-Driven Time Series Forecasting with Large Language Models},\n author={Zairo Bastos and Jo\u00e3o David Freitas and Jos\u00e9 Wellington Franco and Carlos Caminha},\n journal={Proceedings of the 27th International Conference on Enterprise Information Systems - Volume 1: ICEIS},\n year={2025}\n}\n```\n\n## \ud83d\udc65 Team\n<div align=\"center\">\n<table>\n <tr>\n <td align=\"center\" nowrap>\n <a href=\"https://github.com/zairobastos\"><img src=\"https://github.com/zairobastos.png\" style=\"width: 80px; height: 80px;\" alt=\"Zairo Bastos\"/></a>\n <br />\n <sub><b>Zairo Bastos</b></sub>\n <br />\n <sub><i>Master\u2019s student - UFC</i></sub>\n <br />\n <a href=\"mailto:zairobastos@gmail.com\" title=\"Email\">\ud83d\udce7</a>\n <a href=\"https://www.linkedin.com/in/zairobastos/\" title=\"LinkedIn\">\ud83d\udd17</a>\n </td>\n <td align=\"center\" nowrap>\n <a href=\"https://github.com/wesleey\"><img src=\"https://github.com/wesleey.png\" style=\"width: 80px; height: 80px;\" alt=\"Wesley Barbosa\"/></a>\n <br />\n <sub><b>Wesley Barbosa</b></sub>\n <br />\n <sub><i>Undergraduate student - UFC</i></sub>\n <br />\n <a href=\"mailto:wesley.barbosa.developer@gmail.com\" title=\"Email\">\ud83d\udce7</a>\n <a href=\"https://www.linkedin.com/in/wesleybarbosasilva/\" title=\"LinkedIn\">\ud83d\udd17</a>\n </td>\n <td align=\"center\" nowrap>\n <a href=\"https://github.com/fernandascarcela\"><img src=\"https://github.com/fernandascarcela.png\" style=\"width: 80px; height: 80px;\" alt=\"Fernanda Scarcela\"/></a>\n <br />\n <sub><b>Fernanda Scarcela</b></sub>\n <br />\n <sub><i>Undergraduate student - UFC</i></sub>\n <br />\n <a href=\"mailto:fernandascla@alu.ufc.br\" title=\"Email\">\ud83d\udce7</a>\n <a href=\"https://www.linkedin.com/in/fernanda-scarcela-a95543220/\" title=\"LinkedIn\">\ud83d\udd17</a>\n </td>\n <td align=\"center\" nowrap>\n <a href=\"https://lattes.cnpq.br/4380023778677961\"><img src=\"https://raw.githubusercontent.com/zairobastos/LLM4Time/main/docs/assets/carlos.png\" style=\"width: 80px; height: 80px;\" alt=\"Carlos Caminha\"/></a>\n <br />\n <sub><b>Carlos Caminha</b></sub>\n <br />\n <sub><i>Academic advisor - UFC</i></sub>\n <br />\n <a href=\"mailto:caminha@ufc.br\" title=\"Email\">\ud83d\udce7</a>\n <a href=\"https://lattes.cnpq.br/4380023778677961\" title=\"Lattes\">\ud83d\udd17</a>\n </td>\n <td align=\"center\" nowrap>\n <a href=\"https://lattes.cnpq.br/5168415467086883\"><img src=\"https://raw.githubusercontent.com/zairobastos/LLM4Time/main/docs/assets/wellington.png\" style=\"width: 80px; height: 80px;\" alt=\"Jos\u00e9 Wellington Franco\"/></a>\n <br />\n <sub><b>Jos\u00e9 Wellington Franco</b></sub>\n <br />\n <sub><i>Academic advisor - UFC</i></sub>\n <br />\n <a href=\"mailto:wellington@crateus.ufc.br\" title=\"Email\">\ud83d\udce7</a>\n <a href=\"https://lattes.cnpq.br/5168415467086883\" title=\"Lattes\">\ud83d\udd17</a>\n </td>\n </tr>\n</table>\n</div>\n\n## \ud83d\udcc4 License\nThis project is licensed under the [MIT License](https://github.com/zairobastos/LLM4Time/blob/main/LICENSE).\n\n## \ud83d\udcec Contact\nFor questions, suggestions, or feedback:\n- \ud83d\udce7 Email: [zairobastos@gmail.com](mailto:zairobastos@gmail.com)\n- \ud83d\udd17 LinkedIn: [Zairo Bastos](https://www.linkedin.com/in/zairobastos/)\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Um pacote para previs\u00e3o de s\u00e9ries temporais usando modelos de linguagem.",
"version": "0.5.0",
"project_urls": {
"Homepage": "https://github.com/zairobastos/LLM4Time"
},
"split_keywords": [
"time series",
" forecasting",
" llm",
" large language models"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "1177950e98f910ab86ee00659f06dd559014aefea6a61d0747aafe62f153b45d",
"md5": "38fa62e29ed4bfc05d0622f267243be8",
"sha256": "68cf46690d00300230dd043cb8e7c085b58b5893c785b195f4df9e509adfccf7"
},
"downloads": -1,
"filename": "llm4time-0.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "38fa62e29ed4bfc05d0622f267243be8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 59647,
"upload_time": "2025-10-25T20:04:06",
"upload_time_iso_8601": "2025-10-25T20:04:06.340365Z",
"url": "https://files.pythonhosted.org/packages/11/77/950e98f910ab86ee00659f06dd559014aefea6a61d0747aafe62f153b45d/llm4time-0.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "628210c2dc5a9eda0b4cfc931b1b5f57b83c478f5afc16e99e8be2b5607d8d55",
"md5": "8dafa4033aa4a4842d23df9b85be002d",
"sha256": "720f443a9fd2840b65d31e68cdb564becc44a553747a3187fac7a72c7bcc93c8"
},
"downloads": -1,
"filename": "llm4time-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "8dafa4033aa4a4842d23df9b85be002d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 38620,
"upload_time": "2025-10-25T20:04:07",
"upload_time_iso_8601": "2025-10-25T20:04:07.440855Z",
"url": "https://files.pythonhosted.org/packages/62/82/10c2dc5a9eda0b4cfc931b1b5f57b83c478f5afc16e99e8be2b5607d8d55/llm4time-0.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-25 20:04:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "zairobastos",
"github_project": "LLM4Time",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "lmstudio",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.23.0"
],
[
"<",
"2.2.5"
]
]
},
{
"name": "openai",
"specs": [
[
">=",
"1.40.0"
],
[
"<",
"1.86.0"
]
]
},
{
"name": "openpyxl",
"specs": [
[
">=",
"3.1.0"
],
[
"<",
"3.2.0"
]
]
},
{
"name": "pandas",
"specs": [
[
">=",
"2.0.0"
],
[
"<",
"2.2.3"
]
]
},
{
"name": "permetrics",
"specs": [
[
"<",
"2.0.0"
],
[
">=",
"1.5.0"
]
]
},
{
"name": "plotly",
"specs": [
[
">=",
"5.15.0"
],
[
"<",
"6.1.0"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
">=",
"1.3.0"
],
[
"<",
"1.7.1"
]
]
},
{
"name": "scipy",
"specs": [
[
">=",
"1.10.0"
],
[
"<",
"1.15.3"
]
]
},
{
"name": "statsmodels",
"specs": [
[
">=",
"0.14.0"
],
[
"<",
"0.14.5"
]
]
},
{
"name": "setuptools",
"specs": [
[
"==",
"80.9.0"
]
]
}
],
"lcname": "llm4time"
}