Name | intellifs JSON |
Version |
0.0.1
JSON |
| download |
home_page | |
Summary | Content-Aware File System. |
upload_time | 2024-02-10 21:57:17 |
maintainer | |
docs_url | None |
author | Harsh Verma |
requires_python | >=3.9.0,<3.12 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<div align="center">
<img src="https://github.com/synacktraa/synacktraa/assets/91981716/901ac9c8-01cb-46d8-bf52-345a46331b8a" alt="ifs-logo-GIF">
<p>Content-Aware File System.</p>
</div>
## Installation
```shell
pip install intellifs
```
> Note: intellifs only indexes plain text files, HTML, XML and PDF soures by default.
- Add support for all document types
```shell
pip install "unstructured[all-docs]"
```
> Refer [unstructured installation documentation](https://unstructured-io.github.io/unstructured/installation/full_installation.html) for more control over document types.
## CLI Usage
Display help section
```shell
ifs
```
```
Usage: ifs COMMAND
Content-Aware File System.
╭─ Commands ─────────────────────────────────────────────╮
│ embedder Default embedder. │
│ index Index a file or directory. │
│ search Perform semantic search in a directory. │
│ version Display application version. │
╰────────────────────────────────────────────────────────╯
╭─ Parameters ───────────────────────────────────────────╮
│ help,-h Display this message and exit. │
╰────────────────────────────────────────────────────────╯
```
`index` command
```shell
ifs index help
```
```
Usage: ifs index [ARGS]
Index a file or directory.
╭─ Arguments ──────────────────────────────────────────╮
│ * PATH Path to file or directory. [required] │
╰──────────────────────────────────────────────────────╯
```
- Indexing a file.
```shell
ifs index ./Cyber.pdf
```
![ifs-index-file-GIF](https://github.com/synacktraa/synacktraa/assets/91981716/77d15095-847a-457b-82da-73780a2e1b28)
- Indexing a directory.
```shell
ifs index ./test_docs
```
![ifs-index-directory-GIF](https://github.com/synacktraa/synacktraa/assets/91981716/36690bcc-9e2a-4162-ba4a-992875b90363)
`search` command
```shell
ifs search help
```
```
Usage: ifs search [ARGS] [OPTIONS]
Perform semantic search in a directory.
╭─ Arguments ───────────────────────────────────────────────────────────╮
│ DIR Start search directory path. [default: /home/synacktra] │
╰───────────────────────────────────────────────────────────────────────╯
╭─ Parameters ──────────────────────────────────────────────────────────╮
│ * --query -q Search query string. [required] │
│ --max-results -k Maximum result count. [default: 5] │
│ --threshold -t Minimum filtering threshold value. │
│ --return -r Component to return. [choices: path,context] │
╰───────────────────────────────────────────────────────────────────────╯
```
- Search in current directory
```shell
ifs search --query "How does intellifs work?"
```
- Search in specific directory
```shell
ifs search path/to/directory --query "How does intellifs work?"
```
- Get specific amount of results
```shell
ifs search -q "How does intellifs work?" -k 8
```
- Control threshold value for better results
```shell
ifs search -q "How does intellifs work?" -t 0.5
```
- Get specific component of results `[default: path mapped contexts JsON]`
```shell
ifs search -q "How does intellifs work?" -r path
```
`embedder` command
```shell
ifs embedder help
```
```
Usage: ifs embedder [OPTIONS]
Default embedder.
╭─ Parameters ────────────────────────────────────╮
│ --select -s Select from available embedders. │
╰─────────────────────────────────────────────────╯
```
- Display default embedder
```shell
ifs embedder
```
```
{
"model": "BAAI/bge-small-en-v1.5",
"dim": 384,
"description": "Fast and Default English model",
"size_in_GB": 0.13
}
```
- Select from available embedders
> Uses https://github.com/synacktraa/minifzf for selection.
```shell
ifs embedder --select
```
![ifs-embedder-select-GIF](https://github.com/synacktraa/synacktraa/assets/91981716/48512a92-c6e4-4438-b0f3-5a3cc0960d0b)
#### `shell` command
> Starts an interactive shell.
https://github.com/synacktraa/synacktraa/assets/91981716/b746ccf8-e27b-4abd-99cf-528677fb0ef8
## Library Usage
#### Initialize `FileSystem`
```python
from intellifs import FileSystem
ifs = FileSystem()
```
> By default it uses default embedder. You can specify a different `Embedder` instance too.
```python
from intellifs.embedder import Embedder
ifs = FileSystem(
embedder=Embedder(model="<model-name>", dim=<model-dimension>)
)
```
> Use `Embedder.available_models` to list supported models.
#### `index` method
- Indexing a file
```python
from intellifs.indexables import File
ifs.index(File(__file__))
```
- Indexing a directory
```python
from intellifs.indexables import Directory
ifs.index(Directory('path/to/directory'))
```
#### `is_indexed` method
> Verify If a `File` or `Directory` has been indexed.
```python
file = File(__file__)
ifs.is_indexed(file)
ifs.is_indexed(file.directory)
```
#### `search` method
- Search in current directory
```python
ifs.search(query="How does intellifs work?")
```
- Search in specific directory
```python
ifs.search(
directory=Directory('path/to/directory'),
query="How does intellifs work?"
)
```
- Get specific amount of results
```python
ifs.search(query="How does intellifs work?", max_results=8)
```
- Control threshold value for better results
```python
ifs.search(
query="How does intellifs work?", score_threshold=0.5
)
```
# How It Works?
The `FileSystem` is a sophisticated file system management tool designed for organizing and searching through files and directories based on their content. It utilizes embeddings to represent file contents, allowing for semantic search capabilities. Here's a breakdown of its core components and functionalities:
### Core Components
#### `Metadata` and `Index`
- **Metadata**: A structured representation that includes file contexts (chunks of text extracted from files), the directory path, filepath, and the last modified timestamp.
- **Index**: Consists of embeddings (vector representations of file contents) and associated metadata.
#### `FileSystem` Class
The `FileSystem` class is the heart of the system, integrating various components to facilitate file indexing, searching, and management.
### Initialization
Upon initialization, the `FileSystem` prepares the environment for indexing and searching files and directories with the following steps:
- **Embedder Setup**: An embedder is initialized to generate vector embeddings from file content. If a custom embedder is not provided, the system defaults to a pre-configured option suitable for general-purpose text embedding.
- **Local Storage Initialization**: The system sets up a local storage mechanism to cache the embeddings and metadata. This involves:
- Determining the storage path based on the embedder's name, ensuring a unique cache directory for different embedders.
- Creating a mapping file (`map.json`) within the cache directory to maintain a record of collection names associated with base paths.
- **Base Path Handling**: The FileSystem intelligently handles base paths to accommodate the file system structure of different operating systems.
- **Windows Systems**: On Windows, base paths are recognized as drive letters (e.g., `C:`, `D:`). This allows the system to manage files and directories across different drives distinctly.
- **POSIX Systems**: For POSIX-compliant systems (like Linux and macOS), base paths are identified as root directories (e.g., `/var`, `/home`). This approach facilitates indexing and searching files in a structured manner consistent with UNIX-like directory hierarchies.
- **Collection Management**: Utilizes a local persistent vector database, managed through the `qdrant_client`, to store and retrieve embeddings and metadata.
### Indexing Files and Directories
- **File Indexing**: Generates an index for a single file by extracting text, partitioning it into manageable chunks, and converting these chunks into embeddings. Metadata is also generated to include the file's contextual information and modification timestamp.
- **Directory Indexing**: Recursively indexes all files within a directory. It checks for modifications to ensure the index is current, adds new files, and removes entries for deleted files.
### Searching
Allows for semantic search within specified directories or globally across all indexed files. Searches are performed using query embeddings to find the most relevant files based on their content embeddings.
### Workflow
1. **Generate Index**: When a file or directory is indexed, the system extracts text, generates embeddings, and stores this information along with metadata in a dedicated collection.
2. **Search**: Input a text query to search across indexed files and directories. The system converts the query into an embedding and retrieves the most relevant files based on cosine similarity.
3. **Management**: The system supports adding, updating, and deleting files or directories in the index to keep the database current with the filesystem.
Raw data
{
"_id": null,
"home_page": "",
"name": "intellifs",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9.0,<3.12",
"maintainer_email": "",
"keywords": "",
"author": "Harsh Verma",
"author_email": "synacktra.work@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/88/93/eefe8ce832df098697e7177f4dbc2f22dc04a5d2d85804469d8b43fd080d/intellifs-0.0.1.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n <img src=\"https://github.com/synacktraa/synacktraa/assets/91981716/901ac9c8-01cb-46d8-bf52-345a46331b8a\" alt=\"ifs-logo-GIF\">\n <p>Content-Aware File System.</p>\n</div>\n\n\n## Installation\n\n```shell\npip install intellifs\n```\n> Note: intellifs only indexes plain text files, HTML, XML and PDF soures by default.\n\n- Add support for all document types\n ```shell\n pip install \"unstructured[all-docs]\"\n ```\n\n> Refer [unstructured installation documentation](https://unstructured-io.github.io/unstructured/installation/full_installation.html) for more control over document types.\n\n## CLI Usage\n\nDisplay help section\n```shell\nifs\n```\n```\nUsage: ifs COMMAND\n\nContent-Aware File System.\n\n\u256d\u2500 Commands \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 embedder Default embedder. \u2502\n\u2502 index Index a file or directory. \u2502\n\u2502 search Perform semantic search in a directory. \u2502\n\u2502 version Display application version. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 help,-h Display this message and exit. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\n`index` command\n```shell\nifs index help\n```\n```\nUsage: ifs index [ARGS]\n\nIndex a file or directory.\n\n\u256d\u2500 Arguments \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 * PATH Path to file or directory. [required] \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\n- Indexing a file.\n ```shell\n ifs index ./Cyber.pdf\n ```\n ![ifs-index-file-GIF](https://github.com/synacktraa/synacktraa/assets/91981716/77d15095-847a-457b-82da-73780a2e1b28)\n\n- Indexing a directory.\n ```shell\n ifs index ./test_docs\n ```\n ![ifs-index-directory-GIF](https://github.com/synacktraa/synacktraa/assets/91981716/36690bcc-9e2a-4162-ba4a-992875b90363)\n\n`search` command\n```shell\nifs search help\n```\n```\nUsage: ifs search [ARGS] [OPTIONS]\n\nPerform semantic search in a directory.\n\n\u256d\u2500 Arguments \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 DIR Start search directory path. [default: /home/synacktra] \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 * --query -q Search query string. [required] \u2502\n\u2502 --max-results -k Maximum result count. [default: 5] \u2502\n\u2502 --threshold -t Minimum filtering threshold value. \u2502\n\u2502 --return -r Component to return. [choices: path,context] \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\n- Search in current directory\n ```shell\n ifs search --query \"How does intellifs work?\"\n ```\n\n- Search in specific directory\n ```shell\n ifs search path/to/directory --query \"How does intellifs work?\"\n ```\n\n- Get specific amount of results\n ```shell\n ifs search -q \"How does intellifs work?\" -k 8\n ```\n\n- Control threshold value for better results\n ```shell\n ifs search -q \"How does intellifs work?\" -t 0.5\n ```\n\n- Get specific component of results `[default: path mapped contexts JsON]`\n ```shell\n ifs search -q \"How does intellifs work?\" -r path\n ```\n\n`embedder` command\n\n```shell\nifs embedder help\n```\n```\nUsage: ifs embedder [OPTIONS]\n\nDefault embedder.\n\n\u256d\u2500 Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --select -s Select from available embedders. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\n- Display default embedder\n ```shell\n ifs embedder\n ```\n ```\n {\n \"model\": \"BAAI/bge-small-en-v1.5\",\n \"dim\": 384,\n \"description\": \"Fast and Default English model\",\n \"size_in_GB\": 0.13\n }\n ```\n- Select from available embedders\n > Uses https://github.com/synacktraa/minifzf for selection.\n ```shell\n ifs embedder --select\n ```\n ![ifs-embedder-select-GIF](https://github.com/synacktraa/synacktraa/assets/91981716/48512a92-c6e4-4438-b0f3-5a3cc0960d0b)\n\n#### `shell` command\n> Starts an interactive shell.\n\nhttps://github.com/synacktraa/synacktraa/assets/91981716/b746ccf8-e27b-4abd-99cf-528677fb0ef8\n\n## Library Usage\n\n#### Initialize `FileSystem`\n\n```python\nfrom intellifs import FileSystem\nifs = FileSystem()\n```\n\n> By default it uses default embedder. You can specify a different `Embedder` instance too.\n\n```python\nfrom intellifs.embedder import Embedder\nifs = FileSystem(\n embedder=Embedder(model=\"<model-name>\", dim=<model-dimension>)\n)\n```\n> Use `Embedder.available_models` to list supported models.\n\n#### `index` method\n\n- Indexing a file\n ```python\n from intellifs.indexables import File\n ifs.index(File(__file__))\n ```\n\n- Indexing a directory\n ```python\n from intellifs.indexables import Directory\n ifs.index(Directory('path/to/directory'))\n ```\n\n#### `is_indexed` method\n\n> Verify If a `File` or `Directory` has been indexed.\n```python\nfile = File(__file__)\nifs.is_indexed(file)\nifs.is_indexed(file.directory)\n```\n\n#### `search` method\n\n- Search in current directory\n ```python\n ifs.search(query=\"How does intellifs work?\")\n ```\n\n- Search in specific directory\n ```python\n ifs.search(\n directory=Directory('path/to/directory'),\n query=\"How does intellifs work?\"\n )\n ```\n\n- Get specific amount of results\n ```python\n ifs.search(query=\"How does intellifs work?\", max_results=8)\n ```\n\n- Control threshold value for better results\n ```python\n ifs.search(\n query=\"How does intellifs work?\", score_threshold=0.5\n )\n ```\n\n\n# How It Works?\n\nThe `FileSystem` is a sophisticated file system management tool designed for organizing and searching through files and directories based on their content. It utilizes embeddings to represent file contents, allowing for semantic search capabilities. Here's a breakdown of its core components and functionalities:\n\n### Core Components\n\n#### `Metadata` and `Index`\n- **Metadata**: A structured representation that includes file contexts (chunks of text extracted from files), the directory path, filepath, and the last modified timestamp.\n- **Index**: Consists of embeddings (vector representations of file contents) and associated metadata.\n\n#### `FileSystem` Class\nThe `FileSystem` class is the heart of the system, integrating various components to facilitate file indexing, searching, and management.\n\n### Initialization\n\nUpon initialization, the `FileSystem` prepares the environment for indexing and searching files and directories with the following steps:\n\n- **Embedder Setup**: An embedder is initialized to generate vector embeddings from file content. If a custom embedder is not provided, the system defaults to a pre-configured option suitable for general-purpose text embedding.\n\n- **Local Storage Initialization**: The system sets up a local storage mechanism to cache the embeddings and metadata. This involves:\n - Determining the storage path based on the embedder's name, ensuring a unique cache directory for different embedders.\n - Creating a mapping file (`map.json`) within the cache directory to maintain a record of collection names associated with base paths.\n\n- **Base Path Handling**: The FileSystem intelligently handles base paths to accommodate the file system structure of different operating systems. \n - **Windows Systems**: On Windows, base paths are recognized as drive letters (e.g., `C:`, `D:`). This allows the system to manage files and directories across different drives distinctly.\n - **POSIX Systems**: For POSIX-compliant systems (like Linux and macOS), base paths are identified as root directories (e.g., `/var`, `/home`). This approach facilitates indexing and searching files in a structured manner consistent with UNIX-like directory hierarchies.\n\n- **Collection Management**: Utilizes a local persistent vector database, managed through the `qdrant_client`, to store and retrieve embeddings and metadata.\n\n### Indexing Files and Directories\n- **File Indexing**: Generates an index for a single file by extracting text, partitioning it into manageable chunks, and converting these chunks into embeddings. Metadata is also generated to include the file's contextual information and modification timestamp.\n- **Directory Indexing**: Recursively indexes all files within a directory. It checks for modifications to ensure the index is current, adds new files, and removes entries for deleted files.\n\n### Searching\nAllows for semantic search within specified directories or globally across all indexed files. Searches are performed using query embeddings to find the most relevant files based on their content embeddings.\n\n### Workflow\n1. **Generate Index**: When a file or directory is indexed, the system extracts text, generates embeddings, and stores this information along with metadata in a dedicated collection.\n2. **Search**: Input a text query to search across indexed files and directories. The system converts the query into an embedding and retrieves the most relevant files based on cosine similarity.\n3. **Management**: The system supports adding, updating, and deleting files or directories in the index to keep the database current with the filesystem.",
"bugtrack_url": null,
"license": "MIT",
"summary": "Content-Aware File System.",
"version": "0.0.1",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "4585857d86d9f3986f0d26a63e3d438e698a778cac76018e39c1ed9d6124bae9",
"md5": "43c8f9b9a61bb090823749bb577e0677",
"sha256": "5f9707c01fe224c50b9baa4fa4f09d6694e59205474b1fb613fa236364fa95a1"
},
"downloads": -1,
"filename": "intellifs-0.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "43c8f9b9a61bb090823749bb577e0677",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9.0,<3.12",
"size": 16037,
"upload_time": "2024-02-10T21:57:16",
"upload_time_iso_8601": "2024-02-10T21:57:16.421318Z",
"url": "https://files.pythonhosted.org/packages/45/85/857d86d9f3986f0d26a63e3d438e698a778cac76018e39c1ed9d6124bae9/intellifs-0.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8893eefe8ce832df098697e7177f4dbc2f22dc04a5d2d85804469d8b43fd080d",
"md5": "368281b74d66437286d6e247bbf6350b",
"sha256": "60e9936ac748db68ba04462625dfba01e220b7eafa9d63c833722f7501da7c11"
},
"downloads": -1,
"filename": "intellifs-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "368281b74d66437286d6e247bbf6350b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9.0,<3.12",
"size": 14415,
"upload_time": "2024-02-10T21:57:17",
"upload_time_iso_8601": "2024-02-10T21:57:17.916387Z",
"url": "https://files.pythonhosted.org/packages/88/93/eefe8ce832df098697e7177f4dbc2f22dc04a5d2d85804469d8b43fd080d/intellifs-0.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-10 21:57:17",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "intellifs"
}