Skip to content

Commit dda5213

Browse files
authored
Merge pull request #366 from objectstack-ai/copilot/fix-action-step-error-again
2 parents a54dc68 + 5e98567 commit dda5213

5 files changed

Lines changed: 289 additions & 783 deletions

File tree

examples/basic/ai-rag-example.ts

Lines changed: 27 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,14 @@
99
* - AI-powered question answering
1010
*/
1111

12-
import type {
13-
RAGPipelineConfig,
14-
DocumentChunk,
15-
DocumentMetadata,
16-
RAGQueryRequest,
17-
RAGQueryResponse,
18-
Agent,
19-
} from '@objectstack/spec';
12+
import type { AI } from '@objectstack/spec';
2013

2114
/**
2215
* Example 1: RAG Pipeline Configuration
2316
*
2417
* Complete RAG pipeline setup for a knowledge base system
2518
*/
26-
export const knowledgeBaseRAG: RAGPipelineConfig = {
19+
export const knowledgeBaseRAG: AI.RAGPipelineConfig = {
2720
name: 'knowledge_base_rag',
2821
label: 'Knowledge Base RAG Pipeline',
2922
description: 'RAG pipeline for company knowledge base',
@@ -43,6 +36,9 @@ export const knowledgeBaseRAG: RAGPipelineConfig = {
4336
namespace: 'production',
4437
dimensions: 1536,
4538
metric: 'cosine',
39+
batchSize: 100,
40+
connectionPoolSize: 10,
41+
timeout: 30000,
4642
},
4743

4844
// Chunking strategy
@@ -76,14 +72,18 @@ export const knowledgeBaseRAG: RAGPipelineConfig = {
7672
metadataFilters: {
7773
status: 'published',
7874
},
75+
76+
// Cache Configuration
77+
enableCache: true,
78+
cacheTTL: 3600,
7979
};
8080

8181
/**
8282
* Example 2: Document Ingestion
8383
*
8484
* How to index documents into the RAG pipeline
8585
*/
86-
export const sampleDocumentMetadata: DocumentMetadata[] = [
86+
export const sampleDocumentMetadata: AI.DocumentMetadata[] = [
8787
{
8888
source: 'https://docs.objectstack.dev/architecture',
8989
sourceType: 'url',
@@ -110,7 +110,7 @@ export const sampleDocumentMetadata: DocumentMetadata[] = [
110110
},
111111
];
112112

113-
export const sampleDocumentChunks: DocumentChunk[] = [
113+
export const sampleDocumentChunks: AI.DocumentChunk[] = [
114114
{
115115
id: 'chunk_001',
116116
content: `ObjectStack is a metadata-driven low-code platform that enables rapid application development.
@@ -145,12 +145,14 @@ Use the Agent protocol to define AI assistants with specific capabilities.`,
145145
*
146146
* Performing a RAG query with filters and options
147147
*/
148-
export const sampleQueries: RAGQueryRequest[] = [
148+
export const sampleQueries: AI.RAGQueryRequest[] = [
149149
{
150150
// Simple question
151151
query: 'What is ObjectStack?',
152152
pipelineName: 'knowledge_base_rag',
153153
topK: 5,
154+
includeMetadata: true,
155+
includeSources: true,
154156
},
155157
{
156158
// Question with metadata filtering
@@ -160,6 +162,8 @@ export const sampleQueries: RAGQueryRequest[] = [
160162
metadataFilters: {
161163
category: 'Tutorial',
162164
},
165+
includeMetadata: true,
166+
includeSources: true,
163167
},
164168
{
165169
// Advanced query
@@ -179,7 +183,7 @@ export const sampleQueries: RAGQueryRequest[] = [
179183
*
180184
* What the pipeline returns
181185
*/
182-
export const sampleResults: RAGQueryResponse = {
186+
export const sampleResults: AI.RAGQueryResponse = {
183187
query: 'What is ObjectStack?',
184188

185189
// Retrieved chunks
@@ -214,33 +218,21 @@ It uses a three-layer architecture: ObjectQL for data, ObjectUI for presentation
214218
215219
[Source: https://docs.objectstack.dev/architecture]
216220
The platform supports multiple databases and provides built-in AI capabilities.`,
217-
218-
// Metadata
219-
processingTimeMs: 150,
220-
totalResults: 2,
221221
};
222222

223223
/**
224224
* Example 5: AI Agent with RAG
225225
*
226226
* Integrating RAG into an AI agent
227227
*/
228-
export const ragEnabledAgent: Agent = {
228+
export const ragEnabledAgent: AI.Agent = {
229229
name: 'documentation_assistant',
230-
type: 'conversational',
231230
label: 'Documentation Assistant',
232-
description: 'AI assistant powered by RAG for answering questions about ObjectStack',
233-
234-
// Agent capabilities
235-
capabilities: {
236-
objectAccess: [],
237-
canCreate: false,
238-
canUpdate: false,
239-
canAnalyze: true,
240-
},
241-
231+
role: 'Documentation Support Specialist',
232+
active: true,
233+
242234
// System prompt with RAG instructions
243-
systemPrompt: `You are a helpful documentation assistant for ObjectStack.
235+
instructions: `You are a helpful documentation assistant for ObjectStack.
244236
245237
You have access to the knowledge base through RAG (Retrieval-Augmented Generation).
246238
When answering questions:
@@ -252,18 +244,9 @@ When answering questions:
252244
Always format your responses in a clear, structured way.`,
253245

254246
// RAG Configuration
255-
rag: {
256-
pipeline: 'knowledge_base_rag',
257-
enabled: true,
258-
259-
// When to trigger RAG
260-
trigger: 'always', // or 'auto', 'manual'
261-
262-
// Number of chunks to retrieve
263-
topK: 5,
264-
265-
// Include source attribution
266-
includeSources: true,
247+
knowledge: {
248+
indexes: ['knowledge-base'],
249+
topics: ['ObjectStack', 'documentation'],
267250
},
268251

269252
// Model configuration
@@ -277,12 +260,9 @@ Always format your responses in a clear, structured way.`,
277260
// Tools (optional - for function calling)
278261
tools: [
279262
{
263+
type: 'query',
280264
name: 'search_documentation',
281265
description: 'Search the ObjectStack documentation for specific topics',
282-
parameters: {
283-
query: 'string',
284-
category: 'string?',
285-
},
286266
},
287267
],
288268
};
@@ -304,7 +284,7 @@ export function demonstrateRAGUsage() {
304284
console.log('- Embedding query...');
305285
console.log('- Searching vector database...');
306286
console.log(`- Retrieved ${sampleResults.results.length} relevant chunks`);
307-
console.log(`- Processing time: ${sampleResults.processingTimeMs}ms\n`);
287+
console.log('- Processing complete\n');
308288

309289
// Step 3: Context is assembled
310290
console.log('Assembled Context:');

examples/basic/api-discovery-example.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@
1010
* Typically exposed at: GET /api/discovery
1111
*/
1212

13-
import type {
14-
DiscoveryResponse,
15-
ApiCapabilities,
16-
} from '@objectstack/spec';
13+
import type { API } from '@objectstack/spec';
1714

1815
/**
1916
* Example 1: Complete Discovery Response
2017
*
2118
* This is what a client receives when calling /api/discovery
2219
*/
23-
export const fullDiscoveryResponse: DiscoveryResponse = {
20+
export const fullDiscoveryResponse: API.DiscoveryResponse = {
2421
// System Identity
2522
name: 'ObjectStack CRM',
2623
version: '2.1.0',
@@ -57,7 +54,7 @@ export const fullDiscoveryResponse: DiscoveryResponse = {
5754
*
5855
* A simplified response for local development
5956
*/
60-
export const devDiscoveryResponse: DiscoveryResponse = {
57+
export const devDiscoveryResponse: API.DiscoveryResponse = {
6158
name: 'ObjectStack Dev',
6259
version: '0.1.0',
6360
environment: 'development',
@@ -88,12 +85,12 @@ export const devDiscoveryResponse: DiscoveryResponse = {
8885
* How a client can use the discovery API to adapt its behavior
8986
*/
9087
export class AdaptiveClient {
91-
private discovery: DiscoveryResponse | null = null;
88+
private discovery: API.DiscoveryResponse | null = null;
9289

9390
async initialize(baseUrl: string) {
9491
// Fetch discovery information
9592
const response = await fetch(`${baseUrl}/api/discovery`);
96-
this.discovery = await response.json() as DiscoveryResponse;
93+
this.discovery = await response.json() as API.DiscoveryResponse;
9794

9895
console.log(`Connected to: ${this.discovery.name} v${this.discovery.version}`);
9996
console.log(`Environment: ${this.discovery.environment}`);
@@ -102,7 +99,7 @@ export class AdaptiveClient {
10299
/**
103100
* Check if a specific feature is available
104101
*/
105-
hasFeature(feature: keyof ApiCapabilities): boolean {
102+
hasFeature(feature: keyof API.ApiCapabilities): boolean {
106103
if (!this.discovery) return false;
107104
return this.discovery.features[feature] === true;
108105
}
@@ -142,7 +139,7 @@ export class AdaptiveClient {
142139
*
143140
* How an AI agent can use discovery to understand the system
144141
*/
145-
export function generateSystemPromptFromDiscovery(discovery: DiscoveryResponse): string {
142+
export function generateSystemPromptFromDiscovery(discovery: API.DiscoveryResponse): string {
146143
const { name, version, features, locale } = discovery;
147144

148145
const prompt = `You are an AI assistant for ${name} (v${version}).

0 commit comments

Comments
 (0)