feat: add local agent MCP tools and optional source-grounded AI answers
Core CI / core (ubuntu-latest) (push) Failing after 3m6s
Core CI / core (macos-latest) (push) Canceled after 0s
Core CI / core (windows-latest) (push) Canceled after 0s
Core CI / desktop (ubuntu-latest) (push) Successful in 5m41s
Core CI / desktop (macos-latest) (push) Canceled after 0s
Core CI / desktop (windows-latest) (push) Canceled after 0s
Core CI / core (ubuntu-latest) (push) Failing after 3m6s
Core CI / core (macos-latest) (push) Canceled after 0s
Core CI / core (windows-latest) (push) Canceled after 0s
Core CI / desktop (ubuntu-latest) (push) Successful in 5m41s
Core CI / desktop (macos-latest) (push) Canceled after 0s
Core CI / desktop (windows-latest) (push) Canceled after 0s
This commit is contained in:
1 parent
70746ef428
commit
f5b03c6fb0
27 files changed
+2988
-13
No files matched your search
@@ -0,0 +1,44 @@
|
||||
# Optional source-grounded AI
|
||||
|
||||
This GUI-free crate sends a bounded explicit request to a user-configured
|
||||
OpenAI-compatible Chat Completions endpoint. It is independent of search and
|
||||
contains no default provider, endpoint, model, implicit setup call or download.
|
||||
Validating configuration and constructing a client do not contact the endpoint.
|
||||
|
||||
`AiConfig {base_url, model, api_key}` accepts an explicit HTTP(S) base such as
|
||||
`http://127.0.0.1:1234/v1`; `/chat/completions` is appended. URL credentials,
|
||||
queries and fragments are rejected. Credentials are optional, header-only,
|
||||
marked sensitive, and redacted by configuration Debug. Redirects and ambient
|
||||
proxies are disabled. Reqwest with rustls provides portable maintained HTTP/TLS.
|
||||
Errors contain static descriptions/status codes, never raw URLs, provider error
|
||||
bodies, credentials or selected text. The crate performs no logging.
|
||||
|
||||
`AiClient::generate(&AiRequest)` is the sole network operation. Callers must
|
||||
require explicit enablement and a user action, validate that sources belong to
|
||||
the current index, and obtain consent before sending excerpts to the configured
|
||||
endpoint. Desktop code should use a blocking worker; background searches must
|
||||
never depend on this client. Session credential storage is a caller concern.
|
||||
|
||||
Requests contain `AiMode::Summary` or `Question`, an optional question, and
|
||||
1–8 `AiSource` records with short unique IDs, title, text and optional location.
|
||||
Bounds: 16 KiB per source, 32 KiB total selected text, 2 KiB question, 96 KiB
|
||||
encoded HTTP payload, 64 KiB response and 16 KiB answer. Request timeout is
|
||||
45 seconds including response consumption, with a five-second connect limit.
|
||||
There is no automatic retry or silent truncation.
|
||||
|
||||
Sources are explicitly untrusted data in the system instruction; source commands
|
||||
cannot authorize tools or application actions. The only Chat Completions fields
|
||||
sent are model and messages, for broad provider compatibility. The model must
|
||||
return a JSON answer/citations object inside `choices[0].message.content`.
|
||||
Returned IDs must exist, citations must appear inline as `[id]`, and the inline
|
||||
ID set must match the citation array. Unknown or inconsistent IDs are rejected.
|
||||
A no-citation answer remains an **uncited draft**; citation validation does not
|
||||
prove factual grounding or neutralize all model prompt injection. Callers must
|
||||
label output accordingly and retain the original source for verification.
|
||||
|
||||
Local HTTP tests inspect actual endpoint path/messages/header-only credential,
|
||||
untrusted source boundaries, offline validation, pre-network input limits,
|
||||
malformed/unknown/mismatched citations, keyless local endpoints, actual timeout,
|
||||
response cap and error redaction. They use no real provider credentials, cloud
|
||||
endpoints, GPU inference or simulated production model output. Real-provider
|
||||
behavior and Linux/macOS execution remain untested release checks.
|
||||
Reference in new issue
Block a user