Skip to content

Commit 7d46441

Browse files
authored
Merge pull request #75 from vectorlessflow/dev
Dev
2 parents 8cd198d + 3939faa commit 7d46441

28 files changed

Lines changed: 2790 additions & 2272 deletions

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## Summary
2+
3+
<!-- Brief description of what this PR does -->
4+
5+
## Changes
6+
7+
<!-- List the key changes -->
8+
9+
-
10+
11+
## Checklist
12+
13+
- [ ] Code compiles (`cargo build`)
14+
- [ ] Tests pass (`cargo test --lib --all-features`)
15+
- [ ] No new clippy warnings (`cargo clippy --all-features`)
16+
- [ ] Public APIs have documentation comments
17+
- [ ] Python bindings updated (if Rust API changed)
18+
19+
## Notes
20+
21+
<!-- Anything reviewers should know? Breaking changes, migration notes, etc. -->

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ members = ["rust", "python"]
33
resolver = "2"
44

55
[workspace.package]
6-
version = "0.1.28"
6+
version = "0.1.29"
77
edition = "2024"
88
authors = ["zTgx <beautifularea@gmail.com>"]
99
license = "Apache-2.0"

README.md

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,11 @@
1313

1414
</div>
1515

16-
**Vectorless** is a reasoning-native document engine designed to be the foundational layer for AI applications that need structured access to documents, with the core written in Rust. It does not use vector databases, embeddings, or similarity search. Instead, it transforms documents into hierarchical semantic trees and uses the LLM itself to navigate and retrieve — purely LLM-guided, from indexing to querying.
16+
**Vectorless** is a reasoning-native document engine designed to be the foundational layer for AI applications that need structured access to documents, with the core written in Rust. It does not use vector databases, embeddings, or similarity search. Instead, it will reason through any of your structured documents — **PDFs, Markdown, reports, contracts**and retrieve only what's relevant. Nothing more, nothing less.
1717

1818

1919

20-
## Why Vectorless
21-
22-
Most document retrieval solutions rely on vector similarity — splitting documents into chunks, embedding them, and searching by cosine distance. This works for rough topic matching, but breaks down when you need **precision**: specific numbers, cross-section references, or multi-step reasoning across a document.
23-
24-
Vectorless takes a different approach. No vectors at all. It builds a **semantic tree index** of each document — preserving the original hierarchy — and uses the LLM itself to navigate that structure. The LLM generates the tree during indexing and reasons through it during retrieval. Pure LLM guidance, end to end.
20+
## How It Works
2521

2622
<div align="center">
2723
<img src="https://vectorless.dev/img/workflow.svg" alt="Vectorless Workflow" width="900">
@@ -48,6 +44,7 @@ async fn main() -> vectorless::Result<()> {
4844
let engine = EngineBuilder::new()
4945
.with_key("sk-...")
5046
.with_model("gpt-4o")
47+
.with_endpoint("https://api.openai.com/v1")
5148
.build()
5249
.await?;
5350

@@ -77,7 +74,7 @@ import asyncio
7774
from vectorless import Engine, IndexContext, QueryContext
7875

7976
async def main():
80-
engine = Engine(api_key="sk-...", model="gpt-4o")
77+
engine = Engine(api_key="sk-...", model="gpt-4o", endpoint="https://api.openai.com/v1")
8178

8279
# Index a document
8380
result = await engine.index(IndexContext.from_path("./report.pdf"))
@@ -130,7 +127,7 @@ result = await engine.query(
130127
Indexed documents are stored in a workspace — there's no need to reprocess files between sessions:
131128

132129
```python
133-
engine = Engine(api_key="sk-...", model="gpt-4o")
130+
engine = Engine(api_key="sk-...", model="gpt-4o", endpoint="https://api.openai.com/v1")
134131

135132
# List all indexed documents
136133
docs = await engine.list()

docs/docs/api-reference.mdx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
sidebar_position: 9
3+
title: API Reference
4+
description: Complete API reference for Vectorless Rust crate and Python SDK.
5+
---
6+
7+
# API Reference
8+
9+
> This page is a work in progress. The full API reference will be published in a future update.
10+
11+
In the meantime, you can refer to the following resources:
12+
13+
- **Rust crate docs**: [docs.rs/vectorless](https://docs.rs/vectorless) — auto-generated documentation from source code
14+
- **Python SDK docs**: Available via `help(vectorless)` in an interactive Python session
15+
- **Source code**: [github.com/vectorlessflow/vectorless](https://github.com/vectorlessflow/vectorless)
16+
17+
For usage examples, see [Quick Query](/docs/examples/quick-query), [Multi-Document](/docs/examples/multi-document), and [Batch Indexing](/docs/examples/batch-indexing).

docs/docusaurus.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ const config: Config = {
111111
},
112112
{
113113
label: 'API Reference',
114-
href: 'https://docs.rs/vectorless',
114+
to: '/docs/api-reference',
115115
},
116116
],
117117
},
@@ -133,7 +133,7 @@ const config: Config = {
133133
],
134134
},
135135
],
136-
copyright: `Copyright © ${new Date().getFullYear()} Vectorless`,
136+
copyright: `Copyright \u00A9 ${new Date().getFullYear()} Vectorless`,
137137
},
138138
prism: {
139139
theme: prismThemes.github,

docs/sidebars.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const sidebars: SidebarsConfig = {
4242
'sdk/rust',
4343
],
4444
},
45+
'api-reference',
4546
{
4647
type: 'category',
4748
label: 'Examples',

docs/src/components/GitHubStar/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState, useEffect } from 'react';
2-
import { FaGithub, FaStar } from 'react-icons/fa';
2+
import { FaGithub } from 'react-icons/fa';
33
import styles from './styles.module.css';
44

55
function formatStars(count: number | null): string {
@@ -40,16 +40,16 @@ export default function GitHubStar(): React.ReactElement {
4040
rel="noopener noreferrer"
4141
className={styles.githubStarButton}
4242
>
43-
<FaGithub size={14} />
43+
<FaGithub size={16} />
4444
<span className={styles.githubStarText}>Star</span>
4545
</a>
4646
{loading ? (
4747
<div className={styles.githubStarCount}>
48-
<span className={styles.spinner}>...</span>
48+
<span className={styles.spinner}>&hellip;</span>
4949
</div>
5050
) : (
5151
<a
52-
href="https://github.com/vectorlessflow/vectorless/stargazers"
52+
href="https://github.com/vectorlessflow/vectorless"
5353
target="_blank"
5454
rel="noopener noreferrer"
5555
className={styles.githubStarCount}

docs/src/components/GitHubStar/styles.module.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
border-radius: 3px;
1616
text-decoration: none;
1717
font-size: 12px;
18-
font-weight: 700;
18+
font-weight: 600;
1919
line-height: 24px;
2020
transition: background-color 0.2s;
2121
}
@@ -46,7 +46,7 @@
4646
margin-left: 5px;
4747
padding: 0 5px;
4848
font-size: 12px;
49-
font-weight: 700;
49+
font-weight: 600;
5050
line-height: 24px;
5151
border: 1px solid #d5d5d5;
5252
border-radius: 3px;

docs/src/css/custom.css

Lines changed: 93 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,26 @@
66

77
:root {
88
--primary: #AF788B;
9-
--primary-dark: #96637A;
9+
--primary-dark: #8B5E6F;
10+
--primary-deeper: #6E4556;
1011
--primary-light: #C9A0AE;
12+
--primary-soft: rgba(175, 120, 139, 0.12);
1113
--text: #1e293b;
12-
--text-light: #64748b;
14+
--text-light: #5a4a52;
1315
--bg: #ffffff;
14-
--bg-secondary: #fdf8f9;
15-
--border: #e8dde1;
16+
--bg-secondary: #F5EBEE;
17+
--bg-offset: #F6F8FA;
18+
--card-bg: #FAF5F7;
19+
--border: #E2E8F0;
20+
--code-bg: #0F172A;
21+
--code-text: #E2E8F0;
22+
--code-comment: #6272A4;
23+
--code-keyword: #FF79C6;
1624

1725
--ifm-color-primary: #AF788B;
18-
--ifm-color-primary-dark: #96637A;
19-
--ifm-color-primary-darker: #8d5a6f;
20-
--ifm-color-primary-darkest: #6e4556;
26+
--ifm-color-primary-dark: #8B5E6F;
27+
--ifm-color-primary-darker: #7a5062;
28+
--ifm-color-primary-darkest: #6E4556;
2129
--ifm-color-primary-light: #C9A0AE;
2230
--ifm-color-primary-lighter: #d3b0bb;
2331
--ifm-color-primary-lightest: #e8d0d8;
@@ -26,6 +34,19 @@
2634
}
2735

2836
[data-theme='dark'] {
37+
--text: #EEF2FF;
38+
--text-light: #8B9AB0;
39+
--bg: #0A0C10;
40+
--bg-secondary: #11151A;
41+
--bg-offset: #11151A;
42+
--card-bg: #11151A;
43+
--border: #1E293B;
44+
--primary-soft: rgba(201, 160, 174, 0.15);
45+
--code-bg: #010409;
46+
--code-text: #E2E8F0;
47+
--code-comment: #6272A4;
48+
--code-keyword: #FF79C6;
49+
2950
--ifm-color-primary: #C9A0AE;
3051
--ifm-color-primary-dark: #b88d9d;
3152
--ifm-color-primary-darker: #af7f91;
@@ -36,57 +57,104 @@
3657
--docusaurus-highlighted-code-line-bg: rgba(175, 120, 139, 0.2);
3758
}
3859

39-
/* Navbar: no border, no shadow, match homepage bg */
60+
/* ===== Navbar ===== */
4061
.navbar {
41-
background-color: #fdf8f9 !important;
62+
background-color: var(--bg) !important;
4263
border-bottom: none !important;
4364
box-shadow: none !important;
65+
height: 68px !important;
66+
padding: 0 1.5rem !important;
67+
}
68+
69+
.navbar__inner {
70+
height: 68px !important;
71+
max-width: 1200px;
72+
margin: 0 auto;
73+
}
74+
75+
.navbar__brand {
76+
height: 68px !important;
77+
}
78+
79+
.navbar__title {
80+
font-size: 1.4rem !important;
81+
font-weight: 700 !important;
82+
color: var(--text) !important;
83+
letter-spacing: -0.01em;
84+
}
85+
86+
.navbar__logo {
87+
height: 36px;
88+
margin-right: 0.6rem;
89+
}
90+
91+
.navbar__link {
92+
font-size: 0.95rem !important;
93+
font-weight: 500 !important;
94+
color: var(--text-light) !important;
95+
transition: color 0.15s !important;
96+
}
97+
98+
.navbar__link:hover {
99+
color: var(--primary-dark) !important;
100+
}
101+
102+
.navbar__link--active {
103+
color: var(--primary-dark) !important;
44104
}
45105

46106
[data-theme='dark'] .navbar {
47-
background-color: var(--ifm-background-color) !important;
107+
background-color: var(--bg) !important;
108+
border-bottom: none !important;
109+
}
110+
111+
[data-theme='dark'] .navbar__title {
112+
color: var(--text) !important;
113+
}
114+
115+
[data-theme='dark'] .navbar__link {
116+
color: var(--text-light) !important;
117+
}
118+
119+
[data-theme='dark'] .navbar__link:hover {
120+
color: var(--primary-light) !important;
121+
}
122+
123+
[data-theme='dark'] .navbar__link--active {
124+
color: var(--primary-light) !important;
48125
}
49126

50127
/* ===== Footer ===== */
51128
.footer {
52129
background-color: transparent !important;
53-
padding: 3rem 1.5rem 2rem;
130+
padding: 5rem 1.5rem 1.5rem;
54131
}
55132

56-
/* Column titles */
57133
.footer__title {
58-
font-size: 0.8rem;
134+
font-size: 0.85rem;
59135
font-weight: 700;
60136
text-transform: uppercase;
61137
letter-spacing: 0.08em;
62138
color: var(--text);
63-
margin-bottom: 0.75rem;
139+
margin-bottom: 1rem;
64140
}
65141

66-
/* Link items */
67142
.footer__link-item {
68-
font-size: 0.88rem;
143+
font-size: 0.92rem;
69144
color: var(--text-light);
70-
line-height: 1.8;
145+
line-height: 2;
71146
transition: color 0.15s;
72147
}
73148

74149
.footer__link-item:hover {
75150
color: var(--primary);
76151
}
77152

78-
/* Hide external-link icons */
79153
.footer__link-item svg {
80154
display: none;
81155
}
82156

83-
/* Copyright */
84157
.footer__copyright {
85-
text-align: center;
86-
font-size: 0.8rem;
158+
font-size: 0.88rem;
87159
color: var(--text-light);
88-
letter-spacing: 0.03em;
89-
margin-top: 2rem;
90-
padding-top: 1.5rem;
91-
border-top: 1px solid var(--border);
92160
}

0 commit comments

Comments
 (0)