@arcgis/ai-components 5.1.0-next.129 → 5.1.0-next.130
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/cdn/{PW4XPFSA.js → 72HM6DTZ.js} +2 -2
- package/dist/cdn/AZTWZFVA.js +16 -0
- package/dist/cdn/{EX6NWXUF.js → FKSLZTUY.js} +2 -2
- package/dist/cdn/{E4TOTVRI.js → RBMBKUY6.js} +2 -2
- package/dist/cdn/{7UAGCI6W.js → RJ6XMESZ.js} +35 -36
- package/dist/cdn/{EC62ZHZL.js → VWMJ7HIK.js} +9 -7
- package/dist/cdn/{MEM7FGVU.js → Y2L6M2RG.js} +10 -10
- package/dist/cdn/index.js +1 -1
- package/dist/chunks/adapter.js +479 -484
- package/dist/chunks/arcgisKnowledgeGraph.js +1 -1
- package/dist/chunks/dataExplorationGraph.js +101 -94
- package/dist/chunks/helpGraph.js +4 -4
- package/dist/chunks/layerStylingGraph.js +10 -10
- package/dist/chunks/navigationGraph.js +27 -27
- package/dist/chunks/summarize_query_response_prompt.js +9 -7
- package/dist/docs/api.json +1 -1
- package/dist/docs/docs.json +1 -1
- package/dist/docs/web-types.json +1 -1
- package/package.json +4 -4
- package/dist/cdn/32S235WW.js +0 -16
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import b from"./
|
|
2
|
+
import b from"./RJ6XMESZ.js";import a from"./ZP3SG5OG.js";import{Fb as f,a as h,b as l}from"./V7BWJN43.js";import{a as y,c as E}from"./LYJY5QUA.js";import"./P5M2HNJ7.js";import"./TOYQ22PR.js";import{v as u,z as d}from"./COFOUGFJ.js";import"./CFDTXKJ6.js";export default $arcgis.t(([,,,,,,,,,,,,,,,{f:p,n:x},{I:c,J:H,a:S,m:_,n:w,o:m,p:v}])=>{var C=[H],b=e=>{if(!e||e.size===0)return"No layers available in this map.";let t=Array.from(e.values()).map(({layerItem:o,fieldRegistry:a},s)=>{let r=Array.from(a.values()).map(n=>n.name).slice(0,10).join(", "),i=a.size>10?` (and ${a.size-10} more)`:"";return`${s+1}. "${o.title}". Description: ${o.description}
|
|
3
3
|
Fields: ${r}${i}`}).join(`
|
|
4
4
|
|
|
5
5
|
`);return`This map contains ${e.size} layer(s):
|
|
6
6
|
|
|
7
7
|
${t}`},k=e=>{let t=e?.list()??[];return t.length?t.map(o=>`- ${o.agent.name}: ${o.agent.description}`).join(`
|
|
8
|
-
`):"No agents currently available."};async function I(e,t){let o=await _("help_prompt"),a=m(t,"layersAndFieldsRegistry"),s=m(t,"agentRegistry");try{let r=await x({promptText:o,modelTier:"fast",tools:C,inputVariables:{layerSummary:b(a),agents:k(s),assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,priorSteps:e.agentExecutionContext.priorSteps}}),i=(r.tool_calls?.length??0)>0,n=typeof r.text=="string"?r.text.trim():"";return{...e,helpInternalState:{...e.helpInternalState,toolCallMessage:i?r:void 0},outputMessage:i?e.outputMessage:n,summary:i?"Prepared help tool call from assigned task.":"Provided map-related help based on the assigned task.",status:i?e.status:"success"}}catch(r){let i=r instanceof Error?r.message:String(r);return{...e,outputMessage:`Error invoking help agent: ${i}`,summary:"Help agent execution failed.",status:"failed"}}}var M=(e,t)=>v(["agentRegistry"],"Help Agent")(e,t);async function T(e,t){let o=new S(C);try{let a=e.helpInternalState.toolCallMessage;if(!a)throw new Error("helpToolCalling: missing helpInternalState.toolCallMessage");let s=(await o.invoke({messages:[a]},t)).messages.map(r=>r.text).join(`
|
|
8
|
+
`):"No agents currently available."};async function I(e,t){let o=await _("help_prompt"),a=m(t,"layersAndFieldsRegistry"),s=m(t,"agentRegistry");try{let r=await x({promptText:o,modelTier:"fast",tools:C,inputVariables:{layerSummary:b(a),agents:k(s),assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,priorSteps:e.agentExecutionContext.priorSteps}}),i=(r.tool_calls?.length??0)>0,n=typeof r.text=="string"?r.text.trim():"";return{...e,helpInternalState:{...e.helpInternalState,toolCallMessage:i?r:void 0},outputMessage:i?e.outputMessage:n,summary:i?"Prepared help tool call from assigned task.":"Provided map-related help based on the assigned task.",status:i?e.status:"success"}}catch(r){let i=r instanceof Error?r.message:String(r);return{...e,outputMessage:`Error invoking help agent: ${i}`,summary:"Help agent execution failed.",status:"failed"}}}var M=(e,t)=>v(["agentRegistry"],"Help Agent")(e,t);async function T(e,t){let o=new S(C,{handleToolErrors:!1});try{let a=e.helpInternalState.toolCallMessage;if(!a)throw new Error("helpToolCalling: missing helpInternalState.toolCallMessage");let s=(await o.invoke({messages:[a]},t)).messages.map(r=>r.text).join(`
|
|
9
9
|
`);return await p({text:`Finished executing help tool: ${s}`},t),{...e,outputMessage:s,status:"success",summary:s?w(s):"Help executed.",helpInternalState:{...e.helpInternalState,toolCallMessage:void 0}}}catch(a){let s=a instanceof Error?a.message:String(a);return await p({text:`Help tool execution failed: ${s}`},t),{...e,outputMessage:`Help tool execution failed: ${s}`,status:"failed",summary:`Help tool execution failed: ${s}`,helpInternalState:{...e.helpInternalState,toolCallMessage:void 0}}}}var q=()=>new f(c).addNode("requireHelpServices",M).addNode("agent",I).addNode("tools",T).addEdge(h,"requireHelpServices").addEdge("requireHelpServices","agent").addConditionalEdges("agent",e=>e.helpInternalState.toolCallMessage?"tools":l).addEdge("tools",l),A=String.raw`- **help** — Enables users to ask questions about the map, layers, fields, and it's capabilities.
|
|
10
10
|
|
|
11
11
|
_Example: “Tell me about this map”_
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
+
import c from"./I3H52G4C.js";import b from"./RJ6XMESZ.js";import a from"./ZP3SG5OG.js";import{Fb as k,Q as V,a as N,b as E}from"./V7BWJN43.js";import{a as D,c as j}from"./LYJY5QUA.js";import"./P5M2HNJ7.js";import"./TOYQ22PR.js";import{v as $,z as A}from"./COFOUGFJ.js";import"./CFDTXKJ6.js";export default $arcgis.t(([,,,,,,,,,,K,X,,,{f:l,l:z,n:T},{C:R,D:G,E:L,F:P,G:F,H:U,a:O,m:S,n:M,o:f,p:Q},_])=>{var Y=async(e,t)=>(await l({text:"Exiting Data Exploration agent"},t),e),Z=async(e,t)=>{await l({text:"Requesting LLM for layer filter results"},t);let a=await S("data_explore_filter_prompt");if(!t?.configurable)throw new Error("config.configurable is required for layer filter tools");let{userTimezone:d,userTimezoneOffset:o}=L(),s={layerFieldInfo:e.layerFieldInfo,userTimezone:d,userTimezoneOffset:o,queryResponse:e.queryResponse,assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,priorSteps:e.agentExecutionContext.priorSteps},i=await T({promptText:a,modelTier:"advanced",messages:e.dataExplorationMessages,inputVariables:s,tools:F}),r=[...e.dataExplorationMessages,i];if(!((i.tool_calls?.length??0)>0))return await l({text:"LLM determined no filter changes needed"},t),{...e,dataExplorationMessages:r};let u=r,n=i.content.toString();return await _(i,t),{...e,dataExplorationMessages:u,outputMessage:n}},ee=async(e,t)=>{await l({text:"Requesting LLM for layer query results"},t);let a=await S("data_explore_query_prompt");if(!t?.configurable)throw new Error("config.configurable is required for layer query tools");let{userTimezone:d,userTimezoneOffset:o}=L(),s=e.agentExecutionContext.sharedState.lastNavigatedFeatures,i=s&&typeof s=="object"&&"value"in s?s.value:s,r="none";if(i!=null)try{r=JSON.stringify(i)}catch{r="none"}let u={layerFieldInfo:e.layerFieldInfo,userTimezone:d,userTimezoneOffset:o,assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,priorSteps:e.agentExecutionContext.priorSteps,lastNavigatedFeatures:r},n=await T({promptText:a,modelTier:"advanced",messages:e.dataExplorationMessages,inputVariables:u,tools:P}),m=(n.tool_calls?.length??0)>0,g=n.content.toString();return await _(n,t),{...e,dataExplorationMessages:[...e.dataExplorationMessages,n],...m?{}:{outputMessage:g},status:"success",summary:g&&!m?M(g):"Query planning completed."}},te=async(e,t)=>{try{await l({text:"Requesting LLM for summary on query results"},t);let a=await S("summarize_query_response_prompt"),d={queryResponse:e.queryResponse,assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,priorSteps:e.agentExecutionContext.priorSteps},o=await z({promptText:a,modelTier:"fast",messages:e.dataExplorationMessages,inputVariables:d}),s=typeof o=="string"?o:o.content,i=new V(s);await l({text:`Received response from LLM: ${s}`},t);let r=s;return{...e,outputMessage:r,status:"success",summary:r?M(r):"Summary generated.",dataExplorationMessages:[...e.dataExplorationMessages,i]}}catch(a){throw await l({text:"Error during filter LLM request"},t),new Error(`Error during filter LLM request: ${a instanceof Error?a.message:String(a)}`)}};async function ae(e,t){if((e.queryResponse??[]).some(d=>{let o=d.details;return typeof o=="object"&&o!==null&&"error"in o}))return await l({text:"Skipping layer filter tool because query response contains an error."},t),{...e};let a=await new O(F,{handleToolErrors:!1}).invoke({messages:e.dataExplorationMessages},t);return await l({text:`Finished executing layer filter tool: ${a.messages.map(d=>d.content).join(", ")}`},t),{...e}}var se=10,re=["string","small-integer","integer"],ie=async(e,t,{includeSummaryStatistics:a=!0,includeUniqueValues:d=!0}={})=>{let o=null,s=null;try{if(t.type!=="geometry"&&t.type!=="oid"&&t.type!=="global-id"){a&&(o=await K({layer:e,field:t.name}));let i=t.domain?.type==="coded-value"?t.domain:null;d&&(re.includes(t.type)||i)&&(s=(await X({layer:e,field:t.name})).uniqueValueInfos.sort((r,u)=>u.count-r.count).slice(0,se),i&&(s=s.map(r=>({...r,value:i.getName(r.value)??r.value}))))}}catch(i){console.error(`Error fetching statistics for field ${t.name}:`,i)}return{summaryStatistics:o,uniqueValues:s}};function oe(e,t){return["string","small-integer","integer"].includes(e)||t==="coded-value"}async function ne(e,t,a,d=!0){let o=[],s=[],i=[];for(let r of e){let u=function(p){let c=t.get(p)?.layerItem;return c?[c.name&&`Name: ${c.name}`,c.title&&`Title: ${c.title}`,c.description&&`Description: ${c.description}`].filter(Boolean).join(" | "):p},{layerId:n,results:m}=r,g=a.map?.allLayers.find(p=>p.id===n),w=t.get(n)?.fieldRegistry;if(!w)continue;let h=o.find(p=>p.layerId===n);h||(h={layerId:n,layerSummary:u(n),fieldInfos:[]},o.push(h));for(let p of m){let c=w.get(p.name);if(!c)continue;let y=c.statistics,v=d&&!y?.summaryStatistics,q=oe(c.type,c.domain?.type)&&!y?.uniqueValues,C=v||q;if(i.push({layerId:n,fieldName:c.name,didFetchStatistics:C}),C){let J=ie(g,c,{includeSummaryStatistics:v,includeUniqueValues:q}).then(I=>{let x={summaryStatistics:y?.summaryStatistics??null,uniqueValues:y?.uniqueValues??null};v&&(x.summaryStatistics=I.summaryStatistics),q&&(x.uniqueValues=I.uniqueValues),w.set(c.name,{...c,statistics:x}),c.statistics=x});s.push(J)}h.fieldInfos.push(c)}}return await Promise.all(s),{layerFieldInfo:o,didFetchStatistics:s.length>0,fieldStatisticsFetchStatus:i}}var W=/\b(average|avg|mean|median|max(?:imum)?|min(?:imum)?|sum|total|count|std(?:dev|\s*deviation)|variance|null\s*count|missing\s*values?|range)\b/iu;function le(e,t){return W.test(e)||W.test(t)}var de=async(e,t)=>{try{await l({text:"Preparing field information for vector search results"},t);let a=f(t,"layersAndFieldsRegistry"),{mapView:d}=G(t),{assignedTask:o,userRequest:s}=e.agentExecutionContext,i=le(o,s),{layerFieldInfo:r,didFetchStatistics:u,fieldStatisticsFetchStatus:n}=await ne(e.vectorSearchFieldResults,a,d,i);u?await l({text:"Statistics fetched"},t):await l({text:"Statistics skipped"},t);for(let m of n)await l({text:` - ${m.fieldName} - stats ${m.didFetchStatistics?"fetched":"skipped"}`},t);return await l({text:"Field information prepared"},t),{...e,layerFieldInfo:r}}catch(a){throw await l({text:"Error during fetching statistics"},t),new Error(`Error during fetching statistics: ${a instanceof Error?a.message:String(a)}`)}},B=.7,ce=10,ue=async(e,t)=>{try{await l({text:"Similarity search to find fields"},t);let a=f(t,"fieldSearch"),d=f(t,"layersAndFieldsRegistry"),o=f(t,"embeddingCache"),s=await a.searchFields({text:e.agentExecutionContext.assignedTask,layerIds:e.vectorSearchLayerIds,minScore:B,topResults:ce,embeddingCache:o}),i=s.map(({layerId:u,results:n})=>{let m=n.map(g=>` - ${g.name} (${g.score.toFixed(2)})`).join(`
|
|
3
|
+
`);return`${d.get(u)?.layerItem.name??u}:
|
|
4
|
+
${m}`}).join(`
|
|
5
|
+
`),r;return s.length>0?r=`Vector search completed. Matching layers and fields with scores:
|
|
6
|
+
${i}`:r=`No vector search results found for score over ${B}.`,await l({text:r},t),{...e,vectorSearchFieldResults:s}}catch(a){throw await l({text:`Error during vector search: ${a instanceof Error?a.message:String(a)}`},t),new Error(`Vector search failed: ${a instanceof Error?a.message:String(a)}`)}},me=.7,ge=async(e,t)=>{try{await l({text:`Similarity search to find layers: ${e.agentExecutionContext.assignedTask}`},t);let a=f(t,"layerSearch"),d=f(t,"layersAndFieldsRegistry"),o=f(t,"embeddingCache"),s=await a.searchLayers({text:e.agentExecutionContext.assignedTask,minScore:me,embeddingCache:o}),i=s.map(n=>n.id),r=s.map(({id:n,score:m})=>`${d.get(n)?.layerItem.name??n} (${m.toFixed(2)})`).join(`
|
|
7
|
+
`),u;return i.length>0?u=`Vector search completed. Matching layers with scores:
|
|
8
|
+
${r}`:u="Vector search completed. No matching layers found.",await l({text:u},t),{...e,vectorSearchLayerIds:i}}catch(a){throw await l({text:`Error during vector search: ${a instanceof Error?a.message:String(a)}`},t),new Error(`Vector search failed: ${a instanceof Error?a.message:String(a)}`)}},pe=(e,t)=>Q(["layerSearch","fieldSearch","layersAndFieldsRegistry"],"Data Exploration Agent")(e,t),fe=()=>new k(R).addNode("requireDataExplorationServices",pe).addNode("vectorSearchLayers",ge).addNode("vectorSearchFields",ue).addNode("fieldStatistics",de).addNode("queryAgent",ee).addNode("queryTools",U).addNode("summarizeQueryResponseLLM",te).addNode("filterAgent",Z).addNode("filterTools",ae).addNode("earlyExit",Y).addEdge(N,"requireDataExplorationServices").addEdge("requireDataExplorationServices","vectorSearchLayers").addConditionalEdges("vectorSearchLayers",e=>e.vectorSearchLayerIds.length?"vectorSearchFields":"earlyExit").addConditionalEdges("vectorSearchFields",e=>e.vectorSearchFieldResults.length?"fieldStatistics":"earlyExit").addEdge("fieldStatistics","queryAgent").addConditionalEdges("queryAgent",e=>(e.dataExplorationMessages[e.dataExplorationMessages.length-1]?.tool_calls?.length??0)>0?"queryTools":"filterAgent").addConditionalEdges("queryTools",e=>e.queryResponse.length?"summarizeQueryResponseLLM":"filterAgent").addEdge("summarizeQueryResponseLLM","filterAgent").addConditionalEdges("filterAgent",e=>(e.dataExplorationMessages[e.dataExplorationMessages.length-1]?.tool_calls?.length??0)>0?"filterTools":E).addEdge("filterTools",E).addEdge("earlyExit",E),he=String.raw`- **data exploration** — User is asking about the feature layer’s data (e.g. counts, summaries, statistics, field values), either for all features, a subset based on a condition, or for a subset based on the current view. And/Or user wants to include or exclude features based on field values, or visually style features differently (e.g., highlight or deemphasize them).
|
|
9
|
+
The Data Exploration Agent will automatically zoom to the affected features for action taken by this agent. In this case, no need to call navigation tool separately.
|
|
10
|
+
_Example: “Only show stations where Brand is Shell”_
|
|
11
|
+
_Example: “Make Shell stations stand out on the map”_
|
|
12
|
+
_Example: “Gray out all stations that aren’t Shell”_
|
|
13
|
+
This also includes questions that ask which feature meets a given condition or where a particular feature in the data is located (e.g., “Where is the spring with the highest elevation?”). However, this agent does not handle addresses.
|
|
14
|
+
_Example: “How many features are there?”_
|
|
15
|
+
_Example: “What’s the average population?”_
|
|
16
|
+
_Example: “Which values are in the status field?”_`,H={id:"dataExploration",name:"Data Exploration Agent",description:he,createGraph:fe,workspace:R};var b=class extends ${constructor(){super(...arguments),this.agent=H}static{this.properties={referenceElement:1}}#e;getContext(){if(!this.#e)throw new Error("arcgis-assistant-data-exploration-agent requires a mapView");return{mapView:this.#e}}load(){this.#e=D(this,"arcgis-assistant-data-exploration-agent"),j(this)}};A("arcgis-assistant-data-exploration-agent",b);return b},"identity/IdentityManager","portal/Portal","core/reactiveUtils","layers/FeatureLayer","request","identity/IdentityManager","portal/Portal","core/reactiveUtils","layers/FeatureLayer","request","smartMapping/statistics/summaryStatistics","smartMapping/statistics/uniqueValues","views/LinkChartView","rest/knowledgeGraphService",a,b,c)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import c from"./I3H52G4C.js";import b from"./
|
|
2
|
+
import c from"./I3H52G4C.js";import b from"./RJ6XMESZ.js";import a from"./ZP3SG5OG.js";import{Fb as I,a as w,b as h,q as E}from"./V7BWJN43.js";import{a as v,c as F}from"./LYJY5QUA.js";import"./P5M2HNJ7.js";import"./TOYQ22PR.js";import{v as x,z as S}from"./COFOUGFJ.js";import"./CFDTXKJ6.js";export default $arcgis.t(([,,,,,,,,,,,,,,,{f:n,n:L},{A:z,B:u,a:$,m:C,o:y,p:N,q:A,r:R,s:T,t:b,u:_,v:V,w:q,x:j,y:k,z:M},D])=>{var B=.7,P=10,J=async(t,r)=>{try{await n({text:"Similarity search to find fields"},r);let e=y(r,"fieldSearch"),i=y(r,"layersAndFieldsRegistry"),o=y(r,"embeddingCache"),a=await e.searchFields({text:t.agentExecutionContext.assignedTask,layerIds:t.vectorSearchLayerIds,minScore:B,topResults:P,embeddingCache:o}),m=a.map(({layerId:c,results:d})=>{let g=d.map(s=>` - ${s.name} (${s.score.toFixed(2)})`).join(`
|
|
3
3
|
`);return`${i.get(c)?.layerItem.name??c}:
|
|
4
4
|
${g}`}).join(`
|
|
5
5
|
`),l;return a.length>0?l=`Vector search completed. Matching layers and fields with scores:
|
|
6
6
|
${m}`:l=`No vector search results found for score over ${B}.`,await n({text:l},r),{...t,vectorSearchFieldResults:a}}catch(e){throw await n({text:`Error during vector search: ${e instanceof Error?e.message:String(e)}`},r),new Error(`Vector search failed: ${e instanceof Error?e.message:String(e)}`)}},K=.7,U=async(t,r)=>{try{await n({text:`Similarity search to find layers: ${t.agentExecutionContext.assignedTask}`},r);let e=y(r,"layerSearch"),i=y(r,"layersAndFieldsRegistry"),o=await e.searchLayers({text:t.agentExecutionContext.assignedTask,minScore:K}),a=o.map(c=>c.id),m=o.map(({id:c,score:d})=>`${i.get(c)?.layerItem.name??c} (${d.toFixed(2)})`).join(`
|
|
7
7
|
`),l;return a.length>0?l=`Vector search completed. Matching layers with scores:
|
|
8
|
-
${m}`:l="Vector search completed. No matching layers found.",await n({text:l},r),{...t,vectorSearchLayerIds:a}}catch(e){throw await n({text:`Error during vector search: ${e instanceof Error?e.message:String(e)}`},r),new Error(`Vector search failed: ${e instanceof Error?e.message:String(e)}`)}},G=[A,R,T,b,_,V,q,j,k,M,z],H=(t,r=3)=>{let e=t.map((o,a)=>o.type==="human"?a:-1).filter(o=>o!==-1);if(e.length===0)return[];let i=e.length>r?e[e.length-r]:e[0];return t.slice(i)},O=async(t,r)=>{await n({text:"Requesting LLM for layer query results"},r);let e=await C("navigation_intent_prompt");if(!r?.configurable)throw new Error("config.configurable is required for layer query tools");let i={layerFieldInfo:t.layerFieldInfo},o=await L({promptText:e,modelTier:"advanced",messages:H(t.agentExecutionContext.messages),inputVariables:i,tools:G});return await D(o,r),{...t,agentExecutionContext:{...t.agentExecutionContext,messages:[...t.agentExecutionContext.messages,o]}}};async function Q(t,r){let e=await new $(G).invoke({messages:H(t.agentExecutionContext.messages)},r),i=e.messages.map(a=>a.text).join(`
|
|
8
|
+
${m}`:l="Vector search completed. No matching layers found.",await n({text:l},r),{...t,vectorSearchLayerIds:a}}catch(e){throw await n({text:`Error during vector search: ${e instanceof Error?e.message:String(e)}`},r),new Error(`Vector search failed: ${e instanceof Error?e.message:String(e)}`)}},G=[A,R,T,b,_,V,q,j,k,M,z],H=(t,r=3)=>{let e=t.map((o,a)=>o.type==="human"?a:-1).filter(o=>o!==-1);if(e.length===0)return[];let i=e.length>r?e[e.length-r]:e[0];return t.slice(i)},O=async(t,r)=>{await n({text:"Requesting LLM for layer query results"},r);let e=await C("navigation_intent_prompt");if(!r?.configurable)throw new Error("config.configurable is required for layer query tools");let i={layerFieldInfo:t.layerFieldInfo},o=await L({promptText:e,modelTier:"advanced",messages:H(t.agentExecutionContext.messages),inputVariables:i,tools:G});return await D(o,r),{...t,agentExecutionContext:{...t.agentExecutionContext,messages:[...t.agentExecutionContext.messages,o]}}};async function Q(t,r){let e=await new $(G,{handleToolErrors:!1}).invoke({messages:H(t.agentExecutionContext.messages)},r),i=e.messages.map(a=>a.text).join(`
|
|
9
9
|
`);await n({text:`Finished executing layer filter tool: ${i}`},r);let o=e.messages.map(a=>a.text).join(`
|
|
10
10
|
`);return{...t,outputMessage:o}}var W=async(t,r)=>(await n({text:"Exiting Layer Styling agent"},r),t),X=async(t,r)=>{try{await n({text:"Populating layer and field info"},r);let e=[];for(let i of t.vectorSearchFieldResults){let o=function(g){let s=l.get(g)?.layerItem;return s?[s.name&&`Name: ${s.name}`,s.title&&`Title: ${s.title}`,s.description&&`Description: ${s.description}`].filter(Boolean).join(" | "):g},{layerId:a,results:m}=i,l=y(r,"layersAndFieldsRegistry"),c=l.get(a)?.fieldRegistry;if(!c)continue;let d=e.find(g=>g.layerId===a);d||(d={layerId:a,layerSummary:o(a),fieldInfos:[]},e.push(d));for(let g of m){let s=c.get(g.name);s&&d.fieldInfos.push(s)}}return await n({text:"Populated layerFieldInfo"},r),{...t,layerFieldInfo:e}}catch(e){throw await n({text:"Error populating layerFieldInfo"},r),new Error(`Error populating layerFieldInfo: ${e instanceof Error?e.message:String(e)}`)}},Y=(t,r)=>{let e=t.vectorSearchLayerIds??[];if(e.length<=1)return{...t,selectedLayerId:t.vectorSearchLayerIds[0]};let{hitlResponse:i}=r.configurable;if(i?.agentId!==p.id||i.id!=="reviewLayerSelection"){let a={agentId:p.id,id:"reviewLayerSelection",kind:"singleSelection",message:"Choose a layer to apply the styles.",metadata:[...e]};throw new E(a)}let o=null;return Array.isArray(i.payload)&&i.payload.length>0&&(o=i.payload[0]),{...t,selectedLayerId:o??t.vectorSearchLayerIds[0]}},Z=(t,r)=>N(["layerSearch","fieldSearch","layersAndFieldsRegistry"],"Layer Styling Agent")(t,r),ee=()=>new I(u).addNode("requireLayerStylingServices",Z).addNode("vectorSearchLayers",U).addNode("layerSelectionHITL",Y).addNode("vectorSearchFields",J).addNode("populateLayerFieldInfo",X).addNode("agent",O).addNode("tools",Q).addNode("earlyExit",W).addEdge(w,"requireLayerStylingServices").addEdge("requireLayerStylingServices","vectorSearchLayers").addConditionalEdges("layerSelectionHITL",t=>t.vectorSearchLayerIds.length?"vectorSearchFields":"earlyExit").addConditionalEdges("vectorSearchFields",t=>t.vectorSearchFieldResults.length?"populateLayerFieldInfo":"earlyExit").addEdge("populateLayerFieldInfo","agent").addEdge("agent","tools").addEdge("tools",h).addEdge("earlyExit",h),te=String.raw`- **layerStyling** — User wants to change how features are drawn or styled on the map based on their data, such as applying color, size, transparency, symbols, or charts according to field values.
|
|
11
11
|
_Example: “Color points by sales amount”_
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import b from"./
|
|
2
|
+
import b from"./RJ6XMESZ.js";import a from"./ZP3SG5OG.js";import{Fb as _,Q as v,a as x,b as l,j as k}from"./V7BWJN43.js";import{c as q,d as K}from"./LYJY5QUA.js";import"./P5M2HNJ7.js";import"./TOYQ22PR.js";import{v as f,z as y}from"./COFOUGFJ.js";import"./CFDTXKJ6.js";export default $arcgis.t(([,,,,,,,,,,,,,{fetchKnowledgeGraph:P},{f:h,l:b,n:A},{K:u,L:M,M:C,N:T,O:G,P:N,Q:R,R:$,S:z,T:F,U:L,a:E,m:g,n:d,p:S}])=>{var I=[N,R,F,$,G,L,z];async function D(e,a){let s=await g("arcgis_knowledge_tool_prompt"),o=M(a),i={assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,priorSteps:e.agentExecutionContext.priorSteps,contextType:o},r=await A({promptText:s,messages:e.arcgisKnowledgeMessages,inputVariables:i,tools:I}),t=(r.tool_calls?.length??0)>0,n=typeof r.text=="string"?r.text.trim():"",c=n.length>0,p=r.content.toString();return!t&&(o==="map"||o==="knowledgeGraph")?{...e,arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages,r],outputMessage:o==="map"?"No tools were found for the current view and prompt. Maps do not support changing nonspatial visibility, layout changes, or generation from queries.":"No tools were found for the current prompt and knowledge graph service. A knowledge graph service only supports search and query.",status:"success"}:{...e,arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages,r],outputMessage:t?p:n,status:t?e.status:c?"success":"failed",summary:p?d(p):"ArcGIS Knowledge Agent tool executed."}}async function j(e,a){let s=new E(I,{handleToolErrors:!1});try{let o=await s.invoke({messages:e.arcgisKnowledgeMessages},a),i=[];for(let t of o.messages){let n;if(typeof t.content!="string")throw new Error(`Unexpected tool message content type: ${typeof t.content}. Expected string.`);try{n=JSON.parse(t.content)}catch{throw new Error(`Failed to parse tool message content as JSON. Tool: ${t.name??"unknown"}.
|
|
3
3
|
|
|
4
4
|
Original Content: ${t.content}`)}if(!n||typeof n!="object"||!("toolName"in n))throw new Error(`Parsed tool message content does not have expected structure. Parsed content: ${JSON.stringify(n)}`);i.push(n)}await h({text:`Finished executing ArcGIS Knowledge Agent tools: ${o.messages.filter(t=>t.name).map(t=>t.name).join(", ")}`},a);let r=i.filter(t=>typeof t!="string").map(t=>`- Called Tool: ${t.toolName}, Status: ${t.status}`);return{...e,outputMessage:r.join(`
|
|
5
5
|
`),summary:r.length?d(r.join(`
|
|
6
|
-
`)):"ArcGIS Knowledge Agent did not execute any tools or return any results.",arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages,...o.messages],arcgisKnowledgeToolResult:i}}catch(o){let i=o instanceof Error?o.message:String(o);return await h({text:`ArcGIS Knowledge Agent tool execution failed unexpectedly: ${i}`},a),{...e,outputMessage:`ArcGIS Knowledge Agent tool execution failed unexpectedly: ${i}`,status:"failed",summary:d(`ArcGIS Knowledge Agent tool execution failed unexpectedly: ${i}`),arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages]}}}var O=(e,a)=>
|
|
6
|
+
`)):"ArcGIS Knowledge Agent did not execute any tools or return any results.",arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages,...o.messages],arcgisKnowledgeToolResult:i}}catch(o){let i=o instanceof Error?o.message:String(o);return await h({text:`ArcGIS Knowledge Agent tool execution failed unexpectedly: ${i}`},a),{...e,outputMessage:`ArcGIS Knowledge Agent tool execution failed unexpectedly: ${i}`,status:"failed",summary:d(`ArcGIS Knowledge Agent tool execution failed unexpectedly: ${i}`),arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages]}}}var O=(e,a)=>S([],"ArcgisKnowledge Agent")(e,a);async function V(e,a){let s=(e.arcgisKnowledgeToolResult??[]).map(c=>({...c,details:void 0})),{knowledgeGraph:o}=await C(a),i=T.getDataModelTypesSummary(o.dataModel),r={assignedTask:e.agentExecutionContext.assignedTask,userRequest:e.agentExecutionContext.userRequest,toolResult:s,dataModelSummary:i},t=await b({promptText:await g("arcgis_knowledge_summarize_result_prompt"),modelTier:"default",inputVariables:r}),n=typeof t=="string"?t:t.content;return{...e,outputMessage:n,status:"success",summary:d(n),arcgisKnowledgeMessages:[...e.arcgisKnowledgeMessages,new v(n)]}}function m(e){return async(a,s)=>s?.configurable?.abortSignal?.aborted?(await h({text:"Knowledge Agent execution cancelled"},s),new k({goto:l,update:{outputMessage:"Knowledge Agent execution cancelled",summary:"Knowledge Agent execution cancelled",status:"failed"}})):await e(a,s)}var J=()=>new _(u).addNode("requireArcgisKnowledgeServices",O).addNode("agent",m(D)).addNode("tools",m(j)).addNode("summarizationLLM",m(V)).addEdge(x,"requireArcgisKnowledgeServices").addEdge("requireArcgisKnowledgeServices","agent").addConditionalEdges("agent",e=>(e.arcgisKnowledgeMessages[e.arcgisKnowledgeMessages.length-1]?.tool_calls?.length??0)>0?"tools":l).addConditionalEdges("tools",e=>e.status==="failed"?l:"summarizationLLM").addEdge("summarizationLLM",l),H=String.raw`The purpose of this agent is to work with Knowledge Graph data, a graph database technology that represents and stores data as interconnected entities (nodes) and relationships (edges).
|
|
7
7
|
This agent has two categories of skills: those that work with an active link chart visualization of a subset of the data in the knowledge graph, and those that work with the knowledge graph data more generally against the entire dataset in the service and database.
|
|
8
8
|
For link charts, the agent enables users to interact with a link chart by adding new entities (also called nodes) or relationships (also called edges), removing existing entities or relationships,
|
|
9
9
|
expanding the graph from particular entities, finding relationships between specified entities on the link chart and adding them to the link chart, finding all relationships
|