<jupyter_start><jupyter_text>Analysing transaction trees using neo4j and hence other tools (Gephi and yEd) IntroductionESI data is processed by `CorMel` into *transaction trees* with the followingstructure:* CorMel defines 5 "segments" in all: A, E, H, T and U, which store datapertaining to transaction trees.* The common features (across all entities of the transaction tree) are storedin a `U` segment for each transaction tree, which acts as the root of the tree.* The `U` node is connected to a single `T` node, which is the transaction thatspawns the other transactions in the tree.* Each transaction `T` node can have 0 or more child transactions (`T` nodes).* The leaf nodes can be `T` nodes, or alternatively hop (`H`) nodes, `A` or `E`nodes.* The `A` and `E` nodes often have blank properties and/or default data, andso are loaded into neo4j but are not used for further analysis. They appear tobe descriptive and are shared between transaction trees.Each CorMel segment is associated with a standard list of fields, hence it isequivalent to a table in a relational database, or a node in a property graph.Although transaction trees have a natural mapping into graph data structures,this aspect of their nature has not been explored in Amadeus. The researchhypothesis is that transaction trees can be classified into two categories,depending on whether they are associated with *successful* or *unsuccessful*outcomes.Note that *success* and *failure* have specific meanings in this context. Forexample, a customer could decide to abandon a search, or even a booking, beforecompleting all steps. Because the customer made the decision, Amadeusinfrastructure was not at fault, and the incomplete transaction tree does notrepresent a problem for the Amadeus devops team to fix[^1]. Another scenariowould be that a network link failure occurred, in which case the serviceresponse never arrived, so the customer had no choice and was unable to proceedwith the transaction. As seen by the customer, the system became unresponsive,or even provided an error message of the form "The system is currentlyunavailable.  Please try again later." Neither of these represents a*successful* outcome. Even worse, such problems are likely to recur, and toaffect other customers. Hence they need to be addressed as soon as possible.[^1]: Perhaps the Customer Experience team might be interested in analysingtransactions abandoned by customers, as there might be ways of improving thecustomer experience with the intention of increasing the completion rate oftransactions. However, such offline analysis is outside the scope of thepresent study. The research hypothesis is that there are *structural* and/or *property*differences between successful and unsuccessful transaction trees. Furthermore,it might even be possible to suggest some queries that could be used to derivethe root cause of *correlated* problems.One possible structural difference might include highly unbalanced trees,reflecting the fact that, if a particular edge in the tree failed, theredundancy built into the Amadeus services infrastructure is such that otherparts of the transaction might succeed (and generate lots of activity in thelogs, hence segments in the CorMel transaction tree) although the overalltransaction might fail.Property differences could be subtle and might be more useful for root causedetermination. For example, the transaction might invoke a service that wasrecently updated, or be directed to an endpoint that is struggling to meetdemand. Such property data is stored in the segment records. (Graph) databasequeries might help to find common property settings across problematictransaction trees. The processing pipelineMore information can be found in the related implementation documentation.A summary of the processing pipeline is shown in Figure 1 below. ![Figure 1: Overview of the processing pipeline.](img/pipeline2-CROPPED.png){height=9cm}The starting point is the `CorMel` system itself, from which an Avro-formatextract is taken on a timed basis and saved in a file, with one file perextract run. The given example file contained 24499 transaction trees. A (Java)program was written to upload this data to a `Neo4j` database, where it isrepresented as a graph, with the `U`, `T`, `H`, `A` and `E` segments fromCorMel being stored as Neo4j nodes, linked together with Neo4j edges thatrepresent the *flow* of the transaction trees.Samples of such data can be exported in Graphml format from Neo4j and stored in(data-oriented, not graphics-oriented) files that are optimised for the `Gephi`and `yEd` applications, where they can be visualised and analysed.Within each of these applications, the nodes and edges areassigned (`x`,`y`) coordinates according to the layout algorithms.  It is easier to interpret transaction trees by highlighting them in the context of othertransaction trees, so a python program was written to generate modify the edge colourso that highlighted transaction trees have edges coloured black and other trees have edgesthat are light grey in colour.It is also possible to run standard graph algorithms on the data in Neo4j, or alternativelyin `Gephi` or `yEd`. The results of such analysis are described below. Preliminary analysis resultsIt should be noted that the preliminary analysis results are based on asample data of 20 transaction trees, ignoring the `A` and `E` segment nodes.The first interesting feature is that the number of components is 8 rather than20 (the number of (logical) transaction trees), because of the presence of sharednodes (and even edges).If we compare highlighted tree 1 using yEd's `circular` and `treeBalloon` layouts,we see that certain features are relatively stable between the two representations.![Figure 2: Highlighted tree 1, for 20 tree sample, yEd's "circular" layout, annotated to show features in coloured boxes.](img/sample20yed_circular_hl01.png){height=9cm}The box on the right, with a pale green background, shows a relatively simplearrangement of isolated trees, differing in size from 3 nodes (`U`, `T` and`H`) to a much larger tree with many nodes. The box with the pale bluebackground includes most nodes in transaction tree 1, except for a branch thatleads to a shared node. The box with the yellow background includes most nodesof two trees, except for their own version of the branch that leads to the samenode that is shared with transaction tree 1. The box with the pale orangebackground includes both simple and shared edges associated with a particularnode. There is a lot of complexity here, which is worthy of further study.![Figure 3: Highlighted tree 1, for 20 tree sample, yEd's "treeBalloon" layout, annotated to show features in coloured boxes.](img/sample20yed_treeBalloon_hl01.png){height=9cm}Figure 2 and Figure 3 are very similar, with slightly different ways of showingthe more complex overlapping transaction trees.Indeed, yEd is also able to display certain analytical properties of graphs.For this study, the following graphs were considered interesting. Firstly, thenumber of edges connected to each node (its *degree*) is a measure of how manyservice endpoints are tasked with work from that node. If any of these serviceendpoints fails to provide a response, the transaction tree could block at thatnode. See Figure 4 below.![Figure 4: 20 tree sample, yEd's "treeBalloon" layout, showing the (out)degree for each node.](img/sample20yed_treeBalloon_numberConnectedEdges.png){height=9cm}The node's degree provides a "local" measure of the work passing through thatnode.  However, the node's position in the tree also affects the flow of dataand control. The *paths* of these flows should also be considered. One suchmeasure is the node's *betweenness centrality*, which is represented in Figure5.![Figure 5: 20 tree sample, yEd's "treeBalloon" layout, showing the betweenness centrality for each node.](img/sample20yed_treeBalloon_nodeBetweennessCentrality.png){height=9cm}The ranking of nodes (according to the computed metric) changes between Figures4 and 5, reflecting the differing weighting of local and global informationrelating to the transaction tree(s) containing that node.By contrast with yEd, Gephi provides *reports* on various conceptually-linkedgraph metrics in the form of HTML pages referencing PNG plots of those metrics.Figure 6 below indicates that there are 3 components with very few nodes, butwith other transaction trees having significantly more nodes (~300 nodes in onecase).  More analysis would be needed to determine whether the distribution ofcomponent size might be a good predictor of whether a transaction tree hassucceeded or failed.![Figure 6: 20 tree sample: the component size distribution for the 8 weakly connected components.](connectedComponentsReport/cc-size-distribution.png){height=9cm}The graph *diameter* was found to be 9, with an average path length justexceeding 3.  Therefore, a `U->T->T->H` path is average path through thetransaction trees in the sample. Perhaps the distribution of path lengths mightbe a good predictor, but this is not computed by Gephi (although it could becomputed, with a little effort, in Neo4j).Gephi provides plots of *betweenness centrality*, *closeness centrality* and*eccentricity*, see Figures 7, 8 and 9 below.![Figure 7: 20 tree sample: the Betweenness Centrality distribution.](graphDistanceReport/BetweennessCentralityDistribution.png){height=9cm}![Figure 8: 20 tree sample: the Closeness Centrality distribution.](graphDistanceReport/ClosenessCentralityDistribution.png){height=9cm}![Figure 9: 20 tree sample: the Eccentricity distribution.](graphDistanceReport/EccentricityDistribution.png){height=9cm}In Figure 7, most of the mass of the Betweenness Centrality distribution can befound near 0, but there is also a relatively long tail. In Figure 8, theCloseness Centrality has two relatively common values (0 and 1) and theremainder lie in between. According to Figure 9, Eccentricity takes valuesbetween 0 and 9, with a preference for lower values.  It has arguably thesimplest of the three distributions and so might be easiest to compare betweensuccessful and failed transaction trees. Labeling the transaction trees The role of Application EventsAs described in the companion implementation document, AppEvents record the`TransactionStatus` of transactions affected by certain events. A "filterfirst" strategy wasfollowed to load only those CorMel transaction trees for which at least one oftheir transactions appeared in the AppEvent extract used to filter the incomingCorMel transaction trees. Consequently the volume of data is much reduced and thistype of filtering is also intended to select transaction trees that were affected byknown incidents.Another feature worth noting is that `DcxId` has been added to the set of propertiesin each transaction node, rather than being inherited implicitly from the parent `U`node. This makes matching (against AppEvents) much easier but a consequence of this changeis that transaction nodes are no longer shared between transaction trees. Such trees becomedisconnected from each other, making visualisation and interpretation easier. This shouldbe noted in the graph layouts shown later.   Preliminary analysis of results from the outageUsing the cypher query    MATCH (n:Tsegment) WHERE n.TransactionStatus IS NOT NULL RETURN n.TransactionStatus AS TransactionStatus, COUNT(*) AS Count;we obtain the data below.TransactionStatus|Count--- | ---OK|730KO|40Therefore AppEvent includes both successful (`TransactionStatus` = OK) andunsuccessful (`TransactionStatus` = KO) transactions.It is also interesting to note the effect of the filtering. Using    script/countAvroRecords.sh ~/data/CorMel/extracts_avro/incident .gz.avro | sort -k 1to count the records in the source files, and the cypher queries    MATCH (n:Usegment) RETURN n.CormelFile, COUNT(*) ORDER BY n.CormelFile;    MATCH (n:Tsegment) WHERE n.TransactionStatus IS NOT NULL RETURN n.CormelFile, COUNT(*) ORDER BY n.CormelFile;to count the filtered U and T segments (hence Neo4j nodes), we obtain the tablebelow.DataSource|All U|Filtered U|Filtered T (non-null TransactionStatus)--- | --- | --- | ---par_U170829_093700_S170829_093500_D60_lgcap102_16742_0021|23059|7|4par_U170829_093700_S170829_093500_D60_lgcap102_16743_0022|23319|6|3par_U170829_093700_S170829_093500_D60_lgcap102_16744_0023|22689|9|3par_U170829_093700_S170829_093500_D60_lgcap102_16745_0024|23766|4|2par_U170829_093700_S170829_093500_D60_lgcap102_16746_0025|22224|6|3par_U170829_093700_S170829_093500_D60_lgcap102_16747_0026|22015|3|1par_U170829_093700_S170829_093500_D60_lgcap102_16748_0027|21487|5|3par_U170829_093700_S170829_093500_D60_lgcap102_16749_0028|21877|6|3par_U170829_093700_S170829_093500_D60_lgcap102_16750_0029|21534|5|3par_U170829_093700_S170829_093500_D60_lgcap102_16751_0030|21837|5|1par_U170829_093700_S170829_093500_D60_lgcap102_16752_0031|22070|8|8par_U170829_093700_S170829_093500_D60_lgcap102_16753_0032|22006|2|2par_U170829_093700_S170829_093500_D60_lgcap102_16754_0033|22773|7|3par_U170829_093700_S170829_093500_D60_lgcap102_16755_0079|62718|7|7par_U170829_093700_S170829_093500_D60_lgcap102_16756_0080|63718|16|10par_U170829_093700_S170829_093500_D60_lgcap102_16757_0062|47141|6|3par_U170829_093700_S170829_093500_D60_lgcap102_16758_0114|55043|11|6par_U170829_093700_S170829_093500_D60_lgcap102_16759_0115|53725|13|8par_U170829_093700_S170829_093500_D60_lgcap102_16760_0116|52530|10|4par_U170829_093700_S170829_093500_D60_lgcap102_16761_0117|51812|14|13par_U170829_093700_S170829_093500_D60_lgcap102_16762_0118|50473|18|8par_U170829_093700_S170829_093500_D60_lgcap201_10122_0034|24589|5|3par_U170829_093700_S170829_093500_D60_lgcap201_10123_0035|23503|5|2par_U170829_093700_S170829_093500_D60_lgcap201_10124_0036|23896|6|4par_U170829_093700_S170829_093500_D60_lgcap201_10125_0037|25439|5|4par_U170829_093700_S170829_093500_D60_lgcap201_10126_0038|25471|6|2par_U170829_093700_S170829_093500_D60_lgcap201_10127_0039|25938|5|4par_U170829_093700_S170829_093500_D60_lgcap201_10128_0040|26833|4|4par_U170829_093700_S170829_093500_D60_lgcap201_10129_0041|27108|9|6par_U170829_093700_S170829_093500_D60_lgcap201_10130_0042|27626|3|2par_U170829_093700_S170829_093500_D60_lgcap201_10131_0043|28229|12|6par_U170829_093700_S170829_093500_D60_lgcap201_10132_0044|28732|5|5par_U170829_093700_S170829_093500_D60_lgcap201_10133_0045|29220|2|2par_U170829_093700_S170829_093500_D60_lgcap201_10134_0046|31396|7|4par_U170829_093700_S170829_093500_D60_lgcap201_10135_0077|60560|16|13par_U170829_093700_S170829_093500_D60_lgcap201_10136_0078|61561|15|11par_U170829_093700_S170829_093500_D60_lgcap201_10137_0061|46606|12|9par_U170829_093700_S170829_093500_D60_lgcap201_10138_0109|58624|13|8par_U170829_093700_S170829_093500_D60_lgcap201_10139_0110|58464|6|3par_U170829_093700_S170829_093500_D60_lgcap201_10140_0111|57673|17|11par_U170829_093700_S170829_093500_D60_lgcap201_10141_0112|56668|11|8par_U170829_093700_S170829_093500_D60_lgcap201_10142_0113|56012|12|8par_U170829_093700_S170829_093500_D60_lgcap202_27053_0000|40163|11|4par_U170829_093700_S170829_093500_D60_lgcap202_27054_0001|38640|10|5par_U170829_093700_S170829_093500_D60_lgcap202_27055_0002|37087|8|4par_U170829_093700_S170829_093500_D60_lgcap202_27056_0003|36447|7|2par_U170829_093700_S170829_093500_D60_lgcap202_27057_0004|35370|0|0par_U170829_093700_S170829_093500_D60_lgcap202_27058_0005|34508|4|2par_U170829_093700_S170829_093500_D60_lgcap202_27059_0006|32865|6|6par_U170829_093700_S170829_093500_D60_lgcap202_27060_0007|32205|6|3par_U170829_093700_S170829_093500_D60_lgcap202_27061_0008|31376|4|2par_U170829_093700_S170829_093500_D60_lgcap202_27062_0009|29915|7|6par_U170829_093700_S170829_093500_D60_lgcap202_27063_0081|62970|22|11par_U170829_093700_S170829_093500_D60_lgcap202_27064_0082|63713|14|8par_U170829_093700_S170829_093500_D60_lgcap202_27065_0067|52028|11|8par_U170829_093700_S170829_093500_D60_lgcap202_27066_0068|53885|8|3par_U170829_093700_S170829_093500_D60_lgcap202_27067_0069|55791|15|4par_U170829_093700_S170829_093500_D60_lgcap202_27068_0124|43813|17|11par_U170829_093700_S170829_093500_D60_lgcap202_27069_0125|43174|4|3par_U170829_093700_S170829_093500_D60_lgcap202_27070_0126|41421|10|6par_U170829_093700_S170829_093500_D60_lgcap202_27071_0127|40965|7|6par_U170829_093700_S170829_093500_D60_lgcap302_25317_0010|28952|4|2par_U170829_093700_S170829_093500_D60_lgcap302_25318_0011|28735|8|3par_U170829_093700_S170829_093500_D60_lgcap302_25319_0012|27281|9|5par_U170829_093700_S170829_093500_D60_lgcap302_25320_0013|27376|6|5par_U170829_093700_S170829_093500_D60_lgcap302_25321_0014|26266|7|4par_U170829_093700_S170829_093500_D60_lgcap302_25322_0015|25375|9|6par_U170829_093700_S170829_093500_D60_lgcap302_25323_0016|25295|4|3par_U170829_093700_S170829_093500_D60_lgcap302_25324_0017|24862|8|6par_U170829_093700_S170829_093500_D60_lgcap302_25325_0018|23559|4|2par_U170829_093700_S170829_093500_D60_lgcap302_25326_0019|24008|7|5par_U170829_093700_S170829_093500_D60_lgcap302_25327_0020|22810|1|1par_U170829_093700_S170829_093500_D60_lgcap302_25328_0083|64588|21|15par_U170829_093700_S170829_093500_D60_lgcap302_25329_0063|48940|9|8par_U170829_093700_S170829_093500_D60_lgcap302_25330_0064|49656|8|6par_U170829_093700_S170829_093500_D60_lgcap302_25331_0065|51028|12|6par_U170829_093700_S170829_093500_D60_lgcap302_25332_0066|51156|9|4par_U170829_093700_S170829_093500_D60_lgcap302_25333_0119|48704|9|8par_U170829_093700_S170829_093500_D60_lgcap302_25334_0120|48430|9|6par_U170829_093700_S170829_093500_D60_lgcap302_25335_0121|47738|11|7par_U170829_093700_S170829_093500_D60_lgcap302_25336_0122|46756|6|3par_U170829_093700_S170829_093500_D60_lgcap302_25337_0123|44832|9|5par_U170829_093700_S170829_093500_D60_lgcap402_8065_0047|31815|8|2par_U170829_093700_S170829_093500_D60_lgcap402_8066_0048|32041|10|3par_U170829_093700_S170829_093500_D60_lgcap402_8067_0049|32670|12|7par_U170829_093700_S170829_093500_D60_lgcap402_8068_0050|33495|8|3par_U170829_093700_S170829_093500_D60_lgcap402_8069_0051|36128|11|8par_U170829_093700_S170829_093500_D60_lgcap402_8070_0052|35738|8|5par_U170829_093700_S170829_093500_D60_lgcap402_8071_0053|37476|7|3par_U170829_093700_S170829_093500_D60_lgcap402_8072_0054|39241|9|3par_U170829_093700_S170829_093500_D60_lgcap402_8073_0055|40815|8|7par_U170829_093700_S170829_093500_D60_lgcap402_8074_0056|41164|5|1par_U170829_093700_S170829_093500_D60_lgcap402_8075_0057|42054|11|12par_U170829_093700_S170829_093500_D60_lgcap402_8076_0058|42635|6|3par_U170829_093700_S170829_093500_D60_lgcap402_8077_0059|44744|8|7par_U170829_093700_S170829_093500_D60_lgcap402_8078_0075|59225|17|10par_U170829_093700_S170829_093500_D60_lgcap402_8079_0076|61391|16|6par_U170829_093700_S170829_093500_D60_lgcap402_8080_0060|45419|9|5par_U170829_093700_S170829_093500_D60_lgcap402_8081_0104|63087|12|9par_U170829_093700_S170829_093500_D60_lgcap402_8082_0105|62165|15|9par_U170829_093700_S170829_093500_D60_lgcap402_8083_0106|61370|16|10par_U170829_093700_S170829_093500_D60_lgcap402_8084_0107|61709|15|12par_U170829_093700_S170829_093500_D60_lgcap402_8085_0108|59483|13|7par_U170829_093700_S170829_093500_D60_lgcap501_867290_0070|55655|3|1par_U170829_093700_S170829_093500_D60_lgcap501_867291_0071|57346|12|6par_U170829_093700_S170829_093500_D60_lgcap601_380328_0072|57524|10|7par_U170829_093700_S170829_093500_D60_lgcap601_380329_0073|59520|12|9par_U170829_093700_S170829_093500_D60_lgcap602_34533_0074|59580|8|6par_U170829_093700_S170829_093500_D60_lgcap602_34534_0084|65577|21|9par_U170829_093700_S170829_093500_D60_lgcap602_34535_0085|65324|8|3par_U170829_093700_S170829_093500_D60_lgcap602_34536_0086|65720|22|13par_U170829_093700_S170829_093500_D60_lgcap602_34537_0087|66009|19|13par_U170829_093700_S170829_093500_D60_lgcap602_34538_0088|66474|19|14par_U170829_093700_S170829_093500_D60_lgcap602_34539_0089|66850|18|9par_U170829_093700_S170829_093500_D60_lgcap602_34540_0090|66553|16|8par_U170829_093700_S170829_093500_D60_lgcap602_34541_0091|67399|21|8par_U170829_093700_S170829_093500_D60_lgcap602_34542_0092|65960|16|10par_U170829_093700_S170829_093500_D60_lgcap602_34543_0093|66830|16|11par_U170829_093700_S170829_093500_D60_lgcap602_34544_0094|66372|11|8par_U170829_093700_S170829_093500_D60_lgcap602_34545_0095|67126|12|7par_U170829_093700_S170829_093500_D60_lgcap602_34546_0096|66057|11|5par_U170829_093700_S170829_093500_D60_lgcap602_34547_0097|66190|21|17par_U170829_093700_S170829_093500_D60_lgcap602_34548_0098|64591|13|7par_U170829_093700_S170829_093500_D60_lgcap602_34549_0099|64946|15|10par_U170829_093700_S170829_093500_D60_lgcap602_34550_0100|64605|12|10par_U170829_093700_S170829_093500_D60_lgcap602_34551_0101|65293|15|13par_U170829_093700_S170829_093500_D60_lgcap602_34552_0102|64147|17|8par_U170829_093700_S170829_093500_D60_lgcap602_34553_0103|64254|10|5Total|5694414|1267|770<jupyter_code>%matplotlib inline
import seaborn as sns
sns.set(color_codes=True)
ratios=[
0.571428571428571,
0.5,
0.333333333333333,
0.5,
0.5,
0.333333333333333,
0.6,
0.5,
0.6,
0.2,
1,
1,
0.428571428571429,
1,
0.625,
0.5,
0.545454545454545,
0.615384615384615,
0.4,
0.928571428571429,
0.444444444444444,
0.6,
0.4,
0.666666666666667,
0.8,
0.333333333333333,
0.8,
1,
0.666666666666667,
0.666666666666667,
0.5,
1,
1,
0.571428571428571,
0.8125,
0.733333333333333,
0.75,
0.615384615384615,
0.5,
0.647058823529412,
0.727272727272727,
0.666666666666667,
0.363636363636364,
0.5,
0.5,
0.285714285714286,
0.5,
1,
0.5,
0.5,
0.857142857142857,
0.5,
0.571428571428571,
0.727272727272727,
0.375,
0.266666666666667,
0.647058823529412,
0.75,
0.6,
0.857142857142857,
0.5,
0.375,
0.555555555555556,
0.833333333333333,
0.571428571428571,
0.666666666666667,
0.75,
0.75,
0.5,
0.714285714285714,
1,
0.714285714285714,
0.888888888888889,
0.75,
0.5,
0.444444444444444,
0.888888888888889,
0.666666666666667,
0.636363636363636,
0.5,
0.555555555555556,
0.25,
0.3,
0.583333333333333,
0.375,
0.727272727272727,
0.625,
0.428571428571429,
0.333333333333333,
0.875,
0.2,
1.09090909090909,
0.5,
0.875,
0.588235294117647,
0.375,
0.555555555555556,
0.75,
0.6,
0.625,
0.8,
0.538461538461538,
0.333333333333333,
0.5,
0.7,
0.75,
0.75,
0.428571428571429,
0.375,
0.590909090909091,
0.68421052631579,
0.736842105263158,
0.5,
0.5,
0.380952380952381,
0.625,
0.6875,
0.727272727272727,
0.583333333333333,
0.454545454545455,
0.80952380952381,
0.538461538461538,
0.666666666666667,
0.833333333333333,
0.866666666666667,
0.470588235294118,
0.5
];
# See https://stackoverflow.com/a/42409861/1988855
sns.distplot(ratios, hist=False, kde=True, rug=True).set_title("Distribution of the ratio of Labeled Transactions to Labeled Transaction Trees")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.055070546737213406, 'fraction_numerical': 0.31274250440917106, 'mean_word_length': 9.519944341372913, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 8, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 26, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '587246', 'license': 'Apache-2.0', 'n_tokens_mistral': 12610, 'n_tokens_neox': 8735, 'n_words': 1844, 'path': 'Analysis.ipynb', 'repo_name': 'bbutler-tssg/solas-amadeus', 'size': '22680'}