@euconform/core 1.0.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/evidence/bundle.d.ts +23 -0
- package/dist/evidence/bundle.d.ts.map +1 -0
- package/dist/evidence/bundle.js +44 -0
- package/dist/evidence/compliance-evaluation.d.ts +12 -0
- package/dist/evidence/compliance-evaluation.d.ts.map +1 -0
- package/dist/evidence/compliance-evaluation.js +78 -0
- package/dist/evidence/hash.d.ts +2 -0
- package/dist/evidence/hash.d.ts.map +1 -0
- package/dist/evidence/hash.js +4 -0
- package/dist/evidence/index.d.ts +13 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +11 -0
- package/dist/evidence/markdown.d.ts +9 -0
- package/dist/evidence/markdown.d.ts.map +1 -0
- package/dist/evidence/markdown.js +169 -0
- package/dist/evidence/output.d.ts +13 -0
- package/dist/evidence/output.d.ts.map +1 -0
- package/dist/evidence/output.js +547 -0
- package/dist/evidence/types.d.ts +230 -0
- package/dist/evidence/types.d.ts.map +1 -0
- package/dist/evidence/types.js +7 -0
- package/dist/evidence/validate.d.ts +8 -0
- package/dist/evidence/validate.d.ts.map +1 -0
- package/dist/evidence/validate.js +175 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/inference/ollama-client.d.ts +3 -0
- package/dist/inference/ollama-client.d.ts.map +1 -1
- package/dist/inference/ollama-client.js +69 -71
- package/dist/legal-checks/annex-iv-report.d.ts +3 -0
- package/dist/legal-checks/annex-iv-report.d.ts.map +1 -1
- package/dist/legal-checks/annex-iv-report.js +1 -0
- package/dist/legal-checks/deadline-timeline.d.ts +57 -0
- package/dist/legal-checks/deadline-timeline.d.ts.map +1 -0
- package/dist/legal-checks/deadline-timeline.js +265 -0
- package/dist/legal-checks/gap-analysis.d.ts +48 -0
- package/dist/legal-checks/gap-analysis.d.ts.map +1 -0
- package/dist/legal-checks/gap-analysis.js +397 -0
- package/dist/legal-checks/gpai-classifier.d.ts +49 -0
- package/dist/legal-checks/gpai-classifier.d.ts.map +1 -0
- package/dist/legal-checks/gpai-classifier.js +197 -0
- package/dist/legal-checks/index.d.ts +6 -0
- package/dist/legal-checks/index.d.ts.map +1 -1
- package/dist/legal-checks/index.js +3 -0
- package/dist/scanner/aggregator.d.ts +7 -0
- package/dist/scanner/aggregator.d.ts.map +1 -0
- package/dist/scanner/aggregator.js +200 -0
- package/dist/scanner/detectors/ai-framework-detector.d.ts +3 -0
- package/dist/scanner/detectors/ai-framework-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/ai-framework-detector.js +74 -0
- package/dist/scanner/detectors/ai-provider-detector.d.ts +3 -0
- package/dist/scanner/detectors/ai-provider-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/ai-provider-detector.js +100 -0
- package/dist/scanner/detectors/compliance-detector.d.ts +3 -0
- package/dist/scanner/detectors/compliance-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/compliance-detector.js +201 -0
- package/dist/scanner/detectors/config-detector.d.ts +3 -0
- package/dist/scanner/detectors/config-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/config-detector.js +248 -0
- package/dist/scanner/detectors/framework-detector.d.ts +3 -0
- package/dist/scanner/detectors/framework-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/framework-detector.js +141 -0
- package/dist/scanner/detectors/index.d.ts +8 -0
- package/dist/scanner/detectors/index.d.ts.map +1 -0
- package/dist/scanner/detectors/index.js +37 -0
- package/dist/scanner/detectors/local-inference-detector.d.ts +3 -0
- package/dist/scanner/detectors/local-inference-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/local-inference-detector.js +93 -0
- package/dist/scanner/detectors/markdown-detector.d.ts +3 -0
- package/dist/scanner/detectors/markdown-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/markdown-detector.js +139 -0
- package/dist/scanner/detectors/package-json-detector.d.ts +3 -0
- package/dist/scanner/detectors/package-json-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/package-json-detector.js +166 -0
- package/dist/scanner/detectors/rag-detector.d.ts +3 -0
- package/dist/scanner/detectors/rag-detector.d.ts.map +1 -0
- package/dist/scanner/detectors/rag-detector.js +132 -0
- package/dist/scanner/detectors/shared.d.ts +18 -0
- package/dist/scanner/detectors/shared.d.ts.map +1 -0
- package/dist/scanner/detectors/shared.js +36 -0
- package/dist/scanner/discovery.d.ts +14 -0
- package/dist/scanner/discovery.d.ts.map +1 -0
- package/dist/scanner/discovery.js +235 -0
- package/dist/scanner/index.d.ts +9 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +8 -0
- package/package.json +6 -3
- package/src/evidence/bundle.ts +65 -0
- package/src/evidence/compliance-evaluation.ts +114 -0
- package/src/evidence/hash.ts +5 -0
- package/src/evidence/index.ts +51 -0
- package/src/evidence/markdown.ts +226 -0
- package/src/evidence/output.ts +717 -0
- package/src/evidence/types.ts +329 -0
- package/src/evidence/validate.ts +270 -0
- package/src/index.ts +25 -0
- package/src/inference/ollama-client.ts +93 -86
- package/src/legal-checks/annex-iv-report.ts +4 -0
- package/src/legal-checks/deadline-timeline.ts +313 -0
- package/src/legal-checks/gap-analysis.ts +454 -0
- package/src/legal-checks/gpai-classifier.ts +281 -0
- package/src/legal-checks/index.ts +33 -0
- package/src/scanner/aggregator.ts +258 -0
- package/src/scanner/detectors/ai-framework-detector.ts +94 -0
- package/src/scanner/detectors/ai-provider-detector.ts +135 -0
- package/src/scanner/detectors/compliance-detector.ts +232 -0
- package/src/scanner/detectors/config-detector.ts +316 -0
- package/src/scanner/detectors/framework-detector.ts +163 -0
- package/src/scanner/detectors/index.ts +40 -0
- package/src/scanner/detectors/local-inference-detector.ts +124 -0
- package/src/scanner/detectors/markdown-detector.ts +176 -0
- package/src/scanner/detectors/package-json-detector.ts +202 -0
- package/src/scanner/detectors/rag-detector.ts +162 -0
- package/src/scanner/detectors/shared.ts +45 -0
- package/src/scanner/discovery.ts +290 -0
- package/src/scanner/index.ts +9 -0
- package/tests/evidence/bundle.test.ts +128 -0
- package/tests/evidence/ecef-schemas.test.ts +316 -0
- package/tests/evidence/hash.test.ts +25 -0
- package/tests/evidence/markdown.test.ts +92 -0
- package/tests/evidence/output.test.ts +203 -0
- package/tests/fixtures/compliance-good/README.md +14 -0
- package/tests/fixtures/compliance-good/lib/ai-service.ts +17 -0
- package/tests/fixtures/compliance-good/lib/review-flow.ts +11 -0
- package/tests/fixtures/compliance-good/package.json +10 -0
- package/tests/fixtures/compliance-good/tests/bias-check.test.ts +13 -0
- package/tests/fixtures/nextjs-openai/README.md +5 -0
- package/tests/fixtures/nextjs-openai/app/page.tsx +11 -0
- package/tests/fixtures/nextjs-openai/package.json +9 -0
- package/tests/fixtures/ollama-rag/.env.example +2 -0
- package/tests/fixtures/ollama-rag/docker-compose.yml +9 -0
- package/tests/fixtures/ollama-rag/package.json +9 -0
- package/tests/fixtures/ollama-rag/server.ts +21 -0
- package/tests/fixtures/plain-webapp/README.md +3 -0
- package/tests/fixtures/plain-webapp/index.js +5 -0
- package/tests/fixtures/plain-webapp/package.json +8 -0
- package/tests/gpai-classifier.test.ts +125 -0
- package/tests/gpai-timeline.test.ts +55 -0
- package/tests/scanner/aggregator.test.ts +122 -0
- package/tests/scanner/detectors.test.ts +274 -0
- package/tests/scanner/discovery.test.ts +87 -0
- package/vitest.config.ts +1 -0
- package/.turbo/turbo-check-types.log +0 -4
- package/.turbo/turbo-test.log +0 -364
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -3282
- package/coverage/coverage-final.json +0 -20
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -161
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/src/fairness-metrics.ts.html +0 -1579
- package/coverage/src/index.html +0 -161
- package/coverage/src/index.ts.html +0 -535
- package/coverage/src/inference/browser-inference.ts.html +0 -859
- package/coverage/src/inference/capability-detection.ts.html +0 -2227
- package/coverage/src/inference/index.html +0 -176
- package/coverage/src/inference/index.ts.html +0 -553
- package/coverage/src/inference/inference-factory.ts.html +0 -751
- package/coverage/src/inference/ollama-client.ts.html +0 -1627
- package/coverage/src/legal-checks/annex-iv-report.ts.html +0 -556
- package/coverage/src/legal-checks/bias-metrics.ts.html +0 -1855
- package/coverage/src/legal-checks/data-governance.ts.html +0 -529
- package/coverage/src/legal-checks/human-oversight-logging.ts.html +0 -490
- package/coverage/src/legal-checks/index.html +0 -206
- package/coverage/src/legal-checks/index.ts.html +0 -250
- package/coverage/src/legal-checks/risk-classifier.ts.html +0 -940
- package/coverage/src/legal-checks/robustness-transparency.ts.html +0 -571
- package/coverage/src/metrics/crows-pairs-bias.ts.html +0 -820
- package/coverage/src/metrics/index.html +0 -146
- package/coverage/src/metrics/index.ts.html +0 -151
- package/coverage/src/metrics/stereotype-bias.ts.html +0 -886
- package/coverage/src/risk-engine.ts.html +0 -1660
- package/coverage/src/types.ts.html +0 -547
- package/dist/legal-checks/disclaimer.d.ts +0 -2
- package/dist/legal-checks/disclaimer.d.ts.map +0 -1
- package/dist/legal-checks/disclaimer.js +0 -1
|
@@ -1,1627 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for src/inference/ollama-client.ts</title>
|
|
7
|
-
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
-
<style type='text/css'>
|
|
13
|
-
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body>
|
|
20
|
-
<div class='wrapper'>
|
|
21
|
-
<div class='pad1'>
|
|
22
|
-
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/inference</a> ollama-client.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">67.97% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>225/331</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">86.66% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>52/60</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">58.82% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>10/17</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">67.97% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>225/331</span>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
<p class="quiet">
|
|
55
|
-
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
-
</p>
|
|
57
|
-
<template id="filterTemplate">
|
|
58
|
-
<div class="quiet">
|
|
59
|
-
Filter:
|
|
60
|
-
<input type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
|
-
</div>
|
|
64
|
-
<div class='status-line medium'></div>
|
|
65
|
-
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
-
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
-
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
-
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
-
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
-
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
-
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
-
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
-
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
-
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
-
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
-
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
-
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
-
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
-
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
-
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
-
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
-
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
-
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
-
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
-
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
-
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
-
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
-
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
-
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
-
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
-
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
-
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
-
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
-
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
-
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
-
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
-
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
-
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
-
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
-
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
-
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
-
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
-
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
-
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
-
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
-
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
-
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
-
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
-
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
-
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
-
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
-
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
-
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
-
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
-
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
-
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
-
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
-
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
-
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
-
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
-
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
-
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
-
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
-
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
-
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
-
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
-
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
-
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
-
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
-
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
-
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
-
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
-
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
-
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
-
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
-
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
-
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
-
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
-
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
-
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
-
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
-
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
-
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
-
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
-
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
-
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
-
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
-
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
-
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
-
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
-
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
-
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
-
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
-
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
-
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
-
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
-
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
-
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
-
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
-
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
-
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
-
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
-
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
-
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
-
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
-
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
-
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
-
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
-
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
-
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
-
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
-
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
-
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
-
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
-
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
-
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
-
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
-
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
-
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
-
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
-
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
-
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
-
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
-
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
-
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
-
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
-
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
-
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
-
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
-
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
-
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
-
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
-
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
-
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
-
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
-
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
-
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
-
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
-
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
-
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
-
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
-
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
-
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
-
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
-
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
-
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
-
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
-
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
-
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
-
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
-
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
-
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
-
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
-
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
-
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
-
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
-
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
-
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
-
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
-
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
-
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
-
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
-
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
-
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
-
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
-
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
-
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
-
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
-
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
-
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
-
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
-
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
-
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
-
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
-
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
-
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
-
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
-
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
-
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
-
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
-
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
-
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
-
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
-
<a name='L515'></a><a href='#L515'>515</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
581
|
-
<span class="cline-any cline-neutral"> </span>
|
|
582
|
-
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
585
|
-
<span class="cline-any cline-neutral"> </span>
|
|
586
|
-
<span class="cline-any cline-neutral"> </span>
|
|
587
|
-
<span class="cline-any cline-neutral"> </span>
|
|
588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
590
|
-
<span class="cline-any cline-neutral"> </span>
|
|
591
|
-
<span class="cline-any cline-neutral"> </span>
|
|
592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-neutral"> </span>
|
|
596
|
-
<span class="cline-any cline-neutral"> </span>
|
|
597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-neutral"> </span>
|
|
599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
601
|
-
<span class="cline-any cline-neutral"> </span>
|
|
602
|
-
<span class="cline-any cline-neutral"> </span>
|
|
603
|
-
<span class="cline-any cline-neutral"> </span>
|
|
604
|
-
<span class="cline-any cline-neutral"> </span>
|
|
605
|
-
<span class="cline-any cline-neutral"> </span>
|
|
606
|
-
<span class="cline-any cline-neutral"> </span>
|
|
607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
608
|
-
<span class="cline-any cline-neutral"> </span>
|
|
609
|
-
<span class="cline-any cline-neutral"> </span>
|
|
610
|
-
<span class="cline-any cline-neutral"> </span>
|
|
611
|
-
<span class="cline-any cline-neutral"> </span>
|
|
612
|
-
<span class="cline-any cline-neutral"> </span>
|
|
613
|
-
<span class="cline-any cline-neutral"> </span>
|
|
614
|
-
<span class="cline-any cline-neutral"> </span>
|
|
615
|
-
<span class="cline-any cline-neutral"> </span>
|
|
616
|
-
<span class="cline-any cline-neutral"> </span>
|
|
617
|
-
<span class="cline-any cline-neutral"> </span>
|
|
618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
623
|
-
<span class="cline-any cline-neutral"> </span>
|
|
624
|
-
<span class="cline-any cline-neutral"> </span>
|
|
625
|
-
<span class="cline-any cline-neutral"> </span>
|
|
626
|
-
<span class="cline-any cline-neutral"> </span>
|
|
627
|
-
<span class="cline-any cline-neutral"> </span>
|
|
628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
629
|
-
<span class="cline-any cline-neutral"> </span>
|
|
630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-neutral"> </span>
|
|
636
|
-
<span class="cline-any cline-yes">1x</span>
|
|
637
|
-
<span class="cline-any cline-neutral"> </span>
|
|
638
|
-
<span class="cline-any cline-neutral"> </span>
|
|
639
|
-
<span class="cline-any cline-neutral"> </span>
|
|
640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
641
|
-
<span class="cline-any cline-yes">3x</span>
|
|
642
|
-
<span class="cline-any cline-yes">3x</span>
|
|
643
|
-
<span class="cline-any cline-yes">3x</span>
|
|
644
|
-
<span class="cline-any cline-yes">3x</span>
|
|
645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
646
|
-
<span class="cline-any cline-yes">3x</span>
|
|
647
|
-
<span class="cline-any cline-yes">3x</span>
|
|
648
|
-
<span class="cline-any cline-yes">3x</span>
|
|
649
|
-
<span class="cline-any cline-neutral"> </span>
|
|
650
|
-
<span class="cline-any cline-yes">2x</span>
|
|
651
|
-
<span class="cline-any cline-yes">2x</span>
|
|
652
|
-
<span class="cline-any cline-yes">3x</span>
|
|
653
|
-
<span class="cline-any cline-yes">1x</span>
|
|
654
|
-
<span class="cline-any cline-yes">1x</span>
|
|
655
|
-
<span class="cline-any cline-yes">3x</span>
|
|
656
|
-
<span class="cline-any cline-neutral"> </span>
|
|
657
|
-
<span class="cline-any cline-neutral"> </span>
|
|
658
|
-
<span class="cline-any cline-neutral"> </span>
|
|
659
|
-
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-yes">3x</span>
|
|
661
|
-
<span class="cline-any cline-yes">3x</span>
|
|
662
|
-
<span class="cline-any cline-yes">3x</span>
|
|
663
|
-
<span class="cline-any cline-neutral"> </span>
|
|
664
|
-
<span class="cline-any cline-yes">3x</span>
|
|
665
|
-
<span class="cline-any cline-no"> </span>
|
|
666
|
-
<span class="cline-any cline-no"> </span>
|
|
667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
668
|
-
<span class="cline-any cline-yes">2x</span>
|
|
669
|
-
<span class="cline-any cline-yes">3x</span>
|
|
670
|
-
<span class="cline-any cline-yes">3x</span>
|
|
671
|
-
<span class="cline-any cline-yes">1x</span>
|
|
672
|
-
<span class="cline-any cline-yes">1x</span>
|
|
673
|
-
<span class="cline-any cline-yes">1x</span>
|
|
674
|
-
<span class="cline-any cline-yes">3x</span>
|
|
675
|
-
<span class="cline-any cline-neutral"> </span>
|
|
676
|
-
<span class="cline-any cline-neutral"> </span>
|
|
677
|
-
<span class="cline-any cline-neutral"> </span>
|
|
678
|
-
<span class="cline-any cline-neutral"> </span>
|
|
679
|
-
<span class="cline-any cline-yes">2x</span>
|
|
680
|
-
<span class="cline-any cline-yes">2x</span>
|
|
681
|
-
<span class="cline-any cline-yes">2x</span>
|
|
682
|
-
<span class="cline-any cline-yes">2x</span>
|
|
683
|
-
<span class="cline-any cline-yes">2x</span>
|
|
684
|
-
<span class="cline-any cline-yes">2x</span>
|
|
685
|
-
<span class="cline-any cline-yes">2x</span>
|
|
686
|
-
<span class="cline-any cline-yes">2x</span>
|
|
687
|
-
<span class="cline-any cline-yes">2x</span>
|
|
688
|
-
<span class="cline-any cline-yes">2x</span>
|
|
689
|
-
<span class="cline-any cline-yes">2x</span>
|
|
690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
691
|
-
<span class="cline-any cline-yes">2x</span>
|
|
692
|
-
<span class="cline-any cline-yes">1x</span>
|
|
693
|
-
<span class="cline-any cline-yes">1x</span>
|
|
694
|
-
<span class="cline-any cline-yes">1x</span>
|
|
695
|
-
<span class="cline-any cline-yes">1x</span>
|
|
696
|
-
<span class="cline-any cline-yes">1x</span>
|
|
697
|
-
<span class="cline-any cline-neutral"> </span>
|
|
698
|
-
<span class="cline-any cline-yes">1x</span>
|
|
699
|
-
<span class="cline-any cline-yes">1x</span>
|
|
700
|
-
<span class="cline-any cline-neutral"> </span>
|
|
701
|
-
<span class="cline-any cline-neutral"> </span>
|
|
702
|
-
<span class="cline-any cline-neutral"> </span>
|
|
703
|
-
<span class="cline-any cline-neutral"> </span>
|
|
704
|
-
<span class="cline-any cline-neutral"> </span>
|
|
705
|
-
<span class="cline-any cline-no"> </span>
|
|
706
|
-
<span class="cline-any cline-no"> </span>
|
|
707
|
-
<span class="cline-any cline-neutral"> </span>
|
|
708
|
-
<span class="cline-any cline-neutral"> </span>
|
|
709
|
-
<span class="cline-any cline-no"> </span>
|
|
710
|
-
<span class="cline-any cline-no"> </span>
|
|
711
|
-
<span class="cline-any cline-no"> </span>
|
|
712
|
-
<span class="cline-any cline-no"> </span>
|
|
713
|
-
<span class="cline-any cline-no"> </span>
|
|
714
|
-
<span class="cline-any cline-no"> </span>
|
|
715
|
-
<span class="cline-any cline-no"> </span>
|
|
716
|
-
<span class="cline-any cline-no"> </span>
|
|
717
|
-
<span class="cline-any cline-no"> </span>
|
|
718
|
-
<span class="cline-any cline-no"> </span>
|
|
719
|
-
<span class="cline-any cline-no"> </span>
|
|
720
|
-
<span class="cline-any cline-no"> </span>
|
|
721
|
-
<span class="cline-any cline-no"> </span>
|
|
722
|
-
<span class="cline-any cline-neutral"> </span>
|
|
723
|
-
<span class="cline-any cline-no"> </span>
|
|
724
|
-
<span class="cline-any cline-no"> </span>
|
|
725
|
-
<span class="cline-any cline-no"> </span>
|
|
726
|
-
<span class="cline-any cline-no"> </span>
|
|
727
|
-
<span class="cline-any cline-no"> </span>
|
|
728
|
-
<span class="cline-any cline-no"> </span>
|
|
729
|
-
<span class="cline-any cline-neutral"> </span>
|
|
730
|
-
<span class="cline-any cline-no"> </span>
|
|
731
|
-
<span class="cline-any cline-neutral"> </span>
|
|
732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
733
|
-
<span class="cline-any cline-neutral"> </span>
|
|
734
|
-
<span class="cline-any cline-no"> </span>
|
|
735
|
-
<span class="cline-any cline-no"> </span>
|
|
736
|
-
<span class="cline-any cline-neutral"> </span>
|
|
737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
738
|
-
<span class="cline-any cline-no"> </span>
|
|
739
|
-
<span class="cline-any cline-no"> </span>
|
|
740
|
-
<span class="cline-any cline-neutral"> </span>
|
|
741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
742
|
-
<span class="cline-any cline-no"> </span>
|
|
743
|
-
<span class="cline-any cline-no"> </span>
|
|
744
|
-
<span class="cline-any cline-no"> </span>
|
|
745
|
-
<span class="cline-any cline-no"> </span>
|
|
746
|
-
<span class="cline-any cline-neutral"> </span>
|
|
747
|
-
<span class="cline-any cline-no"> </span>
|
|
748
|
-
<span class="cline-any cline-no"> </span>
|
|
749
|
-
<span class="cline-any cline-no"> </span>
|
|
750
|
-
<span class="cline-any cline-no"> </span>
|
|
751
|
-
<span class="cline-any cline-no"> </span>
|
|
752
|
-
<span class="cline-any cline-no"> </span>
|
|
753
|
-
<span class="cline-any cline-neutral"> </span>
|
|
754
|
-
<span class="cline-any cline-neutral"> </span>
|
|
755
|
-
<span class="cline-any cline-neutral"> </span>
|
|
756
|
-
<span class="cline-any cline-neutral"> </span>
|
|
757
|
-
<span class="cline-any cline-no"> </span>
|
|
758
|
-
<span class="cline-any cline-no"> </span>
|
|
759
|
-
<span class="cline-any cline-no"> </span>
|
|
760
|
-
<span class="cline-any cline-no"> </span>
|
|
761
|
-
<span class="cline-any cline-no"> </span>
|
|
762
|
-
<span class="cline-any cline-no"> </span>
|
|
763
|
-
<span class="cline-any cline-no"> </span>
|
|
764
|
-
<span class="cline-any cline-no"> </span>
|
|
765
|
-
<span class="cline-any cline-no"> </span>
|
|
766
|
-
<span class="cline-any cline-no"> </span>
|
|
767
|
-
<span class="cline-any cline-no"> </span>
|
|
768
|
-
<span class="cline-any cline-no"> </span>
|
|
769
|
-
<span class="cline-any cline-no"> </span>
|
|
770
|
-
<span class="cline-any cline-no"> </span>
|
|
771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
772
|
-
<span class="cline-any cline-no"> </span>
|
|
773
|
-
<span class="cline-any cline-no"> </span>
|
|
774
|
-
<span class="cline-any cline-no"> </span>
|
|
775
|
-
<span class="cline-any cline-neutral"> </span>
|
|
776
|
-
<span class="cline-any cline-no"> </span>
|
|
777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
779
|
-
<span class="cline-any cline-no"> </span>
|
|
780
|
-
<span class="cline-any cline-neutral"> </span>
|
|
781
|
-
<span class="cline-any cline-no"> </span>
|
|
782
|
-
<span class="cline-any cline-no"> </span>
|
|
783
|
-
<span class="cline-any cline-no"> </span>
|
|
784
|
-
<span class="cline-any cline-neutral"> </span>
|
|
785
|
-
<span class="cline-any cline-no"> </span>
|
|
786
|
-
<span class="cline-any cline-no"> </span>
|
|
787
|
-
<span class="cline-any cline-no"> </span>
|
|
788
|
-
<span class="cline-any cline-no"> </span>
|
|
789
|
-
<span class="cline-any cline-no"> </span>
|
|
790
|
-
<span class="cline-any cline-no"> </span>
|
|
791
|
-
<span class="cline-any cline-neutral"> </span>
|
|
792
|
-
<span class="cline-any cline-neutral"> </span>
|
|
793
|
-
<span class="cline-any cline-neutral"> </span>
|
|
794
|
-
<span class="cline-any cline-neutral"> </span>
|
|
795
|
-
<span class="cline-any cline-yes">1x</span>
|
|
796
|
-
<span class="cline-any cline-yes">1x</span>
|
|
797
|
-
<span class="cline-any cline-yes">16x</span>
|
|
798
|
-
<span class="cline-any cline-yes">16x</span>
|
|
799
|
-
<span class="cline-any cline-neutral"> </span>
|
|
800
|
-
<span class="cline-any cline-yes">1x</span>
|
|
801
|
-
<span class="cline-any cline-yes">16x</span>
|
|
802
|
-
<span class="cline-any cline-yes">16x</span>
|
|
803
|
-
<span class="cline-any cline-yes">16x</span>
|
|
804
|
-
<span class="cline-any cline-yes">16x</span>
|
|
805
|
-
<span class="cline-any cline-neutral"> </span>
|
|
806
|
-
<span class="cline-any cline-neutral"> </span>
|
|
807
|
-
<span class="cline-any cline-neutral"> </span>
|
|
808
|
-
<span class="cline-any cline-neutral"> </span>
|
|
809
|
-
<span class="cline-any cline-neutral"> </span>
|
|
810
|
-
<span class="cline-any cline-yes">1x</span>
|
|
811
|
-
<span class="cline-any cline-no"> </span>
|
|
812
|
-
<span class="cline-any cline-neutral"> </span>
|
|
813
|
-
<span class="cline-any cline-no"> </span>
|
|
814
|
-
<span class="cline-any cline-no"> </span>
|
|
815
|
-
<span class="cline-any cline-no"> </span>
|
|
816
|
-
<span class="cline-any cline-no"> </span>
|
|
817
|
-
<span class="cline-any cline-no"> </span>
|
|
818
|
-
<span class="cline-any cline-no"> </span>
|
|
819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
820
|
-
<span class="cline-any cline-no"> </span>
|
|
821
|
-
<span class="cline-any cline-no"> </span>
|
|
822
|
-
<span class="cline-any cline-no"> </span>
|
|
823
|
-
<span class="cline-any cline-no"> </span>
|
|
824
|
-
<span class="cline-any cline-no"> </span>
|
|
825
|
-
<span class="cline-any cline-no"> </span>
|
|
826
|
-
<span class="cline-any cline-neutral"> </span>
|
|
827
|
-
<span class="cline-any cline-yes">1x</span>
|
|
828
|
-
<span class="cline-any cline-no"> </span>
|
|
829
|
-
<span class="cline-any cline-no"> </span>
|
|
830
|
-
<span class="cline-any cline-neutral"> </span>
|
|
831
|
-
<span class="cline-any cline-yes">1x</span>
|
|
832
|
-
<span class="cline-any cline-no"> </span>
|
|
833
|
-
<span class="cline-any cline-no"> </span>
|
|
834
|
-
<span class="cline-any cline-no"> </span>
|
|
835
|
-
<span class="cline-any cline-no"> </span>
|
|
836
|
-
<span class="cline-any cline-no"> </span>
|
|
837
|
-
<span class="cline-any cline-no"> </span>
|
|
838
|
-
<span class="cline-any cline-no"> </span>
|
|
839
|
-
<span class="cline-any cline-neutral"> </span>
|
|
840
|
-
<span class="cline-any cline-yes">1x</span>
|
|
841
|
-
<span class="cline-any cline-neutral"> </span>
|
|
842
|
-
<span class="cline-any cline-no"> </span>
|
|
843
|
-
<span class="cline-any cline-no"> </span>
|
|
844
|
-
<span class="cline-any cline-no"> </span>
|
|
845
|
-
<span class="cline-any cline-neutral"> </span>
|
|
846
|
-
<span class="cline-any cline-yes">1x</span>
|
|
847
|
-
<span class="cline-any cline-no"> </span>
|
|
848
|
-
<span class="cline-any cline-no"> </span>
|
|
849
|
-
<span class="cline-any cline-neutral"> </span>
|
|
850
|
-
<span class="cline-any cline-neutral"> </span>
|
|
851
|
-
<span class="cline-any cline-neutral"> </span>
|
|
852
|
-
<span class="cline-any cline-neutral"> </span>
|
|
853
|
-
<span class="cline-any cline-neutral"> </span>
|
|
854
|
-
<span class="cline-any cline-yes">1x</span>
|
|
855
|
-
<span class="cline-any cline-yes">10x</span>
|
|
856
|
-
<span class="cline-any cline-neutral"> </span>
|
|
857
|
-
<span class="cline-any cline-yes">10x</span>
|
|
858
|
-
<span class="cline-any cline-yes">10x</span>
|
|
859
|
-
<span class="cline-any cline-yes">10x</span>
|
|
860
|
-
<span class="cline-any cline-yes">10x</span>
|
|
861
|
-
<span class="cline-any cline-yes">10x</span>
|
|
862
|
-
<span class="cline-any cline-yes">10x</span>
|
|
863
|
-
<span class="cline-any cline-yes">10x</span>
|
|
864
|
-
<span class="cline-any cline-neutral"> </span>
|
|
865
|
-
<span class="cline-any cline-no"> </span>
|
|
866
|
-
<span class="cline-any cline-neutral"> </span>
|
|
867
|
-
<span class="cline-any cline-yes">10x</span>
|
|
868
|
-
<span class="cline-any cline-yes">10x</span>
|
|
869
|
-
<span class="cline-any cline-yes">10x</span>
|
|
870
|
-
<span class="cline-any cline-yes">10x</span>
|
|
871
|
-
<span class="cline-any cline-yes">10x</span>
|
|
872
|
-
<span class="cline-any cline-yes">10x</span>
|
|
873
|
-
<span class="cline-any cline-yes">10x</span>
|
|
874
|
-
<span class="cline-any cline-yes">10x</span>
|
|
875
|
-
<span class="cline-any cline-yes">10x</span>
|
|
876
|
-
<span class="cline-any cline-yes">10x</span>
|
|
877
|
-
<span class="cline-any cline-yes">10x</span>
|
|
878
|
-
<span class="cline-any cline-yes">10x</span>
|
|
879
|
-
<span class="cline-any cline-yes">10x</span>
|
|
880
|
-
<span class="cline-any cline-yes">10x</span>
|
|
881
|
-
<span class="cline-any cline-neutral"> </span>
|
|
882
|
-
<span class="cline-any cline-yes">10x</span>
|
|
883
|
-
<span class="cline-any cline-no"> </span>
|
|
884
|
-
<span class="cline-any cline-no"> </span>
|
|
885
|
-
<span class="cline-any cline-no"> </span>
|
|
886
|
-
<span class="cline-any cline-no"> </span>
|
|
887
|
-
<span class="cline-any cline-no"> </span>
|
|
888
|
-
<span class="cline-any cline-neutral"> </span>
|
|
889
|
-
<span class="cline-any cline-yes">8x</span>
|
|
890
|
-
<span class="cline-any cline-neutral"> </span>
|
|
891
|
-
<span class="cline-any cline-neutral"> </span>
|
|
892
|
-
<span class="cline-any cline-yes">8x</span>
|
|
893
|
-
<span class="cline-any cline-yes">8x</span>
|
|
894
|
-
<span class="cline-any cline-yes">6x</span>
|
|
895
|
-
<span class="cline-any cline-yes">6x</span>
|
|
896
|
-
<span class="cline-any cline-neutral"> </span>
|
|
897
|
-
<span class="cline-any cline-yes">10x</span>
|
|
898
|
-
<span class="cline-any cline-yes">10x</span>
|
|
899
|
-
<span class="cline-any cline-yes">10x</span>
|
|
900
|
-
<span class="cline-any cline-yes">10x</span>
|
|
901
|
-
<span class="cline-any cline-neutral"> </span>
|
|
902
|
-
<span class="cline-any cline-yes">10x</span>
|
|
903
|
-
<span class="cline-any cline-yes">2x</span>
|
|
904
|
-
<span class="cline-any cline-yes">2x</span>
|
|
905
|
-
<span class="cline-any cline-neutral"> </span>
|
|
906
|
-
<span class="cline-any cline-yes">8x</span>
|
|
907
|
-
<span class="cline-any cline-yes">10x</span>
|
|
908
|
-
<span class="cline-any cline-yes">2x</span>
|
|
909
|
-
<span class="cline-any cline-yes">2x</span>
|
|
910
|
-
<span class="cline-any cline-yes">2x</span>
|
|
911
|
-
<span class="cline-any cline-yes">10x</span>
|
|
912
|
-
<span class="cline-any cline-neutral"> </span>
|
|
913
|
-
<span class="cline-any cline-neutral"> </span>
|
|
914
|
-
<span class="cline-any cline-neutral"> </span>
|
|
915
|
-
<span class="cline-any cline-neutral"> </span>
|
|
916
|
-
<span class="cline-any cline-yes">1x</span>
|
|
917
|
-
<span class="cline-any cline-yes">16x</span>
|
|
918
|
-
<span class="cline-any cline-yes">16x</span>
|
|
919
|
-
<span class="cline-any cline-yes">16x</span>
|
|
920
|
-
<span class="cline-any cline-neutral"> </span>
|
|
921
|
-
<span class="cline-any cline-yes">16x</span>
|
|
922
|
-
<span class="cline-any cline-yes">8x</span>
|
|
923
|
-
<span class="cline-any cline-neutral"> </span>
|
|
924
|
-
<span class="cline-any cline-neutral"> </span>
|
|
925
|
-
<span class="cline-any cline-yes">8x</span>
|
|
926
|
-
<span class="cline-any cline-yes">8x</span>
|
|
927
|
-
<span class="cline-any cline-neutral"> </span>
|
|
928
|
-
<span class="cline-any cline-yes">8x</span>
|
|
929
|
-
<span class="cline-any cline-yes">6x</span>
|
|
930
|
-
<span class="cline-any cline-yes">6x</span>
|
|
931
|
-
<span class="cline-any cline-yes">8x</span>
|
|
932
|
-
<span class="cline-any cline-yes">16x</span>
|
|
933
|
-
<span class="cline-any cline-no"> </span>
|
|
934
|
-
<span class="cline-any cline-no"> </span>
|
|
935
|
-
<span class="cline-any cline-neutral"> </span>
|
|
936
|
-
<span class="cline-any cline-yes">10x</span>
|
|
937
|
-
<span class="cline-any cline-yes">16x</span>
|
|
938
|
-
<span class="cline-any cline-neutral"> </span>
|
|
939
|
-
<span class="cline-any cline-neutral"> </span>
|
|
940
|
-
<span class="cline-any cline-neutral"> </span>
|
|
941
|
-
<span class="cline-any cline-neutral"> </span>
|
|
942
|
-
<span class="cline-any cline-yes">1x</span>
|
|
943
|
-
<span class="cline-any cline-yes">10x</span>
|
|
944
|
-
<span class="cline-any cline-yes">10x</span>
|
|
945
|
-
<span class="cline-any cline-yes">10x</span>
|
|
946
|
-
<span class="cline-any cline-yes">10x</span>
|
|
947
|
-
<span class="cline-any cline-yes">10x</span>
|
|
948
|
-
<span class="cline-any cline-yes">10x</span>
|
|
949
|
-
<span class="cline-any cline-yes">10x</span>
|
|
950
|
-
<span class="cline-any cline-neutral"> </span>
|
|
951
|
-
<span class="cline-any cline-yes">10x</span>
|
|
952
|
-
<span class="cline-any cline-yes">10x</span>
|
|
953
|
-
<span class="cline-any cline-yes">10x</span>
|
|
954
|
-
<span class="cline-any cline-no"> </span>
|
|
955
|
-
<span class="cline-any cline-no"> </span>
|
|
956
|
-
<span class="cline-any cline-yes">10x</span>
|
|
957
|
-
<span class="cline-any cline-neutral"> </span>
|
|
958
|
-
<span class="cline-any cline-neutral"> </span>
|
|
959
|
-
<span class="cline-any cline-neutral"> </span>
|
|
960
|
-
<span class="cline-any cline-neutral"> </span>
|
|
961
|
-
<span class="cline-any cline-neutral"> </span>
|
|
962
|
-
<span class="cline-any cline-yes">1x</span>
|
|
963
|
-
<span class="cline-any cline-neutral"> </span>
|
|
964
|
-
<span class="cline-any cline-yes">48x</span>
|
|
965
|
-
<span class="cline-any cline-yes">48x</span>
|
|
966
|
-
<span class="cline-any cline-yes">32x</span>
|
|
967
|
-
<span class="cline-any cline-yes">32x</span>
|
|
968
|
-
<span class="cline-any cline-neutral"> </span>
|
|
969
|
-
<span class="cline-any cline-neutral"> </span>
|
|
970
|
-
<span class="cline-any cline-yes">16x</span>
|
|
971
|
-
<span class="cline-any cline-yes">48x</span>
|
|
972
|
-
<span class="cline-any cline-yes">6x</span>
|
|
973
|
-
<span class="cline-any cline-yes">6x</span>
|
|
974
|
-
<span class="cline-any cline-yes">6x</span>
|
|
975
|
-
<span class="cline-any cline-neutral"> </span>
|
|
976
|
-
<span class="cline-any cline-neutral"> </span>
|
|
977
|
-
<span class="cline-any cline-yes">10x</span>
|
|
978
|
-
<span class="cline-any cline-yes">10x</span>
|
|
979
|
-
<span class="cline-any cline-neutral"> </span>
|
|
980
|
-
<span class="cline-any cline-yes">10x</span>
|
|
981
|
-
<span class="cline-any cline-yes">48x</span>
|
|
982
|
-
<span class="cline-any cline-neutral"> </span>
|
|
983
|
-
<span class="cline-any cline-neutral"> </span>
|
|
984
|
-
<span class="cline-any cline-neutral"> </span>
|
|
985
|
-
<span class="cline-any cline-neutral"> </span>
|
|
986
|
-
<span class="cline-any cline-neutral"> </span>
|
|
987
|
-
<span class="cline-any cline-yes">1x</span>
|
|
988
|
-
<span class="cline-any cline-yes">37x</span>
|
|
989
|
-
<span class="cline-any cline-yes">37x</span>
|
|
990
|
-
<span class="cline-any cline-yes">37x</span>
|
|
991
|
-
<span class="cline-any cline-neutral"> </span>
|
|
992
|
-
<span class="cline-any cline-yes">37x</span>
|
|
993
|
-
<span class="cline-any cline-neutral"> </span>
|
|
994
|
-
<span class="cline-any cline-yes">37x</span>
|
|
995
|
-
<span class="cline-any cline-neutral"> </span>
|
|
996
|
-
<span class="cline-any cline-yes">28x</span>
|
|
997
|
-
<span class="cline-any cline-yes">28x</span>
|
|
998
|
-
<span class="cline-any cline-yes">28x</span>
|
|
999
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1000
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1001
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1002
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1003
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1004
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1005
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1006
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1007
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1008
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1009
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1010
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1011
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1013
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1014
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1016
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1018
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1019
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1020
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1021
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1022
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1023
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1024
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1025
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1026
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1027
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1028
|
-
<span class="cline-any cline-no"> </span>
|
|
1029
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1030
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1031
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1032
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1033
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1034
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1035
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1036
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1037
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1038
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1039
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1040
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1041
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1042
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1043
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1044
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1045
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1047
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1048
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1049
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1050
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1051
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1052
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1053
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1054
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1055
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1056
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1057
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1058
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1059
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1060
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1061
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1062
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1063
|
-
<span class="cline-any cline-no"> </span>
|
|
1064
|
-
<span class="cline-any cline-no"> </span>
|
|
1065
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1066
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1067
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1070
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1071
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1072
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1073
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1074
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1075
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1076
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1077
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1078
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1079
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1080
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1081
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1082
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1083
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1085
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1086
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1087
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1088
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1089
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1090
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1091
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1092
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1093
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1094
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
1095
|
-
* Ollama Client for local LLM inference
|
|
1096
|
-
* Connects to Ollama running on localhost:11434
|
|
1097
|
-
*/
|
|
1098
|
-
|
|
1099
|
-
import type { BiasCalculationMethod, ModelCapabilityCache } from "../types";
|
|
1100
|
-
|
|
1101
|
-
export interface OllamaModel {
|
|
1102
|
-
name: string;
|
|
1103
|
-
size: number;
|
|
1104
|
-
digest: string;
|
|
1105
|
-
modified_at: string;
|
|
1106
|
-
}
|
|
1107
|
-
|
|
1108
|
-
export interface OllamaGenerateOptions {
|
|
1109
|
-
model: string;
|
|
1110
|
-
prompt: string;
|
|
1111
|
-
stream?: boolean;
|
|
1112
|
-
logprobs?: boolean | number;
|
|
1113
|
-
options?: {
|
|
1114
|
-
temperature?: number;
|
|
1115
|
-
top_p?: number;
|
|
1116
|
-
num_predict?: number;
|
|
1117
|
-
};
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
export interface OllamaGenerateResponse {
|
|
1121
|
-
model: string;
|
|
1122
|
-
response: string;
|
|
1123
|
-
done: boolean;
|
|
1124
|
-
context?: number[];
|
|
1125
|
-
total_duration?: number;
|
|
1126
|
-
eval_count?: number;
|
|
1127
|
-
logprobs?: Array<{
|
|
1128
|
-
token: string;
|
|
1129
|
-
logprob: number;
|
|
1130
|
-
}>;
|
|
1131
|
-
}
|
|
1132
|
-
|
|
1133
|
-
export interface OllamaLogProbResponse {
|
|
1134
|
-
model: string;
|
|
1135
|
-
prompt: string;
|
|
1136
|
-
logprob: number;
|
|
1137
|
-
}
|
|
1138
|
-
|
|
1139
|
-
export interface OllamaLogProbsOptions {
|
|
1140
|
-
logprobs?: boolean | number;
|
|
1141
|
-
}
|
|
1142
|
-
|
|
1143
|
-
export interface OllamaLogProbsResponse extends OllamaGenerateResponse {
|
|
1144
|
-
logprobs?: Array<{
|
|
1145
|
-
token: string;
|
|
1146
|
-
logprob: number;
|
|
1147
|
-
}>;
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
const OLLAMA_BASE_URL = "http://localhost:11434";
|
|
1151
|
-
|
|
1152
|
-
/**
|
|
1153
|
-
* Check if Ollama is running and accessible
|
|
1154
|
-
*/
|
|
1155
|
-
export async function detectOllama(): Promise<boolean> {
|
|
1156
|
-
try {
|
|
1157
|
-
const controller = new AbortController();
|
|
1158
|
-
const timeoutId = setTimeout(() => controller.abort(), 2000);
|
|
1159
|
-
|
|
1160
|
-
const response = await fetch(`${OLLAMA_BASE_URL}/api/tags`, {
|
|
1161
|
-
signal: controller.signal,
|
|
1162
|
-
});
|
|
1163
|
-
|
|
1164
|
-
clearTimeout(timeoutId);
|
|
1165
|
-
return response.ok;
|
|
1166
|
-
} catch {
|
|
1167
|
-
return false;
|
|
1168
|
-
}
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
/**
|
|
1172
|
-
* Get list of available models from Ollama
|
|
1173
|
-
*/
|
|
1174
|
-
export async function listOllamaModels(): Promise<OllamaModel[]> {
|
|
1175
|
-
try {
|
|
1176
|
-
const response = await fetch(`${OLLAMA_BASE_URL}/api/tags`);
|
|
1177
|
-
|
|
1178
|
-
if (!response.ok) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1179
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`Failed to list models: ${response.statusText}`);</span>
|
|
1180
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1181
|
-
|
|
1182
|
-
const data = await response.json();
|
|
1183
|
-
return data.models || [];
|
|
1184
|
-
} catch (error) {
|
|
1185
|
-
console.error("Failed to list Ollama models:", error);
|
|
1186
|
-
return [];
|
|
1187
|
-
}
|
|
1188
|
-
}
|
|
1189
|
-
|
|
1190
|
-
/**
|
|
1191
|
-
* Generate text with Ollama
|
|
1192
|
-
*/
|
|
1193
|
-
export async function ollamaGenerate(
|
|
1194
|
-
options: OllamaGenerateOptions
|
|
1195
|
-
): Promise<OllamaGenerateResponse> {
|
|
1196
|
-
const response = await fetch(`${OLLAMA_BASE_URL}/api/generate`, {
|
|
1197
|
-
method: "POST",
|
|
1198
|
-
headers: { "Content-Type": "application/json" },
|
|
1199
|
-
body: JSON.stringify({
|
|
1200
|
-
...options,
|
|
1201
|
-
stream: false,
|
|
1202
|
-
}),
|
|
1203
|
-
});
|
|
1204
|
-
|
|
1205
|
-
if (!response.ok) {
|
|
1206
|
-
const errorText = await response.text();
|
|
1207
|
-
throw new Error(
|
|
1208
|
-
`Ollama generate failed (${response.status}): ${<span class="branch-0 cbranch-no" title="branch not covered" >errorText || response.statusText}</span>`
|
|
1209
|
-
);
|
|
1210
|
-
}
|
|
1211
|
-
|
|
1212
|
-
return response.json();
|
|
1213
|
-
}
|
|
1214
|
-
|
|
1215
|
-
/**
|
|
1216
|
-
* Get log probability for a prompt (for bias scoring)
|
|
1217
|
-
* Uses the /api/generate endpoint with num_predict: 0 to get prompt logprobs
|
|
1218
|
-
*/
|
|
1219
|
-
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >export async function getLogProb(model: string, prompt: string): Promise<number> {</span></span>
|
|
1220
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1221
|
-
// Use generate with num_predict: 0 to ONLY evaluate the prompt
|
|
1222
|
-
// This forces the model to process the input tokens, giving us prompt_eval metrics
|
|
1223
|
-
<span class="cstat-no" title="statement not covered" > const response = await fetch(`${OLLAMA_BASE_URL}/api/generate`, {</span>
|
|
1224
|
-
<span class="cstat-no" title="statement not covered" > method: "POST",</span>
|
|
1225
|
-
<span class="cstat-no" title="statement not covered" > headers: { "Content-Type": "application/json" },</span>
|
|
1226
|
-
<span class="cstat-no" title="statement not covered" > body: JSON.stringify({</span>
|
|
1227
|
-
<span class="cstat-no" title="statement not covered" > model,</span>
|
|
1228
|
-
<span class="cstat-no" title="statement not covered" > prompt,</span>
|
|
1229
|
-
<span class="cstat-no" title="statement not covered" > stream: false,</span>
|
|
1230
|
-
<span class="cstat-no" title="statement not covered" > options: {</span>
|
|
1231
|
-
<span class="cstat-no" title="statement not covered" > num_predict: 0, // Don't generate, just evaluate prompt</span>
|
|
1232
|
-
<span class="cstat-no" title="statement not covered" > temperature: 0,</span>
|
|
1233
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
1234
|
-
<span class="cstat-no" title="statement not covered" > }),</span>
|
|
1235
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1236
|
-
|
|
1237
|
-
<span class="cstat-no" title="statement not covered" > if (!response.ok) {</span>
|
|
1238
|
-
<span class="cstat-no" title="statement not covered" > const errorText = await response.text();</span>
|
|
1239
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1240
|
-
<span class="cstat-no" title="statement not covered" > `Failed to get logprob for model '${model}': ${errorText || response.statusText}`</span>
|
|
1241
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1242
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1243
|
-
|
|
1244
|
-
<span class="cstat-no" title="statement not covered" > const data = await response.json();</span>
|
|
1245
|
-
|
|
1246
|
-
// Optimization: Use prompt_eval metrics (processing time of the input)
|
|
1247
|
-
// This is a better proxy for "perplexity" or "likelihood" of the sentence than generation speed
|
|
1248
|
-
<span class="cstat-no" title="statement not covered" > if (data.prompt_eval_duration && data.prompt_eval_count) {</span>
|
|
1249
|
-
<span class="cstat-no" title="statement not covered" > const timePerToken = data.prompt_eval_duration / data.prompt_eval_count / 1e9; // ns to s</span>
|
|
1250
|
-
// Normalize: faster processing = higher probability (lower surprise)
|
|
1251
|
-
// We return negative log of time to mimic log-prob scale (higher is better)
|
|
1252
|
-
<span class="cstat-no" title="statement not covered" > return -Math.log(timePerToken + 0.00001); // Smaller epsilon for precision</span>
|
|
1253
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1254
|
-
|
|
1255
|
-
// Fallback: use eval metrics if prompt metrics missing (rare)
|
|
1256
|
-
<span class="cstat-no" title="statement not covered" > if (data.eval_duration && data.eval_count) {</span>
|
|
1257
|
-
<span class="cstat-no" title="statement not covered" > const timePerToken = data.eval_duration / data.eval_count / 1e9;</span>
|
|
1258
|
-
<span class="cstat-no" title="statement not covered" > return -Math.log(timePerToken + 0.001);</span>
|
|
1259
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1260
|
-
|
|
1261
|
-
<span class="cstat-no" title="statement not covered" > return 0;</span>
|
|
1262
|
-
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
1263
|
-
<span class="cstat-no" title="statement not covered" > console.error(`Error calculating log probability for model ${model}:`, error);</span>
|
|
1264
|
-
<span class="cstat-no" title="statement not covered" > throw error; // Re-throw to let caller handle it</span>
|
|
1265
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1266
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1267
|
-
|
|
1268
|
-
/**
|
|
1269
|
-
* Calculate perplexity for a text (alternative bias metric)
|
|
1270
|
-
*/
|
|
1271
|
-
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >export async function getPerplexity(model: string, text: string): Promise<number> {</span></span>
|
|
1272
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1273
|
-
<span class="cstat-no" title="statement not covered" > const response = await fetch(`${OLLAMA_BASE_URL}/api/generate`, {</span>
|
|
1274
|
-
<span class="cstat-no" title="statement not covered" > method: "POST",</span>
|
|
1275
|
-
<span class="cstat-no" title="statement not covered" > headers: { "Content-Type": "application/json" },</span>
|
|
1276
|
-
<span class="cstat-no" title="statement not covered" > body: JSON.stringify({</span>
|
|
1277
|
-
<span class="cstat-no" title="statement not covered" > model,</span>
|
|
1278
|
-
<span class="cstat-no" title="statement not covered" > prompt: text,</span>
|
|
1279
|
-
<span class="cstat-no" title="statement not covered" > stream: false,</span>
|
|
1280
|
-
<span class="cstat-no" title="statement not covered" > options: {</span>
|
|
1281
|
-
<span class="cstat-no" title="statement not covered" > num_predict: 0, // Don't generate, just evaluate prompt</span>
|
|
1282
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
1283
|
-
<span class="cstat-no" title="statement not covered" > }),</span>
|
|
1284
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1285
|
-
|
|
1286
|
-
<span class="cstat-no" title="statement not covered" > if (!response.ok) {</span>
|
|
1287
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`Failed to get perplexity: ${response.statusText}`);</span>
|
|
1288
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1289
|
-
|
|
1290
|
-
<span class="cstat-no" title="statement not covered" > const data = await response.json();</span>
|
|
1291
|
-
|
|
1292
|
-
// Perplexity approximation from eval metrics
|
|
1293
|
-
<span class="cstat-no" title="statement not covered" > if (data.prompt_eval_duration && data.prompt_eval_count) {</span>
|
|
1294
|
-
// Normalize by token count for fair comparison across different lengths
|
|
1295
|
-
<span class="cstat-no" title="statement not covered" > const avgTimePerToken = data.prompt_eval_duration / data.prompt_eval_count / 1e9;</span>
|
|
1296
|
-
<span class="cstat-no" title="statement not covered" > return avgTimePerToken * 1000; // Scale for readability</span>
|
|
1297
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1298
|
-
|
|
1299
|
-
<span class="cstat-no" title="statement not covered" > return 1;</span>
|
|
1300
|
-
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
1301
|
-
<span class="cstat-no" title="statement not covered" > console.error("Failed to get perplexity:", error);</span>
|
|
1302
|
-
<span class="cstat-no" title="statement not covered" > return 1;</span>
|
|
1303
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1304
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1305
|
-
|
|
1306
|
-
/**
|
|
1307
|
-
* Ollama client class for stateful operations
|
|
1308
|
-
*/
|
|
1309
|
-
export class OllamaClient {
|
|
1310
|
-
private baseUrl: string;
|
|
1311
|
-
public readonly model: string;
|
|
1312
|
-
private capabilityCache: Map<string, ModelCapabilityCache>;
|
|
1313
|
-
|
|
1314
|
-
constructor(model: string, baseUrl = OLLAMA_BASE_URL) {
|
|
1315
|
-
this.baseUrl = baseUrl;
|
|
1316
|
-
this.model = model;
|
|
1317
|
-
this.capabilityCache = new Map();
|
|
1318
|
-
}
|
|
1319
|
-
|
|
1320
|
-
/**
|
|
1321
|
-
* Ensures the model is available in Ollama before proceeding
|
|
1322
|
-
* Throws an error if the model is not found
|
|
1323
|
-
*/
|
|
1324
|
-
<span class="fstat-no" title="function not covered" > async ensureModelLoaded(): Promise<void> {</span>
|
|
1325
|
-
<span class="cstat-no" title="statement not covered" > const models = await listOllamaModels();</span>
|
|
1326
|
-
// Check if exact match or if the model name is contained (e.g. "llama3.2" in "llama3.2:latest")
|
|
1327
|
-
<span class="cstat-no" title="statement not covered" > const modelExists = models.some(</span>
|
|
1328
|
-
<span class="cstat-no" title="statement not covered" > (m) =></span>
|
|
1329
|
-
<span class="cstat-no" title="statement not covered" > m.name === this.model ||</span>
|
|
1330
|
-
<span class="cstat-no" title="statement not covered" > m.name.startsWith(`${this.model}:`) ||</span>
|
|
1331
|
-
<span class="cstat-no" title="statement not covered" > this.model.startsWith(`${m.name}:`)</span>
|
|
1332
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1333
|
-
|
|
1334
|
-
<span class="cstat-no" title="statement not covered" > if (!modelExists) {</span>
|
|
1335
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1336
|
-
<span class="cstat-no" title="statement not covered" > `Model '${this.model}' not found in Ollama. Please run 'ollama pull ${this.model}' first.`</span>
|
|
1337
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1338
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1339
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1340
|
-
|
|
1341
|
-
<span class="fstat-no" title="function not covered" > async isAvailable(): Promise<boolean> {</span>
|
|
1342
|
-
<span class="cstat-no" title="statement not covered" > return detectOllama();</span>
|
|
1343
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1344
|
-
|
|
1345
|
-
<span class="fstat-no" title="function not covered" > async generate(prompt: string): Promise<string> {</span>
|
|
1346
|
-
<span class="cstat-no" title="statement not covered" > await this.ensureModelLoaded();</span>
|
|
1347
|
-
<span class="cstat-no" title="statement not covered" > const response = await ollamaGenerate({</span>
|
|
1348
|
-
<span class="cstat-no" title="statement not covered" > model: this.model,</span>
|
|
1349
|
-
<span class="cstat-no" title="statement not covered" > prompt,</span>
|
|
1350
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1351
|
-
<span class="cstat-no" title="statement not covered" > return response.response;</span>
|
|
1352
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1353
|
-
|
|
1354
|
-
<span class="fstat-no" title="function not covered" > async getLogProb(prompt: string): Promise<number> {</span>
|
|
1355
|
-
// Use the enhanced getLogProbWithFallback method that supports both exact and fallback methods
|
|
1356
|
-
<span class="cstat-no" title="statement not covered" > const result = await this.getLogProbWithFallback(prompt);</span>
|
|
1357
|
-
<span class="cstat-no" title="statement not covered" > return result.logprob;</span>
|
|
1358
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1359
|
-
|
|
1360
|
-
<span class="fstat-no" title="function not covered" > async getPerplexity(text: string): Promise<number> {</span>
|
|
1361
|
-
<span class="cstat-no" title="statement not covered" > return getPerplexity(this.model, text);</span>
|
|
1362
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1363
|
-
|
|
1364
|
-
/**
|
|
1365
|
-
* Test if the current model supports log-probabilities
|
|
1366
|
-
* Sends a test request with "Der" prompt to detect capability
|
|
1367
|
-
*/
|
|
1368
|
-
private async testLogProbCapability(): Promise<boolean> {
|
|
1369
|
-
try {
|
|
1370
|
-
// First check Ollama version
|
|
1371
|
-
try {
|
|
1372
|
-
const versionResponse = await fetch(`${this.baseUrl}/api/version`);
|
|
1373
|
-
if (versionResponse.ok) {
|
|
1374
|
-
const versionData = await versionResponse.json();
|
|
1375
|
-
console.log(`🔍 Ollama version: ${versionData.version || "unknown"}`);
|
|
1376
|
-
}
|
|
1377
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > } catch {</span>
|
|
1378
|
-
// Version check is optional
|
|
1379
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1380
|
-
|
|
1381
|
-
const response = await fetch(`${this.baseUrl}/api/generate`, {
|
|
1382
|
-
method: "POST",
|
|
1383
|
-
headers: { "Content-Type": "application/json" },
|
|
1384
|
-
body: JSON.stringify({
|
|
1385
|
-
model: this.model,
|
|
1386
|
-
prompt: "Der",
|
|
1387
|
-
stream: false,
|
|
1388
|
-
logprobs: true,
|
|
1389
|
-
options: {
|
|
1390
|
-
num_predict: 1,
|
|
1391
|
-
temperature: 0,
|
|
1392
|
-
},
|
|
1393
|
-
}),
|
|
1394
|
-
});
|
|
1395
|
-
|
|
1396
|
-
if (!response.ok) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1397
|
-
<span class="cstat-no" title="statement not covered" > console.warn(</span>
|
|
1398
|
-
<span class="cstat-no" title="statement not covered" > `🔍 Capability test request failed for ${this.model}: ${response.status} ${response.statusText}`</span>
|
|
1399
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1400
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1401
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1402
|
-
|
|
1403
|
-
const data = await response.json();
|
|
1404
|
-
|
|
1405
|
-
// Check if logprobs are present and valid
|
|
1406
|
-
const hasLogProbs = !!(
|
|
1407
|
-
data.logprobs &&
|
|
1408
|
-
Array.isArray(data.logprobs) &&
|
|
1409
|
-
data.logprobs.length > 0
|
|
1410
|
-
);
|
|
1411
|
-
console.log(
|
|
1412
|
-
`🔍 Capability test for ${this.model}: ${hasLogProbs ? "✅ supports" : "❌ no support"} log-probabilities`,
|
|
1413
|
-
data.logprobs ? `(${data.logprobs.length} tokens)` : "(no logprobs field)"
|
|
1414
|
-
);
|
|
1415
|
-
|
|
1416
|
-
if (!hasLogProbs) {
|
|
1417
|
-
console.log("🔍 Full response for debugging:", JSON.stringify(data, null, 2));
|
|
1418
|
-
}
|
|
1419
|
-
|
|
1420
|
-
return hasLogProbs;
|
|
1421
|
-
} catch (error) {
|
|
1422
|
-
console.warn(`Log-probability capability test failed for model ${this.model}:`, error);
|
|
1423
|
-
return false;
|
|
1424
|
-
}
|
|
1425
|
-
}
|
|
1426
|
-
|
|
1427
|
-
/**
|
|
1428
|
-
* Get cached capability result from localStorage
|
|
1429
|
-
*/
|
|
1430
|
-
private getCachedCapability(): ModelCapabilityCache | null {
|
|
1431
|
-
try {
|
|
1432
|
-
const cacheKey = `ollama_supports_logprobs_${this.model}`;
|
|
1433
|
-
const cached = localStorage.getItem(cacheKey);
|
|
1434
|
-
|
|
1435
|
-
if (cached) {
|
|
1436
|
-
const capability: ModelCapabilityCache = JSON.parse(cached);
|
|
1437
|
-
|
|
1438
|
-
// Check if cache is still valid (24 hours)
|
|
1439
|
-
const cacheAge = Date.now() - new Date(capability.testedAt).getTime();
|
|
1440
|
-
const maxAge = 24 * 60 * 60 * 1000; // 24 hours in milliseconds
|
|
1441
|
-
|
|
1442
|
-
if (cacheAge < maxAge) {
|
|
1443
|
-
return capability;
|
|
1444
|
-
}
|
|
1445
|
-
}
|
|
1446
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
|
|
1447
|
-
<span class="cstat-no" title="statement not covered" > console.warn("Failed to read capability cache:", error);</span>
|
|
1448
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1449
|
-
|
|
1450
|
-
return null;
|
|
1451
|
-
}
|
|
1452
|
-
|
|
1453
|
-
/**
|
|
1454
|
-
* Cache capability result in localStorage
|
|
1455
|
-
*/
|
|
1456
|
-
private setCachedCapability(supports: boolean): void {
|
|
1457
|
-
try {
|
|
1458
|
-
const cacheKey = `ollama_supports_logprobs_${this.model}`;
|
|
1459
|
-
const capability: ModelCapabilityCache = {
|
|
1460
|
-
model: this.model,
|
|
1461
|
-
supportsLogProbs: supports,
|
|
1462
|
-
testedAt: new Date().toISOString(),
|
|
1463
|
-
};
|
|
1464
|
-
|
|
1465
|
-
localStorage.setItem(cacheKey, JSON.stringify(capability));
|
|
1466
|
-
this.capabilityCache.set(this.model, capability);
|
|
1467
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
|
|
1468
|
-
<span class="cstat-no" title="statement not covered" > console.warn("Failed to cache capability result:", error);</span>
|
|
1469
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1470
|
-
}
|
|
1471
|
-
|
|
1472
|
-
/**
|
|
1473
|
-
* Detect if the current model supports log-probabilities
|
|
1474
|
-
* Checks cache first, then runs test if needed
|
|
1475
|
-
*/
|
|
1476
|
-
async detectLogProbSupport(): Promise<boolean> {
|
|
1477
|
-
// Check in-memory cache first
|
|
1478
|
-
const memoryCache = this.capabilityCache.get(this.model);
|
|
1479
|
-
if (memoryCache) {
|
|
1480
|
-
return memoryCache.supportsLogProbs;
|
|
1481
|
-
}
|
|
1482
|
-
|
|
1483
|
-
// Check localStorage cache
|
|
1484
|
-
const cached = this.getCachedCapability();
|
|
1485
|
-
if (cached) {
|
|
1486
|
-
this.capabilityCache.set(this.model, cached);
|
|
1487
|
-
return cached.supportsLogProbs;
|
|
1488
|
-
}
|
|
1489
|
-
|
|
1490
|
-
// Run capability test
|
|
1491
|
-
const supports = await this.testLogProbCapability();
|
|
1492
|
-
this.setCachedCapability(supports);
|
|
1493
|
-
|
|
1494
|
-
return supports;
|
|
1495
|
-
}
|
|
1496
|
-
|
|
1497
|
-
/**
|
|
1498
|
-
* Get log-probability with automatic fallback to latency method
|
|
1499
|
-
* Returns both the calculated value and the method used
|
|
1500
|
-
*/
|
|
1501
|
-
async getLogProbWithFallback(
|
|
1502
|
-
prompt: string
|
|
1503
|
-
): Promise<{ logprob: number; method: BiasCalculationMethod }> {
|
|
1504
|
-
try {
|
|
1505
|
-
// First, check if model supports log-probabilities
|
|
1506
|
-
const supportsLogProbs = await this.detectLogProbSupport();
|
|
1507
|
-
|
|
1508
|
-
if (supportsLogProbs) {
|
|
1509
|
-
// Try to get exact log-probabilities
|
|
1510
|
-
try {
|
|
1511
|
-
const response = await fetch(`${this.baseUrl}/api/generate`, {
|
|
1512
|
-
method: "POST",
|
|
1513
|
-
headers: { "Content-Type": "application/json" },
|
|
1514
|
-
body: JSON.stringify({
|
|
1515
|
-
model: this.model,
|
|
1516
|
-
prompt,
|
|
1517
|
-
stream: false,
|
|
1518
|
-
logprobs: true,
|
|
1519
|
-
options: {
|
|
1520
|
-
num_predict: 0, // Only evaluate prompt, don't generate
|
|
1521
|
-
temperature: 0,
|
|
1522
|
-
},
|
|
1523
|
-
}),
|
|
1524
|
-
});
|
|
1525
|
-
|
|
1526
|
-
if (response.ok) {
|
|
1527
|
-
const data = await response.json();
|
|
1528
|
-
|
|
1529
|
-
if (data.logprobs && Array.isArray(data.logprobs) && data.logprobs.length > 0) {
|
|
1530
|
-
// Calculate average log-probability across all tokens
|
|
1531
|
-
const avgLogProb =
|
|
1532
|
-
data.logprobs.reduce(
|
|
1533
|
-
(sum: number, item: { token: string; logprob: number }) => sum + item.logprob,
|
|
1534
|
-
0
|
|
1535
|
-
) / data.logprobs.length;
|
|
1536
|
-
console.log(`✅ Using exact log-probabilities for ${this.model}: ${avgLogProb}`);
|
|
1537
|
-
return {
|
|
1538
|
-
logprob: avgLogProb,
|
|
1539
|
-
method: "logprobs_exact",
|
|
1540
|
-
};
|
|
1541
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > }</span>
|
|
1542
|
-
<span class="cstat-no" title="statement not covered" > console.warn(`❌ No logprobs in response for ${this.model}, response:`, data);</span>
|
|
1543
|
-
} else {
|
|
1544
|
-
console.warn(
|
|
1545
|
-
`❌ Log-probability request failed for ${this.model}: ${response.status} ${response.statusText}`
|
|
1546
|
-
);
|
|
1547
|
-
}
|
|
1548
|
-
} catch (error) {
|
|
1549
|
-
console.warn(
|
|
1550
|
-
`❌ Log-probability request failed for ${this.model}, falling back to latency method:`,
|
|
1551
|
-
error
|
|
1552
|
-
);
|
|
1553
|
-
}
|
|
1554
|
-
}
|
|
1555
|
-
|
|
1556
|
-
// Fallback to latency-based method
|
|
1557
|
-
console.log(`⚡ Falling back to latency-based method for ${this.model}`);
|
|
1558
|
-
const startTime = performance.now();
|
|
1559
|
-
|
|
1560
|
-
const response = await fetch(`${this.baseUrl}/api/generate`, {
|
|
1561
|
-
method: "POST",
|
|
1562
|
-
headers: { "Content-Type": "application/json" },
|
|
1563
|
-
body: JSON.stringify({
|
|
1564
|
-
model: this.model,
|
|
1565
|
-
prompt,
|
|
1566
|
-
stream: false,
|
|
1567
|
-
options: {
|
|
1568
|
-
num_predict: 0, // Only evaluate prompt
|
|
1569
|
-
temperature: 0,
|
|
1570
|
-
},
|
|
1571
|
-
}),
|
|
1572
|
-
});
|
|
1573
|
-
|
|
1574
|
-
const endTime = performance.now();
|
|
1575
|
-
|
|
1576
|
-
if (!response.ok) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1577
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`Ollama request failed: ${response.statusText}`);</span>
|
|
1578
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1579
|
-
|
|
1580
|
-
const data = await response.json();
|
|
1581
|
-
|
|
1582
|
-
// Calculate latency-based pseudo log-probability
|
|
1583
|
-
let latency: number;
|
|
1584
|
-
|
|
1585
|
-
if (data.prompt_eval_duration && data.prompt_eval_count) {
|
|
1586
|
-
// Use prompt evaluation metrics (preferred)
|
|
1587
|
-
latency = data.prompt_eval_duration / data.prompt_eval_count / 1e9; // ns to seconds per token
|
|
1588
|
-
} else {
|
|
1589
|
-
// Fallback to total request time
|
|
1590
|
-
const totalTime = (endTime - startTime) / 1000; // ms to seconds
|
|
1591
|
-
const tokenCount = prompt.split(/\s+/).length; // rough token estimate
|
|
1592
|
-
latency = totalTime / Math.max(tokenCount, 1);
|
|
1593
|
-
}
|
|
1594
|
-
|
|
1595
|
-
// Convert latency to pseudo log-probability (faster = higher probability)
|
|
1596
|
-
const pseudoLogProb = -Math.log(latency + 0.00001);
|
|
1597
|
-
|
|
1598
|
-
return {
|
|
1599
|
-
logprob: pseudoLogProb,
|
|
1600
|
-
method: "logprobs_fallback_latency",
|
|
1601
|
-
};
|
|
1602
|
-
} catch (error) {
|
|
1603
|
-
console.error(`Error in getLogProbWithFallback for model ${this.model}:`, error);
|
|
1604
|
-
throw error;
|
|
1605
|
-
}
|
|
1606
|
-
}
|
|
1607
|
-
}
|
|
1608
|
-
</pre></td></tr></table></pre>
|
|
1609
|
-
|
|
1610
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
1611
|
-
</div><!-- /wrapper -->
|
|
1612
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
1613
|
-
Code coverage generated by
|
|
1614
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1615
|
-
at 2026-01-07T00:09:13.255Z
|
|
1616
|
-
</div>
|
|
1617
|
-
<script src="../../prettify.js"></script>
|
|
1618
|
-
<script>
|
|
1619
|
-
window.onload = function () {
|
|
1620
|
-
prettyPrint();
|
|
1621
|
-
};
|
|
1622
|
-
</script>
|
|
1623
|
-
<script src="../../sorter.js"></script>
|
|
1624
|
-
<script src="../../block-navigation.js"></script>
|
|
1625
|
-
</body>
|
|
1626
|
-
</html>
|
|
1627
|
-
|