
    j                        d dl Zd dlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4  ejj                  ejl                  d      Z7 G d d      Z8 G d d       Z9y)!    N   )AsyncClientWrapperSyncClientWrapper)RequestOptions)Comment)	ErrorInfo)ErrorInfoWrite)FeedbackScoreBatchItem)FeedbackScoreNamesPublic)FeedbackScoreSource)JsonListString)JsonListStringWrite)ProjectStatsPublic)SpanFilterPublic)SpanPagePublic)
SpanPublic)
SpanUpdate)SpanUpdateType)	SpanWrite)SpanWriteType)
ValueEntry   )AsyncRawSpansClientRawSpansClient)"FindFeedbackScoreNames1RequestType)GetSpanStatsRequestType)GetSpansByProjectRequestType)!SpanSearchStreamRequestPublicType.c            -          e Zd ZdefdZedefd       Zeeeeeddde	de	d	e
j                  e	   d
e
j                  ej                     de
j                  ej                     de
j                  e	   de
j                  e	   de
j                  e   ddfdZeeeeeeeddd	e	de	dedede
j                  e	   de
j                  e	   d
e
j                  ej                     de
j                  ej                     de
j                  e	   de
j                  e	   de
j                  e
j$                  e	ef      de
j                  e   ddfdZddde
j*                  e   de
j                  e   ddfdZeddde
j*                  e	   dede
j                  e   de
j                  e   ddf
dZdddddddddddddddd d!e
j                  e   d"e
j                  e   d#e
j                  e	   d$e
j                  e	   d%e
j                  e	   d&e
j                  e   d'e
j                  e	   d(e
j                  e   d)e
j                  e   d*e
j                  e	   d+e
j                  e	   d,e
j                  e	   d-e
j                  ej                     d.e
j                  ej                     de
j                  e   def d/Zeeeeeeeeeeeeeeeeeeedd0d1ej                  d	e
j                  e	   d#e
j                  e	   d%e
j                  e	   d2e
j                  e	   de
j                  e	   d&e
j                  e   d3e
j                  ej                     d4e
j                  e    d5e
j                  e    d6e
j                  e    d7e
j                  e	   d8e
j                  e	   d9e
j                  e
j*                  e	      d:e
j                  e
j$                  e	ef      d;e
j                  e!   de
j                  ej                     d<e
j                  e   d=e
j                  e	   d>e
j                  e   de
j                  e   ddf,d?Z"ddd@d	e	d)e
j                  e   de
j                  e   de#fdAZ$ddd	e	de
j                  e   ddfdBZ%eeeeeeeeeeeeeeeeeeddCd	e	d%e	d#e
j                  e	   d$e
j                  e	   d2e
j                  e	   de
j                  e	   d&e
j                  e&   d3e
j                  ej                     d4e
j                  e'   d5e
j                  e'   d6e
j                  e'   d7e
j                  e	   d8e
j                  e	   d9e
j                  e
j*                  e	      dDe
j                  e
j*                  e	      dEe
j                  e
j*                  e	      d:e
j                  e
j$                  e	ef      d<e
j                  e   d;e
j                  e(   d>e
j                  e   de
j                  e   ddf,dFZ)ddde
j*                  e	   de
j                  e   ddfdGZ*eddHd	e	de	dIe
j                  e	   de
j                  e   ddf
dJZ+ddddKd$e
j                  e	   d&e
j                  e,   de
j                  e   de-fdLZ.dddMe	dNe	de
j                  e   de/fdOZ0ddddddddddP	d$e
j                  e	   d#e
j                  e	   d%e
j                  e	   d&e
j                  e1   d'e
j                  e	   d,e
j                  e	   d-e
j                  ej                     d.e
j                  ej                     de
j                  e   de2fdQZ3dddRe
j*                  e4   de
j                  e   ddfdSZ5eeeeeeeeeeddTd%e
j                  e	   d#e
j                  e	   d$e
j                  e	   d&e
j                  e6   d'e
j                  e
j*                  e7      dUe
j                  e   dVe
j                  e	   d(e
j                  e   d-e
j                  ej                     d.e
j                  ej                     de
j                  e   de
jp                  e9   fdWZ:eeeeedddNe	de	d	e
j                  e	   d
e
j                  ej                     de
j                  ej                     de
j                  e	   de
j                  e	   de
j                  e   ddfdXZ;y)YSpansClientclient_wrapperc                &    t        |      | _        y N)r!   )r   _raw_clientselfr!   s     s/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/rest_api/spans/client.py__init__zSpansClient.__init__$   s    )H    returnc                     | j                   S )z
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        RawSpansClient
        r$   r&   s    r'   with_raw_responsezSpansClient.with_raw_response'        r)   Nid
created_atlast_updated_at
created_bylast_updated_byrequest_optionsid_textr1   r2   r3   r4   r5   r6   c          
      `    | j                   j                  ||||||||      }	|	j                  S )a  
        Add span comment

        Parameters
        ----------
        id_ : str

        text : str

        id : typing.Optional[str]

        created_at : typing.Optional[dt.datetime]

        last_updated_at : typing.Optional[dt.datetime]

        created_by : typing.Optional[str]

        last_updated_by : typing.Optional[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.add_span_comment(id_='id', text='text', )
        r8   r1   r2   r3   r4   r5   r6   r$   add_span_commentdata
r&   r7   r8   r1   r2   r3   r4   r5   r6   	_responses
             r'   r<   zSpansClient.add_span_comment2   sD    X $$55!+!++ 6 	
	 ~~r)   category_namereasonr2   r3   r4   r5   value_by_authorr6   namevaluesourcerA   rB   rC   c                h    | j                   j                  |||||||||	|
||      }|j                  S )a  
        Add span feedback score

        Parameters
        ----------
        id : str

        name : str

        value : float

        source : FeedbackScoreSource

        category_name : typing.Optional[str]

        reason : typing.Optional[str]

        created_at : typing.Optional[dt.datetime]

        last_updated_at : typing.Optional[dt.datetime]

        created_by : typing.Optional[str]

        last_updated_by : typing.Optional[str]

        value_by_author : typing.Optional[typing.Dict[str, ValueEntry]]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.add_span_feedback_score(id='id', name='name', value=1.1, source="ui", )
        rD   rE   rF   rA   rB   r2   r3   r4   r5   rC   r6   r$   add_span_feedback_scorer=   r&   r1   rD   rE   rF   rA   rB   r2   r3   r4   r5   rC   r6   r?   s                 r'   rJ   z#SpansClient.add_span_feedback_scorej   sP    p $$<<'!+!+++ = 
	 ~~r)   r6   spansc                T    | j                   j                  ||      }|j                  S )aa  
        Create spans

        Parameters
        ----------
        spans : typing.Sequence[SpanWrite]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        from Opik import SpanWrite
        import datetime
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.create_spans(spans=[SpanWrite(start_time=datetime.datetime.fromisoformat("2024-01-15 09:30:00+00:00", ), )], )
        rM   r6   r$   create_spansr=   r&   rM   r6   r?   s       r'   rQ   zSpansClient.create_spans   s)    2 $$111_	~~r)   
merge_tagsr6   idsupdaterT   c                X    | j                   j                  ||||      }|j                  S )a   
        Update multiple spans

        Parameters
        ----------
        ids : typing.Sequence[str]
            List of span IDs to update (max 1000)

        update : SpanUpdate

        merge_tags : typing.Optional[bool]
            If true, merge tags with existing tags instead of replacing them. Default: false

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        from Opik import SpanUpdate
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.batch_update_spans(ids=['ids'], update=SpanUpdate(trace_id='trace_id', ), )
        rU   rV   rT   r6   r$   batch_update_spansr=   r&   rU   rV   rT   r6   r?   s         r'   rZ   zSpansClient.batch_update_spans   s5    F $$77Fz? 8 
	 ~~r)   pagesizeproject_name
project_idtrace_idtypefilterstruncatestrip_attachmentssortingexcludesearch	from_timeto_timer6   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   c                n    | j                   j                  |||||||||	|
|||||      }|j                  S )ap  
        Get spans by project_name or project_id and optionally by trace_id and/or type

        Parameters
        ----------
        page : typing.Optional[int]

        size : typing.Optional[int]

        project_name : typing.Optional[str]

        project_id : typing.Optional[str]

        trace_id : typing.Optional[str]

        type : typing.Optional[GetSpansByProjectRequestType]

        filters : typing.Optional[str]

        truncate : typing.Optional[bool]

        strip_attachments : typing.Optional[bool]

        sorting : typing.Optional[str]

        exclude : typing.Optional[str]

        search : typing.Optional[str]

        from_time : typing.Optional[dt.datetime]

        to_time : typing.Optional[dt.datetime]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SpanPagePublic
            Spans resource

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.get_spans_by_project()
        r\   r$   get_spans_by_projectr=   r&   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r6   r?   s                    r'   rm   z SpansClient.get_spans_by_project   sY    D $$99%!/+ : 
	" ~~r)   r1   r_   ra   parent_span_idrD   rb   end_timeinputoutputmetadatamodelprovidertagsusage
error_infor3   total_estimated_costtotal_estimated_cost_versionttftr6   
start_timerp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   c                z    | j                   j                  |||||||||	|
|||||||||||      }|j                  S )a  
        Create span

        Parameters
        ----------
        start_time : dt.datetime

        id : typing.Optional[str]

        project_name : typing.Optional[str]
            If null, the default project is used

        trace_id : typing.Optional[str]

        parent_span_id : typing.Optional[str]

        name : typing.Optional[str]

        type : typing.Optional[SpanWriteType]

        end_time : typing.Optional[dt.datetime]

        input : typing.Optional[JsonListStringWrite]

        output : typing.Optional[JsonListStringWrite]

        metadata : typing.Optional[JsonListStringWrite]

        model : typing.Optional[str]

        provider : typing.Optional[str]

        tags : typing.Optional[typing.Sequence[str]]

        usage : typing.Optional[typing.Dict[str, int]]

        error_info : typing.Optional[ErrorInfoWrite]

        last_updated_at : typing.Optional[dt.datetime]

        total_estimated_cost : typing.Optional[float]

        total_estimated_cost_version : typing.Optional[str]

        ttft : typing.Optional[float]
            Time to first token in milliseconds

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        import datetime
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.create_span(start_time=datetime.datetime.fromisoformat("2024-01-15 09:30:00+00:00", ), )
        r}   r1   r_   ra   rp   rD   rb   rq   rr   rs   rt   ru   rv   rw   rx   ry   r3   rz   r{   r|   r6   r$   create_spanr=   r&   r}   r1   r_   ra   rp   rD   rb   rq   rr   rs   rt   ru   rv   rw   rx   ry   r3   rz   r{   r|   r6   r?   s                          r'   r   zSpansClient.create_spanK  sk    l $$00!%)!+!5)E++ 1 
	. ~~r)   re   r6   c                V    | j                   j                  |||      }|j                  S )a  
        Get span by id

        Parameters
        ----------
        id : str

        strip_attachments : typing.Optional[bool]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SpanPublic
            Span resource

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.get_span_by_id(id='id', )
        r   r$   get_span_by_idr=   r&   r1   re   r6   r?   s        r'   r   zSpansClient.get_span_by_id  s3    < $$33"3_ 4 
	 ~~r)   c                T    | j                   j                  ||      }|j                  S )a  
        Delete span by id

        Parameters
        ----------
        id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.delete_span_by_id(id='id', )
        rL   r$   delete_span_by_idr=   r&   r1   r6   r?   s       r'   r   zSpansClient.delete_span_by_id  s)    * $$66r?6[	~~r)   r_   r`   rp   rD   rb   rq   rr   rs   rt   ru   rv   rw   tags_to_addtags_to_removerx   rz   ry   r|   r6   r   r   c                z    | j                   j                  |||||||||	|
|||||||||||      }|j                  S )a3  
        Update span by id

        Parameters
        ----------
        id : str

        trace_id : str

        project_name : typing.Optional[str]
            If null and project_id not specified, Default Project is assumed

        project_id : typing.Optional[str]
            If null and project_name not specified, Default Project is assumed

        parent_span_id : typing.Optional[str]

        name : typing.Optional[str]

        type : typing.Optional[SpanUpdateType]

        end_time : typing.Optional[dt.datetime]

        input : typing.Optional[JsonListString]

        output : typing.Optional[JsonListString]

        metadata : typing.Optional[JsonListString]

        model : typing.Optional[str]

        provider : typing.Optional[str]

        tags : typing.Optional[typing.Sequence[str]]
            Tags

        tags_to_add : typing.Optional[typing.Sequence[str]]
            Tags to add

        tags_to_remove : typing.Optional[typing.Sequence[str]]
            Tags to remove

        usage : typing.Optional[typing.Dict[str, int]]

        total_estimated_cost : typing.Optional[float]

        error_info : typing.Optional[ErrorInfo]

        ttft : typing.Optional[float]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.update_span(id='id', trace_id='trace_id', )
        ra   r_   r`   rp   rD   rb   rq   rr   rs   rt   ru   rv   rw   r   r   rx   rz   ry   r|   r6   r$   update_spanr=   r&   r1   ra   r_   r`   rp   rD   rb   rq   rr   rs   rt   ru   rv   rw   r   r   rx   rz   ry   r|   r6   r?   s                          r'   r   zSpansClient.update_span  sk    p $$00%!)#)!5!++ 1 
	. ~~r)   c                T    | j                   j                  ||      }|j                  S )a  
        Delete span comments

        Parameters
        ----------
        ids : typing.Sequence[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.delete_span_comments(ids=['ids'], )
        rU   r6   r$   delete_span_commentsr=   r&   rU   r6   r?   s       r'   r   z SpansClient.delete_span_commentsf  s*    . $$99cSb9c	~~r)   authorr6   r   c                X    | j                   j                  ||||      }|j                  S )a  
        Delete span feedback score

        Parameters
        ----------
        id : str

        name : str

        author : typing.Optional[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.delete_span_feedback_score(id='id', name='name', )
        rD   r   r6   r$   delete_span_feedback_scorer=   r&   r1   rD   r   r6   r?   s         r'   r   z&SpansClient.delete_span_feedback_score  s6    @ $$??T&/ @ 
	 ~~r)   r`   rb   r6   c                V    | j                   j                  |||      }|j                  S )a]  
        Find Feedback Score names

        Parameters
        ----------
        project_id : typing.Optional[str]

        type : typing.Optional[FindFeedbackScoreNames1RequestType]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        FeedbackScoreNamesPublic
            Feedback Scores resource

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.find_feedback_score_names1()
        r   r$   find_feedback_score_names1r=   r&   r`   rb   r6   r?   s        r'   r   z&SpansClient.find_feedback_score_names1  s3    < $$??!o @ 
	 ~~r)   span_id
comment_idc                V    | j                   j                  |||      }|j                  S )a  
        Get span comment

        Parameters
        ----------
        span_id : str

        comment_id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        Comment
            Comment resource

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.get_span_comment(span_id='spanId', comment_id='commentId', )
        rL   r$   get_span_commentr=   r&   r   r   r6   r?   s        r'   r   zSpansClient.get_span_comment  s,    4 $$55gz[j5k	~~r)   	r`   r_   ra   rb   rc   rh   ri   rj   r6   c       	         b    | j                   j                  |||||||||		      }
|
j                  S )a7  
        Get span stats

        Parameters
        ----------
        project_id : typing.Optional[str]

        project_name : typing.Optional[str]

        trace_id : typing.Optional[str]

        type : typing.Optional[GetSpanStatsRequestType]

        filters : typing.Optional[str]

        search : typing.Optional[str]

        from_time : typing.Optional[dt.datetime]

        to_time : typing.Optional[dt.datetime]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ProjectStatsPublic
            Span stats resource

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.get_span_stats()
        r   r$   get_span_statsr=   r&   r`   r_   ra   rb   rc   rh   ri   rj   r6   r?   s              r'   r   zSpansClient.get_span_stats  sG    ` $$33!%+ 4 

	 ~~r)   scoresc                T    | j                   j                  ||      }|j                  S )aq  
        Batch feedback scoring for spans

        Parameters
        ----------
        scores : typing.Sequence[FeedbackScoreBatchItem]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        from Opik import FeedbackScoreBatchItem
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.score_batch_of_spans(scores=[FeedbackScoreBatchItem(name='name', value=1.1, source="ui", id='id', )], )
        r   r6   r$   score_batch_of_spansr=   r&   r   r6   r?   s       r'   r   z SpansClient.score_batch_of_spans"  s*    6 $$99Yh9i	~~r)   ra   r_   r`   rb   rc   limitlast_retrieved_idrd   ri   rj   r6   r   r   c             #      K   | j                   j                  |||||||||	|
|      5 }|j                  E d{    ddd       y7 # 1 sw Y   yxY ww)as  
        Search spans

        Parameters
        ----------
        trace_id : typing.Optional[str]

        project_name : typing.Optional[str]

        project_id : typing.Optional[str]

        type : typing.Optional[SpanSearchStreamRequestPublicType]

        filters : typing.Optional[typing.Sequence[SpanFilterPublic]]

        limit : typing.Optional[int]
            Max number of spans to be streamed

        last_retrieved_id : typing.Optional[str]

        truncate : typing.Optional[bool]
            Truncate image included in either input, output or metadata

        from_time : typing.Optional[dt.datetime]
            Filter spans created from this time (ISO-8601 format).

        to_time : typing.Optional[dt.datetime]
            Filter spans created up to this time (ISO-8601 format). If not provided, defaults to current time. Must be after 'from_time'.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response.

        Returns
        -------
        typing.Iterator[bytes]
            Spans stream or error during process

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.search_spans()
        r   Nr$   search_spansr=   )r&   ra   r_   r`   rb   rc   r   r   rd   ri   rj   r6   rs                r'   r   zSpansClient.search_spans@  so     t **%!/+ + 
 vv
 
 
 
s+   'AA	AA		AA		AAc          
      `    | j                   j                  ||||||||      }	|	j                  S )a  
        Update span comment by id

        Parameters
        ----------
        comment_id : str

        text : str

        id : typing.Optional[str]

        created_at : typing.Optional[dt.datetime]

        last_updated_at : typing.Optional[dt.datetime]

        created_by : typing.Optional[str]

        last_updated_by : typing.Optional[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import OpikApi
        client = OpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        client.spans.update_span_comment(comment_id='commentId', text='text', )
        r:   r$   update_span_commentr=   
r&   r   r8   r1   r2   r3   r4   r5   r6   r?   s
             r'   r   zSpansClient.update_span_comment  sD    X $$88!+!++ 9 	
	 ~~r)   )<__name__
__module____qualname__r   r(   propertyr   r.   OMITstrtypingOptionaldtdatetimer   r<   floatr   Dictr   rJ   Sequencer   rQ   r   boolrZ   intr   r   rm   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   Iteratorbytesr   r    r)   r'   r    r    #   s   I*; I  >     $(378<+/04;?66 	6
 OOC 6 OOBKK06  56 OOC(6  -6  86 
6~ /3'+378<+/04IM;?FF 	F
 F $F s+F $F OOBKK0F  5F OOC(F  -F  S*_)EFF  8F 
FR hl	2EK__UcEd	B -1;?& __S!& 	&
 OOD)&  8& 
&V &*%)-1+/)->B(,*.37(,(,'+2604;?#S ooc"S ooc"	S
 ooc*S OOC(S //#&S oo:;S %S //$'S "??40S %S %S $S ??2;;/S  -!S"  8#S$ 
%Sr $(-1)-/3%)/3156:7;9=&*)-6:8<6:8<7;=A'+;?/m KKm OOC 	m
 ooc*m //#&m ,m ooc"m oom,m //"++.m 23m  34m //"56m s#m //#&m  oofooc23!m" v{{3845#m$ OON3%m&  5'm( %ooe4)m* '-ooc&:+m, ooe$-m.  8/m0 
1mf 48;?!! "??40	!
  8! 
!F `d C V__^=\ hl : .2+//3%)0415152648&*)-6:=A@D8<7;15'+;?/oo 	o
 ooc*o OOC(o ,o ooc"o oon-o //"++.o ~.o /o //.1o s#o //#&o  oofooc23!o" __V__S%9:#o$ (<=%o& v{{3845'o( %ooe4)o* OOI.+o, ooe$-o.  8/o0 
1od `dooc*=C__^=\	> (,;?## 	#
 $#  8# 
#P ,0DH;?! OOC(! oo@A	!
  8! 
"!H dh(+AGQ_A`	@ ,0-1)-9=(,'+2604;?; OOC(; ooc*	;
 //#&; oo56; %; $; ??2;;/; -;  8; 
;B <@	  67  8	
 
B *.-1+/CGFJ&*26*.2604;?G //#&G ooc*	G
 OOC(G oo?@G 1A!BCG s#G "??3/G //$'G ??2;;/G -G  8G 
	G\ $(378<+/04;?66 	6
 OOC 6 OOBKK06  56 OOC(6  -6  86 
6r)   r    c            -          e Zd ZdefdZedefd       Zeeeeeddde	de	d	e
j                  e	   d
e
j                  ej                     de
j                  ej                     de
j                  e	   de
j                  e	   de
j                  e   ddfdZeeeeeeeddd	e	de	dedede
j                  e	   de
j                  e	   d
e
j                  ej                     de
j                  ej                     de
j                  e	   de
j                  e	   de
j                  e
j$                  e	ef      de
j                  e   ddfdZddde
j*                  e   de
j                  e   ddfdZeddde
j*                  e	   dede
j                  e   de
j                  e   ddf
dZdddddddddddddddd d!e
j                  e   d"e
j                  e   d#e
j                  e	   d$e
j                  e	   d%e
j                  e	   d&e
j                  e   d'e
j                  e	   d(e
j                  e   d)e
j                  e   d*e
j                  e	   d+e
j                  e	   d,e
j                  e	   d-e
j                  ej                     d.e
j                  ej                     de
j                  e   def d/Zeeeeeeeeeeeeeeeeeeedd0d1ej                  d	e
j                  e	   d#e
j                  e	   d%e
j                  e	   d2e
j                  e	   de
j                  e	   d&e
j                  e   d3e
j                  ej                     d4e
j                  e    d5e
j                  e    d6e
j                  e    d7e
j                  e	   d8e
j                  e	   d9e
j                  e
j*                  e	      d:e
j                  e
j$                  e	ef      d;e
j                  e!   de
j                  ej                     d<e
j                  e   d=e
j                  e	   d>e
j                  e   de
j                  e   ddf,d?Z"ddd@d	e	d)e
j                  e   de
j                  e   de#fdAZ$ddd	e	de
j                  e   ddfdBZ%eeeeeeeeeeeeeeeeeeddCd	e	d%e	d#e
j                  e	   d$e
j                  e	   d2e
j                  e	   de
j                  e	   d&e
j                  e&   d3e
j                  ej                     d4e
j                  e'   d5e
j                  e'   d6e
j                  e'   d7e
j                  e	   d8e
j                  e	   d9e
j                  e
j*                  e	      dDe
j                  e
j*                  e	      dEe
j                  e
j*                  e	      d:e
j                  e
j$                  e	ef      d<e
j                  e   d;e
j                  e(   d>e
j                  e   de
j                  e   ddf,dFZ)ddde
j*                  e	   de
j                  e   ddfdGZ*eddHd	e	de	dIe
j                  e	   de
j                  e   ddf
dJZ+ddddKd$e
j                  e	   d&e
j                  e,   de
j                  e   de-fdLZ.dddMe	dNe	de
j                  e   de/fdOZ0ddddddddddP	d$e
j                  e	   d#e
j                  e	   d%e
j                  e	   d&e
j                  e1   d'e
j                  e	   d,e
j                  e	   d-e
j                  ej                     d.e
j                  ej                     de
j                  e   de2fdQZ3dddRe
j*                  e4   de
j                  e   ddfdSZ5eeeeeeeeeeddTd%e
j                  e	   d#e
j                  e	   d$e
j                  e	   d&e
j                  e6   d'e
j                  e
j*                  e7      dUe
j                  e   dVe
j                  e	   d(e
j                  e   d-e
j                  ej                     d.e
j                  ej                     de
j                  e   de
jp                  e9   fdWZ:eeeeedddNe	de	d	e
j                  e	   d
e
j                  ej                     de
j                  ej                     de
j                  e	   de
j                  e	   de
j                  e   ddfdXZ;y)YAsyncSpansClientr!   c                &    t        |      | _        y r#   )r   r$   r%   s     r'   r(   zAsyncSpansClient.__init__  s    .nMr)   r*   c                     | j                   S )z
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        AsyncRawSpansClient
        r,   r-   s    r'   r.   z"AsyncSpansClient.with_raw_response  r/   r)   Nr0   r7   r8   r1   r2   r3   r4   r5   r6   c          
      |   K   | j                   j                  ||||||||       d{   }	|	j                  S 7 w)a2  
        Add span comment

        Parameters
        ----------
        id_ : str

        text : str

        id : typing.Optional[str]

        created_at : typing.Optional[dt.datetime]

        last_updated_at : typing.Optional[dt.datetime]

        created_by : typing.Optional[str]

        last_updated_by : typing.Optional[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.add_span_comment(id_='id', text='text', )
        asyncio.run(main())
        r:   Nr;   r>   s
             r'   r<   z!AsyncSpansClient.add_span_comment  sR     ^ **;;!+!++ < 	
 	
	 ~~	
   '<:<r@   rD   rE   rF   rA   rB   rC   c                   K   | j                   j                  |||||||||	|
||       d{   }|j                  S 7 w)a  
        Add span feedback score

        Parameters
        ----------
        id : str

        name : str

        value : float

        source : FeedbackScoreSource

        category_name : typing.Optional[str]

        reason : typing.Optional[str]

        created_at : typing.Optional[dt.datetime]

        last_updated_at : typing.Optional[dt.datetime]

        created_by : typing.Optional[str]

        last_updated_by : typing.Optional[str]

        value_by_author : typing.Optional[typing.Dict[str, ValueEntry]]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.add_span_feedback_score(id='id', name='name', value=1.1, source="ui", )
        asyncio.run(main())
        rH   NrI   rK   s                 r'   rJ   z(AsyncSpansClient.add_span_feedback_score  s_     v **BB'!+!+++ C 
 
	 ~~
s   +A >A rL   rM   c                p   K   | j                   j                  ||       d{   }|j                  S 7 w)a  
        Create spans

        Parameters
        ----------
        spans : typing.Sequence[SpanWrite]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        from Opik import SpanWrite
        import datetime
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.create_spans(spans=[SpanWrite(start_time=datetime.datetime.fromisoformat("2024-01-15 09:30:00+00:00", ), )], )
        asyncio.run(main())
        rO   NrP   rR   s       r'   rQ   zAsyncSpansClient.create_spansW  s7     8 **77eUd7ee	~~ f   !646rS   rU   rV   rT   c                t   K   | j                   j                  ||||       d{   }|j                  S 7 w)ai  
        Update multiple spans

        Parameters
        ----------
        ids : typing.Sequence[str]
            List of span IDs to update (max 1000)

        update : SpanUpdate

        merge_tags : typing.Optional[bool]
            If true, merge tags with existing tags instead of replacing them. Default: false

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        from Opik import SpanUpdate
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.batch_update_spans(ids=['ids'], update=SpanUpdate(trace_id='trace_id', ), )
        asyncio.run(main())
        rX   NrY   r[   s         r'   rZ   z#AsyncSpansClient.batch_update_spansv  sC     L **==Fz? > 
 
	 ~~
   #868r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   c                   K   | j                   j                  |||||||||	|
|||||       d{   }|j                  S 7 w)a  
        Get spans by project_name or project_id and optionally by trace_id and/or type

        Parameters
        ----------
        page : typing.Optional[int]

        size : typing.Optional[int]

        project_name : typing.Optional[str]

        project_id : typing.Optional[str]

        trace_id : typing.Optional[str]

        type : typing.Optional[GetSpansByProjectRequestType]

        filters : typing.Optional[str]

        truncate : typing.Optional[bool]

        strip_attachments : typing.Optional[bool]

        sorting : typing.Optional[str]

        exclude : typing.Optional[str]

        search : typing.Optional[str]

        from_time : typing.Optional[dt.datetime]

        to_time : typing.Optional[dt.datetime]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SpanPagePublic
            Spans resource

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.get_spans_by_project()
        asyncio.run(main())
        r\   Nrl   rn   s                    r'   rm   z%AsyncSpansClient.get_spans_by_project  sh     J **??%!/+ @ 
 
	" ~~#
s   .AAAro   r}   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   c                   K   | j                   j                  |||||||||	|
|||||||||||       d{   }|j                  S 7 w)a  
        Create span

        Parameters
        ----------
        start_time : dt.datetime

        id : typing.Optional[str]

        project_name : typing.Optional[str]
            If null, the default project is used

        trace_id : typing.Optional[str]

        parent_span_id : typing.Optional[str]

        name : typing.Optional[str]

        type : typing.Optional[SpanWriteType]

        end_time : typing.Optional[dt.datetime]

        input : typing.Optional[JsonListStringWrite]

        output : typing.Optional[JsonListStringWrite]

        metadata : typing.Optional[JsonListStringWrite]

        model : typing.Optional[str]

        provider : typing.Optional[str]

        tags : typing.Optional[typing.Sequence[str]]

        usage : typing.Optional[typing.Dict[str, int]]

        error_info : typing.Optional[ErrorInfoWrite]

        last_updated_at : typing.Optional[dt.datetime]

        total_estimated_cost : typing.Optional[float]

        total_estimated_cost_version : typing.Optional[str]

        ttft : typing.Optional[float]
            Time to first token in milliseconds

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import datetime
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.create_span(start_time=datetime.datetime.fromisoformat("2024-01-15 09:30:00+00:00", ), )
        asyncio.run(main())
        r   Nr   r   s                          r'   r   zAsyncSpansClient.create_span  sy     r **66!%)!+!5)E++ 7 
 
	. ~~/
   4A	AA	r   c                r   K   | j                   j                  |||       d{   }|j                  S 7 w)au  
        Get span by id

        Parameters
        ----------
        id : str

        strip_attachments : typing.Optional[bool]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SpanPublic
            Span resource

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.get_span_by_id(id='id', )
        asyncio.run(main())
        r   Nr   r   s        r'   r   zAsyncSpansClient.get_span_by_idk  sB     B **99"3_ : 
 
	 ~~
   "757c                p   K   | j                   j                  ||       d{   }|j                  S 7 w)a(  
        Delete span by id

        Parameters
        ----------
        id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.delete_span_by_id(id='id', )
        asyncio.run(main())
        rL   Nr   r   s       r'   r   z"AsyncSpansClient.delete_span_by_id  s7     0 **<<RQ`<aa	~~ br   r   r   r   c                   K   | j                   j                  |||||||||	|
|||||||||||       d{   }|j                  S 7 w)a  
        Update span by id

        Parameters
        ----------
        id : str

        trace_id : str

        project_name : typing.Optional[str]
            If null and project_id not specified, Default Project is assumed

        project_id : typing.Optional[str]
            If null and project_name not specified, Default Project is assumed

        parent_span_id : typing.Optional[str]

        name : typing.Optional[str]

        type : typing.Optional[SpanUpdateType]

        end_time : typing.Optional[dt.datetime]

        input : typing.Optional[JsonListString]

        output : typing.Optional[JsonListString]

        metadata : typing.Optional[JsonListString]

        model : typing.Optional[str]

        provider : typing.Optional[str]

        tags : typing.Optional[typing.Sequence[str]]
            Tags

        tags_to_add : typing.Optional[typing.Sequence[str]]
            Tags to add

        tags_to_remove : typing.Optional[typing.Sequence[str]]
            Tags to remove

        usage : typing.Optional[typing.Dict[str, int]]

        total_estimated_cost : typing.Optional[float]

        error_info : typing.Optional[ErrorInfo]

        ttft : typing.Optional[float]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.update_span(id='id', trace_id='trace_id', )
        asyncio.run(main())
        r   Nr   r   s                          r'   r   zAsyncSpansClient.update_span  sy     v **66%!)#)!5!++ 7 
 
	. ~~/
r   c                p   K   | j                   j                  ||       d{   }|j                  S 7 w)aD  
        Delete span comments

        Parameters
        ----------
        ids : typing.Sequence[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.delete_span_comments(ids=['ids'], )
        asyncio.run(main())
        r   Nr   r   s       r'   r   z%AsyncSpansClient.delete_span_comments   s7     4 **??CYh?ii	~~ jr   r   r   c                t   K   | j                   j                  ||||       d{   }|j                  S 7 w)a  
        Delete span feedback score

        Parameters
        ----------
        id : str

        name : str

        author : typing.Optional[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.delete_span_feedback_score(id='id', name='name', )
        asyncio.run(main())
        r   Nr   r   s         r'   r   z+AsyncSpansClient.delete_span_feedback_score=  sD     F **EET&/ F 
 
	 ~~
r   r   c                r   K   | j                   j                  |||       d{   }|j                  S 7 w)a  
        Find Feedback Score names

        Parameters
        ----------
        project_id : typing.Optional[str]

        type : typing.Optional[FindFeedbackScoreNames1RequestType]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        FeedbackScoreNamesPublic
            Feedback Scores resource

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.find_feedback_score_names1()
        asyncio.run(main())
        r   Nr   r   s        r'   r   z+AsyncSpansClient.find_feedback_score_names1e  sB     B **EE!o F 
 
	 ~~
r   r   r   c                r   K   | j                   j                  |||       d{   }|j                  S 7 w)a  
        Get span comment

        Parameters
        ----------
        span_id : str

        comment_id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        Comment
            Comment resource

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.get_span_comment(span_id='spanId', comment_id='commentId', )
        asyncio.run(main())
        rL   Nr   r   s        r'   r   z!AsyncSpansClient.get_span_comment  s9     : **;;GZap;qq	~~ rr   r   c       	         ~   K   | j                   j                  |||||||||		       d{   }
|
j                  S 7 w)a  
        Get span stats

        Parameters
        ----------
        project_id : typing.Optional[str]

        project_name : typing.Optional[str]

        trace_id : typing.Optional[str]

        type : typing.Optional[GetSpanStatsRequestType]

        filters : typing.Optional[str]

        search : typing.Optional[str]

        from_time : typing.Optional[dt.datetime]

        to_time : typing.Optional[dt.datetime]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ProjectStatsPublic
            Span stats resource

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.get_span_stats()
        asyncio.run(main())
        r   Nr   r   s              r'   r   zAsyncSpansClient.get_span_stats  sU     f **99!%+ : 

 

	 ~~

s   (=;=r   c                p   K   | j                   j                  ||       d{   }|j                  S 7 w)a  
        Batch feedback scoring for spans

        Parameters
        ----------
        scores : typing.Sequence[FeedbackScoreBatchItem]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        from Opik import FeedbackScoreBatchItem
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.score_batch_of_spans(scores=[FeedbackScoreBatchItem(name='name', value=1.1, source="ui", id='id', )], )
        asyncio.run(main())
        r   Nr   r   s       r'   r   z%AsyncSpansClient.score_batch_of_spans  s7     < **??v_n?oo	~~ pr   r   r   r   c                  K   | j                   j                  |||||||||	|
|      4 d{   }|j                  2 3 d{   }| 7 7 6 ddd      d{  7   y# 1 d{  7  sw Y   yxY ww)a  
        Search spans

        Parameters
        ----------
        trace_id : typing.Optional[str]

        project_name : typing.Optional[str]

        project_id : typing.Optional[str]

        type : typing.Optional[SpanSearchStreamRequestPublicType]

        filters : typing.Optional[typing.Sequence[SpanFilterPublic]]

        limit : typing.Optional[int]
            Max number of spans to be streamed

        last_retrieved_id : typing.Optional[str]

        truncate : typing.Optional[bool]
            Truncate image included in either input, output or metadata

        from_time : typing.Optional[dt.datetime]
            Filter spans created from this time (ISO-8601 format).

        to_time : typing.Optional[dt.datetime]
            Filter spans created up to this time (ISO-8601 format). If not provided, defaults to current time. Must be after 'from_time'.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response.

        Returns
        -------
        typing.AsyncIterator[bytes]
            Spans stream or error during process

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.search_spans()
        asyncio.run(main())
        r   Nr   )r&   ra   r_   r`   rb   rc   r   r   rd   ri   rj   r6   r   r=   s                 r'   r   zAsyncSpansClient.search_spans  s     z ##00%!/+ 1 
 
 ff d

f
 
 
 
 
sg   +A9AA9A$AAAA$A9AA$A9A A9$A6*A-+A62A9c          
      |   K   | j                   j                  ||||||||       d{   }	|	j                  S 7 w)aS  
        Update span comment by id

        Parameters
        ----------
        comment_id : str

        text : str

        id : typing.Optional[str]

        created_at : typing.Optional[dt.datetime]

        last_updated_at : typing.Optional[dt.datetime]

        created_by : typing.Optional[str]

        last_updated_by : typing.Optional[str]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from Opik import AsyncOpikApi
        import asyncio
        client = AsyncOpikApi(api_key="YOUR_API_KEY", workspace_name="YOUR_WORKSPACE_NAME", )
        async def main() -> None:
            await client.spans.update_span_comment(comment_id='commentId', text='text', )
        asyncio.run(main())
        r:   Nr   r   s
             r'   r   z$AsyncSpansClient.update_span_commentY  sR     ^ **>>!+!++ ? 	
 	
	 ~~	
r   )<r   r   r   r   r(   r   r   r.   r   r   r   r   r   r   r   r<   r   r   r   r   rJ   r   r   rQ   r   r   rZ   r   r   r   rm   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   AsyncIteratorr   r   r   r   r)   r'   r   r     s   N*< N  #6     $(378<+/04;?99 	9
 OOC 9 OOBKK09  59 OOC(9  -9  89 
9D /3'+378<+/04IM;?II 	I
 I $I s+I $I OOBKK0I  5I OOC(I  -I  S*_)EFI  8I 
IX hl	2EK__UcEd	H -1;?) __S!) 	)
 OOD))  8) 
)\ &*%)-1+/)->B(,*.37(,(,'+2604;?#V ooc"V ooc"	V
 ooc*V OOC(V //#&V oo:;V %V //$'V "??40V %V %V $V ??2;;/V  -!V"  8#V$ 
%Vx $(-1)-/3%)/3156:7;9=&*)-6:8<6:8<7;=A'+;?/p KKp OOC 	p
 ooc*p //#&p ,p ooc"p oom,p //"++.p 23p  34p //"56p s#p //#&p  oofooc23!p" v{{3845#p$ OON3%p&  5'p( %ooe4)p* '-ooc&:+p, ooe$-p.  8/p0 
1pl 48;?$$ "??40	$
  8$ 
$L fj # 6??SaCb nr @ .2+//3%)0415152648&*)-6:=A@D8<7;15'+;?/rr 	r
 ooc*r OOC(r ,r ooc"r oon-r //"++.r ~.r /r //.1r s#r //#&r  oofooc23!r" __V__S%9:#r$ (<=%r& v{{3845'r( %ooe4)r* OOI.+r, ooe$-r.  8/r0 
1rj `dooc*=C__^=\	D (,;?&& 	&
 $&  8& 
&V ,0DH;?$ OOC($ oo@A	$
  8$ 
"$N dh(+AGQ_A`	F ,0-1)-9=(,'+2604;?> OOC(> ooc*	>
 //#&> oo56> %> $> ??2;;/> ->  8> 
>H <@	  67  8	
 
H *.-1+/CGFJ&*26*.2604;?K //#&K ooc*	K
 OOC(K oo?@K 1A!BCK s#K "??3/K //$'K ??2;;/K -K  8K 
		e	$Kd $(378<+/04;?99 	9
 OOC 9 OOBKK09  59 OOC(9  -9  89 
9r)   r   ):r   r   r   core.client_wrapperr   r   core.request_optionsr   types.commentr   types.error_infor   types.error_info_writer	   types.feedback_score_batch_itemr
   !types.feedback_score_names_publicr   types.feedback_score_sourcer   types.json_list_stringr   types.json_list_string_writer   types.project_stats_publicr   types.span_filter_publicr   types.span_page_publicr   types.span_publicr   types.span_updater   types.span_update_typer   types.span_writer   types.span_write_typer   types.value_entryr   
raw_clientr   r   ,types.find_feedback_score_names1request_typer   !types.get_span_stats_request_typer   'types.get_spans_by_project_request_typer   ,types.span_search_stream_request_public_typer   castAnyr   r    r   r   r)   r'   <module>r     s      G 1 # ( 3 D H = 3 > ; 7 3 * * 3 ( 1 * ; \ F Q [ v{{6::s#\ \~P Pr)   