@singlestore/client
Advanced tools
Comparing version 0.0.21 to 0.0.22
@@ -36,3 +36,2 @@ import * as _singlestore_ai from '@singlestore/ai'; | ||
} | ||
type ModifyColumnSchema = Partial<Omit<ColumnSchema, "name">>; | ||
declare class Column { | ||
@@ -51,3 +50,3 @@ private _connection; | ||
drop(): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
modify(schema: ModifyColumnSchema): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
modify(schema: Partial<Omit<ColumnSchema, "name">>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
rename(newName: string): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
@@ -141,9 +140,3 @@ } | ||
} | ||
type ExtractTableColumnName<T extends TableType> = Extract<keyof T["columns"], string>; | ||
type TableColumnName<T extends TableType> = ExtractTableColumnName<T> | (string & {}); | ||
type InsertTableValues<T extends TableType> = Partial<T["columns"]> | Partial<T["columns"]>[]; | ||
type SelectTableArgs<T extends TableType> = QueryBuilderArgs<T["columns"]>; | ||
type UpdateTableValues<T extends TableType> = Partial<T["columns"]>; | ||
type UpdateTableFilters<T extends TableType> = QueryFilters<T["columns"]>; | ||
type DeleteTableFilters<T extends TableType> = QueryFilters<T["columns"]>; | ||
type ColumnName<T extends TableType> = Extract<keyof T["columns"], string>; | ||
declare class Table<T extends TableType = any, U extends AI = AI> { | ||
@@ -164,34 +157,27 @@ private _connection; | ||
drop(): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
column(name: TableColumnName<T>): Column; | ||
column(name: ColumnName<T> | (string & {})): Column; | ||
showColumnsInfo(): Promise<ColumnInfo<Extract<keyof T["columns"], string>>[]>; | ||
addColumn(schema: ColumnSchema): Promise<Column>; | ||
dropColumn(name: TableColumnName<T>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
dropColumn(name: ColumnName<T> | (string & {})): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
truncate(): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
rename(newName: string): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
insert(values: InsertTableValues<T>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]][]>; | ||
select<U extends SelectTableArgs<T>>(...args: U): Promise<(ExtractQueryColumns<T["columns"], ExtractQueryOptions<U>> & RowDataPacket)[]>; | ||
update(values: UpdateTableValues<T>, filters: UpdateTableFilters<T>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
delete(filters?: DeleteTableFilters<T>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
vectorSearch<U extends QueryBuilderArgs<_S>, _S extends QuerySchema = T["columns"] & { | ||
v_score: number; | ||
}>(...[search, ...args]: [search: { | ||
insert(values: Partial<T["columns"]> | Partial<T["columns"]>[]): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]][]>; | ||
select<U extends QueryBuilderArgs<T["columns"]>>(...args: U): Promise<(ExtractQueryColumns<T["columns"], ExtractQueryOptions<U>> & RowDataPacket)[]>; | ||
update(values: Partial<T["columns"]>, filters: QueryFilters<T["columns"]>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
delete(filters?: QueryFilters<T["columns"]>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
vectorSearch<A extends [search: { | ||
prompt: string; | ||
vectorColumn: ExtractTableColumnName<T>; | ||
}, ...U]): Promise<(ExtractQueryColumns<_S, ExtractQueryOptions<U>> & { | ||
vectorColumn: ColumnName<T>; | ||
}, ...QueryBuilderArgs<T["columns"]>]>(...args: A): Promise<(ExtractQueryColumns<T["columns"], ExtractQueryOptions<A extends [any, ...infer _A] ? _A extends QueryBuilderArgs<T["columns"]> ? _A : never : never>> & { | ||
v_score: number; | ||
} & RowDataPacket)[]>; | ||
createChatCompletion<Q extends QueryBuilderArgs<_S>, _S extends QuerySchema = T["columns"] & { | ||
v_score: number; | ||
}, _O extends Exclude<Parameters<U["chatCompletions"]["create"]>[1], undefined> = Exclude<Parameters<U["chatCompletions"]["create"]>[1], undefined>>(...[{ prompt, vectorColumn, template, systemRole, ...createChatCompletionOptions }, ...args]: [ | ||
search: { | ||
prompt: string; | ||
vectorColumn: ExtractTableColumnName<T>; | ||
template?: string; | ||
} & _O, | ||
...Q | ||
]): Promise<_singlestore_ai.CreateChatCompletionResult<Omit<{ | ||
createChatCompletion<K extends Exclude<Parameters<U["chatCompletions"]["create"]>[1], undefined>>(...args: [search: { | ||
prompt: string; | ||
vectorColumn: ExtractTableColumnName<T>; | ||
vectorColumn: ColumnName<T>; | ||
template?: string; | ||
} & _O, "systemRole" | "prompt" | "vectorColumn" | "template"> & { | ||
} & K, ...QueryBuilderArgs<T["columns"]>]): Promise<_singlestore_ai.CreateChatCompletionResult<Omit<{ | ||
prompt: string; | ||
vectorColumn: ColumnName<T>; | ||
template?: string; | ||
} & K, "systemRole" | "prompt" | "vectorColumn" | "template"> & { | ||
systemRole: string; | ||
@@ -234,4 +220,3 @@ }>>; | ||
}; | ||
type ExtractDatabaseTableName<T extends DatabaseType> = Extract<keyof T["tables"], string>; | ||
type DatabaseTableName<T extends DatabaseType> = ExtractDatabaseTableName<T> | (string & {}); | ||
type TableName<T extends DatabaseType> = Extract<keyof T["tables"], string>; | ||
declare class Database<T extends DatabaseType = any, U extends AI = AI> { | ||
@@ -249,3 +234,3 @@ private _connection; | ||
tables: { | ||
columns: ColumnInfo<Extract<keyof T["tables"][Extract<keyof T["tables"], string>]["columns"], string>>[]; | ||
columns: ColumnInfo<Extract<keyof (T["tables"][Extract<keyof T["tables"], string>] extends TableType ? T["tables"][Extract<keyof T["tables"], string>] : TableType)["columns"], string>>[]; | ||
tableType: string; | ||
@@ -275,6 +260,6 @@ distributed: boolean; | ||
drop(): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
table<N, K extends DatabaseTableName<T> = DatabaseTableName<T>>(name: K): Table<N extends TableType ? N : T["tables"][K], U>; | ||
table<N, K extends TableName<T> | (string & {}) = TableName<T> | (string & {})>(name: K): Table<N extends TableType ? N : T["tables"][K] extends TableType ? T["tables"][K] : TableType, U>; | ||
showTablesInfo<U extends boolean>(extended?: U): Promise<(U extends true ? TableInfoExtended<Extract<keyof T["tables"], string>> : TableInfo<Extract<keyof T["tables"], string>>)[]>; | ||
createTable<T extends TableType>(schema: TableSchema<T>): Promise<Table<T, U>>; | ||
dropTable(name: DatabaseTableName<T>): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
dropTable(name: TableName<T> | (string & {})): Promise<[ResultSetHeader, mysql2_promise.FieldPacket[]]>; | ||
query<T extends any[]>(statement: string): Promise<T>; | ||
@@ -296,4 +281,3 @@ } | ||
} | ||
type ExtractDatabaseName<T extends WorkspaceType> = Extract<keyof T["databases"], string>; | ||
type DatabaseName<T extends WorkspaceType> = ExtractDatabaseName<T> | (string & {}); | ||
type DatabaseName<T extends WorkspaceType> = Extract<keyof T["databases"], string>; | ||
declare class Workspace<T extends WorkspaceType = any, U extends AI = AI> { | ||
@@ -305,5 +289,5 @@ connection: Connection; | ||
static connect<T extends WorkspaceType = any, U extends AI = AI>({ ai, name, ...config }: ConnectWorkspaceConfig<T, U>): Workspace<T, U>; | ||
database<N, K extends DatabaseName<T> = DatabaseName<T>>(name: K): Database<N extends DatabaseType ? N : T["databases"][K], U>; | ||
database<N, K extends DatabaseName<T> | (string & {}) = DatabaseName<T> | (string & {})>(name: K): Database<N extends DatabaseType ? N : T["databases"][K] extends DatabaseType ? T["databases"][K] : DatabaseType, U>; | ||
createDatabase<T extends DatabaseType>(schema: DatabaseSchema<T>): Promise<Database<T, U>>; | ||
dropDatabase(name: DatabaseName<T>): Promise<[mysql2.ResultSetHeader, mysql2.FieldPacket[]]>; | ||
dropDatabase(name: DatabaseName<T> | (string & {})): Promise<[mysql2.ResultSetHeader, mysql2.FieldPacket[]]>; | ||
showDatabasesInfo<U extends boolean>(extended?: U): Promise<(U extends true ? DatabaseInfoExtended<Extract<keyof T["databases"], string>> : DatabaseInfo<Extract<keyof T["databases"], string>>)[]>; | ||
@@ -323,2 +307,2 @@ } | ||
export { Column, type ColumnInfo, type ColumnSchema, type ColumnType, type ConnectWorkspaceConfig, Connection, type ConnectionConfig, Database, type DatabaseInfo, type DatabaseInfoExtended, type DatabaseName, type DatabaseSchema, type DatabaseTableName, type DatabaseTablesToRecords, type DatabaseType, type DeleteTableFilters, type ExtractDatabaseName, type ExtractDatabaseTableName, type ExtractTableColumnName, type InsertTableValues, type ModifyColumnSchema, QueryBuilder, type QueryBuilderArgs, type QueryFilters, QueryFiltersBuilder, type QueryOptions, QueryOptionsBuilder, type QuerySchema, type SelectTableArgs, SingleStoreClient, type SingleStoreClientConfig, Table, type TableColumnName, type TableInfo, type TableInfoExtended, type TableSchema, type TableType, type UpdateTableFilters, type UpdateTableValues, Workspace, type WorkspaceConfig, type WorkspaceSchema, type WorkspaceType, queryOptionKeys }; | ||
export { Column, type ColumnInfo, type ColumnSchema, type ColumnType, type ConnectWorkspaceConfig, Connection, type ConnectionConfig, Database, type DatabaseInfo, type DatabaseInfoExtended, type DatabaseSchema, type DatabaseTablesToRecords, type DatabaseType, QueryBuilder, type QueryBuilderArgs, type QueryFilters, QueryFiltersBuilder, type QueryOptions, QueryOptionsBuilder, type QuerySchema, SingleStoreClient, type SingleStoreClientConfig, Table, type TableInfo, type TableInfoExtended, type TableSchema, type TableType, Workspace, type WorkspaceConfig, type WorkspaceSchema, type WorkspaceType, queryOptionKeys }; |
@@ -344,4 +344,4 @@ "use strict"; | ||
const query = `SELECT ${columns} FROM ${this._path} ${clause}`; | ||
const result = await this._connection.client.execute(query, values); | ||
return result[0]; | ||
const [rows] = await this._connection.client.execute(query, values); | ||
return rows; | ||
} | ||
@@ -360,12 +360,9 @@ update(values, filters) { | ||
} | ||
async vectorSearch(...[search, ...args]) { | ||
const { columns, clauses, values } = new QueryBuilder(...args); | ||
async vectorSearch(...args) { | ||
const [search, ...queryBuilderArgs] = args; | ||
const { columns, clauses, values } = new QueryBuilder(...queryBuilderArgs); | ||
const promptEmbedding = (await this.ai.embeddings.create(search.prompt))[0] || []; | ||
let orderByClause = `ORDER BY ${this.vScoreKey} DESC`; | ||
if (clauses.orderBy) { | ||
if (clauses.orderBy.includes(this.vScoreKey)) { | ||
orderByClause = clauses.orderBy; | ||
} else { | ||
orderByClause += clauses.orderBy.replace(/^ORDER BY /, ", "); | ||
} | ||
orderByClause += clauses.orderBy.replace(/^ORDER BY /, ", "); | ||
} | ||
@@ -377,10 +374,11 @@ const query = ` SET @promptEmbedding = '${JSON.stringify(promptEmbedding)}' :> vector(${promptEmbedding.length}) :> blob; | ||
`; | ||
const result = await this._connection.client.execute(query, values); | ||
return result[0][1]; | ||
const [rows] = await this._connection.client.execute(query, values); | ||
return rows[1]; | ||
} | ||
async createChatCompletion(...[{ prompt, vectorColumn, template, systemRole, ...createChatCompletionOptions }, ...args]) { | ||
async createChatCompletion(...args) { | ||
const [{ prompt, vectorColumn, template, systemRole, ...createChatCompletionOptions }, ...vectorSearchArgs] = args; | ||
const _systemRole = systemRole ?? ` You are a helpful assistant. Answer the user's question based on the context provided. If the context provided doesn't answer the question asked don't answer the user's question. `; | ||
const _template = template ?? `The user asked: <question> | ||
The most similar context: <context>`; | ||
const context = await this.vectorSearch({ prompt, vectorColumn }, ...args); | ||
const context = await this.vectorSearch({ prompt, vectorColumn }, ...vectorSearchArgs); | ||
const _prompt = _template.replace("<question>", prompt).replace("<context>", JSON.stringify(context)); | ||
@@ -474,4 +472,4 @@ return this.ai.chatCompletions.create(_prompt, { ...createChatCompletionOptions, systemRole: _systemRole }); | ||
const statements = [`USE ${this.name}`, statement].join(";\n"); | ||
const result = await this._connection.client.execute(statements); | ||
return result[0].slice(1); | ||
const [rows] = await this._connection.client.execute(statements); | ||
return rows.slice(1); | ||
} | ||
@@ -478,0 +476,0 @@ }; |
{ | ||
"name": "@singlestore/client", | ||
"version": "0.0.21", | ||
"version": "0.0.22", | ||
"license": "Apache-2.0", | ||
@@ -5,0 +5,0 @@ "sideEffects": false, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
0
146412
1273