tracia 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -137,6 +137,20 @@ interface ListTracesResult {
137
137
  traces: TraceListItem[];
138
138
  nextCursor?: string;
139
139
  }
140
+ interface EvaluateOptions {
141
+ evaluator: string;
142
+ value: number;
143
+ note?: string;
144
+ }
145
+ interface EvaluateResult {
146
+ id: string;
147
+ evaluatorKey: string;
148
+ evaluatorName: string;
149
+ value: number;
150
+ source: string;
151
+ note: string | null;
152
+ createdAt: string;
153
+ }
140
154
 
141
155
  interface HttpClientOptions {
142
156
  apiKey: string;
@@ -169,6 +183,7 @@ declare class Traces {
169
183
  constructor(client: HttpClient);
170
184
  get(traceId: string): Promise<Trace>;
171
185
  list(options?: ListTracesOptions): Promise<ListTracesResult>;
186
+ evaluate(traceId: string, options: EvaluateOptions): Promise<EvaluateResult>;
172
187
  }
173
188
 
174
189
  declare class TraciaError extends Error {
@@ -177,6 +192,10 @@ declare class TraciaError extends Error {
177
192
  constructor(code: TraciaErrorCode, message: string, statusCode?: number);
178
193
  }
179
194
 
195
+ declare const Eval: {
196
+ readonly POSITIVE: 1;
197
+ readonly NEGATIVE: 0;
198
+ };
180
199
  declare class Tracia {
181
200
  private readonly client;
182
201
  readonly prompts: Prompts;
@@ -184,4 +203,4 @@ declare class Tracia {
184
203
  constructor(options: TraciaOptions);
185
204
  }
186
205
 
187
- export { type CreatePromptOptions, type ListTracesOptions, type ListTracesResult, type MessageRole, type Prompt, type PromptListItem, type PromptMessage, type RunOptions, type RunResult, type RunVariables, type TokenUsage, type Trace, type TraceListItem, type TraceStatus, Tracia, TraciaError, TraciaErrorCode, type TraciaOptions, type UpdatePromptOptions };
206
+ export { type CreatePromptOptions, Eval, type EvaluateOptions, type EvaluateResult, type ListTracesOptions, type ListTracesResult, type MessageRole, type Prompt, type PromptListItem, type PromptMessage, type RunOptions, type RunResult, type RunVariables, type TokenUsage, type Trace, type TraceListItem, type TraceStatus, Tracia, TraciaError, TraciaErrorCode, type TraciaOptions, type UpdatePromptOptions };
package/dist/index.d.ts CHANGED
@@ -137,6 +137,20 @@ interface ListTracesResult {
137
137
  traces: TraceListItem[];
138
138
  nextCursor?: string;
139
139
  }
140
+ interface EvaluateOptions {
141
+ evaluator: string;
142
+ value: number;
143
+ note?: string;
144
+ }
145
+ interface EvaluateResult {
146
+ id: string;
147
+ evaluatorKey: string;
148
+ evaluatorName: string;
149
+ value: number;
150
+ source: string;
151
+ note: string | null;
152
+ createdAt: string;
153
+ }
140
154
 
141
155
  interface HttpClientOptions {
142
156
  apiKey: string;
@@ -169,6 +183,7 @@ declare class Traces {
169
183
  constructor(client: HttpClient);
170
184
  get(traceId: string): Promise<Trace>;
171
185
  list(options?: ListTracesOptions): Promise<ListTracesResult>;
186
+ evaluate(traceId: string, options: EvaluateOptions): Promise<EvaluateResult>;
172
187
  }
173
188
 
174
189
  declare class TraciaError extends Error {
@@ -177,6 +192,10 @@ declare class TraciaError extends Error {
177
192
  constructor(code: TraciaErrorCode, message: string, statusCode?: number);
178
193
  }
179
194
 
195
+ declare const Eval: {
196
+ readonly POSITIVE: 1;
197
+ readonly NEGATIVE: 0;
198
+ };
180
199
  declare class Tracia {
181
200
  private readonly client;
182
201
  readonly prompts: Prompts;
@@ -184,4 +203,4 @@ declare class Tracia {
184
203
  constructor(options: TraciaOptions);
185
204
  }
186
205
 
187
- export { type CreatePromptOptions, type ListTracesOptions, type ListTracesResult, type MessageRole, type Prompt, type PromptListItem, type PromptMessage, type RunOptions, type RunResult, type RunVariables, type TokenUsage, type Trace, type TraceListItem, type TraceStatus, Tracia, TraciaError, TraciaErrorCode, type TraciaOptions, type UpdatePromptOptions };
206
+ export { type CreatePromptOptions, Eval, type EvaluateOptions, type EvaluateResult, type ListTracesOptions, type ListTracesResult, type MessageRole, type Prompt, type PromptListItem, type PromptMessage, type RunOptions, type RunResult, type RunVariables, type TokenUsage, type Trace, type TraceListItem, type TraceStatus, Tracia, TraciaError, TraciaErrorCode, type TraciaOptions, type UpdatePromptOptions };
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ Eval: () => Eval,
23
24
  Tracia: () => Tracia,
24
25
  TraciaError: () => TraciaError,
25
26
  TraciaErrorCode: () => TraciaErrorCode
@@ -53,8 +54,8 @@ var TraciaErrorCode = /* @__PURE__ */ ((TraciaErrorCode2) => {
53
54
  })(TraciaErrorCode || {});
54
55
 
55
56
  // src/client.ts
56
- var SDK_VERSION = "0.1.1";
57
- var DEFAULT_TIMEOUT_MS = 3e4;
57
+ var SDK_VERSION = "0.2.0";
58
+ var DEFAULT_TIMEOUT_MS = 12e4;
58
59
  function mapApiErrorCodeToTraciaErrorCode(apiCode) {
59
60
  const codeMap = {
60
61
  UNAUTHORIZED: "UNAUTHORIZED" /* UNAUTHORIZED */,
@@ -243,9 +244,32 @@ var Traces = class {
243
244
  const path = query ? `/api/v1/traces?${query}` : "/api/v1/traces";
244
245
  return this.client.get(path);
245
246
  }
247
+ async evaluate(traceId, options) {
248
+ if (typeof options.value !== "number") {
249
+ throw new TraciaError(
250
+ "INVALID_REQUEST" /* INVALID_REQUEST */,
251
+ `Invalid evaluation value. Must be a number.`
252
+ );
253
+ }
254
+ const body = {
255
+ evaluatorKey: options.evaluator,
256
+ value: options.value
257
+ };
258
+ if (options.note !== void 0) {
259
+ body.note = options.note;
260
+ }
261
+ return this.client.post(
262
+ `/api/v1/traces/${encodeURIComponent(traceId)}/evaluations`,
263
+ body
264
+ );
265
+ }
246
266
  };
247
267
 
248
268
  // src/index.ts
269
+ var Eval = {
270
+ POSITIVE: 1,
271
+ NEGATIVE: 0
272
+ };
249
273
  var DEFAULT_BASE_URL = "https://app.tracia.io";
250
274
  var Tracia = class {
251
275
  constructor(options) {
@@ -262,6 +286,7 @@ var Tracia = class {
262
286
  };
263
287
  // Annotate the CommonJS export names for ESM import in node:
264
288
  0 && (module.exports = {
289
+ Eval,
265
290
  Tracia,
266
291
  TraciaError,
267
292
  TraciaErrorCode
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/types.ts","../src/client.ts","../src/prompts.ts","../src/traces.ts"],"sourcesContent":["import { HttpClient } from './client'\nimport { Prompts } from './prompts'\nimport { Traces } from './traces'\nimport { TraciaOptions } from './types'\n\nexport { TraciaError } from './errors'\nexport type {\n TraciaOptions,\n RunVariables,\n RunOptions,\n RunResult,\n TokenUsage,\n Prompt,\n PromptListItem,\n PromptMessage,\n MessageRole,\n CreatePromptOptions,\n UpdatePromptOptions,\n Trace,\n TraceListItem,\n TraceStatus,\n ListTracesOptions,\n ListTracesResult,\n} from './types'\nexport { TraciaErrorCode } from './types'\n\nconst DEFAULT_BASE_URL = 'https://app.tracia.io'\n\nexport class Tracia {\n private readonly client: HttpClient\n readonly prompts: Prompts\n readonly traces: Traces\n\n constructor(options: TraciaOptions) {\n if (!options.apiKey) {\n throw new Error('apiKey is required')\n }\n\n this.client = new HttpClient({\n apiKey: options.apiKey,\n baseUrl: DEFAULT_BASE_URL,\n })\n\n this.prompts = new Prompts(this.client)\n this.traces = new Traces(this.client)\n }\n}\n","import { TraciaErrorCode } from './types'\n\nexport class TraciaError extends Error {\n readonly code: TraciaErrorCode\n readonly statusCode?: number\n\n constructor(code: TraciaErrorCode, message: string, statusCode?: number) {\n super(message)\n this.name = 'TraciaError'\n this.code = code\n this.statusCode = statusCode\n\n Object.setPrototypeOf(this, TraciaError.prototype)\n }\n}","export interface TraciaOptions {\n apiKey: string\n}\n\nexport interface RunVariables {\n [key: string]: string\n}\n\nexport interface RunOptions {\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport interface TokenUsage {\n inputTokens: number\n outputTokens: number\n totalTokens: number\n}\n\nexport interface RunResult {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport enum TraciaErrorCode {\n UNAUTHORIZED = 'UNAUTHORIZED',\n NOT_FOUND = 'NOT_FOUND',\n CONFLICT = 'CONFLICT',\n MISSING_PROVIDER_KEY = 'MISSING_PROVIDER_KEY',\n PROVIDER_ERROR = 'PROVIDER_ERROR',\n MISSING_VARIABLES = 'MISSING_VARIABLES',\n INVALID_REQUEST = 'INVALID_REQUEST',\n NETWORK_ERROR = 'NETWORK_ERROR',\n TIMEOUT = 'TIMEOUT',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport interface ApiErrorResponse {\n error: {\n code: string\n message: string\n }\n}\n\nexport interface ApiSuccessResponse {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport type MessageRole = 'system' | 'user' | 'assistant'\n\nexport interface PromptMessage {\n id: string\n role: MessageRole\n content: string\n}\n\nexport interface Prompt {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n content: PromptMessage[]\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface PromptListItem {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface CreatePromptOptions {\n name: string\n slug?: string\n description?: string\n content: PromptMessage[]\n}\n\nexport interface UpdatePromptOptions {\n name?: string\n slug?: string\n description?: string\n content?: PromptMessage[]\n}\n\nexport interface ListPromptsResponse {\n prompts: PromptListItem[]\n}\n\nexport interface DeletePromptResponse {\n success: boolean\n}\n\nexport type TraceStatus = 'SUCCESS' | 'ERROR'\n\nexport interface TraceListItem {\n id: string\n traceId: string\n promptSlug: string\n model: string\n status: TraceStatus\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n createdAt: string\n}\n\nexport interface Trace {\n id: string\n traceId: string\n promptSlug: string\n promptVersion: number\n model: string\n provider: string\n input: { messages: PromptMessage[] }\n variables: Record<string, string> | null\n output: string | null\n status: TraceStatus\n error: string | null\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n tags: string[]\n userId: string | null\n sessionId: string | null\n createdAt: string\n}\n\nexport interface ListTracesOptions {\n promptSlug?: string\n status?: TraceStatus\n startDate?: Date\n endDate?: Date\n userId?: string\n sessionId?: string\n tags?: string[]\n limit?: number\n cursor?: string\n}\n\nexport interface ListTracesResult {\n traces: TraceListItem[]\n nextCursor?: string\n}","import { TraciaError } from './errors'\nimport {\n TraciaErrorCode,\n ApiErrorResponse,\n ApiSuccessResponse,\n} from './types'\n\nconst SDK_VERSION = process.env.SDK_VERSION || '0.0.0'\nconst DEFAULT_TIMEOUT_MS = 30000\n\ninterface HttpClientOptions {\n apiKey: string\n baseUrl: string\n}\n\ninterface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE'\n path: string\n body?: unknown\n}\n\nfunction mapApiErrorCodeToTraciaErrorCode(apiCode: string): TraciaErrorCode {\n const codeMap: Record<string, TraciaErrorCode> = {\n UNAUTHORIZED: TraciaErrorCode.UNAUTHORIZED,\n NOT_FOUND: TraciaErrorCode.NOT_FOUND,\n CONFLICT: TraciaErrorCode.CONFLICT,\n MISSING_PROVIDER_KEY: TraciaErrorCode.MISSING_PROVIDER_KEY,\n PROVIDER_ERROR: TraciaErrorCode.PROVIDER_ERROR,\n MISSING_VARIABLES: TraciaErrorCode.MISSING_VARIABLES,\n INVALID_REQUEST: TraciaErrorCode.INVALID_REQUEST,\n }\n return codeMap[apiCode] ?? TraciaErrorCode.UNKNOWN\n}\n\nexport class HttpClient {\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(options: HttpClientOptions) {\n this.apiKey = options.apiKey\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'GET', path })\n }\n\n async post<T = ApiSuccessResponse>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'POST', path, body })\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'PUT', path, body })\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'DELETE', path })\n }\n\n private async request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n 'User-Agent': `tracia-sdk/${SDK_VERSION}`,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n let errorData: ApiErrorResponse | undefined\n try {\n errorData = (await response.json()) as ApiErrorResponse\n } catch {\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n if (errorData?.error) {\n const errorCode = mapApiErrorCodeToTraciaErrorCode(errorData.error.code)\n throw new TraciaError(errorCode, errorData.error.message, response.status)\n }\n\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TraciaError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TraciaError(\n TraciaErrorCode.TIMEOUT,\n `Request timed out after ${DEFAULT_TIMEOUT_MS}ms`\n )\n }\n\n throw new TraciaError(\n TraciaErrorCode.NETWORK_ERROR,\n `Network error: ${error.message}`\n )\n }\n\n throw new TraciaError(TraciaErrorCode.UNKNOWN, 'An unknown error occurred')\n }\n }\n}","import { HttpClient } from './client'\nimport {\n RunVariables,\n RunOptions,\n RunResult,\n ApiSuccessResponse,\n Prompt,\n PromptListItem,\n CreatePromptOptions,\n UpdatePromptOptions,\n ListPromptsResponse,\n DeletePromptResponse,\n} from './types'\n\ninterface RunRequestBody {\n variables?: RunVariables\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport class Prompts {\n constructor(private readonly client: HttpClient) {}\n\n async list(): Promise<PromptListItem[]> {\n const response = await this.client.get<ListPromptsResponse>('/api/v1/prompts')\n return response.prompts\n }\n\n async get(slug: string): Promise<Prompt> {\n return this.client.get<Prompt>(`/api/v1/prompts/${encodeURIComponent(slug)}`)\n }\n\n async create(options: CreatePromptOptions): Promise<Prompt> {\n return this.client.post<Prompt>('/api/v1/prompts', options)\n }\n\n async update(slug: string, options: UpdatePromptOptions): Promise<Prompt> {\n return this.client.put<Prompt>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`,\n options\n )\n }\n\n async delete(slug: string): Promise<void> {\n await this.client.delete<DeletePromptResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`\n )\n }\n\n async run(\n slug: string,\n variables?: RunVariables,\n options?: RunOptions\n ): Promise<RunResult> {\n const requestBody: RunRequestBody = {}\n\n if (variables && Object.keys(variables).length > 0) {\n requestBody.variables = variables\n }\n\n if (options?.model) {\n requestBody.model = options.model\n }\n\n if (options?.tags && options.tags.length > 0) {\n requestBody.tags = options.tags\n }\n\n if (options?.userId) {\n requestBody.userId = options.userId\n }\n\n if (options?.sessionId) {\n requestBody.sessionId = options.sessionId\n }\n\n const response = await this.client.post<ApiSuccessResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}/run`,\n requestBody\n )\n\n return {\n text: response.text,\n traceId: response.traceId,\n promptVersion: response.promptVersion,\n latencyMs: response.latencyMs,\n usage: response.usage,\n cost: response.cost,\n }\n }\n}\n","import { HttpClient } from './client'\nimport { Trace, ListTracesOptions, ListTracesResult } from './types'\n\nexport class Traces {\n constructor(private readonly client: HttpClient) {}\n\n async get(traceId: string): Promise<Trace> {\n return this.client.get<Trace>(`/api/v1/traces/${encodeURIComponent(traceId)}`)\n }\n\n async list(options?: ListTracesOptions): Promise<ListTracesResult> {\n const params = new URLSearchParams()\n\n if (options?.promptSlug) {\n params.set('promptSlug', options.promptSlug)\n }\n\n if (options?.status) {\n params.set('status', options.status)\n }\n\n if (options?.startDate) {\n params.set('startDate', options.startDate.toISOString())\n }\n\n if (options?.endDate) {\n params.set('endDate', options.endDate.toISOString())\n }\n\n if (options?.userId) {\n params.set('userId', options.userId)\n }\n\n if (options?.sessionId) {\n params.set('sessionId', options.sessionId)\n }\n\n if (options?.tags && options.tags.length > 0) {\n params.set('tags', options.tags.join(','))\n }\n\n if (options?.limit) {\n params.set('limit', String(options.limit))\n }\n\n if (options?.cursor) {\n params.set('cursor', options.cursor)\n }\n\n const query = params.toString()\n const path = query ? `/api/v1/traces?${query}` : '/api/v1/traces'\n\n return this.client.get<ListTracesResult>(path)\n }\n}\n"],"mappings":"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","names":["TraciaErrorCode"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/types.ts","../src/client.ts","../src/prompts.ts","../src/traces.ts"],"sourcesContent":["import { HttpClient } from './client'\nimport { Prompts } from './prompts'\nimport { Traces } from './traces'\nimport { TraciaOptions } from './types'\n\nexport { TraciaError } from './errors'\nexport type {\n TraciaOptions,\n RunVariables,\n RunOptions,\n RunResult,\n TokenUsage,\n Prompt,\n PromptListItem,\n PromptMessage,\n MessageRole,\n CreatePromptOptions,\n UpdatePromptOptions,\n Trace,\n TraceListItem,\n TraceStatus,\n ListTracesOptions,\n ListTracesResult,\n EvaluateOptions,\n EvaluateResult,\n} from './types'\nexport { TraciaErrorCode } from './types'\n\nexport const Eval = {\n POSITIVE: 1,\n NEGATIVE: 0,\n} as const\n\nconst DEFAULT_BASE_URL = 'https://app.tracia.io'\n\nexport class Tracia {\n private readonly client: HttpClient\n readonly prompts: Prompts\n readonly traces: Traces\n\n constructor(options: TraciaOptions) {\n if (!options.apiKey) {\n throw new Error('apiKey is required')\n }\n\n this.client = new HttpClient({\n apiKey: options.apiKey,\n baseUrl: DEFAULT_BASE_URL,\n })\n\n this.prompts = new Prompts(this.client)\n this.traces = new Traces(this.client)\n }\n}\n","import { TraciaErrorCode } from './types'\n\nexport class TraciaError extends Error {\n readonly code: TraciaErrorCode\n readonly statusCode?: number\n\n constructor(code: TraciaErrorCode, message: string, statusCode?: number) {\n super(message)\n this.name = 'TraciaError'\n this.code = code\n this.statusCode = statusCode\n\n Object.setPrototypeOf(this, TraciaError.prototype)\n }\n}","export interface TraciaOptions {\n apiKey: string\n}\n\nexport interface RunVariables {\n [key: string]: string\n}\n\nexport interface RunOptions {\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport interface TokenUsage {\n inputTokens: number\n outputTokens: number\n totalTokens: number\n}\n\nexport interface RunResult {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport enum TraciaErrorCode {\n UNAUTHORIZED = 'UNAUTHORIZED',\n NOT_FOUND = 'NOT_FOUND',\n CONFLICT = 'CONFLICT',\n MISSING_PROVIDER_KEY = 'MISSING_PROVIDER_KEY',\n PROVIDER_ERROR = 'PROVIDER_ERROR',\n MISSING_VARIABLES = 'MISSING_VARIABLES',\n INVALID_REQUEST = 'INVALID_REQUEST',\n NETWORK_ERROR = 'NETWORK_ERROR',\n TIMEOUT = 'TIMEOUT',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport interface ApiErrorResponse {\n error: {\n code: string\n message: string\n }\n}\n\nexport interface ApiSuccessResponse {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport type MessageRole = 'system' | 'user' | 'assistant'\n\nexport interface PromptMessage {\n id: string\n role: MessageRole\n content: string\n}\n\nexport interface Prompt {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n content: PromptMessage[]\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface PromptListItem {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface CreatePromptOptions {\n name: string\n slug?: string\n description?: string\n content: PromptMessage[]\n}\n\nexport interface UpdatePromptOptions {\n name?: string\n slug?: string\n description?: string\n content?: PromptMessage[]\n}\n\nexport interface ListPromptsResponse {\n prompts: PromptListItem[]\n}\n\nexport interface DeletePromptResponse {\n success: boolean\n}\n\nexport type TraceStatus = 'SUCCESS' | 'ERROR'\n\nexport interface TraceListItem {\n id: string\n traceId: string\n promptSlug: string\n model: string\n status: TraceStatus\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n createdAt: string\n}\n\nexport interface Trace {\n id: string\n traceId: string\n promptSlug: string\n promptVersion: number\n model: string\n provider: string\n input: { messages: PromptMessage[] }\n variables: Record<string, string> | null\n output: string | null\n status: TraceStatus\n error: string | null\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n tags: string[]\n userId: string | null\n sessionId: string | null\n createdAt: string\n}\n\nexport interface ListTracesOptions {\n promptSlug?: string\n status?: TraceStatus\n startDate?: Date\n endDate?: Date\n userId?: string\n sessionId?: string\n tags?: string[]\n limit?: number\n cursor?: string\n}\n\nexport interface ListTracesResult {\n traces: TraceListItem[]\n nextCursor?: string\n}\n\nexport interface EvaluateOptions {\n evaluator: string\n value: number\n note?: string\n}\n\nexport interface EvaluateResult {\n id: string\n evaluatorKey: string\n evaluatorName: string\n value: number\n source: string\n note: string | null\n createdAt: string\n}","import { TraciaError } from './errors'\nimport {\n TraciaErrorCode,\n ApiErrorResponse,\n ApiSuccessResponse,\n} from './types'\n\nconst SDK_VERSION = process.env.SDK_VERSION || '0.0.0'\nconst DEFAULT_TIMEOUT_MS = 120000\n\ninterface HttpClientOptions {\n apiKey: string\n baseUrl: string\n}\n\ninterface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE'\n path: string\n body?: unknown\n}\n\nfunction mapApiErrorCodeToTraciaErrorCode(apiCode: string): TraciaErrorCode {\n const codeMap: Record<string, TraciaErrorCode> = {\n UNAUTHORIZED: TraciaErrorCode.UNAUTHORIZED,\n NOT_FOUND: TraciaErrorCode.NOT_FOUND,\n CONFLICT: TraciaErrorCode.CONFLICT,\n MISSING_PROVIDER_KEY: TraciaErrorCode.MISSING_PROVIDER_KEY,\n PROVIDER_ERROR: TraciaErrorCode.PROVIDER_ERROR,\n MISSING_VARIABLES: TraciaErrorCode.MISSING_VARIABLES,\n INVALID_REQUEST: TraciaErrorCode.INVALID_REQUEST,\n }\n return codeMap[apiCode] ?? TraciaErrorCode.UNKNOWN\n}\n\nexport class HttpClient {\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(options: HttpClientOptions) {\n this.apiKey = options.apiKey\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'GET', path })\n }\n\n async post<T = ApiSuccessResponse>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'POST', path, body })\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'PUT', path, body })\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'DELETE', path })\n }\n\n private async request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n 'User-Agent': `tracia-sdk/${SDK_VERSION}`,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n let errorData: ApiErrorResponse | undefined\n try {\n errorData = (await response.json()) as ApiErrorResponse\n } catch {\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n if (errorData?.error) {\n const errorCode = mapApiErrorCodeToTraciaErrorCode(errorData.error.code)\n throw new TraciaError(errorCode, errorData.error.message, response.status)\n }\n\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TraciaError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TraciaError(\n TraciaErrorCode.TIMEOUT,\n `Request timed out after ${DEFAULT_TIMEOUT_MS}ms`\n )\n }\n\n throw new TraciaError(\n TraciaErrorCode.NETWORK_ERROR,\n `Network error: ${error.message}`\n )\n }\n\n throw new TraciaError(TraciaErrorCode.UNKNOWN, 'An unknown error occurred')\n }\n }\n}","import { HttpClient } from './client'\nimport {\n RunVariables,\n RunOptions,\n RunResult,\n ApiSuccessResponse,\n Prompt,\n PromptListItem,\n CreatePromptOptions,\n UpdatePromptOptions,\n ListPromptsResponse,\n DeletePromptResponse,\n} from './types'\n\ninterface RunRequestBody {\n variables?: RunVariables\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport class Prompts {\n constructor(private readonly client: HttpClient) {}\n\n async list(): Promise<PromptListItem[]> {\n const response = await this.client.get<ListPromptsResponse>('/api/v1/prompts')\n return response.prompts\n }\n\n async get(slug: string): Promise<Prompt> {\n return this.client.get<Prompt>(`/api/v1/prompts/${encodeURIComponent(slug)}`)\n }\n\n async create(options: CreatePromptOptions): Promise<Prompt> {\n return this.client.post<Prompt>('/api/v1/prompts', options)\n }\n\n async update(slug: string, options: UpdatePromptOptions): Promise<Prompt> {\n return this.client.put<Prompt>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`,\n options\n )\n }\n\n async delete(slug: string): Promise<void> {\n await this.client.delete<DeletePromptResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`\n )\n }\n\n async run(\n slug: string,\n variables?: RunVariables,\n options?: RunOptions\n ): Promise<RunResult> {\n const requestBody: RunRequestBody = {}\n\n if (variables && Object.keys(variables).length > 0) {\n requestBody.variables = variables\n }\n\n if (options?.model) {\n requestBody.model = options.model\n }\n\n if (options?.tags && options.tags.length > 0) {\n requestBody.tags = options.tags\n }\n\n if (options?.userId) {\n requestBody.userId = options.userId\n }\n\n if (options?.sessionId) {\n requestBody.sessionId = options.sessionId\n }\n\n const response = await this.client.post<ApiSuccessResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}/run`,\n requestBody\n )\n\n return {\n text: response.text,\n traceId: response.traceId,\n promptVersion: response.promptVersion,\n latencyMs: response.latencyMs,\n usage: response.usage,\n cost: response.cost,\n }\n }\n}\n","import { HttpClient } from './client'\nimport { TraciaError } from './errors'\nimport {\n Trace,\n ListTracesOptions,\n ListTracesResult,\n EvaluateOptions,\n EvaluateResult,\n TraciaErrorCode,\n} from './types'\n\nexport class Traces {\n constructor(private readonly client: HttpClient) {}\n\n async get(traceId: string): Promise<Trace> {\n return this.client.get<Trace>(`/api/v1/traces/${encodeURIComponent(traceId)}`)\n }\n\n async list(options?: ListTracesOptions): Promise<ListTracesResult> {\n const params = new URLSearchParams()\n\n if (options?.promptSlug) {\n params.set('promptSlug', options.promptSlug)\n }\n\n if (options?.status) {\n params.set('status', options.status)\n }\n\n if (options?.startDate) {\n params.set('startDate', options.startDate.toISOString())\n }\n\n if (options?.endDate) {\n params.set('endDate', options.endDate.toISOString())\n }\n\n if (options?.userId) {\n params.set('userId', options.userId)\n }\n\n if (options?.sessionId) {\n params.set('sessionId', options.sessionId)\n }\n\n if (options?.tags && options.tags.length > 0) {\n params.set('tags', options.tags.join(','))\n }\n\n if (options?.limit) {\n params.set('limit', String(options.limit))\n }\n\n if (options?.cursor) {\n params.set('cursor', options.cursor)\n }\n\n const query = params.toString()\n const path = query ? `/api/v1/traces?${query}` : '/api/v1/traces'\n\n return this.client.get<ListTracesResult>(path)\n }\n\n async evaluate(traceId: string, options: EvaluateOptions): Promise<EvaluateResult> {\n if (typeof options.value !== 'number') {\n throw new TraciaError(\n TraciaErrorCode.INVALID_REQUEST,\n `Invalid evaluation value. Must be a number.`\n )\n }\n\n const body: { evaluatorKey: string; value: number; note?: string } = {\n evaluatorKey: options.evaluator,\n value: options.value,\n }\n\n if (options.note !== undefined) {\n body.note = options.note\n }\n\n return this.client.post<EvaluateResult>(\n `/api/v1/traces/${encodeURIComponent(traceId)}/evaluations`,\n body\n )\n }\n}\n"],"mappings":"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","names":["TraciaErrorCode"]}
package/dist/index.mjs CHANGED
@@ -25,8 +25,8 @@ var TraciaErrorCode = /* @__PURE__ */ ((TraciaErrorCode2) => {
25
25
  })(TraciaErrorCode || {});
26
26
 
27
27
  // src/client.ts
28
- var SDK_VERSION = "0.1.1";
29
- var DEFAULT_TIMEOUT_MS = 3e4;
28
+ var SDK_VERSION = "0.2.0";
29
+ var DEFAULT_TIMEOUT_MS = 12e4;
30
30
  function mapApiErrorCodeToTraciaErrorCode(apiCode) {
31
31
  const codeMap = {
32
32
  UNAUTHORIZED: "UNAUTHORIZED" /* UNAUTHORIZED */,
@@ -215,9 +215,32 @@ var Traces = class {
215
215
  const path = query ? `/api/v1/traces?${query}` : "/api/v1/traces";
216
216
  return this.client.get(path);
217
217
  }
218
+ async evaluate(traceId, options) {
219
+ if (typeof options.value !== "number") {
220
+ throw new TraciaError(
221
+ "INVALID_REQUEST" /* INVALID_REQUEST */,
222
+ `Invalid evaluation value. Must be a number.`
223
+ );
224
+ }
225
+ const body = {
226
+ evaluatorKey: options.evaluator,
227
+ value: options.value
228
+ };
229
+ if (options.note !== void 0) {
230
+ body.note = options.note;
231
+ }
232
+ return this.client.post(
233
+ `/api/v1/traces/${encodeURIComponent(traceId)}/evaluations`,
234
+ body
235
+ );
236
+ }
218
237
  };
219
238
 
220
239
  // src/index.ts
240
+ var Eval = {
241
+ POSITIVE: 1,
242
+ NEGATIVE: 0
243
+ };
221
244
  var DEFAULT_BASE_URL = "https://app.tracia.io";
222
245
  var Tracia = class {
223
246
  constructor(options) {
@@ -233,6 +256,7 @@ var Tracia = class {
233
256
  }
234
257
  };
235
258
  export {
259
+ Eval,
236
260
  Tracia,
237
261
  TraciaError,
238
262
  TraciaErrorCode
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/types.ts","../src/client.ts","../src/prompts.ts","../src/traces.ts","../src/index.ts"],"sourcesContent":["import { TraciaErrorCode } from './types'\n\nexport class TraciaError extends Error {\n readonly code: TraciaErrorCode\n readonly statusCode?: number\n\n constructor(code: TraciaErrorCode, message: string, statusCode?: number) {\n super(message)\n this.name = 'TraciaError'\n this.code = code\n this.statusCode = statusCode\n\n Object.setPrototypeOf(this, TraciaError.prototype)\n }\n}","export interface TraciaOptions {\n apiKey: string\n}\n\nexport interface RunVariables {\n [key: string]: string\n}\n\nexport interface RunOptions {\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport interface TokenUsage {\n inputTokens: number\n outputTokens: number\n totalTokens: number\n}\n\nexport interface RunResult {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport enum TraciaErrorCode {\n UNAUTHORIZED = 'UNAUTHORIZED',\n NOT_FOUND = 'NOT_FOUND',\n CONFLICT = 'CONFLICT',\n MISSING_PROVIDER_KEY = 'MISSING_PROVIDER_KEY',\n PROVIDER_ERROR = 'PROVIDER_ERROR',\n MISSING_VARIABLES = 'MISSING_VARIABLES',\n INVALID_REQUEST = 'INVALID_REQUEST',\n NETWORK_ERROR = 'NETWORK_ERROR',\n TIMEOUT = 'TIMEOUT',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport interface ApiErrorResponse {\n error: {\n code: string\n message: string\n }\n}\n\nexport interface ApiSuccessResponse {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport type MessageRole = 'system' | 'user' | 'assistant'\n\nexport interface PromptMessage {\n id: string\n role: MessageRole\n content: string\n}\n\nexport interface Prompt {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n content: PromptMessage[]\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface PromptListItem {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface CreatePromptOptions {\n name: string\n slug?: string\n description?: string\n content: PromptMessage[]\n}\n\nexport interface UpdatePromptOptions {\n name?: string\n slug?: string\n description?: string\n content?: PromptMessage[]\n}\n\nexport interface ListPromptsResponse {\n prompts: PromptListItem[]\n}\n\nexport interface DeletePromptResponse {\n success: boolean\n}\n\nexport type TraceStatus = 'SUCCESS' | 'ERROR'\n\nexport interface TraceListItem {\n id: string\n traceId: string\n promptSlug: string\n model: string\n status: TraceStatus\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n createdAt: string\n}\n\nexport interface Trace {\n id: string\n traceId: string\n promptSlug: string\n promptVersion: number\n model: string\n provider: string\n input: { messages: PromptMessage[] }\n variables: Record<string, string> | null\n output: string | null\n status: TraceStatus\n error: string | null\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n tags: string[]\n userId: string | null\n sessionId: string | null\n createdAt: string\n}\n\nexport interface ListTracesOptions {\n promptSlug?: string\n status?: TraceStatus\n startDate?: Date\n endDate?: Date\n userId?: string\n sessionId?: string\n tags?: string[]\n limit?: number\n cursor?: string\n}\n\nexport interface ListTracesResult {\n traces: TraceListItem[]\n nextCursor?: string\n}","import { TraciaError } from './errors'\nimport {\n TraciaErrorCode,\n ApiErrorResponse,\n ApiSuccessResponse,\n} from './types'\n\nconst SDK_VERSION = process.env.SDK_VERSION || '0.0.0'\nconst DEFAULT_TIMEOUT_MS = 30000\n\ninterface HttpClientOptions {\n apiKey: string\n baseUrl: string\n}\n\ninterface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE'\n path: string\n body?: unknown\n}\n\nfunction mapApiErrorCodeToTraciaErrorCode(apiCode: string): TraciaErrorCode {\n const codeMap: Record<string, TraciaErrorCode> = {\n UNAUTHORIZED: TraciaErrorCode.UNAUTHORIZED,\n NOT_FOUND: TraciaErrorCode.NOT_FOUND,\n CONFLICT: TraciaErrorCode.CONFLICT,\n MISSING_PROVIDER_KEY: TraciaErrorCode.MISSING_PROVIDER_KEY,\n PROVIDER_ERROR: TraciaErrorCode.PROVIDER_ERROR,\n MISSING_VARIABLES: TraciaErrorCode.MISSING_VARIABLES,\n INVALID_REQUEST: TraciaErrorCode.INVALID_REQUEST,\n }\n return codeMap[apiCode] ?? TraciaErrorCode.UNKNOWN\n}\n\nexport class HttpClient {\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(options: HttpClientOptions) {\n this.apiKey = options.apiKey\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'GET', path })\n }\n\n async post<T = ApiSuccessResponse>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'POST', path, body })\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'PUT', path, body })\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'DELETE', path })\n }\n\n private async request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n 'User-Agent': `tracia-sdk/${SDK_VERSION}`,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n let errorData: ApiErrorResponse | undefined\n try {\n errorData = (await response.json()) as ApiErrorResponse\n } catch {\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n if (errorData?.error) {\n const errorCode = mapApiErrorCodeToTraciaErrorCode(errorData.error.code)\n throw new TraciaError(errorCode, errorData.error.message, response.status)\n }\n\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TraciaError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TraciaError(\n TraciaErrorCode.TIMEOUT,\n `Request timed out after ${DEFAULT_TIMEOUT_MS}ms`\n )\n }\n\n throw new TraciaError(\n TraciaErrorCode.NETWORK_ERROR,\n `Network error: ${error.message}`\n )\n }\n\n throw new TraciaError(TraciaErrorCode.UNKNOWN, 'An unknown error occurred')\n }\n }\n}","import { HttpClient } from './client'\nimport {\n RunVariables,\n RunOptions,\n RunResult,\n ApiSuccessResponse,\n Prompt,\n PromptListItem,\n CreatePromptOptions,\n UpdatePromptOptions,\n ListPromptsResponse,\n DeletePromptResponse,\n} from './types'\n\ninterface RunRequestBody {\n variables?: RunVariables\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport class Prompts {\n constructor(private readonly client: HttpClient) {}\n\n async list(): Promise<PromptListItem[]> {\n const response = await this.client.get<ListPromptsResponse>('/api/v1/prompts')\n return response.prompts\n }\n\n async get(slug: string): Promise<Prompt> {\n return this.client.get<Prompt>(`/api/v1/prompts/${encodeURIComponent(slug)}`)\n }\n\n async create(options: CreatePromptOptions): Promise<Prompt> {\n return this.client.post<Prompt>('/api/v1/prompts', options)\n }\n\n async update(slug: string, options: UpdatePromptOptions): Promise<Prompt> {\n return this.client.put<Prompt>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`,\n options\n )\n }\n\n async delete(slug: string): Promise<void> {\n await this.client.delete<DeletePromptResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`\n )\n }\n\n async run(\n slug: string,\n variables?: RunVariables,\n options?: RunOptions\n ): Promise<RunResult> {\n const requestBody: RunRequestBody = {}\n\n if (variables && Object.keys(variables).length > 0) {\n requestBody.variables = variables\n }\n\n if (options?.model) {\n requestBody.model = options.model\n }\n\n if (options?.tags && options.tags.length > 0) {\n requestBody.tags = options.tags\n }\n\n if (options?.userId) {\n requestBody.userId = options.userId\n }\n\n if (options?.sessionId) {\n requestBody.sessionId = options.sessionId\n }\n\n const response = await this.client.post<ApiSuccessResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}/run`,\n requestBody\n )\n\n return {\n text: response.text,\n traceId: response.traceId,\n promptVersion: response.promptVersion,\n latencyMs: response.latencyMs,\n usage: response.usage,\n cost: response.cost,\n }\n }\n}\n","import { HttpClient } from './client'\nimport { Trace, ListTracesOptions, ListTracesResult } from './types'\n\nexport class Traces {\n constructor(private readonly client: HttpClient) {}\n\n async get(traceId: string): Promise<Trace> {\n return this.client.get<Trace>(`/api/v1/traces/${encodeURIComponent(traceId)}`)\n }\n\n async list(options?: ListTracesOptions): Promise<ListTracesResult> {\n const params = new URLSearchParams()\n\n if (options?.promptSlug) {\n params.set('promptSlug', options.promptSlug)\n }\n\n if (options?.status) {\n params.set('status', options.status)\n }\n\n if (options?.startDate) {\n params.set('startDate', options.startDate.toISOString())\n }\n\n if (options?.endDate) {\n params.set('endDate', options.endDate.toISOString())\n }\n\n if (options?.userId) {\n params.set('userId', options.userId)\n }\n\n if (options?.sessionId) {\n params.set('sessionId', options.sessionId)\n }\n\n if (options?.tags && options.tags.length > 0) {\n params.set('tags', options.tags.join(','))\n }\n\n if (options?.limit) {\n params.set('limit', String(options.limit))\n }\n\n if (options?.cursor) {\n params.set('cursor', options.cursor)\n }\n\n const query = params.toString()\n const path = query ? `/api/v1/traces?${query}` : '/api/v1/traces'\n\n return this.client.get<ListTracesResult>(path)\n }\n}\n","import { HttpClient } from './client'\nimport { Prompts } from './prompts'\nimport { Traces } from './traces'\nimport { TraciaOptions } from './types'\n\nexport { TraciaError } from './errors'\nexport type {\n TraciaOptions,\n RunVariables,\n RunOptions,\n RunResult,\n TokenUsage,\n Prompt,\n PromptListItem,\n PromptMessage,\n MessageRole,\n CreatePromptOptions,\n UpdatePromptOptions,\n Trace,\n TraceListItem,\n TraceStatus,\n ListTracesOptions,\n ListTracesResult,\n} from './types'\nexport { TraciaErrorCode } from './types'\n\nconst DEFAULT_BASE_URL = 'https://app.tracia.io'\n\nexport class Tracia {\n private readonly client: HttpClient\n readonly prompts: Prompts\n readonly traces: Traces\n\n constructor(options: TraciaOptions) {\n if (!options.apiKey) {\n throw new Error('apiKey is required')\n }\n\n this.client = new HttpClient({\n apiKey: options.apiKey,\n baseUrl: DEFAULT_BASE_URL,\n })\n\n this.prompts = new Prompts(this.client)\n this.traces = new Traces(this.client)\n }\n}\n"],"mappings":"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","names":["TraciaErrorCode"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/types.ts","../src/client.ts","../src/prompts.ts","../src/traces.ts","../src/index.ts"],"sourcesContent":["import { TraciaErrorCode } from './types'\n\nexport class TraciaError extends Error {\n readonly code: TraciaErrorCode\n readonly statusCode?: number\n\n constructor(code: TraciaErrorCode, message: string, statusCode?: number) {\n super(message)\n this.name = 'TraciaError'\n this.code = code\n this.statusCode = statusCode\n\n Object.setPrototypeOf(this, TraciaError.prototype)\n }\n}","export interface TraciaOptions {\n apiKey: string\n}\n\nexport interface RunVariables {\n [key: string]: string\n}\n\nexport interface RunOptions {\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport interface TokenUsage {\n inputTokens: number\n outputTokens: number\n totalTokens: number\n}\n\nexport interface RunResult {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport enum TraciaErrorCode {\n UNAUTHORIZED = 'UNAUTHORIZED',\n NOT_FOUND = 'NOT_FOUND',\n CONFLICT = 'CONFLICT',\n MISSING_PROVIDER_KEY = 'MISSING_PROVIDER_KEY',\n PROVIDER_ERROR = 'PROVIDER_ERROR',\n MISSING_VARIABLES = 'MISSING_VARIABLES',\n INVALID_REQUEST = 'INVALID_REQUEST',\n NETWORK_ERROR = 'NETWORK_ERROR',\n TIMEOUT = 'TIMEOUT',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport interface ApiErrorResponse {\n error: {\n code: string\n message: string\n }\n}\n\nexport interface ApiSuccessResponse {\n text: string\n traceId: string\n promptVersion: number\n latencyMs: number\n usage: TokenUsage\n cost: number\n}\n\nexport type MessageRole = 'system' | 'user' | 'assistant'\n\nexport interface PromptMessage {\n id: string\n role: MessageRole\n content: string\n}\n\nexport interface Prompt {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n content: PromptMessage[]\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface PromptListItem {\n id: string\n slug: string\n name: string\n description: string | null\n model: string | null\n currentVersion: number\n variables: string[]\n createdAt: string\n updatedAt: string\n}\n\nexport interface CreatePromptOptions {\n name: string\n slug?: string\n description?: string\n content: PromptMessage[]\n}\n\nexport interface UpdatePromptOptions {\n name?: string\n slug?: string\n description?: string\n content?: PromptMessage[]\n}\n\nexport interface ListPromptsResponse {\n prompts: PromptListItem[]\n}\n\nexport interface DeletePromptResponse {\n success: boolean\n}\n\nexport type TraceStatus = 'SUCCESS' | 'ERROR'\n\nexport interface TraceListItem {\n id: string\n traceId: string\n promptSlug: string\n model: string\n status: TraceStatus\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n createdAt: string\n}\n\nexport interface Trace {\n id: string\n traceId: string\n promptSlug: string\n promptVersion: number\n model: string\n provider: string\n input: { messages: PromptMessage[] }\n variables: Record<string, string> | null\n output: string | null\n status: TraceStatus\n error: string | null\n latencyMs: number\n inputTokens: number\n outputTokens: number\n totalTokens: number\n cost: number | null\n tags: string[]\n userId: string | null\n sessionId: string | null\n createdAt: string\n}\n\nexport interface ListTracesOptions {\n promptSlug?: string\n status?: TraceStatus\n startDate?: Date\n endDate?: Date\n userId?: string\n sessionId?: string\n tags?: string[]\n limit?: number\n cursor?: string\n}\n\nexport interface ListTracesResult {\n traces: TraceListItem[]\n nextCursor?: string\n}\n\nexport interface EvaluateOptions {\n evaluator: string\n value: number\n note?: string\n}\n\nexport interface EvaluateResult {\n id: string\n evaluatorKey: string\n evaluatorName: string\n value: number\n source: string\n note: string | null\n createdAt: string\n}","import { TraciaError } from './errors'\nimport {\n TraciaErrorCode,\n ApiErrorResponse,\n ApiSuccessResponse,\n} from './types'\n\nconst SDK_VERSION = process.env.SDK_VERSION || '0.0.0'\nconst DEFAULT_TIMEOUT_MS = 120000\n\ninterface HttpClientOptions {\n apiKey: string\n baseUrl: string\n}\n\ninterface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE'\n path: string\n body?: unknown\n}\n\nfunction mapApiErrorCodeToTraciaErrorCode(apiCode: string): TraciaErrorCode {\n const codeMap: Record<string, TraciaErrorCode> = {\n UNAUTHORIZED: TraciaErrorCode.UNAUTHORIZED,\n NOT_FOUND: TraciaErrorCode.NOT_FOUND,\n CONFLICT: TraciaErrorCode.CONFLICT,\n MISSING_PROVIDER_KEY: TraciaErrorCode.MISSING_PROVIDER_KEY,\n PROVIDER_ERROR: TraciaErrorCode.PROVIDER_ERROR,\n MISSING_VARIABLES: TraciaErrorCode.MISSING_VARIABLES,\n INVALID_REQUEST: TraciaErrorCode.INVALID_REQUEST,\n }\n return codeMap[apiCode] ?? TraciaErrorCode.UNKNOWN\n}\n\nexport class HttpClient {\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(options: HttpClientOptions) {\n this.apiKey = options.apiKey\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'GET', path })\n }\n\n async post<T = ApiSuccessResponse>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'POST', path, body })\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>({ method: 'PUT', path, body })\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>({ method: 'DELETE', path })\n }\n\n private async request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n 'User-Agent': `tracia-sdk/${SDK_VERSION}`,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n let errorData: ApiErrorResponse | undefined\n try {\n errorData = (await response.json()) as ApiErrorResponse\n } catch {\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n if (errorData?.error) {\n const errorCode = mapApiErrorCodeToTraciaErrorCode(errorData.error.code)\n throw new TraciaError(errorCode, errorData.error.message, response.status)\n }\n\n throw new TraciaError(\n TraciaErrorCode.UNKNOWN,\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n )\n }\n\n return (await response.json()) as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TraciaError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TraciaError(\n TraciaErrorCode.TIMEOUT,\n `Request timed out after ${DEFAULT_TIMEOUT_MS}ms`\n )\n }\n\n throw new TraciaError(\n TraciaErrorCode.NETWORK_ERROR,\n `Network error: ${error.message}`\n )\n }\n\n throw new TraciaError(TraciaErrorCode.UNKNOWN, 'An unknown error occurred')\n }\n }\n}","import { HttpClient } from './client'\nimport {\n RunVariables,\n RunOptions,\n RunResult,\n ApiSuccessResponse,\n Prompt,\n PromptListItem,\n CreatePromptOptions,\n UpdatePromptOptions,\n ListPromptsResponse,\n DeletePromptResponse,\n} from './types'\n\ninterface RunRequestBody {\n variables?: RunVariables\n model?: string\n tags?: string[]\n userId?: string\n sessionId?: string\n}\n\nexport class Prompts {\n constructor(private readonly client: HttpClient) {}\n\n async list(): Promise<PromptListItem[]> {\n const response = await this.client.get<ListPromptsResponse>('/api/v1/prompts')\n return response.prompts\n }\n\n async get(slug: string): Promise<Prompt> {\n return this.client.get<Prompt>(`/api/v1/prompts/${encodeURIComponent(slug)}`)\n }\n\n async create(options: CreatePromptOptions): Promise<Prompt> {\n return this.client.post<Prompt>('/api/v1/prompts', options)\n }\n\n async update(slug: string, options: UpdatePromptOptions): Promise<Prompt> {\n return this.client.put<Prompt>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`,\n options\n )\n }\n\n async delete(slug: string): Promise<void> {\n await this.client.delete<DeletePromptResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}`\n )\n }\n\n async run(\n slug: string,\n variables?: RunVariables,\n options?: RunOptions\n ): Promise<RunResult> {\n const requestBody: RunRequestBody = {}\n\n if (variables && Object.keys(variables).length > 0) {\n requestBody.variables = variables\n }\n\n if (options?.model) {\n requestBody.model = options.model\n }\n\n if (options?.tags && options.tags.length > 0) {\n requestBody.tags = options.tags\n }\n\n if (options?.userId) {\n requestBody.userId = options.userId\n }\n\n if (options?.sessionId) {\n requestBody.sessionId = options.sessionId\n }\n\n const response = await this.client.post<ApiSuccessResponse>(\n `/api/v1/prompts/${encodeURIComponent(slug)}/run`,\n requestBody\n )\n\n return {\n text: response.text,\n traceId: response.traceId,\n promptVersion: response.promptVersion,\n latencyMs: response.latencyMs,\n usage: response.usage,\n cost: response.cost,\n }\n }\n}\n","import { HttpClient } from './client'\nimport { TraciaError } from './errors'\nimport {\n Trace,\n ListTracesOptions,\n ListTracesResult,\n EvaluateOptions,\n EvaluateResult,\n TraciaErrorCode,\n} from './types'\n\nexport class Traces {\n constructor(private readonly client: HttpClient) {}\n\n async get(traceId: string): Promise<Trace> {\n return this.client.get<Trace>(`/api/v1/traces/${encodeURIComponent(traceId)}`)\n }\n\n async list(options?: ListTracesOptions): Promise<ListTracesResult> {\n const params = new URLSearchParams()\n\n if (options?.promptSlug) {\n params.set('promptSlug', options.promptSlug)\n }\n\n if (options?.status) {\n params.set('status', options.status)\n }\n\n if (options?.startDate) {\n params.set('startDate', options.startDate.toISOString())\n }\n\n if (options?.endDate) {\n params.set('endDate', options.endDate.toISOString())\n }\n\n if (options?.userId) {\n params.set('userId', options.userId)\n }\n\n if (options?.sessionId) {\n params.set('sessionId', options.sessionId)\n }\n\n if (options?.tags && options.tags.length > 0) {\n params.set('tags', options.tags.join(','))\n }\n\n if (options?.limit) {\n params.set('limit', String(options.limit))\n }\n\n if (options?.cursor) {\n params.set('cursor', options.cursor)\n }\n\n const query = params.toString()\n const path = query ? `/api/v1/traces?${query}` : '/api/v1/traces'\n\n return this.client.get<ListTracesResult>(path)\n }\n\n async evaluate(traceId: string, options: EvaluateOptions): Promise<EvaluateResult> {\n if (typeof options.value !== 'number') {\n throw new TraciaError(\n TraciaErrorCode.INVALID_REQUEST,\n `Invalid evaluation value. Must be a number.`\n )\n }\n\n const body: { evaluatorKey: string; value: number; note?: string } = {\n evaluatorKey: options.evaluator,\n value: options.value,\n }\n\n if (options.note !== undefined) {\n body.note = options.note\n }\n\n return this.client.post<EvaluateResult>(\n `/api/v1/traces/${encodeURIComponent(traceId)}/evaluations`,\n body\n )\n }\n}\n","import { HttpClient } from './client'\nimport { Prompts } from './prompts'\nimport { Traces } from './traces'\nimport { TraciaOptions } from './types'\n\nexport { TraciaError } from './errors'\nexport type {\n TraciaOptions,\n RunVariables,\n RunOptions,\n RunResult,\n TokenUsage,\n Prompt,\n PromptListItem,\n PromptMessage,\n MessageRole,\n CreatePromptOptions,\n UpdatePromptOptions,\n Trace,\n TraceListItem,\n TraceStatus,\n ListTracesOptions,\n ListTracesResult,\n EvaluateOptions,\n EvaluateResult,\n} from './types'\nexport { TraciaErrorCode } from './types'\n\nexport const Eval = {\n POSITIVE: 1,\n NEGATIVE: 0,\n} as const\n\nconst DEFAULT_BASE_URL = 'https://app.tracia.io'\n\nexport class Tracia {\n private readonly client: HttpClient\n readonly prompts: Prompts\n readonly traces: Traces\n\n constructor(options: TraciaOptions) {\n if (!options.apiKey) {\n throw new Error('apiKey is required')\n }\n\n this.client = new HttpClient({\n apiKey: options.apiKey,\n baseUrl: DEFAULT_BASE_URL,\n })\n\n this.prompts = new Prompts(this.client)\n this.traces = new Traces(this.client)\n }\n}\n"],"mappings":"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","names":["TraciaErrorCode"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tracia",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "TypeScript/JavaScript SDK for Tracia - store, test, and trace LLM prompts",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",