@graphysdk/agents-sdk 1.3.0-beta.1776786180132 → 1.3.0-beta.1776957859415
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.cjs +1 -1
- package/dist/index.d.ts +109 -12
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("tslib"),t=require("zod");class r extends Error{constructor(e,t){var r;super(e),Object.setPrototypeOf(this,new.target.prototype),this.name="GraphyApiError",this.status=null==t?void 0:t.status,this.code=null==t?void 0:t.code,this.retryable=null!==(r=null==t?void 0:t.retryable)&&void 0!==r&&r}}const i=e=>"progress"===e.type,n=e=>"complete"===e.type,o=e=>"error"===e.type;class s{constructor(e){if(this.tag="[GRAPHY]",!e.apiKey||0===e.apiKey.trim().length)throw new Error("apiKey is required and must not be empty");const t=new URL(e.baseUrl);if(!["http:","https:"].includes(t.protocol))throw new Error(`Invalid baseUrl protocol: ${t.protocol}. Only http(s) is allowed.`);this.apiKey=e.apiKey,this.baseUrl=t.origin+t.pathname.replace(/\/$/,""),this.timeout=e.timeout||6e4,this.retryConfig=e.retryConfig||{attempts:3,delay:1e3,backoff:2},this.logger=e.logger||{log:console.log,warn:console.warn,error:console.error,debug:console.debug}}static isProgressEvent(e){return i(e)}static isCompleteEvent(e){return n(e)}static isErrorEvent(e){return o(e)}stream(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.makeRequest(t,r,i);return this.parseSSE(e)})}fetch(t,s,a,c){return e.__awaiter(this,void 0,void 0,function*(){var l,g,d,h,u;const p=Date.now();this.logger.debug(`${this.tag} Fetch: ${t}`);try{const b=yield this.makeRequest(t,s,c),v=b.headers.get("content-type");if(null==v?void 0:v.includes("text/event-stream")){try{for(var m,y=!0,f=e.__asyncValues(this.parseSSE(b));!(l=(m=yield f.next()).done);y=!0){h=m.value,y=!1;const e=h;if(i(e)&&a&&a(e),n(e))return e.data;if(o(e)){const i=Date.now()-p;throw this.logger.error(`${this.tag} Server error: ${t} ${i}ms`,e.error),new r(e.error,{code:e.code,retryable:null!==(u=e.retryable)&&void 0!==u&&u})}}}catch(e){g={error:e}}finally{try{y||l||!(d=f.return)||(yield d.call(f))}finally{if(g)throw g.error}}const s=Date.now()-p;throw this.logger.error(`${this.tag} Stream incomplete: ${t} ${s}ms`),new r("Stream ended without completion")}return yield b.json()}catch(e){const i=Date.now()-p;if(this.logger.error(`${this.tag} Fetch failed: ${t} ${i}ms`,e),e instanceof r)throw e;throw e}finally{const e=Date.now()-p;this.logger.debug(`${this.tag} Fetch completed: ${t} ${e}ms`)}})}ping(){return e.__awaiter(this,void 0,void 0,function*(){const e=Date.now();try{return yield this.makeRequest("/health",void 0,void 0,this.retryConfig.attempts,"GET"),{ok:!0,latency:Date.now()-e}}catch(t){return{ok:!1,latency:Date.now()-e}}})}sleep(t){return e.__awaiter(this,void 0,void 0,function*(){return new Promise(e=>setTimeout(e,t))})}parseSSE(t){return e.__asyncGenerator(this,arguments,function*(){if(!t.body)throw new r("Response body is null");const i=t.body.getReader(),n=new TextDecoder;let o="",s="",a="";try{for(;;){const{done:t,value:r}=yield e.__await(i.read());if(t)break;o+=n.decode(r,{stream:!0});const c=o.split(/\r?\n/);o=c.pop()||"";for(const t of c)if(t.startsWith("event: "))s=t.slice(7).trim();else if(t.startsWith("data: "))a+=(a?"\n":"")+t.slice(6);else if(""===t.trim()&&a){try{const t=JSON.parse(a);let r;if("progress"===s){const e=t;r=Object.assign({type:"progress"},e)}else if("complete"===s)r={type:"complete",data:t};else if("error"===s){const e=t;r=Object.assign({type:"error"},e)}else if("preview"===s){const e=t;r=Object.assign(Object.assign({},e),{type:"preview"})}else{if("reasoning"!==s){s="",a="";continue}{const e=t;r=Object.assign(Object.assign({},e),{type:"reasoning"})}}if(yield yield e.__await(r),"complete"===s||"error"===s)return yield e.__await(void 0)}catch(e){this.logger.warn("Invalid SSE data format",a)}s="",a=""}}}finally{i.releaseLock()}})}makeRequest(t,i,n){return e.__awaiter(this,arguments,void 0,function*(e,t,i,n=1,o="POST"){if(!e.startsWith("/"))throw new r("Invalid endpoint: must start with /");const s=new URL(e,this.baseUrl);if(s.origin!==new URL(this.baseUrl).origin)throw new r("Endpoint resolved to unexpected origin");this.logger.debug(`${this.tag} Request ${n}/${this.retryConfig.attempts}: ${s}`);const a=new AbortController,c=setTimeout(()=>a.abort(),this.timeout),l=()=>a.abort();i&&i.addEventListener("abort",l);try{const c=yield fetch(s,Object.assign({method:o,headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","Cache-Control":"no-cache",Authorization:`Bearer ${this.apiKey}`,"User-Agent":"Graphy-SDK/1.0"},signal:a.signal},"POST"===o&&{body:JSON.stringify(t)}));if(!c.ok){const s=c.status>=500||429===c.status;let a,l=`HTTP ${c.status}`;try{const e=yield c.json();if("object"==typeof e&&null!==e){const t=e;"string"==typeof t.message?l=t.message:"string"==typeof t.error&&(l=t.error),"string"==typeof t.code&&(a=t.code)}}catch(e){}const g=new r(l,{status:c.status,code:a,retryable:s});if(s&&n<this.retryConfig.attempts&&!(null==i?void 0:i.aborted)){const r=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,n-1);return this.logger.warn(`${this.tag} Retrying ${e} in ${r}ms (attempt ${n+1})`),yield this.sleep(r),this.makeRequest(e,t,i,n+1,o)}throw this.logger.error(`${this.tag} Request failed: ${e} (${c.status}) - ${l}`),g}return this.logger.debug(`${this.tag} Connected: ${e}`),c}catch(s){if(s instanceof r)throw s;if(s instanceof Error&&"AbortError"===s.name)throw this.logger.debug(`${this.tag} Aborted: ${e}`),s;if(n<this.retryConfig.attempts&&!(null==i?void 0:i.aborted)){const r=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,n-1);return this.logger.warn(`${this.tag} Network error, retrying ${e} in ${r}ms`),yield this.sleep(r),this.makeRequest(e,t,i,n+1,o)}throw this.logger.error(`${this.tag} Network error: ${e}`,s),new r("Network error",{retryable:!0})}finally{clearTimeout(c),i&&i.removeEventListener("abort",l)}})}}const a=t.z.enum(["EN_GB","EN_US"]),c=t.z.custom(e=>null!=e&&"object"==typeof e),l=t.z.enum(["none","low","medium","high"]),g=t.z.object({maxWallClockMs:t.z.number().positive().optional(),maxTotalTokens:t.z.number().int().positive().optional(),maxCostUsd:t.z.number().positive().optional()}),d=t.z.object({callId:t.z.string().max(256),locale:a.optional(),storytellingEffort:l.optional().default("low"),budget:g.optional()}),h=t.z.object({config:c,userPrompt:t.z.string().max(1e4).optional().default(""),metadata:d.optional()}),u=h.extend({maxSuggestionCount:t.z.number().int().min(1).max(4).optional()}),p=t.z.enum(["line","bar","groupedBar","stackedBar","100StackedBar","column","groupedColumn","stackedColumn","100StackedColumn","combo","pie","donut","funnel","heatmap","scatter","bubble","waterfall","table"]),m=t.z.object({dataPrepPrompt:t.z.string(),chartType:p,summary:t.z.string()}),y=t.z.object({response:t.z.object({message:t.z.string()}),config:c}),f=t.z.object({suggestions:t.z.array(m)}),b=t.z.enum(["comparison","relationship","distribution","composition"]),v=t.z.object({finding:t.z.string().describe("Plain-English summary of the finding (no stats jargon)."),confidence:t.z.number().min(0).max(1).describe("Statistical strength of the finding (0..1). Independent of topicality."),relevance:t.z.number().min(0).max(1).describe("Topical fit with the user prompt and chart narrative (0..1). Independent of statistical strength."),topic:t.z.string().min(1).describe("Kebab-case label grouping this finding with related ones; consumers can render findings as threads."),chartHint:t.z.string().min(1).max(240).describe('Natural-language data-prep recipe for a downstream mutate agent: filter → group → aggregate → sort, naming real dataset columns. No chart type or "render as" clause — that is set via chartFamily.'),chartFamily:b.describe("Abela family (comparison | relationship | distribution | composition). Downstream chart-generator picks the concrete chart type from this family + the data shape."),evidenceSummary:t.z.string().max(300).describe("Rigorous statistical back-up with exact numbers.")}),w=t.z.object({topic:t.z.string().min(1).describe("Kebab-case story headline shared by all child findings."),score:t.z.number().min(0).max(1).describe("Max quadrant score (relevance × confidence) across child findings."),count:t.z.number().int().min(1).describe("Number of findings in this story."),findings:t.z.array(v).describe("Child findings, sorted by quadrant score desc.")}),z=t.z.object({response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())}),stories:t.z.array(w)}),x=t.z.object({response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())}),config:c}),_=t.z.object({response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())}),config:c}),S=t.z.enum(["high","medium","low"]),$=t.z.object({confidence:S,needsUserInput:t.z.boolean(),warnings:t.z.array(t.z.string()),cellConfidence:t.z.array(t.z.object({rowIndex:t.z.number().int().nonnegative(),columnKey:t.z.string(),confidence:S,quote:t.z.string().optional()})).optional()}),E=t.z.object({score:t.z.number().min(0).max(1),issues:t.z.array(t.z.string()),sufficient:t.z.boolean(),summary:t.z.string()}),j=5e5,C=t.z.object({sourceText:t.z.string().min(1).max(j),metadata:d.optional()}),O=t.z.object({response:t.z.object({message:t.z.string()}),config:c,extractMeta:$.nullable(),lastAccuracyEvaluation:E.optional()}),R=t.z.object({config:c,response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())})}),k="/api/v0";exports.AiChartTypeEnum=p,exports.ChartFamilySchema=b,exports.ExploreFindingSchema=v,exports.ExploreStorySchema=w,exports.ExtractAccuracyEvaluationSchema=E,exports.ExtractConfidenceSchema=S,exports.ExtractFromProseParamsSchema=C,exports.ExtractFromProseResponseSchema=O,exports.ExtractMetaSchema=$,exports.GenerateAnnotationsResponseSchema=x,exports.GenerateExplorationResponseSchema=z,exports.GenerateGraphResponseSchema=R,exports.GenerateMutationResponseSchema=_,exports.GenerateNarrativeResponseSchema=y,exports.GenerateSuggestionsParamsSchema=u,exports.GenerateSuggestionsResponseSchema=f,exports.GraphGenerationRequestSchema=h,exports.GraphyAiSdk=class{constructor(e){this.client=new s(e)}generateGraph(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const{storytellingOptions:n}=t,o=e.__rest(t,["storytellingOptions"]),s=yield this.client.fetch(`${k}/generate`,o,r,i),a=R.parse(s);return this.stripStorytelling(a,n)})}generateGraphStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){const{storytellingOptions:i}=t,n=e.__rest(t,["storytellingOptions"]),o=yield this.client.stream(`${k}/generate`,n,r);return this.wrapStreamWithStorytellingStripping(o,i)})}generateNarrative(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${k}/narrate`,t,r,i);return y.parse(e)})}generateNarrativeStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${k}/narrate`,t,r)})}generateSuggestions(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${k}/suggestions`,t,r,i);return f.parse(e)})}generateSuggestionsStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${k}/suggestions`,t,r)})}generateExploration(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${k}/explore`,t,r,i);return z.parse(e)})}generateExplorationStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${k}/explore`,t,r)})}generateAnnotations(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${k}/annotate`,t,r,i);return x.parse(e)})}generateAnnotationsStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${k}/annotate`,t,r)})}generateMutation(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${k}/mutate`,t,r,i);return _.parse(e)})}generateMutationStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${k}/mutate`,t,r)})}extractFromProse(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${k}/extract`,t,r,i);return O.parse(e)})}extractFromProseStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${k}/extract`,t,r)})}stripStorytelling(e,t){return t&&e.config.content?Object.assign(Object.assign({},e),{config:Object.assign(Object.assign({},e.config),{content:Object.assign(Object.assign(Object.assign(Object.assign({},e.config.content),t.excludeTitle&&{title:void 0}),t.excludeSubtitle&&{subtitle:void 0}),t.excludeCaption&&{caption:void 0})})}):e}wrapStreamWithStorytellingStripping(t,r){return e.__asyncGenerator(this,arguments,function*(){var i,o,s,a;try{for(var c,l=!0,g=e.__asyncValues(t);!(i=(c=yield e.__await(g.next())).done);l=!0){a=c.value,l=!1;const t=a;if(n(t)){const i=this.stripStorytelling(t.data,r);yield yield e.__await(Object.assign(Object.assign({},t),{data:i}))}else yield yield e.__await(t)}}catch(e){o={error:e}}finally{try{l||i||!(s=g.return)||(yield e.__await(s.call(g)))}finally{if(o)throw o.error}}})}},exports.GraphyApiError=r,exports.InvocationBudgetSchema=g,exports.MAX_SOURCE_TEXT_LENGTH=j,exports.MAX_USER_PROMPT_LENGTH=1e4,exports.MetadataSchema=d,exports.StorytellingEffortSchema=l,exports.SuggestionSchema=m,exports.isCompleteEvent=n,exports.isErrorEvent=o,exports.isGraphyApiError=e=>e instanceof r,exports.isPreviewEvent=e=>"preview"===e.type,exports.isProgressEvent=i,exports.isReasoningEvent=e=>"reasoning"===e.type;
|
|
1
|
+
"use strict";var e=require("tslib"),t=require("zod");class r extends Error{constructor(e,t){var r;super(e),Object.setPrototypeOf(this,new.target.prototype),this.name="GraphyApiError",this.status=null==t?void 0:t.status,this.code=null==t?void 0:t.code,this.retryable=null!==(r=null==t?void 0:t.retryable)&&void 0!==r&&r}}const i=e=>"progress"===e.type,n=e=>"complete"===e.type,o=e=>"error"===e.type;class s{constructor(e){if(this.tag="[GRAPHY]",!e.apiKey||0===e.apiKey.trim().length)throw new Error("apiKey is required and must not be empty");const t=new URL(e.baseUrl);if(!["http:","https:"].includes(t.protocol))throw new Error(`Invalid baseUrl protocol: ${t.protocol}. Only http(s) is allowed.`);this.apiKey=e.apiKey,this.baseUrl=t.origin+t.pathname.replace(/\/$/,""),this.timeout=e.timeout||6e4,this.retryConfig=e.retryConfig||{attempts:3,delay:1e3,backoff:2},this.logger=e.logger||{log:console.log,warn:console.warn,error:console.error,debug:console.debug}}static isProgressEvent(e){return i(e)}static isCompleteEvent(e){return n(e)}static isErrorEvent(e){return o(e)}stream(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.makeRequest(t,r,i);return this.parseSSE(e)})}fetch(t,s,a,c){return e.__awaiter(this,void 0,void 0,function*(){var l,g,u,d,p;const h=Date.now();this.logger.debug(`${this.tag} Fetch: ${t}`);try{const b=yield this.makeRequest(t,s,c),v=b.headers.get("content-type");if(null==v?void 0:v.includes("text/event-stream")){try{for(var m,f=!0,y=e.__asyncValues(this.parseSSE(b));!(l=(m=yield y.next()).done);f=!0){d=m.value,f=!1;const e=d;if(i(e)&&a&&a(e),n(e))return e.data;if(o(e)){const i=Date.now()-h;throw this.logger.error(`${this.tag} Server error: ${t} ${i}ms`,e.error),new r(e.error,{code:e.code,retryable:null!==(p=e.retryable)&&void 0!==p&&p})}}}catch(e){g={error:e}}finally{try{f||l||!(u=y.return)||(yield u.call(y))}finally{if(g)throw g.error}}const s=Date.now()-h;throw this.logger.error(`${this.tag} Stream incomplete: ${t} ${s}ms`),new r("Stream ended without completion")}return yield b.json()}catch(e){const i=Date.now()-h;if(this.logger.error(`${this.tag} Fetch failed: ${t} ${i}ms`,e),e instanceof r)throw e;throw e}finally{const e=Date.now()-h;this.logger.debug(`${this.tag} Fetch completed: ${t} ${e}ms`)}})}ping(){return e.__awaiter(this,void 0,void 0,function*(){const e=Date.now();try{return yield this.makeRequest("/health",void 0,void 0,this.retryConfig.attempts,"GET"),{ok:!0,latency:Date.now()-e}}catch(t){return{ok:!1,latency:Date.now()-e}}})}sleep(t){return e.__awaiter(this,void 0,void 0,function*(){return new Promise(e=>setTimeout(e,t))})}parseSSE(t){return e.__asyncGenerator(this,arguments,function*(){if(!t.body)throw new r("Response body is null");const i=t.body.getReader(),n=new TextDecoder;let o="",s="",a="";try{for(;;){const{done:t,value:r}=yield e.__await(i.read());if(t)break;o+=n.decode(r,{stream:!0});const c=o.split(/\r?\n/);o=c.pop()||"";for(const t of c)if(t.startsWith("event: "))s=t.slice(7).trim();else if(t.startsWith("data: "))a+=(a?"\n":"")+t.slice(6);else if(""===t.trim()&&a){try{const t=JSON.parse(a);let r;if("progress"===s){const e=t;r=Object.assign({type:"progress"},e)}else if("complete"===s)r={type:"complete",data:t};else if("error"===s){const e=t;r=Object.assign({type:"error"},e)}else if("preview"===s){const e=t;r=Object.assign(Object.assign({},e),{type:"preview"})}else{if("reasoning"!==s){s="",a="";continue}{const e=t;r=Object.assign(Object.assign({},e),{type:"reasoning"})}}if(yield yield e.__await(r),"complete"===s||"error"===s)return yield e.__await(void 0)}catch(e){this.logger.warn("Invalid SSE data format",a)}s="",a=""}}}finally{i.releaseLock()}})}makeRequest(t,i,n){return e.__awaiter(this,arguments,void 0,function*(e,t,i,n=1,o="POST"){if(!e.startsWith("/"))throw new r("Invalid endpoint: must start with /");const s=new URL(e,this.baseUrl);if(s.origin!==new URL(this.baseUrl).origin)throw new r("Endpoint resolved to unexpected origin");this.logger.debug(`${this.tag} Request ${n}/${this.retryConfig.attempts}: ${s}`);const a=new AbortController,c=setTimeout(()=>a.abort(),this.timeout),l=()=>a.abort();i&&i.addEventListener("abort",l);try{const c=yield fetch(s,Object.assign({method:o,headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","Cache-Control":"no-cache",Authorization:`Bearer ${this.apiKey}`,"User-Agent":"Graphy-SDK/1.0"},signal:a.signal},"POST"===o&&{body:JSON.stringify(t)}));if(!c.ok){const s=c.status>=500||429===c.status;let a,l=`HTTP ${c.status}`;try{const e=yield c.json();if("object"==typeof e&&null!==e){const t=e;"string"==typeof t.message?l=t.message:"string"==typeof t.error&&(l=t.error),"string"==typeof t.code&&(a=t.code)}}catch(e){}const g=new r(l,{status:c.status,code:a,retryable:s});if(s&&n<this.retryConfig.attempts&&!(null==i?void 0:i.aborted)){const r=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,n-1);return this.logger.warn(`${this.tag} Retrying ${e} in ${r}ms (attempt ${n+1})`),yield this.sleep(r),this.makeRequest(e,t,i,n+1,o)}throw this.logger.error(`${this.tag} Request failed: ${e} (${c.status}) - ${l}`),g}return this.logger.debug(`${this.tag} Connected: ${e}`),c}catch(s){if(s instanceof r)throw s;if(s instanceof Error&&"AbortError"===s.name)throw this.logger.debug(`${this.tag} Aborted: ${e}`),s;if(n<this.retryConfig.attempts&&!(null==i?void 0:i.aborted)){const r=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,n-1);return this.logger.warn(`${this.tag} Network error, retrying ${e} in ${r}ms`),yield this.sleep(r),this.makeRequest(e,t,i,n+1,o)}throw this.logger.error(`${this.tag} Network error: ${e}`,s),new r("Network error",{retryable:!0})}finally{clearTimeout(c),i&&i.removeEventListener("abort",l)}})}}const a=t.z.enum(["EN_GB","EN_US"]),c=t.z.custom(e=>null!=e&&"object"==typeof e),l=t.z.enum(["low","medium","high"]),g=t.z.enum(["none","low","medium","high"]),u=t.z.enum(["agentic","fast"]),d=t.z.object({maxWallClockMs:t.z.number().positive().optional(),maxTotalTokens:t.z.number().int().positive().optional(),maxCostUsd:t.z.number().positive().optional()}),p=t.z.object({callId:t.z.string().max(256),locale:a.optional(),effort:l.optional(),storytellingEffort:g.optional().default("low"),budget:d.optional(),executionMode:u.optional()}),h=t.z.object({config:c,userPrompt:t.z.string().max(1e4).optional().default(""),metadata:p.optional()}),m=h.extend({maxSuggestionCount:t.z.number().int().min(1).max(4).optional()}),f=t.z.enum(["line","bar","groupedBar","stackedBar","100StackedBar","column","groupedColumn","stackedColumn","100StackedColumn","combo","pie","donut","funnel","heatmap","scatter","bubble","waterfall","table"]),y=t.z.object({dataPrepPrompt:t.z.string(),chartType:f,summary:t.z.string()}),b=t.z.object({response:t.z.object({message:t.z.string()}),config:c}),v=t.z.object({suggestions:t.z.array(y)}),w=t.z.enum(["comparison","relationship","distribution","composition"]),x=t.z.object({finding:t.z.string().describe("Plain-English summary of the finding (no stats jargon)."),confidence:t.z.number().min(0).max(1).describe("Statistical strength of the finding (0..1). Independent of topicality."),relevance:t.z.number().min(0).max(1).describe("Topical fit with the user prompt and chart narrative (0..1). Independent of statistical strength."),topic:t.z.string().min(1).describe("Kebab-case label grouping this finding with related ones; consumers can render findings as threads."),chartHint:t.z.string().min(1).max(240).describe('Natural-language data-prep recipe for a downstream mutate agent: filter → group → aggregate → sort, naming real dataset columns. No chart type or "render as" clause — that is set via chartFamily.'),chartFamily:w.describe("Abela family (comparison | relationship | distribution | composition). Downstream chart-generator picks the concrete chart type from this family + the data shape."),evidenceSummary:t.z.string().max(300).describe("Rigorous statistical back-up with exact numbers.")}),z=t.z.object({topic:t.z.string().min(1).describe("Kebab-case story headline shared by all child findings."),score:t.z.number().min(0).max(1).describe("Max quadrant score (relevance × confidence) across child findings."),count:t.z.number().int().min(1).describe("Number of findings in this story."),findings:t.z.array(x).describe("Child findings, sorted by quadrant score desc.")}),_=t.z.object({response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())}),stories:t.z.array(z)}),S=t.z.object({response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())}),config:c}),E=t.z.object({response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())}),config:c}),$=t.z.enum(["high","medium","low"]),j=t.z.object({confidence:$,needsUserInput:t.z.boolean(),warnings:t.z.array(t.z.string()),cellConfidence:t.z.array(t.z.object({rowIndex:t.z.number().int().nonnegative(),columnKey:t.z.string(),confidence:$,quote:t.z.string().optional()})).optional()}),C=t.z.object({score:t.z.number().min(0).max(1),issues:t.z.array(t.z.string()),sufficient:t.z.boolean(),summary:t.z.string()}),T=5e5,R=2097152,O=7340032,A=4*Math.ceil(699050.6666666666),G=4*Math.ceil(2446677.3333333335);function k(e){return e.replace(/\s+/g,"")}const M=t.z.object({mimeType:t.z.string().min(1).refine(e=>/^image\/(png|jpeg|jpg|webp|gif)$/i.test(e.trim()),{message:"mimeType must be image/png, image/jpeg, image/jpg, image/webp, or image/gif"}),dataBase64:t.z.string().min(1).max(A).refine(function(e){const t=k(e);return 0!==t.length&&t.length%4==0&&/^[A-Za-z0-9+/]+={0,2}$/.test(t)},{message:"dataBase64 must be standard base64 (RFC 4648)"})}),P=t.z.object({sourceText:t.z.string().max(T).default(""),images:t.z.array(M).max(8).optional(),metadata:p.optional()}).superRefine((e,t)=>{var r;const i=e.sourceText.trim(),n=null!==(r=e.images)&&void 0!==r?r:[];if(0===i.length&&0===n.length)return void t.addIssue({code:"custom",message:"Provide non-empty sourceText and/or at least one image",path:["sourceText"]});if(0===n.length)return;n.reduce((e,t)=>e+k(t.dataBase64).length,0)>G&&t.addIssue({code:"custom",message:"Combined image base64 exceeds maximum length for this API (must fit server decode limits)",path:["images"]})}),D=t.z.object({response:t.z.object({message:t.z.string()}),config:c,extractMeta:j.nullable(),lastAccuracyEvaluation:C.optional()}),I=t.z.object({config:c,response:t.z.object({message:t.z.string(),steps:t.z.array(t.z.string())})}),q=v,N="/api/v0";exports.AiChartTypeEnum=f,exports.ChartFamilySchema=w,exports.ExecutionModeSchema=u,exports.ExploreFindingSchema=x,exports.ExploreStorySchema=z,exports.ExtractAccuracyEvaluationSchema=C,exports.ExtractConfidenceSchema=$,exports.ExtractFromProseParamsSchema=P,exports.ExtractFromProseResponseSchema=D,exports.ExtractMetaSchema=j,exports.GenerateAnnotationsResponseSchema=S,exports.GenerateExplorationResponseSchema=_,exports.GenerateGraphResponseSchema=I,exports.GenerateGraphSuggestionsResponseSchema=q,exports.GenerateMutationResponseSchema=E,exports.GenerateNarrativeResponseSchema=b,exports.GenerateSuggestionsParamsSchema=m,exports.GenerateSuggestionsResponseSchema=v,exports.GraphGenerationRequestSchema=h,exports.GraphyAiSdk=class{constructor(e){this.client=new s(e)}generateGraph(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const{storytellingOptions:n}=t,o=e.__rest(t,["storytellingOptions"]),s=yield this.client.fetch(`${N}/generate`,o,r,i),a=I.parse(s);return this.stripStorytelling(a,n)})}generateGraphStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){const{storytellingOptions:i}=t,n=e.__rest(t,["storytellingOptions"]),o=yield this.client.stream(`${N}/generate`,n,r);return this.wrapStreamWithStorytellingStripping(o,i)})}generateNarrative(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${N}/narrate`,t,r,i);return b.parse(e)})}generateNarrativeStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${N}/narrate`,t,r)})}generateSuggestions(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${N}/suggestions`,t,r,i);return v.parse(e)})}generateSuggestionsStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${N}/suggestions`,t,r)})}generateExploration(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${N}/explore`,t,r,i);return _.parse(e)})}generateExplorationStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${N}/explore`,t,r)})}generateAnnotations(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${N}/annotate`,t,r,i);return S.parse(e)})}generateAnnotationsStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${N}/annotate`,t,r)})}generateMutation(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${N}/mutate`,t,r,i);return E.parse(e)})}generateMutationStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${N}/mutate`,t,r)})}extractFromProse(t,r,i){return e.__awaiter(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${N}/extract`,t,r,i);return D.parse(e)})}extractFromProseStream(t,r){return e.__awaiter(this,void 0,void 0,function*(){return this.client.stream(`${N}/extract`,t,r)})}stripStorytelling(e,t){return t&&e.config.content?Object.assign(Object.assign({},e),{config:Object.assign(Object.assign({},e.config),{content:Object.assign(Object.assign(Object.assign(Object.assign({},e.config.content),t.excludeTitle&&{title:void 0}),t.excludeSubtitle&&{subtitle:void 0}),t.excludeCaption&&{caption:void 0})})}):e}wrapStreamWithStorytellingStripping(t,r){return e.__asyncGenerator(this,arguments,function*(){var i,o,s,a;try{for(var c,l=!0,g=e.__asyncValues(t);!(i=(c=yield e.__await(g.next())).done);l=!0){a=c.value,l=!1;const t=a;if(n(t)){const i=this.stripStorytelling(t.data,r);yield yield e.__await(Object.assign(Object.assign({},t),{data:i}))}else yield yield e.__await(t)}}catch(e){o={error:e}}finally{try{l||i||!(s=g.return)||(yield e.__await(s.call(g)))}finally{if(o)throw o.error}}})}},exports.GraphyApiError=r,exports.InvocationBudgetSchema=d,exports.InvocationEffortSchema=l,exports.MAX_EXTRACT_IMAGES=8,exports.MAX_EXTRACT_IMAGES_TOTAL_DECODED_BYTES=O,exports.MAX_EXTRACT_IMAGE_DECODED_BYTES=R,exports.MAX_SOURCE_TEXT_LENGTH=T,exports.MAX_USER_PROMPT_LENGTH=1e4,exports.MetadataSchema=p,exports.StorytellingEffortSchema=g,exports.SuggestionSchema=y,exports.isCompleteEvent=n,exports.isErrorEvent=o,exports.isGraphyApiError=e=>e instanceof r,exports.isPreviewEvent=e=>"preview"===e.type,exports.isProgressEvent=i,exports.isReasoningEvent=e=>"reasoning"===e.type;
|
package/dist/index.d.ts
CHANGED
|
@@ -273,13 +273,25 @@ declare const isPreviewEvent: <T>(event: SSEEvent<T>) => event is PreviewEvent;
|
|
|
273
273
|
*/
|
|
274
274
|
declare const isReasoningEvent: <T>(event: SSEEvent<T>) => event is ReasoningEvent;
|
|
275
275
|
|
|
276
|
+
declare const InvocationEffortSchema: z.ZodEnum<{
|
|
277
|
+
low: "low";
|
|
278
|
+
medium: "medium";
|
|
279
|
+
high: "high";
|
|
280
|
+
}>;
|
|
281
|
+
type InvocationEffort = z.infer<typeof InvocationEffortSchema>;
|
|
276
282
|
declare const StorytellingEffortSchema: z.ZodEnum<{
|
|
277
|
-
none: "none";
|
|
278
283
|
low: "low";
|
|
279
284
|
medium: "medium";
|
|
280
285
|
high: "high";
|
|
286
|
+
none: "none";
|
|
281
287
|
}>;
|
|
282
288
|
type StorytellingEffort = z.infer<typeof StorytellingEffortSchema>;
|
|
289
|
+
/** Mirrors `ExecutionModeSchema` in `apps/agents-api/src/modules/agents/core/types/execution-mode.js`. */
|
|
290
|
+
declare const ExecutionModeSchema: z.ZodEnum<{
|
|
291
|
+
agentic: "agentic";
|
|
292
|
+
fast: "fast";
|
|
293
|
+
}>;
|
|
294
|
+
type ExecutionMode = z.infer<typeof ExecutionModeSchema>;
|
|
283
295
|
/**
|
|
284
296
|
* Optional per-request invocation budget. Mirrors `InvocationBudgetSchema` in
|
|
285
297
|
* `apps/agents-api/src/modules/api/api.types.ts`. All fields are optional — the
|
|
@@ -301,17 +313,26 @@ declare const MetadataSchema: z.ZodObject<{
|
|
|
301
313
|
EN_GB: "EN_GB";
|
|
302
314
|
EN_US: "EN_US";
|
|
303
315
|
}>>;
|
|
316
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
317
|
+
low: "low";
|
|
318
|
+
medium: "medium";
|
|
319
|
+
high: "high";
|
|
320
|
+
}>>;
|
|
304
321
|
storytellingEffort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
305
|
-
none: "none";
|
|
306
322
|
low: "low";
|
|
307
323
|
medium: "medium";
|
|
308
324
|
high: "high";
|
|
325
|
+
none: "none";
|
|
309
326
|
}>>>;
|
|
310
327
|
budget: z.ZodOptional<z.ZodObject<{
|
|
311
328
|
maxWallClockMs: z.ZodOptional<z.ZodNumber>;
|
|
312
329
|
maxTotalTokens: z.ZodOptional<z.ZodNumber>;
|
|
313
330
|
maxCostUsd: z.ZodOptional<z.ZodNumber>;
|
|
314
331
|
}, z.core.$strip>>;
|
|
332
|
+
executionMode: z.ZodOptional<z.ZodEnum<{
|
|
333
|
+
agentic: "agentic";
|
|
334
|
+
fast: "fast";
|
|
335
|
+
}>>;
|
|
315
336
|
}, z.core.$strip>;
|
|
316
337
|
type Metadata = z.infer<typeof MetadataSchema>;
|
|
317
338
|
/** Mirrors `MAX_USER_PROMPT_LENGTH` in the agents-api request schema. */
|
|
@@ -330,17 +351,26 @@ declare const GraphGenerationRequestSchema: z.ZodObject<{
|
|
|
330
351
|
EN_GB: "EN_GB";
|
|
331
352
|
EN_US: "EN_US";
|
|
332
353
|
}>>;
|
|
354
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
355
|
+
low: "low";
|
|
356
|
+
medium: "medium";
|
|
357
|
+
high: "high";
|
|
358
|
+
}>>;
|
|
333
359
|
storytellingEffort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
334
|
-
none: "none";
|
|
335
360
|
low: "low";
|
|
336
361
|
medium: "medium";
|
|
337
362
|
high: "high";
|
|
363
|
+
none: "none";
|
|
338
364
|
}>>>;
|
|
339
365
|
budget: z.ZodOptional<z.ZodObject<{
|
|
340
366
|
maxWallClockMs: z.ZodOptional<z.ZodNumber>;
|
|
341
367
|
maxTotalTokens: z.ZodOptional<z.ZodNumber>;
|
|
342
368
|
maxCostUsd: z.ZodOptional<z.ZodNumber>;
|
|
343
369
|
}, z.core.$strip>>;
|
|
370
|
+
executionMode: z.ZodOptional<z.ZodEnum<{
|
|
371
|
+
agentic: "agentic";
|
|
372
|
+
fast: "fast";
|
|
373
|
+
}>>;
|
|
344
374
|
}, z.core.$strip>>;
|
|
345
375
|
}, z.core.$strip>;
|
|
346
376
|
type GraphGenerationRequest = z.input<typeof GraphGenerationRequestSchema>;
|
|
@@ -354,17 +384,26 @@ declare const GenerateSuggestionsParamsSchema: z.ZodObject<{
|
|
|
354
384
|
EN_GB: "EN_GB";
|
|
355
385
|
EN_US: "EN_US";
|
|
356
386
|
}>>;
|
|
387
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
388
|
+
low: "low";
|
|
389
|
+
medium: "medium";
|
|
390
|
+
high: "high";
|
|
391
|
+
}>>;
|
|
357
392
|
storytellingEffort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
358
|
-
none: "none";
|
|
359
393
|
low: "low";
|
|
360
394
|
medium: "medium";
|
|
361
395
|
high: "high";
|
|
396
|
+
none: "none";
|
|
362
397
|
}>>>;
|
|
363
398
|
budget: z.ZodOptional<z.ZodObject<{
|
|
364
399
|
maxWallClockMs: z.ZodOptional<z.ZodNumber>;
|
|
365
400
|
maxTotalTokens: z.ZodOptional<z.ZodNumber>;
|
|
366
401
|
maxCostUsd: z.ZodOptional<z.ZodNumber>;
|
|
367
402
|
}, z.core.$strip>>;
|
|
403
|
+
executionMode: z.ZodOptional<z.ZodEnum<{
|
|
404
|
+
agentic: "agentic";
|
|
405
|
+
fast: "fast";
|
|
406
|
+
}>>;
|
|
368
407
|
}, z.core.$strip>>;
|
|
369
408
|
maxSuggestionCount: z.ZodOptional<z.ZodNumber>;
|
|
370
409
|
}, z.core.$strip>;
|
|
@@ -584,30 +623,53 @@ declare const ExtractAccuracyEvaluationSchema: z.ZodObject<{
|
|
|
584
623
|
summary: z.ZodString;
|
|
585
624
|
}, z.core.$strip>;
|
|
586
625
|
type ExtractAccuracyEvaluation = z.infer<typeof ExtractAccuracyEvaluationSchema>;
|
|
587
|
-
/** Mirrors `MAX_SOURCE_TEXT_LENGTH` in agents-api `extract/extract.types.ts`. */
|
|
626
|
+
/** Mirrors `MAX_SOURCE_TEXT_LENGTH` in apps/agents-api `handlers/extract/extract.types.ts`. */
|
|
588
627
|
declare const MAX_SOURCE_TEXT_LENGTH = 500000;
|
|
589
|
-
/**
|
|
628
|
+
/** Mirrors apps/agents-api extract image limits (server re-validates decoded size). */
|
|
629
|
+
declare const MAX_EXTRACT_IMAGES = 8;
|
|
630
|
+
/** Same caps as apps/agents-api (10MB `/api/*` JSON body budget). */
|
|
631
|
+
declare const MAX_EXTRACT_IMAGE_DECODED_BYTES: number;
|
|
632
|
+
declare const MAX_EXTRACT_IMAGES_TOTAL_DECODED_BYTES: number;
|
|
633
|
+
declare const extractImagePartSchema: z.ZodObject<{
|
|
634
|
+
mimeType: z.ZodString;
|
|
635
|
+
dataBase64: z.ZodString;
|
|
636
|
+
}, z.core.$strip>;
|
|
637
|
+
/** Request body for `POST /v0/extract`. Mirrors `ExtractFromProseRequestSchema` in agents-api. */
|
|
590
638
|
declare const ExtractFromProseParamsSchema: z.ZodObject<{
|
|
591
|
-
sourceText: z.ZodString
|
|
639
|
+
sourceText: z.ZodDefault<z.ZodString>;
|
|
640
|
+
images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
641
|
+
mimeType: z.ZodString;
|
|
642
|
+
dataBase64: z.ZodString;
|
|
643
|
+
}, z.core.$strip>>>;
|
|
592
644
|
metadata: z.ZodOptional<z.ZodObject<{
|
|
593
645
|
callId: z.ZodString;
|
|
594
646
|
locale: z.ZodOptional<z.ZodEnum<{
|
|
595
647
|
EN_GB: "EN_GB";
|
|
596
648
|
EN_US: "EN_US";
|
|
597
649
|
}>>;
|
|
650
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
651
|
+
low: "low";
|
|
652
|
+
medium: "medium";
|
|
653
|
+
high: "high";
|
|
654
|
+
}>>;
|
|
598
655
|
storytellingEffort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
599
|
-
none: "none";
|
|
600
656
|
low: "low";
|
|
601
657
|
medium: "medium";
|
|
602
658
|
high: "high";
|
|
659
|
+
none: "none";
|
|
603
660
|
}>>>;
|
|
604
661
|
budget: z.ZodOptional<z.ZodObject<{
|
|
605
662
|
maxWallClockMs: z.ZodOptional<z.ZodNumber>;
|
|
606
663
|
maxTotalTokens: z.ZodOptional<z.ZodNumber>;
|
|
607
664
|
maxCostUsd: z.ZodOptional<z.ZodNumber>;
|
|
608
665
|
}, z.core.$strip>>;
|
|
666
|
+
executionMode: z.ZodOptional<z.ZodEnum<{
|
|
667
|
+
agentic: "agentic";
|
|
668
|
+
fast: "fast";
|
|
669
|
+
}>>;
|
|
609
670
|
}, z.core.$strip>>;
|
|
610
671
|
}, z.core.$strip>;
|
|
672
|
+
type ExtractImageInput = z.infer<typeof extractImagePartSchema>;
|
|
611
673
|
type ExtractFromProseParams = z.input<typeof ExtractFromProseParamsSchema>;
|
|
612
674
|
declare const ExtractFromProseResponseSchema: z.ZodObject<{
|
|
613
675
|
response: z.ZodObject<{
|
|
@@ -657,6 +719,37 @@ declare const GenerateGraphResponseSchema: z.ZodObject<{
|
|
|
657
719
|
}, z.core.$strip>;
|
|
658
720
|
}, z.core.$strip>;
|
|
659
721
|
type GenerateGraphResponse = z.infer<typeof GenerateGraphResponseSchema>;
|
|
722
|
+
/** @deprecated Use {@link GenerateSuggestionsParams} instead. */
|
|
723
|
+
type GenerateGraphSuggestionsParams = GenerateSuggestionsParams;
|
|
724
|
+
/** @deprecated Use {@link GenerateSuggestionsResponse} instead. */
|
|
725
|
+
type GenerateGraphSuggestionsResponse = GenerateSuggestionsResponse;
|
|
726
|
+
/** @deprecated Use {@link GenerateSuggestionsResponseSchema} instead. */
|
|
727
|
+
declare const GenerateGraphSuggestionsResponseSchema: z.ZodObject<{
|
|
728
|
+
suggestions: z.ZodArray<z.ZodObject<{
|
|
729
|
+
dataPrepPrompt: z.ZodString;
|
|
730
|
+
chartType: z.ZodEnum<{
|
|
731
|
+
line: "line";
|
|
732
|
+
bar: "bar";
|
|
733
|
+
groupedBar: "groupedBar";
|
|
734
|
+
stackedBar: "stackedBar";
|
|
735
|
+
"100StackedBar": "100StackedBar";
|
|
736
|
+
column: "column";
|
|
737
|
+
groupedColumn: "groupedColumn";
|
|
738
|
+
stackedColumn: "stackedColumn";
|
|
739
|
+
"100StackedColumn": "100StackedColumn";
|
|
740
|
+
combo: "combo";
|
|
741
|
+
pie: "pie";
|
|
742
|
+
donut: "donut";
|
|
743
|
+
funnel: "funnel";
|
|
744
|
+
heatmap: "heatmap";
|
|
745
|
+
scatter: "scatter";
|
|
746
|
+
bubble: "bubble";
|
|
747
|
+
waterfall: "waterfall";
|
|
748
|
+
table: "table";
|
|
749
|
+
}>;
|
|
750
|
+
summary: z.ZodString;
|
|
751
|
+
}, z.core.$strip>>;
|
|
752
|
+
}, z.core.$strip>;
|
|
660
753
|
|
|
661
754
|
/**
|
|
662
755
|
* Client SDK for the Graphy AI Agents API.
|
|
@@ -903,7 +996,9 @@ declare class GraphyAiSdk {
|
|
|
903
996
|
/**
|
|
904
997
|
* Runs the extract agent to build a chart-ready dataset from unstructured prose.
|
|
905
998
|
*
|
|
906
|
-
* @param data - Parameters including `sourceText`
|
|
999
|
+
* @param data - Parameters including `sourceText`, optional `images` (each `mimeType` plus `dataBase64`:
|
|
1000
|
+
* standard RFC 4648 base64 **only** — not a `data:image/...;base64,...` URL), and optional request metadata.
|
|
1001
|
+
* At least one of `sourceText` (non-empty) or `images` is required.
|
|
907
1002
|
* @param onProgress - Optional callback invoked with progress updates.
|
|
908
1003
|
* @param signal - Optional `AbortSignal` to cancel the request.
|
|
909
1004
|
* @returns The updated chart config, extraction trust metadata, and optional accuracy audit.
|
|
@@ -935,7 +1030,9 @@ declare class GraphyAiSdk {
|
|
|
935
1030
|
/**
|
|
936
1031
|
* Streams extract-agent events via SSE.
|
|
937
1032
|
*
|
|
938
|
-
* @param data - Parameters including `sourceText`
|
|
1033
|
+
* @param data - Parameters including `sourceText`, optional `images` (each `mimeType` plus `dataBase64`:
|
|
1034
|
+
* standard RFC 4648 base64 **only** — not a `data:image/...;base64,...` URL), and optional request metadata.
|
|
1035
|
+
* At least one of `sourceText` (non-empty) or `images` is required.
|
|
939
1036
|
* @param signal - Optional `AbortSignal` to cancel the request.
|
|
940
1037
|
* @returns An async iterator yielding {@link SSEEvent} objects.
|
|
941
1038
|
* @throws {GraphyApiError} When the API returns an error or the network request fails.
|
|
@@ -967,5 +1064,5 @@ declare class GraphyAiSdk {
|
|
|
967
1064
|
private wrapStreamWithStorytellingStripping;
|
|
968
1065
|
}
|
|
969
1066
|
|
|
970
|
-
export { AiChartTypeEnum, ChartFamilySchema, ExploreFindingSchema, ExploreStorySchema, ExtractAccuracyEvaluationSchema, ExtractConfidenceSchema, ExtractFromProseParamsSchema, ExtractFromProseResponseSchema, ExtractMetaSchema, GenerateAnnotationsResponseSchema, GenerateExplorationResponseSchema, GenerateGraphResponseSchema, GenerateMutationResponseSchema, GenerateNarrativeResponseSchema, GenerateSuggestionsParamsSchema, GenerateSuggestionsResponseSchema, GraphGenerationRequestSchema, GraphyAiSdk, GraphyApiError, InvocationBudgetSchema, MAX_SOURCE_TEXT_LENGTH, MAX_USER_PROMPT_LENGTH, MetadataSchema, StorytellingEffortSchema, SuggestionSchema, isCompleteEvent, isErrorEvent, isGraphyApiError, isPreviewEvent, isProgressEvent, isReasoningEvent };
|
|
971
|
-
export type { AiChartType, ChartFamily, ClientConfig, CompleteEvent, ErrorEvent, ExploreFinding, ExploreStory, ExtractAccuracyEvaluation, ExtractConfidence, ExtractFromProseParams, ExtractFromProseResponse, ExtractMeta, GenerateAnnotationsParams, GenerateAnnotationsResponse, GenerateExplorationParams, GenerateExplorationResponse, GenerateGraphParams, GenerateGraphResponse, GenerateMutationParams, GenerateMutationResponse, GenerateNarrativeParams, GenerateNarrativeResponse, GenerateSuggestionsParams, GenerateSuggestionsResponse, GraphGenerationRequest, GraphyApiErrorOptions, InvocationBudget, Logger, Metadata, PreviewEvent, ProgressEvent, ProgressHandler, ReasoningEvent, RetryConfig, SSEEvent, StorytellingEffort, StorytellingOptions, Suggestion };
|
|
1067
|
+
export { AiChartTypeEnum, ChartFamilySchema, ExecutionModeSchema, ExploreFindingSchema, ExploreStorySchema, ExtractAccuracyEvaluationSchema, ExtractConfidenceSchema, ExtractFromProseParamsSchema, ExtractFromProseResponseSchema, ExtractMetaSchema, GenerateAnnotationsResponseSchema, GenerateExplorationResponseSchema, GenerateGraphResponseSchema, GenerateGraphSuggestionsResponseSchema, GenerateMutationResponseSchema, GenerateNarrativeResponseSchema, GenerateSuggestionsParamsSchema, GenerateSuggestionsResponseSchema, GraphGenerationRequestSchema, GraphyAiSdk, GraphyApiError, InvocationBudgetSchema, InvocationEffortSchema, MAX_EXTRACT_IMAGES, MAX_EXTRACT_IMAGES_TOTAL_DECODED_BYTES, MAX_EXTRACT_IMAGE_DECODED_BYTES, MAX_SOURCE_TEXT_LENGTH, MAX_USER_PROMPT_LENGTH, MetadataSchema, StorytellingEffortSchema, SuggestionSchema, isCompleteEvent, isErrorEvent, isGraphyApiError, isPreviewEvent, isProgressEvent, isReasoningEvent };
|
|
1068
|
+
export type { AiChartType, ChartFamily, ClientConfig, CompleteEvent, ErrorEvent, ExecutionMode, ExploreFinding, ExploreStory, ExtractAccuracyEvaluation, ExtractConfidence, ExtractFromProseParams, ExtractFromProseResponse, ExtractImageInput, ExtractMeta, GenerateAnnotationsParams, GenerateAnnotationsResponse, GenerateExplorationParams, GenerateExplorationResponse, GenerateGraphParams, GenerateGraphResponse, GenerateGraphSuggestionsParams, GenerateGraphSuggestionsResponse, GenerateMutationParams, GenerateMutationResponse, GenerateNarrativeParams, GenerateNarrativeResponse, GenerateSuggestionsParams, GenerateSuggestionsResponse, GraphGenerationRequest, GraphyApiErrorOptions, InvocationBudget, InvocationEffort, Logger, Metadata, PreviewEvent, ProgressEvent, ProgressHandler, ReasoningEvent, RetryConfig, SSEEvent, StorytellingEffort, StorytellingOptions, Suggestion };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__awaiter as t,__asyncValues as e,__asyncGenerator as r,__await as i,__rest as n}from"tslib";import{z as o}from"zod";class s extends Error{constructor(t,e){var r;super(t),Object.setPrototypeOf(this,new.target.prototype),this.name="GraphyApiError",this.status=null==e?void 0:e.status,this.code=null==e?void 0:e.code,this.retryable=null!==(r=null==e?void 0:e.retryable)&&void 0!==r&&r}}const a=t=>t instanceof s,c=t=>"progress"===t.type,l=t=>"complete"===t.type,g=t=>"error"===t.type,d=t=>"preview"===t.type,u=t=>"reasoning"===t.type;class h{constructor(t){if(this.tag="[GRAPHY]",!t.apiKey||0===t.apiKey.trim().length)throw new Error("apiKey is required and must not be empty");const e=new URL(t.baseUrl);if(!["http:","https:"].includes(e.protocol))throw new Error(`Invalid baseUrl protocol: ${e.protocol}. Only http(s) is allowed.`);this.apiKey=t.apiKey,this.baseUrl=e.origin+e.pathname.replace(/\/$/,""),this.timeout=t.timeout||6e4,this.retryConfig=t.retryConfig||{attempts:3,delay:1e3,backoff:2},this.logger=t.logger||{log:console.log,warn:console.warn,error:console.error,debug:console.debug}}static isProgressEvent(t){return c(t)}static isCompleteEvent(t){return l(t)}static isErrorEvent(t){return g(t)}stream(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.makeRequest(e,r,i);return this.parseSSE(t)})}fetch(r,i,n,o){return t(this,void 0,void 0,function*(){var t,a,d,u,h;const p=Date.now();this.logger.debug(`${this.tag} Fetch: ${r}`);try{const b=yield this.makeRequest(r,i,o),v=b.headers.get("content-type");if(null==v?void 0:v.includes("text/event-stream")){try{for(var m,f=!0,y=e(this.parseSSE(b));!(t=(m=yield y.next()).done);f=!0){u=m.value,f=!1;const t=u;if(c(t)&&n&&n(t),l(t))return t.data;if(g(t)){const e=Date.now()-p;throw this.logger.error(`${this.tag} Server error: ${r} ${e}ms`,t.error),new s(t.error,{code:t.code,retryable:null!==(h=t.retryable)&&void 0!==h&&h})}}}catch(t){a={error:t}}finally{try{f||t||!(d=y.return)||(yield d.call(y))}finally{if(a)throw a.error}}const i=Date.now()-p;throw this.logger.error(`${this.tag} Stream incomplete: ${r} ${i}ms`),new s("Stream ended without completion")}return yield b.json()}catch(t){const e=Date.now()-p;if(this.logger.error(`${this.tag} Fetch failed: ${r} ${e}ms`,t),t instanceof s)throw t;throw t}finally{const t=Date.now()-p;this.logger.debug(`${this.tag} Fetch completed: ${r} ${t}ms`)}})}ping(){return t(this,void 0,void 0,function*(){const t=Date.now();try{return yield this.makeRequest("/health",void 0,void 0,this.retryConfig.attempts,"GET"),{ok:!0,latency:Date.now()-t}}catch(e){return{ok:!1,latency:Date.now()-t}}})}sleep(e){return t(this,void 0,void 0,function*(){return new Promise(t=>setTimeout(t,e))})}parseSSE(t){return r(this,arguments,function*(){if(!t.body)throw new s("Response body is null");const e=t.body.getReader(),r=new TextDecoder;let n="",o="",a="";try{for(;;){const{done:t,value:s}=yield i(e.read());if(t)break;n+=r.decode(s,{stream:!0});const c=n.split(/\r?\n/);n=c.pop()||"";for(const t of c)if(t.startsWith("event: "))o=t.slice(7).trim();else if(t.startsWith("data: "))a+=(a?"\n":"")+t.slice(6);else if(""===t.trim()&&a){try{const t=JSON.parse(a);let e;if("progress"===o){const r=t;e=Object.assign({type:"progress"},r)}else if("complete"===o)e={type:"complete",data:t};else if("error"===o){const r=t;e=Object.assign({type:"error"},r)}else if("preview"===o){const r=t;e=Object.assign(Object.assign({},r),{type:"preview"})}else{if("reasoning"!==o){o="",a="";continue}{const r=t;e=Object.assign(Object.assign({},r),{type:"reasoning"})}}if(yield yield i(e),"complete"===o||"error"===o)return yield i(void 0)}catch(t){this.logger.warn("Invalid SSE data format",a)}o="",a=""}}}finally{e.releaseLock()}})}makeRequest(e,r,i){return t(this,arguments,void 0,function*(t,e,r,i=1,n="POST"){if(!t.startsWith("/"))throw new s("Invalid endpoint: must start with /");const o=new URL(t,this.baseUrl);if(o.origin!==new URL(this.baseUrl).origin)throw new s("Endpoint resolved to unexpected origin");this.logger.debug(`${this.tag} Request ${i}/${this.retryConfig.attempts}: ${o}`);const a=new AbortController,c=setTimeout(()=>a.abort(),this.timeout),l=()=>a.abort();r&&r.addEventListener("abort",l);try{const c=yield fetch(o,Object.assign({method:n,headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","Cache-Control":"no-cache",Authorization:`Bearer ${this.apiKey}`,"User-Agent":"Graphy-SDK/1.0"},signal:a.signal},"POST"===n&&{body:JSON.stringify(e)}));if(!c.ok){const o=c.status>=500||429===c.status;let a,l=`HTTP ${c.status}`;try{const t=yield c.json();if("object"==typeof t&&null!==t){const e=t;"string"==typeof e.message?l=e.message:"string"==typeof e.error&&(l=e.error),"string"==typeof e.code&&(a=e.code)}}catch(t){}const g=new s(l,{status:c.status,code:a,retryable:o});if(o&&i<this.retryConfig.attempts&&!(null==r?void 0:r.aborted)){const o=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,i-1);return this.logger.warn(`${this.tag} Retrying ${t} in ${o}ms (attempt ${i+1})`),yield this.sleep(o),this.makeRequest(t,e,r,i+1,n)}throw this.logger.error(`${this.tag} Request failed: ${t} (${c.status}) - ${l}`),g}return this.logger.debug(`${this.tag} Connected: ${t}`),c}catch(o){if(o instanceof s)throw o;if(o instanceof Error&&"AbortError"===o.name)throw this.logger.debug(`${this.tag} Aborted: ${t}`),o;if(i<this.retryConfig.attempts&&!(null==r?void 0:r.aborted)){const o=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,i-1);return this.logger.warn(`${this.tag} Network error, retrying ${t} in ${o}ms`),yield this.sleep(o),this.makeRequest(t,e,r,i+1,n)}throw this.logger.error(`${this.tag} Network error: ${t}`,o),new s("Network error",{retryable:!0})}finally{clearTimeout(c),r&&r.removeEventListener("abort",l)}})}}const p=o.enum(["EN_GB","EN_US"]),m=o.custom(t=>null!=t&&"object"==typeof t),f=o.enum(["none","low","medium","high"]),y=o.object({maxWallClockMs:o.number().positive().optional(),maxTotalTokens:o.number().int().positive().optional(),maxCostUsd:o.number().positive().optional()}),b=o.object({callId:o.string().max(256),locale:p.optional(),storytellingEffort:f.optional().default("low"),budget:y.optional()}),v=1e4,w=o.object({config:m,userPrompt:o.string().max(1e4).optional().default(""),metadata:b.optional()}),$=w.extend({maxSuggestionCount:o.number().int().min(1).max(4).optional()}),j=o.enum(["line","bar","groupedBar","stackedBar","100StackedBar","column","groupedColumn","stackedColumn","100StackedColumn","combo","pie","donut","funnel","heatmap","scatter","bubble","waterfall","table"]),S=o.object({dataPrepPrompt:o.string(),chartType:j,summary:o.string()}),x=o.object({response:o.object({message:o.string()}),config:m}),O=o.object({suggestions:o.array(S)}),k=o.enum(["comparison","relationship","distribution","composition"]),C=o.object({finding:o.string().describe("Plain-English summary of the finding (no stats jargon)."),confidence:o.number().min(0).max(1).describe("Statistical strength of the finding (0..1). Independent of topicality."),relevance:o.number().min(0).max(1).describe("Topical fit with the user prompt and chart narrative (0..1). Independent of statistical strength."),topic:o.string().min(1).describe("Kebab-case label grouping this finding with related ones; consumers can render findings as threads."),chartHint:o.string().min(1).max(240).describe('Natural-language data-prep recipe for a downstream mutate agent: filter → group → aggregate → sort, naming real dataset columns. No chart type or "render as" clause — that is set via chartFamily.'),chartFamily:k.describe("Abela family (comparison | relationship | distribution | composition). Downstream chart-generator picks the concrete chart type from this family + the data shape."),evidenceSummary:o.string().max(300).describe("Rigorous statistical back-up with exact numbers.")}),E=o.object({topic:o.string().min(1).describe("Kebab-case story headline shared by all child findings."),score:o.number().min(0).max(1).describe("Max quadrant score (relevance × confidence) across child findings."),count:o.number().int().min(1).describe("Number of findings in this story."),findings:o.array(C).describe("Child findings, sorted by quadrant score desc.")}),R=o.object({response:o.object({message:o.string(),steps:o.array(o.string())}),stories:o.array(E)}),T=o.object({response:o.object({message:o.string(),steps:o.array(o.string())}),config:m}),P=o.object({response:o.object({message:o.string(),steps:o.array(o.string())}),config:m}),q=o.enum(["high","medium","low"]),A=o.object({confidence:q,needsUserInput:o.boolean(),warnings:o.array(o.string()),cellConfidence:o.array(o.object({rowIndex:o.number().int().nonnegative(),columnKey:o.string(),confidence:q,quote:o.string().optional()})).optional()}),N=o.object({score:o.number().min(0).max(1),issues:o.array(o.string()),sufficient:o.boolean(),summary:o.string()}),U=5e5,D=o.object({sourceText:o.string().min(1).max(U),metadata:b.optional()}),K=o.object({response:o.object({message:o.string()}),config:m,extractMeta:A.nullable(),lastAccuracyEvaluation:N.optional()}),I=o.object({config:m,response:o.object({message:o.string(),steps:o.array(o.string())})}),F="/api/v0";class G{constructor(t){this.client=new h(t)}generateGraph(e,r,i){return t(this,void 0,void 0,function*(){const{storytellingOptions:t}=e,o=n(e,["storytellingOptions"]),s=yield this.client.fetch(`${F}/generate`,o,r,i),a=I.parse(s);return this.stripStorytelling(a,t)})}generateGraphStream(e,r){return t(this,void 0,void 0,function*(){const{storytellingOptions:t}=e,i=n(e,["storytellingOptions"]),o=yield this.client.stream(`${F}/generate`,i,r);return this.wrapStreamWithStorytellingStripping(o,t)})}generateNarrative(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.client.fetch(`${F}/narrate`,e,r,i);return x.parse(t)})}generateNarrativeStream(e,r){return t(this,void 0,void 0,function*(){return this.client.stream(`${F}/narrate`,e,r)})}generateSuggestions(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.client.fetch(`${F}/suggestions`,e,r,i);return O.parse(t)})}generateSuggestionsStream(e,r){return t(this,void 0,void 0,function*(){return this.client.stream(`${F}/suggestions`,e,r)})}generateExploration(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.client.fetch(`${F}/explore`,e,r,i);return R.parse(t)})}generateExplorationStream(e,r){return t(this,void 0,void 0,function*(){return this.client.stream(`${F}/explore`,e,r)})}generateAnnotations(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.client.fetch(`${F}/annotate`,e,r,i);return T.parse(t)})}generateAnnotationsStream(e,r){return t(this,void 0,void 0,function*(){return this.client.stream(`${F}/annotate`,e,r)})}generateMutation(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.client.fetch(`${F}/mutate`,e,r,i);return P.parse(t)})}generateMutationStream(e,r){return t(this,void 0,void 0,function*(){return this.client.stream(`${F}/mutate`,e,r)})}extractFromProse(e,r,i){return t(this,void 0,void 0,function*(){const t=yield this.client.fetch(`${F}/extract`,e,r,i);return K.parse(t)})}extractFromProseStream(e,r){return t(this,void 0,void 0,function*(){return this.client.stream(`${F}/extract`,e,r)})}stripStorytelling(t,e){return e&&t.config.content?Object.assign(Object.assign({},t),{config:Object.assign(Object.assign({},t.config),{content:Object.assign(Object.assign(Object.assign(Object.assign({},t.config.content),e.excludeTitle&&{title:void 0}),e.excludeSubtitle&&{subtitle:void 0}),e.excludeCaption&&{caption:void 0})})}):t}wrapStreamWithStorytellingStripping(t,n){return r(this,arguments,function*(){var r,o,s,a;try{for(var c,g=!0,d=e(t);!(r=(c=yield i(d.next())).done);g=!0){a=c.value,g=!1;const t=a;if(l(t)){const e=this.stripStorytelling(t.data,n);yield yield i(Object.assign(Object.assign({},t),{data:e}))}else yield yield i(t)}}catch(t){o={error:t}}finally{try{g||r||!(s=d.return)||(yield i(s.call(d)))}finally{if(o)throw o.error}}})}}export{j as AiChartTypeEnum,k as ChartFamilySchema,C as ExploreFindingSchema,E as ExploreStorySchema,N as ExtractAccuracyEvaluationSchema,q as ExtractConfidenceSchema,D as ExtractFromProseParamsSchema,K as ExtractFromProseResponseSchema,A as ExtractMetaSchema,T as GenerateAnnotationsResponseSchema,R as GenerateExplorationResponseSchema,I as GenerateGraphResponseSchema,P as GenerateMutationResponseSchema,x as GenerateNarrativeResponseSchema,$ as GenerateSuggestionsParamsSchema,O as GenerateSuggestionsResponseSchema,w as GraphGenerationRequestSchema,G as GraphyAiSdk,s as GraphyApiError,y as InvocationBudgetSchema,U as MAX_SOURCE_TEXT_LENGTH,v as MAX_USER_PROMPT_LENGTH,b as MetadataSchema,f as StorytellingEffortSchema,S as SuggestionSchema,l as isCompleteEvent,g as isErrorEvent,a as isGraphyApiError,d as isPreviewEvent,c as isProgressEvent,u as isReasoningEvent};
|
|
1
|
+
import{__awaiter as e,__asyncValues as t,__asyncGenerator as r,__await as i,__rest as n}from"tslib";import{z as o}from"zod";class s extends Error{constructor(e,t){var r;super(e),Object.setPrototypeOf(this,new.target.prototype),this.name="GraphyApiError",this.status=null==t?void 0:t.status,this.code=null==t?void 0:t.code,this.retryable=null!==(r=null==t?void 0:t.retryable)&&void 0!==r&&r}}const a=e=>e instanceof s,c=e=>"progress"===e.type,l=e=>"complete"===e.type,g=e=>"error"===e.type,d=e=>"preview"===e.type,u=e=>"reasoning"===e.type;class h{constructor(e){if(this.tag="[GRAPHY]",!e.apiKey||0===e.apiKey.trim().length)throw new Error("apiKey is required and must not be empty");const t=new URL(e.baseUrl);if(!["http:","https:"].includes(t.protocol))throw new Error(`Invalid baseUrl protocol: ${t.protocol}. Only http(s) is allowed.`);this.apiKey=e.apiKey,this.baseUrl=t.origin+t.pathname.replace(/\/$/,""),this.timeout=e.timeout||6e4,this.retryConfig=e.retryConfig||{attempts:3,delay:1e3,backoff:2},this.logger=e.logger||{log:console.log,warn:console.warn,error:console.error,debug:console.debug}}static isProgressEvent(e){return c(e)}static isCompleteEvent(e){return l(e)}static isErrorEvent(e){return g(e)}stream(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.makeRequest(t,r,i);return this.parseSSE(e)})}fetch(r,i,n,o){return e(this,void 0,void 0,function*(){var e,a,d,u,h;const m=Date.now();this.logger.debug(`${this.tag} Fetch: ${r}`);try{const b=yield this.makeRequest(r,i,o),v=b.headers.get("content-type");if(null==v?void 0:v.includes("text/event-stream")){try{for(var p,f=!0,y=t(this.parseSSE(b));!(e=(p=yield y.next()).done);f=!0){u=p.value,f=!1;const e=u;if(c(e)&&n&&n(e),l(e))return e.data;if(g(e)){const t=Date.now()-m;throw this.logger.error(`${this.tag} Server error: ${r} ${t}ms`,e.error),new s(e.error,{code:e.code,retryable:null!==(h=e.retryable)&&void 0!==h&&h})}}}catch(e){a={error:e}}finally{try{f||e||!(d=y.return)||(yield d.call(y))}finally{if(a)throw a.error}}const i=Date.now()-m;throw this.logger.error(`${this.tag} Stream incomplete: ${r} ${i}ms`),new s("Stream ended without completion")}return yield b.json()}catch(e){const t=Date.now()-m;if(this.logger.error(`${this.tag} Fetch failed: ${r} ${t}ms`,e),e instanceof s)throw e;throw e}finally{const e=Date.now()-m;this.logger.debug(`${this.tag} Fetch completed: ${r} ${e}ms`)}})}ping(){return e(this,void 0,void 0,function*(){const e=Date.now();try{return yield this.makeRequest("/health",void 0,void 0,this.retryConfig.attempts,"GET"),{ok:!0,latency:Date.now()-e}}catch(t){return{ok:!1,latency:Date.now()-e}}})}sleep(t){return e(this,void 0,void 0,function*(){return new Promise(e=>setTimeout(e,t))})}parseSSE(e){return r(this,arguments,function*(){if(!e.body)throw new s("Response body is null");const t=e.body.getReader(),r=new TextDecoder;let n="",o="",a="";try{for(;;){const{done:e,value:s}=yield i(t.read());if(e)break;n+=r.decode(s,{stream:!0});const c=n.split(/\r?\n/);n=c.pop()||"";for(const e of c)if(e.startsWith("event: "))o=e.slice(7).trim();else if(e.startsWith("data: "))a+=(a?"\n":"")+e.slice(6);else if(""===e.trim()&&a){try{const e=JSON.parse(a);let t;if("progress"===o){const r=e;t=Object.assign({type:"progress"},r)}else if("complete"===o)t={type:"complete",data:e};else if("error"===o){const r=e;t=Object.assign({type:"error"},r)}else if("preview"===o){const r=e;t=Object.assign(Object.assign({},r),{type:"preview"})}else{if("reasoning"!==o){o="",a="";continue}{const r=e;t=Object.assign(Object.assign({},r),{type:"reasoning"})}}if(yield yield i(t),"complete"===o||"error"===o)return yield i(void 0)}catch(e){this.logger.warn("Invalid SSE data format",a)}o="",a=""}}}finally{t.releaseLock()}})}makeRequest(t,r,i){return e(this,arguments,void 0,function*(e,t,r,i=1,n="POST"){if(!e.startsWith("/"))throw new s("Invalid endpoint: must start with /");const o=new URL(e,this.baseUrl);if(o.origin!==new URL(this.baseUrl).origin)throw new s("Endpoint resolved to unexpected origin");this.logger.debug(`${this.tag} Request ${i}/${this.retryConfig.attempts}: ${o}`);const a=new AbortController,c=setTimeout(()=>a.abort(),this.timeout),l=()=>a.abort();r&&r.addEventListener("abort",l);try{const c=yield fetch(o,Object.assign({method:n,headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","Cache-Control":"no-cache",Authorization:`Bearer ${this.apiKey}`,"User-Agent":"Graphy-SDK/1.0"},signal:a.signal},"POST"===n&&{body:JSON.stringify(t)}));if(!c.ok){const o=c.status>=500||429===c.status;let a,l=`HTTP ${c.status}`;try{const e=yield c.json();if("object"==typeof e&&null!==e){const t=e;"string"==typeof t.message?l=t.message:"string"==typeof t.error&&(l=t.error),"string"==typeof t.code&&(a=t.code)}}catch(e){}const g=new s(l,{status:c.status,code:a,retryable:o});if(o&&i<this.retryConfig.attempts&&!(null==r?void 0:r.aborted)){const o=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,i-1);return this.logger.warn(`${this.tag} Retrying ${e} in ${o}ms (attempt ${i+1})`),yield this.sleep(o),this.makeRequest(e,t,r,i+1,n)}throw this.logger.error(`${this.tag} Request failed: ${e} (${c.status}) - ${l}`),g}return this.logger.debug(`${this.tag} Connected: ${e}`),c}catch(o){if(o instanceof s)throw o;if(o instanceof Error&&"AbortError"===o.name)throw this.logger.debug(`${this.tag} Aborted: ${e}`),o;if(i<this.retryConfig.attempts&&!(null==r?void 0:r.aborted)){const o=this.retryConfig.delay*Math.pow(this.retryConfig.backoff,i-1);return this.logger.warn(`${this.tag} Network error, retrying ${e} in ${o}ms`),yield this.sleep(o),this.makeRequest(e,t,r,i+1,n)}throw this.logger.error(`${this.tag} Network error: ${e}`,o),new s("Network error",{retryable:!0})}finally{clearTimeout(c),r&&r.removeEventListener("abort",l)}})}}const m=o.enum(["EN_GB","EN_US"]),p=o.custom(e=>null!=e&&"object"==typeof e),f=o.enum(["low","medium","high"]),y=o.enum(["none","low","medium","high"]),b=o.enum(["agentic","fast"]),v=o.object({maxWallClockMs:o.number().positive().optional(),maxTotalTokens:o.number().int().positive().optional(),maxCostUsd:o.number().positive().optional()}),w=o.object({callId:o.string().max(256),locale:m.optional(),effort:f.optional(),storytellingEffort:y.optional().default("low"),budget:v.optional(),executionMode:b.optional()}),$=1e4,j=o.object({config:p,userPrompt:o.string().max(1e4).optional().default(""),metadata:w.optional()}),x=j.extend({maxSuggestionCount:o.number().int().min(1).max(4).optional()}),S=o.enum(["line","bar","groupedBar","stackedBar","100StackedBar","column","groupedColumn","stackedColumn","100StackedColumn","combo","pie","donut","funnel","heatmap","scatter","bubble","waterfall","table"]),O=o.object({dataPrepPrompt:o.string(),chartType:S,summary:o.string()}),C=o.object({response:o.object({message:o.string()}),config:p}),k=o.object({suggestions:o.array(O)}),E=o.enum(["comparison","relationship","distribution","composition"]),T=o.object({finding:o.string().describe("Plain-English summary of the finding (no stats jargon)."),confidence:o.number().min(0).max(1).describe("Statistical strength of the finding (0..1). Independent of topicality."),relevance:o.number().min(0).max(1).describe("Topical fit with the user prompt and chart narrative (0..1). Independent of statistical strength."),topic:o.string().min(1).describe("Kebab-case label grouping this finding with related ones; consumers can render findings as threads."),chartHint:o.string().min(1).max(240).describe('Natural-language data-prep recipe for a downstream mutate agent: filter → group → aggregate → sort, naming real dataset columns. No chart type or "render as" clause — that is set via chartFamily.'),chartFamily:E.describe("Abela family (comparison | relationship | distribution | composition). Downstream chart-generator picks the concrete chart type from this family + the data shape."),evidenceSummary:o.string().max(300).describe("Rigorous statistical back-up with exact numbers.")}),R=o.object({topic:o.string().min(1).describe("Kebab-case story headline shared by all child findings."),score:o.number().min(0).max(1).describe("Max quadrant score (relevance × confidence) across child findings."),count:o.number().int().min(1).describe("Number of findings in this story."),findings:o.array(T).describe("Child findings, sorted by quadrant score desc.")}),P=o.object({response:o.object({message:o.string(),steps:o.array(o.string())}),stories:o.array(R)}),A=o.object({response:o.object({message:o.string(),steps:o.array(o.string())}),config:p}),q=o.object({response:o.object({message:o.string(),steps:o.array(o.string())}),config:p}),N=o.enum(["high","medium","low"]),U=o.object({confidence:N,needsUserInput:o.boolean(),warnings:o.array(o.string()),cellConfidence:o.array(o.object({rowIndex:o.number().int().nonnegative(),columnKey:o.string(),confidence:N,quote:o.string().optional()})).optional()}),D=o.object({score:o.number().min(0).max(1),issues:o.array(o.string()),sufficient:o.boolean(),summary:o.string()}),I=5e5,K=8,M=2097152,B=7340032,F=4*Math.ceil(699050.6666666666),G=4*Math.ceil(2446677.3333333335);function L(e){return e.replace(/\s+/g,"")}const W=o.object({mimeType:o.string().min(1).refine(e=>/^image\/(png|jpeg|jpg|webp|gif)$/i.test(e.trim()),{message:"mimeType must be image/png, image/jpeg, image/jpg, image/webp, or image/gif"}),dataBase64:o.string().min(1).max(F).refine(function(e){const t=L(e);return 0!==t.length&&t.length%4==0&&/^[A-Za-z0-9+/]+={0,2}$/.test(t)},{message:"dataBase64 must be standard base64 (RFC 4648)"})}),z=o.object({sourceText:o.string().max(I).default(""),images:o.array(W).max(8).optional(),metadata:w.optional()}).superRefine((e,t)=>{var r;const i=e.sourceText.trim(),n=null!==(r=e.images)&&void 0!==r?r:[];if(0===i.length&&0===n.length)return void t.addIssue({code:"custom",message:"Provide non-empty sourceText and/or at least one image",path:["sourceText"]});if(0===n.length)return;n.reduce((e,t)=>e+L(t.dataBase64).length,0)>G&&t.addIssue({code:"custom",message:"Combined image base64 exceeds maximum length for this API (must fit server decode limits)",path:["images"]})}),H=o.object({response:o.object({message:o.string()}),config:p,extractMeta:U.nullable(),lastAccuracyEvaluation:D.optional()}),J=o.object({config:p,response:o.object({message:o.string(),steps:o.array(o.string())})}),_=k,Y="/api/v0";class Z{constructor(e){this.client=new h(e)}generateGraph(t,r,i){return e(this,void 0,void 0,function*(){const{storytellingOptions:e}=t,o=n(t,["storytellingOptions"]),s=yield this.client.fetch(`${Y}/generate`,o,r,i),a=J.parse(s);return this.stripStorytelling(a,e)})}generateGraphStream(t,r){return e(this,void 0,void 0,function*(){const{storytellingOptions:e}=t,i=n(t,["storytellingOptions"]),o=yield this.client.stream(`${Y}/generate`,i,r);return this.wrapStreamWithStorytellingStripping(o,e)})}generateNarrative(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${Y}/narrate`,t,r,i);return C.parse(e)})}generateNarrativeStream(t,r){return e(this,void 0,void 0,function*(){return this.client.stream(`${Y}/narrate`,t,r)})}generateSuggestions(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${Y}/suggestions`,t,r,i);return k.parse(e)})}generateSuggestionsStream(t,r){return e(this,void 0,void 0,function*(){return this.client.stream(`${Y}/suggestions`,t,r)})}generateExploration(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${Y}/explore`,t,r,i);return P.parse(e)})}generateExplorationStream(t,r){return e(this,void 0,void 0,function*(){return this.client.stream(`${Y}/explore`,t,r)})}generateAnnotations(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${Y}/annotate`,t,r,i);return A.parse(e)})}generateAnnotationsStream(t,r){return e(this,void 0,void 0,function*(){return this.client.stream(`${Y}/annotate`,t,r)})}generateMutation(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${Y}/mutate`,t,r,i);return q.parse(e)})}generateMutationStream(t,r){return e(this,void 0,void 0,function*(){return this.client.stream(`${Y}/mutate`,t,r)})}extractFromProse(t,r,i){return e(this,void 0,void 0,function*(){const e=yield this.client.fetch(`${Y}/extract`,t,r,i);return H.parse(e)})}extractFromProseStream(t,r){return e(this,void 0,void 0,function*(){return this.client.stream(`${Y}/extract`,t,r)})}stripStorytelling(e,t){return t&&e.config.content?Object.assign(Object.assign({},e),{config:Object.assign(Object.assign({},e.config),{content:Object.assign(Object.assign(Object.assign(Object.assign({},e.config.content),t.excludeTitle&&{title:void 0}),t.excludeSubtitle&&{subtitle:void 0}),t.excludeCaption&&{caption:void 0})})}):e}wrapStreamWithStorytellingStripping(e,n){return r(this,arguments,function*(){var r,o,s,a;try{for(var c,g=!0,d=t(e);!(r=(c=yield i(d.next())).done);g=!0){a=c.value,g=!1;const e=a;if(l(e)){const t=this.stripStorytelling(e.data,n);yield yield i(Object.assign(Object.assign({},e),{data:t}))}else yield yield i(e)}}catch(e){o={error:e}}finally{try{g||r||!(s=d.return)||(yield i(s.call(d)))}finally{if(o)throw o.error}}})}}export{S as AiChartTypeEnum,E as ChartFamilySchema,b as ExecutionModeSchema,T as ExploreFindingSchema,R as ExploreStorySchema,D as ExtractAccuracyEvaluationSchema,N as ExtractConfidenceSchema,z as ExtractFromProseParamsSchema,H as ExtractFromProseResponseSchema,U as ExtractMetaSchema,A as GenerateAnnotationsResponseSchema,P as GenerateExplorationResponseSchema,J as GenerateGraphResponseSchema,_ as GenerateGraphSuggestionsResponseSchema,q as GenerateMutationResponseSchema,C as GenerateNarrativeResponseSchema,x as GenerateSuggestionsParamsSchema,k as GenerateSuggestionsResponseSchema,j as GraphGenerationRequestSchema,Z as GraphyAiSdk,s as GraphyApiError,v as InvocationBudgetSchema,f as InvocationEffortSchema,K as MAX_EXTRACT_IMAGES,B as MAX_EXTRACT_IMAGES_TOTAL_DECODED_BYTES,M as MAX_EXTRACT_IMAGE_DECODED_BYTES,I as MAX_SOURCE_TEXT_LENGTH,$ as MAX_USER_PROMPT_LENGTH,w as MetadataSchema,y as StorytellingEffortSchema,O as SuggestionSchema,l as isCompleteEvent,g as isErrorEvent,a as isGraphyApiError,d as isPreviewEvent,c as isProgressEvent,u as isReasoningEvent};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphysdk/agents-sdk",
|
|
3
3
|
"author": "Graphy",
|
|
4
|
-
"version": "1.3.0-beta.
|
|
4
|
+
"version": "1.3.0-beta.1776957859415",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"files": [
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"zod": "^4.3.6",
|
|
21
|
-
"@graphysdk/core": "1.3.0-beta.
|
|
21
|
+
"@graphysdk/core": "1.3.0-beta.1776957859415"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@rollup/plugin-commonjs": "^28.0.6",
|