Commit
·
4223220
1
Parent(s):
3df952f
Update prompt and models
Browse files- config.yaml +5 -1
- model/selector.py +6 -6
- pages/form.py +70 -16
config.yaml
CHANGED
@@ -15,10 +15,12 @@ variables:
|
|
15 |
prompt_system: "
|
16 |
Tu es un expert en gestion agricole des grandes cultures dans les régions Centre, Ile de france, Hauts de france et Grand est.
|
17 |
Tu sais calculer une marge brute par hectare et un coût de revient par hectare à partir de documents statistiques agricoles français fournis ci-dessous.
|
18 |
-
Tu utiliseras en priorité les documents provenant du reseau INOSYS.
|
19 |
Si tu ne connais pas la réponse, ne réponds pas.
|
20 |
Tu répondras toujours en Français.
|
21 |
|
|
|
|
|
22 |
Le coût de production ou coût de revient (CR) est calculé en additionnant toutes les charges opérationnelles (engrais, produits phytosanitaires, semences) (CO) par hectare ainsi que les charges de structure (main d'œuvre, foncier, matériel, bâtiment) (CS) par hectare selon la formule CR = CO + CS
|
23 |
|
24 |
Le coût de production en grande culture se situe en moyenne entre 500 € / hectare et 2000 € / hectare.
|
@@ -31,6 +33,8 @@ La marge nette (MN) est calculée en additionnant tous les produits (Ventes & in
|
|
31 |
|
32 |
La marge nette (MN) en grande culture se situe en moyenne entre 100 € / hectare et 800 € / hectare.
|
33 |
|
|
|
|
|
34 |
A partir des documents du contexte, tu vas produire des tableaux et des indicateurs de coût selon les cultures mentionnées par l'utilisateur.
|
35 |
Tu mentionneras les sources utilisées.
|
36 |
Pour le coût de production (CR), il est impératif de détailler l'ensemble des calculs poste par poste pour les charges opérationnelles (engrais, produits phytosanitaires, semences) (CO) et pour les charges de structure (main d'oeuvre, foncier, matériel, batiment) (CS).
|
|
|
15 |
prompt_system: "
|
16 |
Tu es un expert en gestion agricole des grandes cultures dans les régions Centre, Ile de france, Hauts de france et Grand est.
|
17 |
Tu sais calculer une marge brute par hectare et un coût de revient par hectare à partir de documents statistiques agricoles français fournis ci-dessous.
|
18 |
+
Tu utiliseras en priorité les documents provenant du reseau INOSYS puis les documents les plus récents.
|
19 |
Si tu ne connais pas la réponse, ne réponds pas.
|
20 |
Tu répondras toujours en Français.
|
21 |
|
22 |
+
Les ventes par culture correspondent à la multiplication entre le rendement (R) à l’hectare exprimé en quintaux (q) ou en tonnes (t) et le prix de vente (PV) exprimé en euro par quintal ou en euros par tonne (t).
|
23 |
+
|
24 |
Le coût de production ou coût de revient (CR) est calculé en additionnant toutes les charges opérationnelles (engrais, produits phytosanitaires, semences) (CO) par hectare ainsi que les charges de structure (main d'œuvre, foncier, matériel, bâtiment) (CS) par hectare selon la formule CR = CO + CS
|
25 |
|
26 |
Le coût de production en grande culture se situe en moyenne entre 500 € / hectare et 2000 € / hectare.
|
|
|
33 |
|
34 |
La marge nette (MN) en grande culture se situe en moyenne entre 100 € / hectare et 800 € / hectare.
|
35 |
|
36 |
+
Le prix planché (PP) ou seuil de rentabilité (SR) par culture correspond au prix moyen auquel doit être vendue la culture afin d’obtenir une marge nette dont la valeur est 0 € selon la formule PR = CR / R.
|
37 |
+
|
38 |
A partir des documents du contexte, tu vas produire des tableaux et des indicateurs de coût selon les cultures mentionnées par l'utilisateur.
|
39 |
Tu mentionneras les sources utilisées.
|
40 |
Pour le coût de production (CR), il est impératif de détailler l'ensemble des calculs poste par poste pour les charges opérationnelles (engrais, produits phytosanitaires, semences) (CO) et pour les charges de structure (main d'oeuvre, foncier, matériel, batiment) (CS).
|
model/selector.py
CHANGED
@@ -4,17 +4,17 @@ from .ModelIntegrations import ModelManager
|
|
4 |
def ModelSelector():
|
5 |
# Dictionnaire des modèles par fournisseur
|
6 |
model_providers = {
|
7 |
-
"Mistral": {
|
8 |
-
|
9 |
-
|
10 |
-
},
|
11 |
"OpenAI": {
|
12 |
"gpt-4o": "openai.gpt-4o",
|
13 |
},
|
14 |
"Anthropic": {
|
15 |
"claude-3-5-sonnet-20240620": "anthropic.claude-3-5-sonnet-20240620",
|
16 |
-
"claude-3-opus-20240229": "anthropic.claude-3-opus-20240229",
|
17 |
-
"claude-3-sonnet-20240229": "anthropic.claude-3-sonnet-20240229",
|
18 |
},
|
19 |
# "llama": {
|
20 |
# "llama3.2-11b-vision": "llama.llama3.2-11b-vision",
|
|
|
4 |
def ModelSelector():
|
5 |
# Dictionnaire des modèles par fournisseur
|
6 |
model_providers = {
|
7 |
+
# "Mistral": {
|
8 |
+
# "mistral-large-latest": "mistral.mistral-large-latest",
|
9 |
+
# "open-mixtral-8x7b": "mistral.open-mixtral-8x7b",
|
10 |
+
# },
|
11 |
"OpenAI": {
|
12 |
"gpt-4o": "openai.gpt-4o",
|
13 |
},
|
14 |
"Anthropic": {
|
15 |
"claude-3-5-sonnet-20240620": "anthropic.claude-3-5-sonnet-20240620",
|
16 |
+
#"claude-3-opus-20240229": "anthropic.claude-3-opus-20240229",
|
17 |
+
#"claude-3-sonnet-20240229": "anthropic.claude-3-sonnet-20240229",
|
18 |
},
|
19 |
# "llama": {
|
20 |
# "llama3.2-11b-vision": "llama.llama3.2-11b-vision",
|
pages/form.py
CHANGED
@@ -1,6 +1,17 @@
|
|
1 |
import streamlit as st
|
2 |
from util import getYamlConfig
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
def page():
|
5 |
st.subheader("Définissez vos paramètres")
|
6 |
|
@@ -18,7 +29,9 @@ def page():
|
|
18 |
for part, tab in zip(parts_sorted, tabs):
|
19 |
with tab:
|
20 |
for field in part['fields']:
|
21 |
-
|
|
|
|
|
22 |
else:
|
23 |
# Display fields directly if no parts are defined
|
24 |
for field in st.session_state.data_dict:
|
@@ -27,26 +40,67 @@ def page():
|
|
27 |
|
28 |
def display_field(field):
|
29 |
"""Helper function to create the correct input based on field 'nature'."""
|
|
|
30 |
if field['nature'] == 'radio':
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
elif field['nature'] == 'selectbox':
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
elif field['nature'] == 'multiselect':
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
elif field['nature'] == 'date':
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
elif field['nature'] == 'numeric':
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
45 |
elif field['nature'] == 'text_area':
|
46 |
-
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
48 |
else:
|
49 |
-
|
50 |
-
|
|
|
|
|
|
|
|
|
51 |
|
52 |
-
page()
|
|
|
1 |
import streamlit as st
|
2 |
from util import getYamlConfig
|
3 |
|
4 |
+
def update_session_state(key,):
|
5 |
+
# Get new value from session state and change key for save it in params
|
6 |
+
new_value = st.session_state[key]
|
7 |
+
key = key[5:]
|
8 |
+
|
9 |
+
for item in st.session_state.data_dict:
|
10 |
+
if item['key'] == key:
|
11 |
+
item['value'] = new_value
|
12 |
+
break
|
13 |
+
|
14 |
+
|
15 |
def page():
|
16 |
st.subheader("Définissez vos paramètres")
|
17 |
|
|
|
29 |
for part, tab in zip(parts_sorted, tabs):
|
30 |
with tab:
|
31 |
for field in part['fields']:
|
32 |
+
for field_session in st.session_state.data_dict:
|
33 |
+
if field['key'] == field_session['key']:
|
34 |
+
display_field(field_session)
|
35 |
else:
|
36 |
# Display fields directly if no parts are defined
|
37 |
for field in st.session_state.data_dict:
|
|
|
40 |
|
41 |
def display_field(field):
|
42 |
"""Helper function to create the correct input based on field 'nature'."""
|
43 |
+
key = 'form_' + field['key']
|
44 |
if field['nature'] == 'radio':
|
45 |
+
st.radio(
|
46 |
+
field['label'],
|
47 |
+
field['options'],
|
48 |
+
index=field['options'].index(field.get('value')) if field.get('value') in field['options'] else 0,
|
49 |
+
key=key,
|
50 |
+
on_change=update_session_state,
|
51 |
+
args=(key,)
|
52 |
+
)
|
53 |
+
|
54 |
elif field['nature'] == 'selectbox':
|
55 |
+
st.selectbox(
|
56 |
+
field['label'],
|
57 |
+
field['options'],
|
58 |
+
index=field['options'].index(field.get('value')) if field.get('value') in field['options'] else 0,
|
59 |
+
key=key,
|
60 |
+
on_change=update_session_state,
|
61 |
+
args=(key,)
|
62 |
+
)
|
63 |
+
|
64 |
elif field['nature'] == 'multiselect':
|
65 |
+
st.multiselect(
|
66 |
+
field['label'],
|
67 |
+
field['options'],
|
68 |
+
default=[field['options'].index(value) for value in field.get('value') if value in field['options']],
|
69 |
+
key=key,
|
70 |
+
on_change=update_session_state,
|
71 |
+
args=(key,)
|
72 |
+
)
|
73 |
elif field['nature'] == 'date':
|
74 |
+
st.date_input(
|
75 |
+
field['label'],
|
76 |
+
value=field.get('value', None),
|
77 |
+
key=key,
|
78 |
+
on_change=update_session_state,
|
79 |
+
args=(key,)
|
80 |
+
)
|
81 |
+
|
82 |
elif field['nature'] == 'numeric':
|
83 |
+
st.number_input(field['label'],
|
84 |
+
value=field.get('value', 0),
|
85 |
+
key=key,
|
86 |
+
on_change=update_session_state,
|
87 |
+
args=(key,)
|
88 |
+
)
|
89 |
+
|
90 |
elif field['nature'] == 'text_area':
|
91 |
+
st.text_area(field['label'],
|
92 |
+
value=field.get('value', ""),
|
93 |
+
key=key,
|
94 |
+
on_change=update_session_state,
|
95 |
+
args=(key,)
|
96 |
+
)
|
97 |
+
|
98 |
else:
|
99 |
+
st.text_input(label=field['label'],
|
100 |
+
value=field.get('value', ""),
|
101 |
+
key=key,
|
102 |
+
on_change=update_session_state,
|
103 |
+
args=(key,)
|
104 |
+
)
|
105 |
|
106 |
+
page()
|