Skip to main content

CLI and SDK tools for interacting with the Shaped API.

Project description

Shaped CLI

CLI for interactions with the Shaped API.

For full documentation, see docs.shaped.ai.

Installing the Shaped CLI

pip install shaped

Initialize

shaped init --api-key <API_KEY> [--env <ENV>]

The --env option defaults to prod and can be set to other environments like dev or staging.

Engine API

Create Engine

shaped create-engine --file <PATH_TO_FILE>

Or pipe from stdin:

cat <PATH_TO_FILE> | shaped create-engine

Update Engine

shaped update-engine --file <PATH_TO_FILE>

Or pipe from stdin:

cat <PATH_TO_FILE> | shaped update-engine

List Engines

shaped list-engines

View Engine

shaped view-engine --engine-name <ENGINE_NAME>

Delete Engine

shaped delete-engine --engine-name <ENGINE_NAME>

Table API

Create Table

shaped create-table --file <PATH_TO_FILE>

Or pipe from stdin:

cat <PATH_TO_FILE> | shaped create-table

Create Table from URI

Create a table and automatically insert data from a file:

shaped create-table-from-uri --name <TABLE_NAME> --path <PATH_TO_FILE> --type <FILE_TYPE>

Supported file types: parquet, csv, tsv, json, jsonl

List Tables

shaped list-tables

Table Insert

Insert data into an existing table:

shaped table-insert --table-name <TABLE_NAME> --file <DATAFRAME_FILE> --type <FILE_TYPE>

Supported file types: parquet, csv, tsv, json, jsonl

View Table

shaped view-table --table-name <TABLE_NAME>

Update Table

shaped update-table --file <PATH_TO_FILE>

Or pipe from stdin:

cat <PATH_TO_FILE> | shaped update-table

Delete Table

shaped delete-table --table-name <TABLE_NAME>

View API

Create View

shaped create-view --file <PATH_TO_FILE>

Or pipe from stdin:

cat <PATH_TO_FILE> | shaped create-view

List Views

shaped list-views

View View

shaped view-view --view-name <VIEW_NAME>

Update View

shaped update-view --file <PATH_TO_FILE>

Or pipe from stdin:

cat <PATH_TO_FILE> | shaped update-view

Delete View

shaped delete-view --view-name <VIEW_NAME>

Query API

Execute Query

Execute an ad-hoc query against an engine. The query can be provided in three ways:

From a file:

shaped query --engine-name <ENGINE_NAME> --query-file <PATH_TO_FILE>

As a JSON string:

shaped query --engine-name <ENGINE_NAME> --query '{"sql": "SELECT * FROM table"}'

From stdin:

cat <PATH_TO_FILE> | shaped query --engine-name <ENGINE_NAME>

Execute Saved Query

Execute a previously saved query by name:

shaped execute-saved-query --engine-name <ENGINE_NAME> --query-name <QUERY_NAME>

List Saved Queries

List all saved queries for an engine:

shaped list-saved-queries --engine-name <ENGINE_NAME>

View Saved Query

View the definition of a saved query:

shaped view-saved-query --engine-name <ENGINE_NAME> --query-name <QUERY_NAME>

Python SDK (V2)

Installation

Pip Installation

pip install shaped

V2 Query API with Fluent Builders

The V2 SDK provides a fluent query builder API that leverages Shaped's declarative query language:

from shaped import (
    Client,
    RankQueryBuilder,
    ColumnOrder,
    TextSearch,
    Ensemble,
    Diversity,
)

client = Client(api_key="your-api-key")

# Build a query using the fluent builder with step objects
query = (RankQueryBuilder()
    .from_entity('item')
    .retrieve(
        ColumnOrder(
            [{'name': 'popularity', 'ascending': False}],
            limit=1000
        ),
        TextSearch(
            'laptop',
            mode={'type': 'vector', 'text_embedding_ref': 'text_emb'}
        )
    )
    .filter(Expression('price < 1000')) filter
    .score(Ensemble('lightgbm', input_user_id='$parameters.userId'))
    .reorder(Diversity(diversity_attributes=['category']))
    .limit(50)
    .columns(['item_id', 'title', 'price'])
    .build())

# Execute the query
result = client.execute_query(
    'my_engine',
    query,
    parameters={'userId': '123'}
)

Available Step Factory Functions

The SDK provides convenient factory functions for creating step objects:

Retrieve Steps:

  • ColumnOrder(columns, limit=100, where=None, name=None) - Sort by columns
  • TextSearch(input_text_query, mode, limit=100, where=None, name=None) - Text search
  • Similarity(embedding_ref, query_encoder, limit=100, where=None, name=None) - Similarity search
  • Filter(where=None, limit=100, name=None) - Filter without ordering
  • CandidateIds(item_ids, limit=None, name=None) - Specific item IDs
  • CandidateAttributes(item_attributes, limit=None, name=None) - Item attributes

Filter Steps:

  • Expression(expression, name=None) - DuckDB filter expression
  • Truncate(max_length=500, name=None) - Truncate results to max_length
  • Prebuilt(filter_ref, input_user_id=None, name=None) - Reference to prebuilt filter

Score Configs:

  • Ensemble(value_model, input_user_id=None, ...)
  • Passthrough(name=None)

Reorder Steps:

  • Diversity(diversity_attributes=None, strength=0.5, ...)
  • Boosted(retriever, strength=0.5, name=None)
  • Exploration(retriever, strength=0.5, name=None)

Execute Saved Query

result = client.execute_saved_query(
    'my_engine',
    'recommendations',
    parameters={'userId': '123', 'limit': 20}
)

TypeScript/Node.js SDK (V2)

Installation

NPM Installation

npm install @shaped.ai/client

V2 Query API with Fluent Builders

The V2 SDK provides a fluent, type-safe query builder API:

import { Client, RankQueryBuilder } from '@shaped.ai/client';

const client = new Client({ apiKey: 'your-api-key' });

// Build a query using the fluent builder
const query = new RankQueryBuilder()
  .from('item')
  .retrieve(step => step
    .columnOrder([{name: 'popularity', ascending: false}], {limit: 1000}))
  .retrieve(step => step
    .textSearch('laptop', {type: 'vector', textEmbeddingRef: 'text_emb'}))
  .filter(step => step.expression('price < 1000'))
  .score(step => step.ensemble('lightgbm', {inputUserId: '$parameters.userId'}))
  .reorder(step => step.diversity({attribute: 'category'}))
  .limit(50)
  .columns(['item_id', 'title', 'price'])
  .build();

// Execute the query
const result = await client.executeQuery(
  'my_engine',
  query,
  {userId: '123'}
);

Execute Saved Query

const result = await client.executeSavedQuery(
  'my_engine',
  'recommendations',
  {userId: '123', limit: 20}
);

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shaped-2.0.36.tar.gz (210.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shaped-2.0.36-py3-none-any.whl (685.0 kB view details)

Uploaded Python 3

File details

Details for the file shaped-2.0.36.tar.gz.

File metadata

  • Download URL: shaped-2.0.36.tar.gz
  • Upload date:
  • Size: 210.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for shaped-2.0.36.tar.gz
Algorithm Hash digest
SHA256 8a779fa1f6d97f21cbace785a4fd9475366033a07fc5aa230f93ede22bf6cbcc
MD5 f9aaae6ae2b74587428fa1c01755f0fa
BLAKE2b-256 b1a52c2352ff0f29f48865cc30a4e0f148eb773a96ed832b904c73f0fa916348

See more details on using hashes here.

File details

Details for the file shaped-2.0.36-py3-none-any.whl.

File metadata

  • Download URL: shaped-2.0.36-py3-none-any.whl
  • Upload date:
  • Size: 685.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for shaped-2.0.36-py3-none-any.whl
Algorithm Hash digest
SHA256 613967b442b1a6e9e506ad300ba7c11b8507393f5491064ca4f7001fc2f43d04
MD5 c77a496180d40a1148b182d37d204899
BLAKE2b-256 293cfda9423b20c76e2b13f02b3fe42b2ea714bbf469b536b8fd9fe62bcef79e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page