trustgraph/ai-context/trustgraph-client/README.md

320 lines
6.3 KiB
Markdown
Raw Normal View History

# @trustgraph/client
TypeScript/JavaScript client library for TrustGraph WebSocket API. This package provides a framework-agnostic client for communicating with TrustGraph services.
## Features
- 🌐 **WebSocket-based** - Real-time communication with TrustGraph services
- 📦 **Zero Dependencies** - No external runtime dependencies
- 🔐 **Authentication Support** - Optional API key authentication
- 🔄 **Auto-reconnection** - Handles connection failures gracefully
- 📝 **Full TypeScript Support** - Complete type definitions
- 🎯 **Framework Agnostic** - Works with any JavaScript framework or vanilla JS
## Installation
```bash
npm install @trustgraph/client
```
## Quick Start
```typescript
import { createTrustGraphSocket } from "@trustgraph/client";
// Create a socket connection
const socket = createTrustGraphSocket("your-username");
// Query triples from the knowledge graph
const triples = await socket.triplesQuery(
{ v: "http://example.org/subject", e: true },
{ v: "http://example.org/predicate", e: true },
undefined,
10, // limit
);
console.log(triples);
```
## With Authentication
```typescript
const socket = createTrustGraphSocket("your-username", "your-api-key");
```
## Core APIs
### Knowledge Graph Operations
**Query Triples**
```typescript
const triples = await socket.triplesQuery(
subject?: Value, // Optional subject filter
predicate?: Value, // Optional predicate filter
object?: Value, // Optional object filter
limit: number, // Maximum results
collection?: string // Optional collection name
);
```
**Graph Embeddings Query**
```typescript
const entities = await socket.graphEmbeddingsQuery(
vectors: number[][], // Embedding vectors
limit: number, // Maximum results
collection?: string // Optional collection name
);
```
### Text & LLM Operations
**Text Completion**
```typescript
const response = await socket.textCompletion(
system: string, // System prompt
prompt: string, // User prompt
temperature?: number
);
```
**Graph RAG**
```typescript
const answer = await socket.graphRag(
query: string,
options?: {
'entity-limit'?: number,
'triple-limit'?: number,
'max-subgraph-size'?: number,
'max-path-length'?: number
},
collection?: string
);
```
**Agent**
```typescript
socket.agent(
question: string,
think: (thought: string) => void, // Called when agent is thinking
observe: (observation: string) => void, // Called on observations
answer: (answer: string) => void, // Called with final answer
error: (error: string) => void, // Called on errors
collection?: string
);
```
**Embeddings**
```typescript
const vectors = await socket.embeddings(text: string);
```
### Document Operations
**Load Document**
```typescript
await socket.loadDocument(
id: string, // Document ID
data: string, // Base64-encoded document
metadata: Triple[], // Document metadata as triples
collection?: string
);
```
**Load Text**
```typescript
await socket.loadText(
id: string, // Document ID
text: string, // Plain text content
charset: string, // Character encoding (e.g., 'utf-8')
metadata: Triple[], // Document metadata as triples
collection?: string
);
```
### Library Operations
**List Documents**
```typescript
const docs = await socket.library.listDocuments(
user?: string,
collection?: string
);
```
**Get Document**
```typescript
const doc = await socket.library.getDocument(
id: string,
user?: string,
collection?: string
);
```
**Delete Document**
```typescript
await socket.library.deleteDocument(
id: string,
user?: string,
collection?: string
);
```
### Flow Operations
Flows represent processing pipelines for documents and queries.
**Create Flow API**
```typescript
const flowApi = socket.flow("flow-id");
// flowApi has same methods as socket but scoped to this flow
```
**Start Flow**
```typescript
await socket.flows.startFlow(
flowId: string,
className: string,
description: string
);
```
**Stop Flow**
```typescript
await socket.flows.stopFlow(flowId: string);
```
**List Flows**
```typescript
const flowIds = await socket.flows.getFlows();
```
**Get Flow Definition**
```typescript
const flowDef = await socket.flows.getFlow(flowId: string);
```
**List Flow Classes**
```typescript
const classes = await socket.flows.getFlowClasses();
```
**Get Flow Class**
```typescript
const classDef = await socket.flows.getFlowClass(className: string);
```
## Connection State Monitoring
```typescript
// Subscribe to connection state changes
const unsubscribe = socket.onConnectionStateChange((state) => {
console.log("Status:", state.status); // 'connecting' | 'connected' | 'authenticated' | 'disconnected' | 'error'
console.log("Authenticated:", state.authenticated);
console.log("Error:", state.error);
});
// Unsubscribe when done
unsubscribe();
```
## Data Types
### Value
Represents a subject, predicate, or object in a triple:
```typescript
interface Value {
v: string; // Value (URI or literal)
e: boolean; // Is entity (true) or literal (false)
label?: string; // Optional human-readable label
}
```
### Triple
Represents a subject-predicate-object relationship:
```typescript
interface Triple {
s: Value; // Subject
p: Value; // Predicate
o: Value; // Object
}
```
## Advanced Usage
### Custom Timeout and Retries
Most methods accept optional timeout and retry parameters:
```typescript
await socket.triplesQuery(
subject,
predicate,
object,
limit,
collection,
30000, // timeout in ms
5, // retry attempts
);
```
### Closing the Connection
```typescript
socket.close();
```
## Error Handling
All async methods return Promises that reject on error:
```typescript
try {
const result = await socket.triplesQuery(...);
} catch (error) {
console.error('Query failed:', error);
}
```
## React Integration
For React applications, use the companion package:
```bash
npm install @trustgraph/react-provider
```
See [@trustgraph/react-provider](https://github.com/trustgraph-ai/trustgraph-client) for React-specific hooks and providers.
## API Reference
Full API documentation is available in the TypeScript definitions. Your IDE will provide autocomplete and inline documentation for all methods.
## License
Apache 2.0
(c) KnowNext Inc., KnowNext Limited 2025