dead-parrot 0.1.0__tar.gz
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.
- dead_parrot-0.1.0/.gitignore +25 -0
- dead_parrot-0.1.0/.python-version +1 -0
- dead_parrot-0.1.0/.vscode/extensions.json +18 -0
- dead_parrot-0.1.0/.vscode/settings.json +49 -0
- dead_parrot-0.1.0/LICENSE +7 -0
- dead_parrot-0.1.0/PKG-INFO +40 -0
- dead_parrot-0.1.0/README.md +25 -0
- dead_parrot-0.1.0/demos/ecb_ai_assistant/.env.example +1 -0
- dead_parrot-0.1.0/demos/ecb_ai_assistant/context/ecb_staff_rules.pdf +0 -0
- dead_parrot-0.1.0/demos/ecb_ai_assistant/examples/ecb_staff_rules.json +202 -0
- dead_parrot-0.1.0/demos/ecb_ai_assistant/main.py +25 -0
- dead_parrot-0.1.0/demos/ecb_ai_assistant/pyproject.toml +9 -0
- dead_parrot-0.1.0/mypy.ini +7 -0
- dead_parrot-0.1.0/pyproject.toml +37 -0
- dead_parrot-0.1.0/ruff.toml +13 -0
- dead_parrot-0.1.0/src/dead_parrot/__init__.py +11 -0
- dead_parrot-0.1.0/src/dead_parrot/core.py +203 -0
- dead_parrot-0.1.0/src/dead_parrot/py.typed +0 -0
- dead_parrot-0.1.0/src/dead_parrot/utils.py +34 -0
- dead_parrot-0.1.0/uv.lock +2000 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# macOS
|
|
2
|
+
.DS_Store
|
|
3
|
+
|
|
4
|
+
# dotenv
|
|
5
|
+
.env
|
|
6
|
+
|
|
7
|
+
# Virtual environments
|
|
8
|
+
.venv/
|
|
9
|
+
|
|
10
|
+
# Python
|
|
11
|
+
__pycache__/
|
|
12
|
+
*.py[oc]
|
|
13
|
+
build/
|
|
14
|
+
dist/
|
|
15
|
+
wheels/
|
|
16
|
+
*.egg-info
|
|
17
|
+
|
|
18
|
+
# ruff
|
|
19
|
+
.ruff_cache/
|
|
20
|
+
|
|
21
|
+
# mypy
|
|
22
|
+
.mypy_cache/
|
|
23
|
+
|
|
24
|
+
# dead-parrot
|
|
25
|
+
demos/ecb_ai_assistant/embeddings/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"recommendations": [
|
|
3
|
+
// Python
|
|
4
|
+
"ms-python.python",
|
|
5
|
+
"ms-python.vscode-pylance",
|
|
6
|
+
"ms-python.debugpy",
|
|
7
|
+
|
|
8
|
+
// Type checking
|
|
9
|
+
"ms-python.mypy-type-checker",
|
|
10
|
+
|
|
11
|
+
// Linting and formatting
|
|
12
|
+
"charliermarsh.ruff",
|
|
13
|
+
|
|
14
|
+
// Various
|
|
15
|
+
"github.github-vscode-theme",
|
|
16
|
+
"github.copilot-chat",
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Color theme
|
|
3
|
+
"workbench.colorTheme": "GitHub Dark Dimmed",
|
|
4
|
+
|
|
5
|
+
// Font
|
|
6
|
+
"editor.fontFamily": "JetBrains Mono, Menlo, Monaco",
|
|
7
|
+
"terminal.integrated.fontFamily": "JetBrains Mono, Menlo, Monaco",
|
|
8
|
+
"editor.fontSize": 12.5,
|
|
9
|
+
"terminal.integrated.fontSize": 12.5,
|
|
10
|
+
"editor.fontLigatures": true,
|
|
11
|
+
"terminal.integrated.fontLigatures.enabled": true,
|
|
12
|
+
|
|
13
|
+
// Indentation
|
|
14
|
+
"editor.detectIndentation": false,
|
|
15
|
+
"editor.insertSpaces": true,
|
|
16
|
+
"editor.tabSize": 4,
|
|
17
|
+
|
|
18
|
+
// Lines
|
|
19
|
+
"editor.rulers": [ 88 ],
|
|
20
|
+
"editor.wordWrap": "off",
|
|
21
|
+
|
|
22
|
+
// Whitespace
|
|
23
|
+
"editor.renderWhitespace": "boundary",
|
|
24
|
+
"files.trimTrailingWhitespace": true,
|
|
25
|
+
"files.insertFinalNewline": true,
|
|
26
|
+
|
|
27
|
+
// Various
|
|
28
|
+
"explorer.sortOrder": "type",
|
|
29
|
+
"files.autoSave": "onFocusChange",
|
|
30
|
+
"files.exclude": {
|
|
31
|
+
"**/.git": false,
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
// Python
|
|
35
|
+
"[python]": {
|
|
36
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
37
|
+
"editor.formatOnSave": true,
|
|
38
|
+
"editor.codeActionsOnSave": {
|
|
39
|
+
"source.fixAll": "always",
|
|
40
|
+
"source.organizeImports": "always"
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
"mypy-type-checker.path": ["mypy"],
|
|
44
|
+
|
|
45
|
+
// Markdown
|
|
46
|
+
"[markdown]": {
|
|
47
|
+
"editor.wordWrap": "off",
|
|
48
|
+
},
|
|
49
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright 2026 Lucas Konstantin Bärenfänger (@pygumby)
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dead-parrot
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A Framework for Scalable AI Assistants
|
|
5
|
+
Project-URL: source, https://github.com/pygumby/dead-parrot
|
|
6
|
+
Author: Lucas Konstantin Bärenfänger
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Python: >=3.13
|
|
10
|
+
Requires-Dist: dspy>=3.1.3
|
|
11
|
+
Requires-Dist: faiss-cpu>=1.13.2
|
|
12
|
+
Requires-Dist: pandas>=3.0.1
|
|
13
|
+
Requires-Dist: pypdf>=6.7.3
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
<div align="center">
|
|
17
|
+
|
|
18
|
+
# 😵🦜 dead-parrot
|
|
19
|
+
## Framework for Scalable AI Assistants
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
**dead-parrot** is a Python package authored by Lucas Konstantin Bärenfänger ([@pygumby](https://github.com/pygumby)) in the context of his thesis for the master's program "Data Analytics & Management" at Frankfurt School of Finance & Management.
|
|
24
|
+
|
|
25
|
+
----
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
Please refer to the self-contained usage examples provided in the [demos](demos/) folder.
|
|
30
|
+
|
|
31
|
+
## Development
|
|
32
|
+
|
|
33
|
+
- Install dependencies: `uv sync`
|
|
34
|
+
- Type-check: `uv run mypy .`
|
|
35
|
+
- Lint: `uv run ruff check . --fix`
|
|
36
|
+
- Format: `uv run ruff format .`
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 😵🦜 dead-parrot
|
|
4
|
+
## Framework for Scalable AI Assistants
|
|
5
|
+
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
**dead-parrot** is a Python package authored by Lucas Konstantin Bärenfänger ([@pygumby](https://github.com/pygumby)) in the context of his thesis for the master's program "Data Analytics & Management" at Frankfurt School of Finance & Management.
|
|
9
|
+
|
|
10
|
+
----
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
Please refer to the self-contained usage examples provided in the [demos](demos/) folder.
|
|
15
|
+
|
|
16
|
+
## Development
|
|
17
|
+
|
|
18
|
+
- Install dependencies: `uv sync`
|
|
19
|
+
- Type-check: `uv run mypy .`
|
|
20
|
+
- Lint: `uv run ruff check . --fix`
|
|
21
|
+
- Format: `uv run ruff format .`
|
|
22
|
+
|
|
23
|
+
## License
|
|
24
|
+
|
|
25
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
OPENAI_API_KEY=your_openai_api_key
|
|
Binary file
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
[
|
|
2
|
+
[
|
|
3
|
+
"What is the maximum duration of a non-convertible fixed-term contract issued to replace a member of staff on maternity leave?",
|
|
4
|
+
"The maximum duration for such a contract is six years, with the possibility of extension for up to ten years for the same replacement. This is specified in Article 2.0a.1(a) of the Staff Rules. (Page 45)"
|
|
5
|
+
],
|
|
6
|
+
[
|
|
7
|
+
"How much time is a member of staff given to prepare their defense after receiving a final reasoned report in a disciplinary procedure?",
|
|
8
|
+
"A member of staff is given not less than 15 calendar days from the receipt of the report to prepare their defense. This rule applies to procedures both with and without the Disciplinary Committee. (Pages 125, 127)"
|
|
9
|
+
],
|
|
10
|
+
[
|
|
11
|
+
"What are the core time periods for ECB staff on a Tuesday?",
|
|
12
|
+
"On Tuesdays, the core time periods during which staff must be present are from 10 a.m. to 12 p.m. and from 2 p.m. to 4.30 p.m. These hours are part of the standard flexitime arrangement. (Page 78)"
|
|
13
|
+
],
|
|
14
|
+
[
|
|
15
|
+
"How many days of special leave are granted for the birth of a member of staff's child if they are not entitled to maternity leave?",
|
|
16
|
+
"A member of staff is entitled to 20 days of special leave per child for the birth of a legitimate or natural child. This entitlement is provided under Article 5.10.1(c). (Page 96)"
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
"Under what condition can a member of staff accept hospitality from the private sector?",
|
|
20
|
+
"Hospitality may be accepted if it is offered in a work-related context, is not frequent, and has a value of up to EUR 50. However, no hospitality may be accepted from current or potential suppliers or credit institutions during inspections or audits. (Page 6)"
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
"What is the maximum number of teleworking days allowed from a location outside the Union per calendar year?",
|
|
24
|
+
"Members of staff may telework from a location outside the Union for up to 20 working days per calendar year. This is part of the overall 90-day limit for teleworking away from the country of employment. (Page 84)"
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"What happens to excess working hours that exceed 48 hours at the end of a month?",
|
|
28
|
+
"Any excess hours accumulated under the flexitime arrangement that exceed 48 hours (six days) for full-time staff shall be forfeited. However, for staff entitled to overtime compensation, these may be approved as overtime by a manager. (Page 81)"
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
"Who is eligible for an employment contract for an indefinite period (convertible contract)?",
|
|
32
|
+
"Staff assigned to permanent vacant posts below I band engaged for three years, and those at I band and above engaged for five years, are eligible. Conversion depends on at least overall satisfactory performance during the fixed period. (Page 45)"
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
"What is the definition of a 'conflict of interest' according to the Ethics Framework?",
|
|
36
|
+
"A conflict of interest is a situation where personal interests may influence or appear to influence the impartial and objective performance of professional duties. Personal interests include financial or non-financial benefits for the staff member, family, or close acquaintances. (Page 5)"
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
"How is the 'standard subsistence allowance' amount defined and can it be increased?",
|
|
40
|
+
"The standard subsistence allowance is EUR 9,270 for a three-month period. It can be increased by a maximum supplement of EUR 2,070 for an accompanying spouse, recognized partner, or dependent child. (Page 74)"
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
"What are the criteria for a non-marital partnership to be recognized by the ECB?",
|
|
44
|
+
"Partners must not be married, have no blood relationship, and must provide a legal document of partnership or evidence of cohabitation for at least two years. Recognition can be retroactive for a maximum of three months from the submission of documentation. (Page 62)"
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
"How long is the retention period for a member of staff's personal file after they leave the ECB?",
|
|
48
|
+
"The personal file is retained for a maximum of 10 years. This period starts when employment ceases or following the last pension payment to the pensioner or their dependants. (Page 31)"
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
"What is the notice period required for an organizing body to inform the Executive Board of an intention to strike?",
|
|
52
|
+
"The organizing body must provide written notice at least ten working days before the first day of the strike. This notice must state the nature of the dispute, the proposed action, and the strike period. (Page 31)"
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"Within what timeframe must a whistleblower acknowledge receipt of a report made through the whistleblowing tool?",
|
|
56
|
+
"The recipient of a report made through the whistleblowing tool must acknowledge receipt to the whistleblower within seven calendar days. (Page 24)"
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
"What is the cooling-off period for a member of staff at salary band I or above who was involved in supervisory activities for at least six months?",
|
|
60
|
+
"They may only start working for a credit institution in whose supervision they were directly involved after one year. This period may be increased to up to two years in exceptional circumstances. (Pages 9, 11)"
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
"Can a member of staff be promoted to the next salary band while holding their current position?",
|
|
64
|
+
"Yes, members of staff with indefinite or convertible contracts can be promoted to the next salary band while holding their current position following a promotion procedure. This is based on identified opportunities, readiness, and contribution levels. (Pages 53, 55)"
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
"What is the maximum duration of 'parental special leave' and for which children does it apply?",
|
|
68
|
+
"Eligible staff are entitled to 40 working days of parental special leave for each dependent child born or adopted on or after 1 January 2025. This leave must be used within the first three years of birth or adoption. (Pages 99, 100)"
|
|
69
|
+
],
|
|
70
|
+
[
|
|
71
|
+
"How is the 'dependent child' defined for the purposes of the child allowance?",
|
|
72
|
+
"It includes legitimate, natural, or adopted children of the staff member or their partner, children in their custody for adoption, or children of a former partner residing in the household. The child must generally be under 26 and meet certain income and status criteria. (Pages 63, 64)"
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
"What is the procedure if a member of staff considers a manager's instruction to be irregular?",
|
|
76
|
+
"The staff member should inform their line manager or, if not addressed, their Director General or Director. If the instruction is confirmed in writing, the staff member must execute it unless it is manifestly illegal. (Page 13)"
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
"Under what circumstances is an installation allowance partially refunded to the ECB?",
|
|
80
|
+
"A staff member must refund a portion of the allowance if they resign or are dismissed for disciplinary reasons within one year of appointment. The refund is proportional to the unexpired part of that year. (Page 75)"
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
"When does the entitlement to an education allowance commence and cease?",
|
|
84
|
+
"Entitlement starts on the first day of the month in which conditions are fulfilled and ceases at the end of the month in which they are no longer met. Loss of dependent child status also terminates this entitlement. (Page 69)"
|
|
85
|
+
],
|
|
86
|
+
[
|
|
87
|
+
"What constitutes 'gross annual income' for the purpose of the household allowance income threshold?",
|
|
88
|
+
"It means income from employment, self-employment, income replacement (like maternity allowance), or pensions before tax and social security deductions. Investment income or capital gains are not included in this calculation. (Page 63)"
|
|
89
|
+
],
|
|
90
|
+
[
|
|
91
|
+
"How many members make up a Selection Committee and what are the representation requirements?",
|
|
92
|
+
"A selection committee consists of three or five members. It must include representation from the recruiting business area, one member from Human Resources, and members from other business areas. (Page 36)"
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
"What is the 'bandwidth period' for flexitime at the ECB?",
|
|
96
|
+
"The bandwidth period is from 7 a.m. to 8 p.m., Monday to Friday. This is the timeframe during which staff can choose their start and end times, subject to core hours and business needs. (Page 78)"
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
"What is the 'cooling-off period' for a person previously employed on a non-convertible fixed-term contract before they can be rehired?",
|
|
100
|
+
"The person must not have been in an employment relationship with the ECB for at least one third of the total duration of the preceding contract, including extensions. (Page 46)"
|
|
101
|
+
],
|
|
102
|
+
[
|
|
103
|
+
"Who takes the appointment decision if a member of the selection committee would also be the appointing authority?",
|
|
104
|
+
"The decision is taken at the next higher level of appointing authority than the one usually responsible. If a member is a superior to the usual authority, the next higher hierarchical level or the Executive Board decides. (Pages 36, 37)"
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
"How is 'overtime' defined and what is the maximum amount a staff member can be asked to work?",
|
|
108
|
+
"Overtime is work performed on a manager's instructions in excess of normal working hours. It cannot exceed 136 hours in any four-month period, and the average weekly hours must not exceed 48 hours. (Page 89)"
|
|
109
|
+
],
|
|
110
|
+
[
|
|
111
|
+
"What medical documentation is required for an absence of more than two consecutive working days?",
|
|
112
|
+
"A medical certificate is required, indicating the date the sickness started and the expected end date. A single certificate can cover a maximum of six weeks of absence. (Page 105)"
|
|
113
|
+
],
|
|
114
|
+
[
|
|
115
|
+
"What is the 'standard hourly rate' used when compensation for overtime is made in the form of payment?",
|
|
116
|
+
"The standard hourly rate is 0.6% of the basic monthly salary for the month in which the overtime was worked. (Page 90)"
|
|
117
|
+
],
|
|
118
|
+
[
|
|
119
|
+
"What is the definition of 'retaliation' in the context of whistleblowing?",
|
|
120
|
+
"Retaliation is any direct or indirect work-related act or omission causing unjustified detriment, prompted by reporting a breach or providing witness statements. This includes threats and attempts at retaliation. (Pages 20, 21)"
|
|
121
|
+
],
|
|
122
|
+
[
|
|
123
|
+
"How do mobility and internal selection procedures interact for filling a vacancy available for one year or longer?",
|
|
124
|
+
"The appointing authority must consider filling the position via internal horizontal mobility, a valid list of suitable candidates from internal selection, or conducting a new internal selection procedure. They may also consider external options or short-term employees. (Page 41)"
|
|
125
|
+
],
|
|
126
|
+
[
|
|
127
|
+
"What are the differences in salary placement for a candidate appointed via an external selection procedure versus internal horizontal mobility?",
|
|
128
|
+
"External candidates are generally placed at the first step of the salary band or bracket. Internal horizontal mobility, however, shall not lead to any changes in the basic salary of a member of staff. (Pages 43, 44)"
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
"How is a 'Performance Improvement Plan' (PIP) established and what is the timeframe for the final review?",
|
|
132
|
+
"A PIP is drafted by the manager and area head, with staff contribution, and endorsed by HR. The final review usually occurs between 6 and 12 months after the staff member receives the final PIP. (Pages 131, 132)"
|
|
133
|
+
],
|
|
134
|
+
[
|
|
135
|
+
"What are the rules regarding 'short-term trading' in private financial transactions?",
|
|
136
|
+
"Short-term trading (buying and selling assets with the same ISIN within one month) requires prior authorization from the Compliance and Governance Office. Authorization is not needed if the sale is a stop-loss order executed by a broker. (Page 15)"
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
"Under what conditions can a member of staff be granted unpaid leave for 'mobility' purposes?",
|
|
140
|
+
"Staff with indefinite contracts may be granted unpaid leave for gainful employment at central banks, EU institutions, or international organizations. Experience in academia or the private sector may also be considered if relevant to the ECB. (Page 102)"
|
|
141
|
+
],
|
|
142
|
+
[
|
|
143
|
+
"How are 'called-in' hours during on-call duties compensated for staff not entitled to overtime compensation?",
|
|
144
|
+
"They receive a called-in allowance of EUR 71 (working days) or EUR 154 (weekends/holidays). Additionally, they are granted time off on a one-for-one basis plus one extra hour for travel. (Page 92)"
|
|
145
|
+
],
|
|
146
|
+
[
|
|
147
|
+
"What are the reporting and cooling-off obligations for a member of staff at salary band F/G to H involved in supervisory activities?",
|
|
148
|
+
"They must notify the Compliance and Governance Office of any occupational activity for six months after their involvement in supervision ends. They are subject to a three-month cooling-off period before working for a direct competitor of a credit institution they supervised. (Pages 9, 10)"
|
|
149
|
+
],
|
|
150
|
+
[
|
|
151
|
+
"How is the 'Medical Committee' composed when a staff member challenges a medical proposal?",
|
|
152
|
+
"It consists of three doctors: one appointed by the staff member, one by the ECB, and a third by agreement between the first two. If no agreement is reached, the President of the Hessian Landesärztekammer appoints the third doctor. (Pages 117, 118)"
|
|
153
|
+
],
|
|
154
|
+
[
|
|
155
|
+
"What happens if a member of staff's child suffers from a serious illness or disability regarding the child allowance?",
|
|
156
|
+
"The child allowance is doubled for children under 26. For children over 26, it is also doubled if disability-linked expenditures (less reimbursements) exceed 20% of the staff member's taxable income. (Page 64)"
|
|
157
|
+
],
|
|
158
|
+
[
|
|
159
|
+
"What is the procedure for an 'Administrative Review' if a staff member is unhappy with an HR decision?",
|
|
160
|
+
"The staff member must request a review within two months of the decision's communication. The Director General HR or their Deputy then has two months to notify the staff member of their written decision. (Page 121)"
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"What are the best practices for conducting a successful job interview as a candidate?",
|
|
164
|
+
"While not explicitly in the rules, standard HR practices suggest researching the organization, preparing specific achievement examples, and practicing clear communication. Arriving on time and dressing professionally remain universal standard expectations."
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
"What is the typical purpose of a 360-degree feedback assessment in a professional environment?",
|
|
168
|
+
"A 360-degree feedback assessment is generally used to provide employees with holistic performance feedback from various perspectives (peers, subordinates, and managers). It aims to offer a well-rounded view of an individual's strengths and growth areas."
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
"How do companies generally handle 'unconscious bias' during their recruitment processes?",
|
|
172
|
+
"Common HR practices include standardized interview scorecards, diverse interview panels, and 'blind' resume screening where names or identifiable traits are removed. These methods help ensure objectivity and merit-based selection."
|
|
173
|
+
],
|
|
174
|
+
[
|
|
175
|
+
"What is the concept of 'Work-Life Balance' and why is it important for employee retention?",
|
|
176
|
+
"Work-life balance refers to the equilibrium between professional responsibilities and personal life. Maintaining this balance is vital for preventing employee burnout, enhancing job satisfaction, and ultimately reducing turnover rates."
|
|
177
|
+
],
|
|
178
|
+
[
|
|
179
|
+
"What are the common components of an employee 'Total Rewards' package?",
|
|
180
|
+
"A total rewards package typically combines monetary compensation (base salary, bonuses) with non-monetary benefits like health insurance, retirement plans, and work-life initiatives such as flexible scheduling."
|
|
181
|
+
],
|
|
182
|
+
[
|
|
183
|
+
"What is the capital city of France and what is its most famous landmark?",
|
|
184
|
+
"I am sorry, but I can only answer questions related to Human Resources and the ECB Staff Rules. I cannot provide information on non-HR topics like geography."
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
"How many players are on a standard soccer team during a match?",
|
|
188
|
+
"I am sorry, but I can only answer questions related to Human Resources and the ECB Staff Rules. I cannot provide information on sports or other unrelated topics."
|
|
189
|
+
],
|
|
190
|
+
[
|
|
191
|
+
"Can you explain the basic principles of quantum physics?",
|
|
192
|
+
"I am sorry, but I can only answer questions related to Human Resources and the ECB Staff Rules. I am unable to discuss scientific subjects outside of this scope."
|
|
193
|
+
],
|
|
194
|
+
[
|
|
195
|
+
"Who won the Academy Award for Best Picture in 1994?",
|
|
196
|
+
"I am sorry, but I can only answer questions related to Human Resources and the ECB Staff Rules. I cannot provide data on entertainment or film history."
|
|
197
|
+
],
|
|
198
|
+
[
|
|
199
|
+
"What is the recipe for making a classic Italian lasagna?",
|
|
200
|
+
"I am sorry, but I can only answer questions related to Human Resources and the ECB Staff Rules. I cannot provide culinary instructions or recipes."
|
|
201
|
+
]
|
|
202
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Demo script showcasing how to create, query and evaluate an AI Assistant."""
|
|
2
|
+
|
|
3
|
+
import getpass
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
import dotenv
|
|
7
|
+
|
|
8
|
+
import dead_parrot as dp
|
|
9
|
+
|
|
10
|
+
dotenv.load_dotenv()
|
|
11
|
+
|
|
12
|
+
if not os.environ.get("OPENAI_API_KEY"):
|
|
13
|
+
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
|
|
14
|
+
|
|
15
|
+
ecb_ai_assistant: dp.AiAssistant = dp.DspyAiAssistant(
|
|
16
|
+
lm="openai/gpt-4o-mini",
|
|
17
|
+
embedder="openai/text-embedding-3-small",
|
|
18
|
+
corpus=dp.utils.load_corpus_from_pdf(
|
|
19
|
+
"European Central Bank Staff Rules",
|
|
20
|
+
"context/ecb_staff_rules.pdf",
|
|
21
|
+
),
|
|
22
|
+
examples=dp.utils.load_examples_from_json("examples/ecb_staff_rules.json"),
|
|
23
|
+
)
|
|
24
|
+
print(ecb_ai_assistant.ask("How long is the probationary period?"))
|
|
25
|
+
print(ecb_ai_assistant.eval())
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "dead-parrot"
|
|
3
|
+
description = "A Framework for Scalable AI Assistants"
|
|
4
|
+
authors = [
|
|
5
|
+
{name = "Lucas Konstantin Bärenfänger"},
|
|
6
|
+
]
|
|
7
|
+
readme = "README.md"
|
|
8
|
+
license = "MIT"
|
|
9
|
+
license-files = [
|
|
10
|
+
"LICENSE",
|
|
11
|
+
]
|
|
12
|
+
version = "0.1.0"
|
|
13
|
+
requires-python = ">=3.13"
|
|
14
|
+
dependencies = [
|
|
15
|
+
"dspy>=3.1.3",
|
|
16
|
+
"faiss-cpu>=1.13.2",
|
|
17
|
+
"pandas>=3.0.1",
|
|
18
|
+
"pypdf>=6.7.3",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[project.urls]
|
|
22
|
+
source = "https://github.com/pygumby/dead-parrot"
|
|
23
|
+
|
|
24
|
+
[dependency-groups]
|
|
25
|
+
dev = [
|
|
26
|
+
"mypy>=1.19.1",
|
|
27
|
+
"ruff>=0.15.0",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[build-system]
|
|
31
|
+
requires = ["hatchling"]
|
|
32
|
+
build-backend = "hatchling.build"
|
|
33
|
+
|
|
34
|
+
[tool.uv.workspace]
|
|
35
|
+
members = [
|
|
36
|
+
"demos/ecb_ai_assistant",
|
|
37
|
+
]
|