arize-phoenix 11.23.1__py3-none-any.whl → 12.28.1__py3-none-any.whl
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.
- {arize_phoenix-11.23.1.dist-info → arize_phoenix-12.28.1.dist-info}/METADATA +61 -36
- {arize_phoenix-11.23.1.dist-info → arize_phoenix-12.28.1.dist-info}/RECORD +212 -162
- {arize_phoenix-11.23.1.dist-info → arize_phoenix-12.28.1.dist-info}/WHEEL +1 -1
- {arize_phoenix-11.23.1.dist-info → arize_phoenix-12.28.1.dist-info}/licenses/IP_NOTICE +1 -1
- phoenix/__generated__/__init__.py +0 -0
- phoenix/__generated__/classification_evaluator_configs/__init__.py +20 -0
- phoenix/__generated__/classification_evaluator_configs/_document_relevance_classification_evaluator_config.py +17 -0
- phoenix/__generated__/classification_evaluator_configs/_hallucination_classification_evaluator_config.py +17 -0
- phoenix/__generated__/classification_evaluator_configs/_models.py +18 -0
- phoenix/__generated__/classification_evaluator_configs/_tool_selection_classification_evaluator_config.py +17 -0
- phoenix/__init__.py +2 -1
- phoenix/auth.py +27 -2
- phoenix/config.py +1594 -81
- phoenix/db/README.md +546 -28
- phoenix/db/bulk_inserter.py +119 -116
- phoenix/db/engines.py +140 -33
- phoenix/db/facilitator.py +22 -1
- phoenix/db/helpers.py +818 -65
- phoenix/db/iam_auth.py +64 -0
- phoenix/db/insertion/dataset.py +133 -1
- phoenix/db/insertion/document_annotation.py +9 -6
- phoenix/db/insertion/evaluation.py +2 -3
- phoenix/db/insertion/helpers.py +2 -2
- phoenix/db/insertion/session_annotation.py +176 -0
- phoenix/db/insertion/span_annotation.py +3 -4
- phoenix/db/insertion/trace_annotation.py +3 -4
- phoenix/db/insertion/types.py +41 -18
- phoenix/db/migrations/versions/01a8342c9cdf_add_user_id_on_datasets.py +40 -0
- phoenix/db/migrations/versions/0df286449799_add_session_annotations_table.py +105 -0
- phoenix/db/migrations/versions/272b66ff50f8_drop_single_indices.py +119 -0
- phoenix/db/migrations/versions/58228d933c91_dataset_labels.py +67 -0
- phoenix/db/migrations/versions/699f655af132_experiment_tags.py +57 -0
- phoenix/db/migrations/versions/735d3d93c33e_add_composite_indices.py +41 -0
- phoenix/db/migrations/versions/ab513d89518b_add_user_id_on_dataset_versions.py +40 -0
- phoenix/db/migrations/versions/d0690a79ea51_users_on_experiments.py +40 -0
- phoenix/db/migrations/versions/deb2c81c0bb2_dataset_splits.py +139 -0
- phoenix/db/migrations/versions/e76cbd66ffc3_add_experiments_dataset_examples.py +87 -0
- phoenix/db/models.py +364 -56
- phoenix/db/pg_config.py +10 -0
- phoenix/db/types/trace_retention.py +7 -6
- phoenix/experiments/functions.py +69 -19
- phoenix/inferences/inferences.py +1 -2
- phoenix/server/api/auth.py +9 -0
- phoenix/server/api/auth_messages.py +46 -0
- phoenix/server/api/context.py +60 -0
- phoenix/server/api/dataloaders/__init__.py +36 -0
- phoenix/server/api/dataloaders/annotation_summaries.py +60 -8
- phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +50 -0
- phoenix/server/api/dataloaders/average_experiment_run_latency.py +17 -24
- phoenix/server/api/dataloaders/cache/two_tier_cache.py +1 -2
- phoenix/server/api/dataloaders/dataset_dataset_splits.py +52 -0
- phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -1
- phoenix/server/api/dataloaders/dataset_example_splits.py +40 -0
- phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +47 -0
- phoenix/server/api/dataloaders/dataset_labels.py +36 -0
- phoenix/server/api/dataloaders/document_evaluation_summaries.py +2 -2
- phoenix/server/api/dataloaders/document_evaluations.py +6 -9
- phoenix/server/api/dataloaders/experiment_annotation_summaries.py +88 -34
- phoenix/server/api/dataloaders/experiment_dataset_splits.py +43 -0
- phoenix/server/api/dataloaders/experiment_error_rates.py +21 -28
- phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +77 -0
- phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +57 -0
- phoenix/server/api/dataloaders/experiment_runs_by_experiment_and_example.py +44 -0
- phoenix/server/api/dataloaders/latency_ms_quantile.py +40 -8
- phoenix/server/api/dataloaders/record_counts.py +37 -10
- phoenix/server/api/dataloaders/session_annotations_by_session.py +29 -0
- phoenix/server/api/dataloaders/span_cost_summary_by_experiment_repeated_run_group.py +64 -0
- phoenix/server/api/dataloaders/span_cost_summary_by_project.py +28 -14
- phoenix/server/api/dataloaders/span_costs.py +3 -9
- phoenix/server/api/dataloaders/table_fields.py +2 -2
- phoenix/server/api/dataloaders/token_prices_by_model.py +30 -0
- phoenix/server/api/dataloaders/trace_annotations_by_trace.py +27 -0
- phoenix/server/api/exceptions.py +5 -1
- phoenix/server/api/helpers/playground_clients.py +263 -83
- phoenix/server/api/helpers/playground_spans.py +2 -1
- phoenix/server/api/helpers/playground_users.py +26 -0
- phoenix/server/api/helpers/prompts/conversions/google.py +103 -0
- phoenix/server/api/helpers/prompts/models.py +61 -19
- phoenix/server/api/input_types/{SpanAnnotationFilter.py → AnnotationFilter.py} +22 -14
- phoenix/server/api/input_types/ChatCompletionInput.py +3 -0
- phoenix/server/api/input_types/CreateProjectSessionAnnotationInput.py +37 -0
- phoenix/server/api/input_types/DatasetFilter.py +5 -2
- phoenix/server/api/input_types/ExperimentRunSort.py +237 -0
- phoenix/server/api/input_types/GenerativeModelInput.py +3 -0
- phoenix/server/api/input_types/ProjectSessionSort.py +158 -1
- phoenix/server/api/input_types/PromptVersionInput.py +47 -1
- phoenix/server/api/input_types/SpanSort.py +3 -2
- phoenix/server/api/input_types/UpdateAnnotationInput.py +34 -0
- phoenix/server/api/input_types/UserRoleInput.py +1 -0
- phoenix/server/api/mutations/__init__.py +8 -0
- phoenix/server/api/mutations/annotation_config_mutations.py +8 -8
- phoenix/server/api/mutations/api_key_mutations.py +15 -20
- phoenix/server/api/mutations/chat_mutations.py +106 -37
- phoenix/server/api/mutations/dataset_label_mutations.py +243 -0
- phoenix/server/api/mutations/dataset_mutations.py +21 -16
- phoenix/server/api/mutations/dataset_split_mutations.py +351 -0
- phoenix/server/api/mutations/experiment_mutations.py +2 -2
- phoenix/server/api/mutations/export_events_mutations.py +3 -3
- phoenix/server/api/mutations/model_mutations.py +11 -9
- phoenix/server/api/mutations/project_mutations.py +4 -4
- phoenix/server/api/mutations/project_session_annotations_mutations.py +158 -0
- phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +8 -4
- phoenix/server/api/mutations/prompt_label_mutations.py +74 -65
- phoenix/server/api/mutations/prompt_mutations.py +65 -129
- phoenix/server/api/mutations/prompt_version_tag_mutations.py +11 -8
- phoenix/server/api/mutations/span_annotations_mutations.py +15 -10
- phoenix/server/api/mutations/trace_annotations_mutations.py +13 -8
- phoenix/server/api/mutations/trace_mutations.py +3 -3
- phoenix/server/api/mutations/user_mutations.py +55 -26
- phoenix/server/api/queries.py +501 -617
- phoenix/server/api/routers/__init__.py +2 -2
- phoenix/server/api/routers/auth.py +141 -87
- phoenix/server/api/routers/ldap.py +229 -0
- phoenix/server/api/routers/oauth2.py +349 -101
- phoenix/server/api/routers/v1/__init__.py +22 -4
- phoenix/server/api/routers/v1/annotation_configs.py +19 -30
- phoenix/server/api/routers/v1/annotations.py +455 -13
- phoenix/server/api/routers/v1/datasets.py +355 -68
- phoenix/server/api/routers/v1/documents.py +142 -0
- phoenix/server/api/routers/v1/evaluations.py +20 -28
- phoenix/server/api/routers/v1/experiment_evaluations.py +16 -6
- phoenix/server/api/routers/v1/experiment_runs.py +335 -59
- phoenix/server/api/routers/v1/experiments.py +475 -47
- phoenix/server/api/routers/v1/projects.py +16 -50
- phoenix/server/api/routers/v1/prompts.py +50 -39
- phoenix/server/api/routers/v1/sessions.py +108 -0
- phoenix/server/api/routers/v1/spans.py +156 -96
- phoenix/server/api/routers/v1/traces.py +51 -77
- phoenix/server/api/routers/v1/users.py +64 -24
- phoenix/server/api/routers/v1/utils.py +3 -7
- phoenix/server/api/subscriptions.py +257 -93
- phoenix/server/api/types/Annotation.py +90 -23
- phoenix/server/api/types/ApiKey.py +13 -17
- phoenix/server/api/types/AuthMethod.py +1 -0
- phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +1 -0
- phoenix/server/api/types/Dataset.py +199 -72
- phoenix/server/api/types/DatasetExample.py +88 -18
- phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +10 -0
- phoenix/server/api/types/DatasetLabel.py +57 -0
- phoenix/server/api/types/DatasetSplit.py +98 -0
- phoenix/server/api/types/DatasetVersion.py +49 -4
- phoenix/server/api/types/DocumentAnnotation.py +212 -0
- phoenix/server/api/types/Experiment.py +215 -68
- phoenix/server/api/types/ExperimentComparison.py +3 -9
- phoenix/server/api/types/ExperimentRepeatedRunGroup.py +155 -0
- phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +9 -0
- phoenix/server/api/types/ExperimentRun.py +120 -70
- phoenix/server/api/types/ExperimentRunAnnotation.py +158 -39
- phoenix/server/api/types/GenerativeModel.py +95 -42
- phoenix/server/api/types/GenerativeProvider.py +1 -1
- phoenix/server/api/types/ModelInterface.py +7 -2
- phoenix/server/api/types/PlaygroundModel.py +12 -2
- phoenix/server/api/types/Project.py +218 -185
- phoenix/server/api/types/ProjectSession.py +146 -29
- phoenix/server/api/types/ProjectSessionAnnotation.py +187 -0
- phoenix/server/api/types/ProjectTraceRetentionPolicy.py +1 -1
- phoenix/server/api/types/Prompt.py +119 -39
- phoenix/server/api/types/PromptLabel.py +42 -25
- phoenix/server/api/types/PromptVersion.py +11 -8
- phoenix/server/api/types/PromptVersionTag.py +65 -25
- phoenix/server/api/types/Span.py +130 -123
- phoenix/server/api/types/SpanAnnotation.py +189 -42
- phoenix/server/api/types/SystemApiKey.py +65 -1
- phoenix/server/api/types/Trace.py +184 -53
- phoenix/server/api/types/TraceAnnotation.py +149 -50
- phoenix/server/api/types/User.py +128 -33
- phoenix/server/api/types/UserApiKey.py +73 -26
- phoenix/server/api/types/node.py +10 -0
- phoenix/server/api/types/pagination.py +11 -2
- phoenix/server/app.py +154 -36
- phoenix/server/authorization.py +5 -4
- phoenix/server/bearer_auth.py +13 -5
- phoenix/server/cost_tracking/cost_model_lookup.py +42 -14
- phoenix/server/cost_tracking/model_cost_manifest.json +1085 -194
- phoenix/server/daemons/generative_model_store.py +61 -9
- phoenix/server/daemons/span_cost_calculator.py +10 -8
- phoenix/server/dml_event.py +13 -0
- phoenix/server/email/sender.py +29 -2
- phoenix/server/grpc_server.py +9 -9
- phoenix/server/jwt_store.py +8 -6
- phoenix/server/ldap.py +1449 -0
- phoenix/server/main.py +9 -3
- phoenix/server/oauth2.py +330 -12
- phoenix/server/prometheus.py +43 -6
- phoenix/server/rate_limiters.py +4 -9
- phoenix/server/retention.py +33 -20
- phoenix/server/session_filters.py +49 -0
- phoenix/server/static/.vite/manifest.json +51 -53
- phoenix/server/static/assets/components-BreFUQQa.js +6702 -0
- phoenix/server/static/assets/{index-BPCwGQr8.js → index-CTQoemZv.js} +42 -35
- phoenix/server/static/assets/pages-DBE5iYM3.js +9524 -0
- phoenix/server/static/assets/vendor-BGzfc4EU.css +1 -0
- phoenix/server/static/assets/vendor-DCE4v-Ot.js +920 -0
- phoenix/server/static/assets/vendor-codemirror-D5f205eT.js +25 -0
- phoenix/server/static/assets/{vendor-recharts-Bw30oz1A.js → vendor-recharts-V9cwpXsm.js} +7 -7
- phoenix/server/static/assets/{vendor-shiki-DZajAPeq.js → vendor-shiki-Do--csgv.js} +1 -1
- phoenix/server/static/assets/vendor-three-CmB8bl_y.js +3840 -0
- phoenix/server/templates/index.html +7 -1
- phoenix/server/thread_server.py +1 -2
- phoenix/server/utils.py +74 -0
- phoenix/session/client.py +55 -1
- phoenix/session/data_extractor.py +5 -0
- phoenix/session/evaluation.py +8 -4
- phoenix/session/session.py +44 -8
- phoenix/settings.py +2 -0
- phoenix/trace/attributes.py +80 -13
- phoenix/trace/dsl/query.py +2 -0
- phoenix/trace/projects.py +5 -0
- phoenix/utilities/template_formatters.py +1 -1
- phoenix/version.py +1 -1
- phoenix/server/api/types/Evaluation.py +0 -39
- phoenix/server/static/assets/components-D0DWAf0l.js +0 -5650
- phoenix/server/static/assets/pages-Creyamao.js +0 -8612
- phoenix/server/static/assets/vendor-CU36oj8y.js +0 -905
- phoenix/server/static/assets/vendor-CqDb5u4o.css +0 -1
- phoenix/server/static/assets/vendor-arizeai-Ctgw0e1G.js +0 -168
- phoenix/server/static/assets/vendor-codemirror-Cojjzqb9.js +0 -25
- phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -2998
- phoenix/utilities/deprecation.py +0 -31
- {arize_phoenix-11.23.1.dist-info → arize_phoenix-12.28.1.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-11.23.1.dist-info → arize_phoenix-12.28.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,41 +1,58 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
import strawberry
|
|
4
|
-
from sqlalchemy import select
|
|
5
4
|
from strawberry.relay import Node, NodeID
|
|
6
5
|
from strawberry.types import Info
|
|
7
6
|
|
|
8
7
|
from phoenix.db import models
|
|
9
8
|
from phoenix.server.api.context import Context
|
|
10
9
|
from phoenix.server.api.types.Identifier import Identifier
|
|
11
|
-
from phoenix.server.api.types.Prompt import Prompt, to_gql_prompt_from_orm
|
|
12
10
|
|
|
13
11
|
|
|
14
12
|
@strawberry.type
|
|
15
13
|
class PromptLabel(Node):
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
id: NodeID[int]
|
|
15
|
+
db_record: strawberry.Private[Optional[models.PromptLabel]] = None
|
|
16
|
+
|
|
17
|
+
def __post_init__(self) -> None:
|
|
18
|
+
if self.db_record and self.id != self.db_record.id:
|
|
19
|
+
raise ValueError("PromptLabel ID mismatch")
|
|
20
|
+
|
|
21
|
+
@strawberry.field
|
|
22
|
+
async def name(
|
|
23
|
+
self,
|
|
24
|
+
info: Info[Context, None],
|
|
25
|
+
) -> Identifier:
|
|
26
|
+
if self.db_record:
|
|
27
|
+
val = self.db_record.name
|
|
28
|
+
else:
|
|
29
|
+
val = await info.context.data_loaders.prompt_label_fields.load(
|
|
30
|
+
(self.id, models.PromptLabel.name),
|
|
31
|
+
)
|
|
32
|
+
return Identifier(val)
|
|
33
|
+
|
|
34
|
+
@strawberry.field
|
|
35
|
+
async def description(
|
|
36
|
+
self,
|
|
37
|
+
info: Info[Context, None],
|
|
38
|
+
) -> Optional[str]:
|
|
39
|
+
if self.db_record:
|
|
40
|
+
val = self.db_record.description
|
|
41
|
+
else:
|
|
42
|
+
val = await info.context.data_loaders.prompt_label_fields.load(
|
|
43
|
+
(self.id, models.PromptLabel.description),
|
|
44
|
+
)
|
|
45
|
+
return val
|
|
19
46
|
|
|
20
47
|
@strawberry.field
|
|
21
|
-
async def
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
48
|
+
async def color(
|
|
49
|
+
self,
|
|
50
|
+
info: Info[Context, None],
|
|
51
|
+
) -> str:
|
|
52
|
+
if self.db_record:
|
|
53
|
+
val = self.db_record.color
|
|
54
|
+
else:
|
|
55
|
+
val = await info.context.data_loaders.prompt_label_fields.load(
|
|
56
|
+
(self.id, models.PromptLabel.color),
|
|
29
57
|
)
|
|
30
|
-
|
|
31
|
-
to_gql_prompt_from_orm(prompt_orm)
|
|
32
|
-
async for prompt_orm in await session.stream_scalars(statement)
|
|
33
|
-
]
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def to_gql_prompt_label(label_orm: models.PromptLabel) -> PromptLabel:
|
|
37
|
-
return PromptLabel(
|
|
38
|
-
id_attr=label_orm.id,
|
|
39
|
-
name=Identifier(label_orm.name),
|
|
40
|
-
description=label_orm.description,
|
|
41
|
-
)
|
|
58
|
+
return val
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import TYPE_CHECKING, Annotated, Optional
|
|
3
3
|
|
|
4
4
|
import strawberry
|
|
5
5
|
from sqlalchemy import select
|
|
@@ -18,7 +18,7 @@ from phoenix.server.api.helpers.prompts.models import (
|
|
|
18
18
|
denormalize_tools,
|
|
19
19
|
get_raw_invocation_parameters,
|
|
20
20
|
)
|
|
21
|
-
from phoenix.server.api.types.PromptVersionTag import PromptVersionTag
|
|
21
|
+
from phoenix.server.api.types.PromptVersionTag import PromptVersionTag
|
|
22
22
|
from phoenix.server.api.types.PromptVersionTemplate import (
|
|
23
23
|
PromptTemplate,
|
|
24
24
|
to_gql_template_from_orm,
|
|
@@ -26,7 +26,9 @@ from phoenix.server.api.types.PromptVersionTemplate import (
|
|
|
26
26
|
|
|
27
27
|
from .ResponseFormat import ResponseFormat
|
|
28
28
|
from .ToolDefinition import ToolDefinition
|
|
29
|
-
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from .User import User
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
@strawberry.type
|
|
@@ -53,16 +55,17 @@ class PromptVersion(Node):
|
|
|
53
55
|
models.PromptVersionTag.prompt_version_id == self.id_attr
|
|
54
56
|
)
|
|
55
57
|
return [
|
|
56
|
-
|
|
58
|
+
PromptVersionTag(id=tag.id, db_record=tag)
|
|
59
|
+
async for tag in await session.stream_scalars(stmt)
|
|
57
60
|
]
|
|
58
61
|
|
|
59
62
|
@strawberry.field
|
|
60
|
-
async def user(self
|
|
63
|
+
async def user(self) -> Optional[Annotated["User", strawberry.lazy(".User")]]:
|
|
61
64
|
if self.user_id is None:
|
|
62
65
|
return None
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return
|
|
66
|
+
from .User import User
|
|
67
|
+
|
|
68
|
+
return User(id=self.user_id)
|
|
66
69
|
|
|
67
70
|
@strawberry.field
|
|
68
71
|
async def previous_version(self, info: Info[Context, None]) -> Optional["PromptVersion"]:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import TYPE_CHECKING, Annotated, Optional
|
|
2
2
|
|
|
3
3
|
import strawberry
|
|
4
4
|
from strawberry import Info
|
|
@@ -7,34 +7,74 @@ from strawberry.relay import GlobalID, Node, NodeID
|
|
|
7
7
|
from phoenix.db import models
|
|
8
8
|
from phoenix.server.api.context import Context
|
|
9
9
|
from phoenix.server.api.types.Identifier import Identifier
|
|
10
|
-
from phoenix.server.api.types.User import User
|
|
10
|
+
from phoenix.server.api.types.User import User
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from .User import User
|
|
11
14
|
|
|
12
15
|
|
|
13
16
|
@strawberry.type
|
|
14
17
|
class PromptVersionTag(Node):
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
id: NodeID[int]
|
|
19
|
+
db_record: strawberry.Private[Optional[models.PromptVersionTag]] = None
|
|
20
|
+
|
|
21
|
+
def __post_init__(self) -> None:
|
|
22
|
+
if self.db_record and self.id != self.db_record.id:
|
|
23
|
+
raise ValueError("PromptVersionTag ID mismatch")
|
|
24
|
+
|
|
25
|
+
@strawberry.field
|
|
26
|
+
async def prompt_version_id(
|
|
27
|
+
self,
|
|
28
|
+
info: Info[Context, None],
|
|
29
|
+
) -> GlobalID:
|
|
30
|
+
from phoenix.server.api.types.PromptVersion import PromptVersion
|
|
31
|
+
|
|
32
|
+
if self.db_record:
|
|
33
|
+
version_id = self.db_record.prompt_version_id
|
|
34
|
+
else:
|
|
35
|
+
version_id = await info.context.data_loaders.prompt_version_tag_fields.load(
|
|
36
|
+
(self.id, models.PromptVersionTag.prompt_version_id),
|
|
37
|
+
)
|
|
38
|
+
return GlobalID(PromptVersion.__name__, str(version_id))
|
|
20
39
|
|
|
21
40
|
@strawberry.field
|
|
22
|
-
async def
|
|
23
|
-
|
|
41
|
+
async def name(
|
|
42
|
+
self,
|
|
43
|
+
info: Info[Context, None],
|
|
44
|
+
) -> Identifier:
|
|
45
|
+
if self.db_record:
|
|
46
|
+
val = self.db_record.name
|
|
47
|
+
else:
|
|
48
|
+
val = await info.context.data_loaders.prompt_version_tag_fields.load(
|
|
49
|
+
(self.id, models.PromptVersionTag.name),
|
|
50
|
+
)
|
|
51
|
+
return Identifier(val.root)
|
|
52
|
+
|
|
53
|
+
@strawberry.field
|
|
54
|
+
async def description(
|
|
55
|
+
self,
|
|
56
|
+
info: Info[Context, None],
|
|
57
|
+
) -> Optional[str]:
|
|
58
|
+
if self.db_record:
|
|
59
|
+
val = self.db_record.description
|
|
60
|
+
else:
|
|
61
|
+
val = await info.context.data_loaders.prompt_version_tag_fields.load(
|
|
62
|
+
(self.id, models.PromptVersionTag.description),
|
|
63
|
+
)
|
|
64
|
+
return val
|
|
65
|
+
|
|
66
|
+
@strawberry.field
|
|
67
|
+
async def user(
|
|
68
|
+
self, info: Info[Context, None]
|
|
69
|
+
) -> Optional[Annotated["User", strawberry.lazy(".User")]]:
|
|
70
|
+
if self.db_record:
|
|
71
|
+
user_id = self.db_record.user_id
|
|
72
|
+
else:
|
|
73
|
+
user_id = await info.context.data_loaders.prompt_version_tag_fields.load(
|
|
74
|
+
(self.id, models.PromptVersionTag.user_id),
|
|
75
|
+
)
|
|
76
|
+
if user_id is None:
|
|
24
77
|
return None
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def to_gql_prompt_version_tag(prompt_version_tag: models.PromptVersionTag) -> PromptVersionTag:
|
|
31
|
-
from phoenix.server.api.types.PromptVersion import PromptVersion
|
|
32
|
-
|
|
33
|
-
version_gid = GlobalID(PromptVersion.__name__, str(prompt_version_tag.prompt_version_id))
|
|
34
|
-
return PromptVersionTag(
|
|
35
|
-
id_attr=prompt_version_tag.id,
|
|
36
|
-
prompt_version_id=version_gid,
|
|
37
|
-
name=Identifier(prompt_version_tag.name.root),
|
|
38
|
-
description=prompt_version_tag.description,
|
|
39
|
-
user_id=prompt_version_tag.user_id,
|
|
40
|
-
)
|
|
78
|
+
from .User import User
|
|
79
|
+
|
|
80
|
+
return User(id=user_id)
|